import network
import time
from umqtt.simple import MQTTClient
import dht
from machine import Pin, ADC
# MQTT Broker 設定
MQTT_BROKER = "broker.hivemq.com"
MQTT_PORT = 1883
MQTT_TOPIC = "test123/topic_teacher"
# 初始化感測器
dht_sensor = dht.DHT22(Pin(4)) # DHT22 連接到 GPIO4
mq2_sensor = ADC(Pin(34)) # MQ2 連接到 GPIO34
mq2_sensor.atten(ADC.ATTN_11DB) # 設置 ADC 範圍為 0-3.3V
# 連接 Wi-Fi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('Wokwi-GUEST')
while not wlan.isconnected():
print("Connecting to WiFi...")
time.sleep(1)
print("Connected to WiFi:", wlan.ifconfig())
# 上傳資料到 MQTT Broker
def publish_data(client, temperature, humidity, gas_level):
payload = temperature
client.publish(MQTT_TOPIC, str(payload))
print("Data published:", payload)
# 主程式
def main():
connect_wifi()
client = MQTTClient("esp32_client", MQTT_BROKER, port=MQTT_PORT)
client.connect()
print("Connected to MQTT Broker")
while True:
try:
# 讀取 DHT22 資料
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
# 讀取 MQ2 氣體感測器資料
gas_level = mq2_sensor.read()
# 上傳資料
publish_data(client, temperature, humidity, gas_level)
time.sleep(5) # 每 5 秒上傳一次
except Exception as e:
print("Error:", e)
time.sleep(10)
if __name__ == "__main__":
main()