#isaac no.14
#tan no.1
import network # for connecting to network
import time #for delay
import dht #so we can use the DHT22
from machine import Pin ,ADC#so we can use things like Leds and other appliances
import ujson #NET pie stuff
from umqtt.simple import MQTTClient # netpie stuff
# Configurations
SSID = "Wokwi-GUEST"
PASSWORD = ""
MQTT_BROKER = "broker.netpie.io"
MQTT_PORT = 1883
MQTT_CLIENT = "cc0054e8-32c1-4aed-abf4-40a72b162a8f" # Client ID สำหรับ MQTT
MQTT_USERNAME = "ct4EUjZriTKBwMNoJdQK1Hk3mHbe3xgB" # Username หรือ Token ของ MQTT
MQTT_PASSWORD = "YAFBykUMYNHM4gpH6Fu6sYP7vJdvnh3u" # Password หรือ Secret ของ MQTT
TOPIC_SHADOW = "@shadow/data/update" # หัวข้อสำหรับส่งข้อมูลไปยัง Shadow
TOPIC_CONTROL = "@msg/operator" # หัวข้อสำหรับรับคำสั่งควบคุม
# Pins
led_On = Pin(14, Pin.OUT)
donny = dht.DHT22(32)
ldr = ADC(Pin(34))
# Connect to WiFi
def connect_wifi():
"""เชื่อมต่อ WiFi"""
wifi = network.WLAN(network.STA_IF) # เปิดใช้งานโหมด Station
wifi.active(True) # เปิดใช้งาน WiFi
wifi.connect(SSID, PASSWORD) # เชื่อมต่อ WiFi ด้วย SSID และ Password
print("Connecting to WiFi...", end="")
while not wifi.isconnected(): # รอจนกว่าจะเชื่อมต่อสำเร็จ
print(".", end="")
time.sleep(0.5) # หน่วงเวลาเล็กน้อย
print("\nWiFi connected:", wifi.ifconfig()) # แสดงข้อมูลการเชื่อมต่อ
# MQTT Callback
def mqtt_callback(topic, msg):
"""ฟังก์ชันเรียกกลับเมื่อได้รับข้อความ MQTT"""
print("Received message:", topic.decode(), msg.decode()) # แสดงหัวข้อและข้อความที่ได้รับ
if topic.decode() == TOPIC_CONTROL: # ตรวจสอบว่าข้อความมาจากหัวข้อควบคุม
if msg.decode() == "ON":
led_On.value(1) # เปิด LED
print("LED ON")
elif msg.decode() == "OFF":
led_On.value(0) # ปิด LED
print("LED OFF")
# Main Program
def main():
"""โปรแกรมหลัก"""
connect_wifi() # เชื่อมต่อ WiFi
# Setup MQTT Client
client = MQTTClient(MQTT_CLIENT, MQTT_BROKER, user=MQTT_USERNAME, password=MQTT_PASSWORD, port=MQTT_PORT)
client.set_callback(mqtt_callback) # กำหนดฟังก์ชัน callback
client.connect() # เชื่อมต่อกับ MQTT Broker
client.subscribe(TOPIC_CONTROL) # สมัครสมาชิกหัวข้อสำหรับรับคำสั่งควบคุม
print("Connected to MQTT Broker and subscribed to control topic.")
while True:
try:
# รับข้อความจาก MQTT
client.check_msg() # ตรวจสอบว่ามีข้อความใหม่หรือไม่
# USE DHT
donny.measure()
donny_t = donny.temperature()
donny_h = donny.humidity()
print("") # พิมพ์ค่าลงใน Serial Monitor
# สร้างข้อมูล JSON เพื่อส่งไปยัง Shadow Topic
payload = ujson.dumps({
"data": {
"temperature": donny_t,
"humidity": donny_h,
"light_value": ldr.read()
}
})
# ส่งข้อมูลไปยัง Shadow Topic
client.publish(TOPIC_SHADOW, payload)
print("Published:", payload)
time.sleep(5) # รอ 5 วินาทีก่อนส่งข้อมูลครั้งถัดไป
except Exception as e:
# จัดการข้อผิดพลาด
print("Error:", e)
client.disconnect() # ตัดการเชื่อมต่อ
connect_wifi() # เชื่อมต่อ WiFi ใหม่
client.connect() # เชื่อมต่อ MQTT Broker ใหม่
# Run Main Program
if __name__ == "__main__":
main() # เรียกใช้โปรแกรมหลัก