'''import machine
import utime
import dht
import time
# Khai báo các chân
DHT_PIN = 4
RED_PIN = 25
GREEN_PIN = 26
BLUE_PIN = 32
BUZZER_PIN = 27
dht22 = dht.DHT22(machine.Pin(DHT_PIN))
red = machine.Pin(RED_PIN, machine.Pin.OUT)
green = machine.Pin(GREEN_PIN, machine.Pin.OUT)
blue = machine.Pin(BLUE_PIN, machine.Pin.OUT)
buzzer = machine.PWM(machine.Pin(BUZZER_PIN))
buzzer.freq(1000)
def beep(times, delay=0.2):
for _ in range(times):
buzzer.duty(512)
utime.sleep(delay)
buzzer.duty(0)
utime.sleep(delay)
# Buzzer kêu 2 lần khi bắt đầu
beep(2)
def led_color(r, g, b):
red.value(r)
green.value(g)
blue.value(b)
while True:
try:
dht22.measure()
temp = dht22.temperature()
hum = dht22.humidity()
print(f"Temp: {temp}C, Humidity: {hum}%")
if 16 <= temp <= 30 and 40 <= hum <= 60:
for _ in range(5): # Nhấp nháy luân phiên xanh lá và xanh dương
led_color(0, 1, 0)
utime.sleep(1)
led_color(0, 0, 1)
utime.sleep(1)
else:
for _ in range(10): # Nhấp nháy nhanh đỏ và còi beep nhanh
led_color(1, 0, 0)
buzzer.duty(512)
utime.sleep(0.2)
led_color(0, 0, 0)
buzzer.duty(0)
utime.sleep(0.2)
except Exception as e:
print("Lỗi khi đọc DHT22:", e)
utime.sleep(2)
'''
import machine
import utime
import dht
import network
from umqtt.simple import MQTTClient
# ⚡ Cấu hình WiFi Wokwi
SSID = "Wokwi-GUEST"
PASSWORD = ""
# ⚡ Cấu hình HiveMQ MQTT Broker
MQTT_BROKER = "broker.hivemq.com"
MQTT_PORT = 1883
MQTT_TOPIC = "/esp32/dht22"
# ⚡ Khai báo chân kết nối phần cứng
DHT_PIN = 4
RED_PIN = 25
GREEN_PIN = 26
BLUE_PIN = 32
BUZZER_PIN = 27
# Khởi tạo cảm biến DHT22 và module LED
dht22 = dht.DHT22(machine.Pin(DHT_PIN))
red = machine.Pin(RED_PIN, machine.Pin.OUT)
green = machine.Pin(GREEN_PIN, machine.Pin.OUT)
blue = machine.Pin(BLUE_PIN, machine.Pin.OUT)
buzzer = machine.PWM(machine.Pin(BUZZER_PIN))
buzzer.freq(1000)
# ⚡ Kết nối WiFi Wokwi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
for _ in range(20): # Chờ tối đa 20 giây
if wlan.isconnected():
print("✅ Kết nối WiFi thành công! IP:", wlan.ifconfig()[0])
return True
print("⏳ Đang kết nối WiFi...")
utime.sleep(1)
print("❌ Không thể kết nối WiFi!")
return False
# ⚡ Kết nối MQTT (có kiểm tra lỗi)
def connect_mqtt():
try:
client = MQTTClient("esp32_client", MQTT_BROKER, port=MQTT_PORT)
client.connect()
print("✅ Kết nối MQTT thành công!")
return client
except Exception as e:
print("❌ Lỗi kết nối MQTT:", e)
return None
# ⚡ Buzzer kêu 2 lần khi khởi động
def beep(times, delay=0.2):
for _ in range(times):
buzzer.duty(512)
utime.sleep(delay)
buzzer.duty(0)
utime.sleep(delay)
# ⚡ Điều khiển LED RGB
def led_color(r, g, b):
red.value(r)
green.value(g)
blue.value(b)
# ✅ Kết nối WiFi Wokwi & MQTT
if connect_wifi():
mqtt_client = connect_mqtt()
if mqtt_client:
beep(2) # Buzzer báo hiệu đã khởi động
while True:
try:
# Đọc cảm biến DHT22
dht22.measure()
temp = dht22.temperature()
hum = dht22.humidity()
print(f"🌡️ Nhiệt độ: {temp}C, 💧 Độ ẩm: {hum}%")
# Gửi dữ liệu lên HiveMQ
payload = f'{{"temperature": {temp}, "humidity": {hum}}}'
mqtt_client.publish(MQTT_TOPIC, payload)
print("📤 Đã gửi MQTT:", payload)
# Điều khiển LED & buzzer theo nhiệt độ, độ ẩm
if 16 <= temp <= 30 and 40 <= hum <= 60:
for _ in range(5):
led_color(0, 1, 0) # Xanh lá
utime.sleep(1)
led_color(0, 0, 1) # Xanh dương
utime.sleep(1)
else:
for _ in range(10):
led_color(1, 0, 0) # Đỏ
buzzer.duty(512)
utime.sleep(0.2)
led_color(0, 0, 0) # Tắt LED
buzzer.duty(0)
utime.sleep(0.2)
except Exception as e:
print("❌ Lỗi khi đọc/gửi dữ liệu:", e)
utime.sleep(2) # Đợi 2 giây trước khi đọc lại