#isaac no.14
import network
import time
import dht
from machine import Pin , ADC
import ujson
from umqtt.simple import MQTTClient
# Configurations
SSID = "Wokwi-GUEST" # ชื่อ WiFi ที่จะเชื่อมต่อ
PASSWORD = "" # รหัสผ่าน WiFi
MQTT_BROKER = "broker.netpie.io" # โฮสต์ของ MQTT Broker
MQTT_PORT = 1883 # พอร์ตของ MQTT Broker
MQTT_CLIENT = "844b7bb2-11d4-418d-a786-a3d172fed738" # Client ID สำหรับ MQTT
MQTT_USERNAME = "pX4ZQhDNKVTEhoeBnCwnKvBCwqqtJDxy" # Username หรือ Token ของ MQTT
MQTT_PASSWORD = "TyvQTkisoYPY1g44nAJWGWi9dJX7soMP" # Password หรือ Secret ของ MQTT
TOPIC_SHADOW = "@shadow/data/update" # หัวข้อสำหรับส่งข้อมูลไปยัง Shadow
TOPIC_CONTROL = "@msg/operator" # หัวข้อสำหรับรับคำสั่งควบคุม
#pins
Light_e_diode = Pin(14,Pin.OUT)
donny = dht.DHT22(15)
# 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":
Light_e_diode.value(1) # เปิด LED
print("LED ON")
elif msg.decode() == "OFF":
Light_e_diode.value(0) # ปิด LED
print("LED OFF")
# Main Program
def main():
connect_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() # ตรวจสอบว่ามีข้อความใหม่หรือไม่
# อ่านค่าเซนเซอร์
donny.measure()
donny_tem = donny.temperature()
donn_hum = donny.humidity()
print("") # พิมพ์ค่าลงใน Serial Monitor
# สร้างข้อมูล JSON เพื่อส่งไปยัง Shadow Topic
payload = ujson.dumps({
"data": {
"Temp ": donny_tem,
"Humidity": donn_hum,
"LED ": Light_e_diode.value()
}
})
# ส่งข้อมูลไปยัง 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() # เรียกใช้โปรแกรมหลัก