Raspberry Pi Pico 與 LoRa 模組 MQTT 通訊範例
使用 Raspberry Pi Pico W 搭配 LoRa 模組 (假設使用 SX1262 LoRa 模組) 並透過 MQTT 進行通訊的程式範例。此範例將展示如何使用 MicroPython 從 LoRa 接收資料,並透過 Pico W 的 Wi-Fi 功能將資料發送到 MQTT Broker。
硬體需求
- Raspberry Pi Pico W
- SX1262 LoRa 模組 (如 Waveshare Pico-LoRa-SX1262)
- 連接到 Pico W 的電源和 USB 線
- Wi-Fi 網路可用
- MQTT Broker (如 HiveMQ 或本地的 Mosquitto)
前置準備
- 在 Pico W 上安裝 MicroPython 固件。
- 使用 Thonny IDE 安裝必要的庫:
umqtt.simple
(MQTT 客戶端庫)- LoRa 模組的驅動程式 (如 SX1262 的 MicroPython 驅動,需從製造商或 GitHub 下載)
- 配置 Wi-Fi 和 MQTT Broker 的連線資訊。
程式範例
以下程式假設 LoRa 模組連接至 Pico W 的 UART 引腳,並從 LoRa 接收資料後透過 MQTT 發送到指定的主題。
import network
import time
from machine import UART, Pin
from umqtt.simple import MQTTClient
# Wi-Fi 配置
SSID = "你的WiFi名稱"
PASSWORD = "你的WiFi密碼"
# MQTT 配置
MQTT_BROKER = "broker.hivemq.com" # 使用公共 HiveMQ Broker,您可以替換為自己的 Broker
MQTT_TOPIC = "pico/lora/data"
CLIENT_ID = "pico_w_lora"
# LoRa 配置 (假設使用 SX1262 模組透過 UART 連接)
lora_uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) # 調整引腳根據您的接線
# 連接到 Wi-Fi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("正在連接到 Wi-Fi...")
while not wlan.isconnected():
time.sleep(1)
print("Wi-Fi 已連接,IP 位址:", wlan.ifconfig()[0])
# 連接到 MQTT Broker
def connect_mqtt():
client = MQTTClient(CLIENT_ID, MQTT_BROKER)
client.connect()
print("已連接到 MQTT Broker")
return client
# 從 LoRa 模組接收資料
def receive_lora_data():
if lora_uart.any():
data = lora_uart.read().decode('utf-8').strip()
return data
return None
# 主程式
def main():
# 初始化 Wi-Fi
connect_wifi()
# 初始化 MQTT
mqtt_client = connect_mqtt()
# 主迴圈
while True:
lora_data = receive_lora_data()
if lora_data:
print("從 LoRa 接收到的資料:", lora_data)
# 將資料發送到 MQTT
mqtt_client.publish(MQTT_TOPIC, lora_data)
print(f"已發送到 MQTT 主題 {MQTT_TOPIC}: {lora_data}")
time.sleep(1) # 每秒檢查一次
# 啟動程式
if __name__ == "__main__":
main()
程式說明
-
Wi-Fi 連線:
- 使用
network
模組連接到 Wi-Fi 網路。 - 確保您的 SSID 和 PASSWORD 已正確填入。
- 使用
-
MQTT 配置:
- 使用
umqtt.simple
庫連接到 MQTT Broker。 - 範例使用公共的 HiveMQ Broker (
broker.hivemq.com
),您可以替換為自己的 Broker 位址。
- 使用
-
LoRa 配置:
- 使用
UART
與 LoRa 模組通訊。 - 假設 LoRa 模組連接到 Pico W 的 UART0 (TX: GP0, RX: GP1)。請根據您的硬體接線調整引腳。
- 使用
-
資料流程:
- 從 LoRa 模組接收資料。
- 如果接收到資料,則透過 MQTT 發送到指定的主題 (
pico/lora/data
)。
硬體接線範例 (SX1262 LoRa 模組)
Pico W 引腳 | SX1262 LoRa 模組引腳 |
---|---|
3V3 | VCC |
GND | GND |
GP0 (UART0 TX) | RXD |
GP1 (UART0 RX) | TXD |
注意:根據您的 LoRa 模組,可能需要額外的引腳配置 (如 M0、M1 或 AUX)。請參閱模組的規格表。
如何測試
- 將程式保存為
main.py
並上傳至 Pico W。 - 確保 LoRa 模組已正確配置並有另一個 LoRa 設備發送資料。
- 在您的電腦上使用 MQTT 客戶端 (如 MQTT Explorer) 訂閱
pico/lora/data
主題,檢查是否能收到資料。
擴展建議
- 安全性:為 MQTT 添加使用者名稱和密碼認證。
- LoRaWAN:如果您使用 LoRaWAN 協議,可以搭配 The Things Network (TTN) 網關,並調整程式以處理 LoRaWAN 封包。
- 錯誤處理:增加 Wi-Fi 和 MQTT 的重新連線邏輯。