import network
import time
import dht
from machine import Pin,time_pulse_us
import ujson
from umqtt.simple import MQTTClient
# Configurations
SSID = "Matthayom-KS" # ชื่อ WiFi
PASSWORD = "Matthayom1" # รหัสผ่าน WiFi
MQTT_BROKER = "broker.netpie.io"
MQTT_PORT = 1883
MQTT_CLIENT = "cc0054e8-32c1-4aed-abf4-40a72b162a8f" # ClientID
MQTT_USERNAME = "ct4EUjZriTKBwMNoJdQK1Hk3mHbe3xgB" # Token
MQTT_PASSWORD = "YAFBykUMYNHM4gpH6Fu6sYP7vJdvnh3u" # Secret
TOPIC_SHADOW = "@shadow/data/update"
TOPIC_CONTROL = "@msg/operator"
# Pins
trig=Pin(32,Pin.OUT)
echo=Pin(35,Pin.IN)
# Setup Hardware
led = Pin(14, Pin.OUT)
# Connect to WiFi
def connect_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(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):
print("Received message:", topic.decode(), msg.decode())
if topic.decode() == TOPIC_CONTROL:
if msg.decode() == "ON":
led.value(1) # เปิด LED
print("LED ON")
elif msg.decode() == "OFF":
led.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)
client.connect()
client.subscribe(TOPIC_CONTROL)
print("Connected to MQTT Broker and subscribed to control topic.")
while True:
try:
# รับข้อความ MQTT
client.check_msg()
# อ่านค่าเซนเซอร์
# Prepare le signal
trig.value(0)
time.sleep_us(5)
# Créer une impulsion de 10 µs
trig.value(1)
time.sleep_us(10)
trig.value(0)
ultrason_duration = time_pulse_us(echo, 1, 30000) # Renvoie le temps de propagation de l'onde (en µs)
distance_cm = 340 * ultrason_duration / 20000
print(f"Distance : {distance_cm} cm")
time.sleep_ms(500)
print("") #เอาไว้แสดงบนจอ serial
# ส่งข้อมูลไปยัง Shadow Topic
payload = ujson.dumps({
"data": {
"distance_cm":distance_cm
}
})
client.publish(TOPIC_SHADOW, payload)
print("Published:", payload)
time.sleep(5) # ส่งข้อมูลทุก ๆ 5 วินาที
except Exception as e:
print("Error:", e)
client.disconnect()
connect_wifi()
client.connect()
# Run Main Program
if __name__ == "__main__":
main()