iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
自我挑戰組

無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務系列 第 27 篇

模擬 MQTT 發送——將感測器數據格式化為 JSON 字串

  • 分享至 

  • xImage
  •  

今日目標
在昨天學會了讓 ESP32 進行 Wi-Fi 模擬連線與 NTP 網路對時後,今天我們要進一步探討物聯網通訊的核心協議——MQTT。
MQTT 是一種專為物聯網設計的輕量級「發布/訂閱」通訊協定,非常適合頻寬有限、不穩定的嵌入式裝置。在將感測器數據發送到雲端平台之前,我們必須先把原始數據打包成結構化的 JSON 格式字串。今天我們將結合 DHT22 溫濕度感測器,學習如何在 MicroPython 中將實體數據打包為標準 JSON,並在序列埠模擬發布過程。

程式碼
import time
import json
import network
import dht
from machine import Pin, I2C
import ssd1306

i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

dht_sensor = dht.DHT22(Pin(15))

def show_screen(title, msg1, msg2=""):
oled.fill(0)
oled.text(title, 0, 0)
oled.hline(0, 12, 128, 1)
oled.text(msg1, 0, 26)
if msg2:
oled.text(msg2, 0, 42)
oled.show()

show_screen("MQTT CLIENT", "Connecting WiFi...")
print("=== ESP32 MQTT 模擬發布系統啟動 ===")

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("Wokwi-GUEST", "")

while not wlan.isconnected():
print(".", end="")
time.sleep(1)

print("\n✅ 模擬 Wi-Fi 連線成功!")
show_screen("MQTT CLIENT", "WiFi Connected", "Ready to Publish")
time.sleep(1.5)

MQTT_TOPIC = "home/greenhouse/sensor_data"
device_id = "esp32_greenhouse_01"

print(f"準備發布資料至 MQTT Topic: {MQTT_TOPIC}")

counter = 1

while True:
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()

    payload_dict = {
        "msg_id": counter,
        "device_id": device_id,
        "temperature": temp,
        "humidity": hum,
        "timestamp": time.time()
    }
    
    json_payload = json.dumps(payload_dict)
    
    print(f"\n[MQTT Publish] Topic: {MQTT_TOPIC}")
    print(f"Payload (JSON): {json_payload}")
    
    show_screen("MQTT PUBLISHED", f"ID: {counter}", f"T:{temp}C H:{hum}%")
    
    counter += 1
    
except OSError:
    print("❌ DHT22 感測器讀取失敗!")
    show_screen("MQTT ERROR", "Sensor Read Fail")
    
time.sleep(5)

心得
今天我們掌握了物聯網溝通的共通語言——JSON 資料序列化與 MQTT 發布架構。透過將感測器數據打包,我們不再只是把數字印在螢幕上,而是具備了將環境數據推送到全世界雲端平台的能力。


上一篇
使用 ESP32 模擬 Wi-Fi 連線與 NTP 網路時間取得
下一篇
MicroPython 程式碼重構——使用 Class 封裝感測器邏輯
系列文
無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言