from machine import Pin, I2C
import ssd1306
import dht
import time
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Bui Trung Kien!', 10, 10)
oled.show()
time.sleep(2)
# Định nghĩa các chân GPIO
dht_pin = Pin(21, Pin.IN, Pin.PULL_UP) # Chân dữ liệu của cảm biến DHT
led_green = Pin(22, Pin.OUT) # Chân LED xanh
led_red = Pin(23, Pin.OUT) # Chân LED đỏ
led_yellow = Pin(19, Pin.OUT) # Chân LED vàng
# Khởi tạo cảm biến DHT11
sensor = dht.DHT22(dht_pin)
# Khởi tạo màn hình OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000) # Giao tiếp I2C với màn hình OLED
oled = ssd1306.SSD1306_I2C(128, 64, i2c) # Kích thước màn hình OLED 128x64
# Đặt ngưỡng nhiệt độ và độ ẩm
temp_threshold_high = 35.0
temp_threshold_low = 10.0
humidity_threshold_high = 70.0
humidity_threshold_low = 30.0
while True:
# Đọc dữ liệu từ cảm biến
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
# Hiển thị thông tin trên màn hình OLED
oled.fill(0)
oled.text('Temp: {:.1f} do C'.format(temperature), 0, 0)
oled.text('Humidity: {:.1f} %'.format(humidity), 0, 10)
oled.show()
# Điều khiển LED dựa trên nhiệt độ
if temperature < temp_threshold_low:
led_red.value(1) # LED đỏ sáng
elif temperature > temp_threshold_high:
led_red.value(1) # LED đỏ sáng
time.sleep(0.5) # Đợi 0.5 giây
led_red.value(0) # Tắt LED đỏ
time.sleep(0.5) # Đợi 0.5 giây
# LED đỏ nháy
led_green.value(0) # LED xanh tắt
led_yellow.value(0) # LED vàng tắt
else:
led_red.value(0) # LED đỏ tắt
led_green.value(0) # LED xanh tắt
led_yellow.value(0) # LED vàng tắt
# Điều khiển LED dựa trên độ ẩm
if humidity < humidity_threshold_low:
led_yellow.value(1) # LED vàng sáng
elif humidity > humidity_threshold_high:
led_yellow.value(1) # LED vàng nháy
time.sleep(0.5) # Đợi 0.5 giây
led_yellow.value(0) # Tắt LED vàng
time.sleep(0.5) # Đợi 0.5 giây
led_red.value(0) # LED đỏ tắt
led_green.value(0) # LED xanh tắt
else:
led_yellow.value(0) # LED vàng tắt
led_red.value(0) # LED đỏ tắt
led_green.value(0) # LED xanh tắt
if temperature < temp_threshold_low and humidity > humidity_threshold_high :
led_red.value(1) # LED đỏ sáng
led_yellow.value(1) # LED vàng nháy
time.sleep(0.5) # Đợi 0.5 giây
led_yellow.value(0) # Tắt LED vàng
time.sleep(0.5) # Đợi 0.5 giây
led_green.value(0) # LED xanh tắt
elif temperature > temp_threshold_high and humidity < humidity_threshold_low :
led_red.value(1) # LED đỏ sáng
time.sleep(0.5) # Đợi 0.5 giây
led_red.value(0) # Tắt LED đỏ
time.sleep(0.5) # Đợi 0.5 giây
# LED đỏ nháy
led_green.value(0) # LED xanh tắt
led_yellow.value(1) # LED vàng sáng
#time.sleep(5) # Đợi 1 giây trước khi đọc dữ liệu lại