import network
import time
from machine import Pin, I2C
import ssd1306
import dht
# 1. ตั้งค่า Pin สำหรับหลอด LED แสดงสถานะ Wi-Fi (ขา GP18)
led = Pin(18, Pin.OUT)
led.value(0) # สั่งให้ LED ดับไว้ก่อนจนกว่าจะเชื่อมต่อสำเร็จ
# 2. ตั้งค่า I2C สำหรับจอ OLED (SDA=GP16, SCL=GP17)
i2c = I2C(0, sda=Pin(16), scl=Pin(17))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# 3. ตั้งค่าเซ็นเซอร์ DHT22 ที่ขา GP20
sensor = dht.DHT22(Pin(20))
# ข้อมูล Wi-Fi ของระบบจำลอง Wokwi
ssid = "Wokwi-GUEST"
password = ""
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# แสดงข้อความบนจอ OLED ระหว่างรอเชื่อมต่อ
oled.fill(0)
oled.text("Connecting to", 0, 0)
oled.text("WiFi...", 0, 15)
oled.show()
print("กำลังเชื่อมต่อ Wi-Fi...")
# รอจนกว่าจะเชื่อมต่อสำเร็จ
while not wlan.isconnected():
led.value(0) # มั่นใจว่า LED ดับอยู่หากยังไม่เชื่อมต่อ
time.sleep(0.5)
ip_address = wlan.ifconfig()[0]
print("เชื่อมต่อสำเร็จ! IP:", ip_address)
# เมื่อเชื่อมต่อสำเร็จ สั่งให้ LED ติดสว่าง
led.value(1)
return ip_address
# เริ่มเชื่อมต่อ Wi-Fi และเก็บค่า IP Address ไว้ในตัวแปร
ip = connect_wifi()
# วนลูปเพื่ออ่านค่าอุณหภูมิ/ความชื้น และอัปเดตหน้าจออย่างต่อเนื่อง
while True:
try:
# สั่งให้อ่านค่าจากเซ็นเซอร์
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
# ล้างหน้าจอเพื่อเตรียมวาดข้อมูลชุดใหม่
oled.fill(0)
# แสดงสถานะ Wi-Fi และหมายเลข IP (บรรทัดบน)
oled.text("WiFi Connected", 0, 0)
oled.text(ip, 0, 12)
# แสดงอุณหภูมิและความชื้น (บรรทัดล่าง)
oled.text("Temp: {:.1f} C".format(temp), 0, 30)
oled.text("Hum: {:.1f} %".format(hum), 0, 45)
# สั่งให้จอแสดงผล
oled.show()
# แสดงผลทางหน้าต่าง Console ด้านล่างด้วย
print("Temp: {:.1f} C, Hum: {:.1f} %".format(temp, hum))
except OSError as e:
print("ไม่สามารถอ่านค่าจากเซ็นเซอร์ได้ ลองตรวจสอบการต่อสาย")
# หน่วงเวลา 2 วินาทีก่อนอ่านค่ารอบถัดไป (DHT22 ต้องการเวลาอ่านค่าห่างกัน 2 วินาที)
time.sleep(2)