import network
import time
from umqtt.simple import MQTTClient
from machine import ADC, Pin
# Cấu hình WiFi và MQTT
ssid = "Wokwi-GUEST"
password = ""
# Sử dụng MQTT broker từ EMQX (port 1883)
broker = "broker.emqx.io"
client_id = "esp32-wokwi-micropython"
topic_soil = b"/esp32/soil"
topic_pump_cmd = b"/esp32/pump"
topic_pump_status = b"/esp32/pump/status"
# Thiết lập cảm biến và máy bơm
adc = ADC(Pin(35))
pump = Pin(14, Pin.OUT)
threshold = 2000
# Kết nối WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
print("📶 Đang kết nối WiFi...")
time.sleep(1)
print("✅ Đã kết nối WiFi!")
# Xử lý tin nhắn MQTT đến
def sub_cb(topic, msg):
print("📥 Nhận:", topic, msg)
if msg == b"ON":
pump.on()
client.publish(topic_pump_status, b"Bơm bật thủ công")
elif msg == b"OFF":
pump.off()
client.publish(topic_pump_status, b"Bơm tắt thủ công")
# Kết nối MQTT
connect_wifi()
client = MQTTClient(client_id, broker, port=1883)
client.set_callback(sub_cb)
client.connect()
client.subscribe(topic_pump_cmd)
print("🚀 Đã kết nối MQTT và bắt đầu giám sát...")
# Vòng lặp chính
while True:
client.check_msg() # Nhận lệnh ON/OFF
value = adc.read()
print("🌱 Độ ẩm đất:", value)
client.publish(topic_soil, str(value))
if value < threshold:
pump.on()
client.publish(topic_pump_status, b"Tự động bật bơm")
else:
pump.off()
client.publish(topic_pump_status, b"Tự động tắt bơm")
time.sleep(3)