Raspberry Pi Pico 與 LoRa 模組 MQTT 通訊範例

使用 Raspberry Pi Pico W 搭配 LoRa 模組 (假設使用 SX1262 LoRa 模組) 並透過 MQTT 進行通訊的程式範例。此範例將展示如何使用 MicroPython 從 LoRa 接收資料,並透過 Pico W 的 Wi-Fi 功能將資料發送到 MQTT Broker。

硬體需求

  1. Raspberry Pi Pico W
  2. SX1262 LoRa 模組 (如 Waveshare Pico-LoRa-SX1262)
  3. 連接到 Pico W 的電源和 USB 線
  4. Wi-Fi 網路可用
  5. MQTT Broker (如 HiveMQ 或本地的 Mosquitto)

前置準備

  1. 在 Pico W 上安裝 MicroPython 固件。
  2. 使用 Thonny IDE 安裝必要的庫:
    • umqtt.simple (MQTT 客戶端庫)
    • LoRa 模組的驅動程式 (如 SX1262 的 MicroPython 驅動,需從製造商或 GitHub 下載)
  3. 配置 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()

程式說明

  1. Wi-Fi 連線

    • 使用 network 模組連接到 Wi-Fi 網路。
    • 確保您的 SSID 和 PASSWORD 已正確填入。
  2. MQTT 配置

    • 使用 umqtt.simple 庫連接到 MQTT Broker。
    • 範例使用公共的 HiveMQ Broker (broker.hivemq.com),您可以替換為自己的 Broker 位址。
  3. LoRa 配置

    • 使用 UART 與 LoRa 模組通訊。
    • 假設 LoRa 模組連接到 Pico W 的 UART0 (TX: GP0, RX: GP1)。請根據您的硬體接線調整引腳。
  4. 資料流程

    • 從 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)。請參閱模組的規格表。

如何測試

  1. 將程式保存為 main.py 並上傳至 Pico W。
  2. 確保 LoRa 模組已正確配置並有另一個 LoRa 設備發送資料。
  3. 在您的電腦上使用 MQTT 客戶端 (如 MQTT Explorer) 訂閱 pico/lora/data 主題,檢查是否能收到資料。

擴展建議

  • 安全性:為 MQTT 添加使用者名稱和密碼認證。
  • LoRaWAN:如果您使用 LoRaWAN 協議,可以搭配 The Things Network (TTN) 網關,並調整程式以處理 LoRaWAN 封包。
  • 錯誤處理:增加 Wi-Fi 和 MQTT 的重新連線邏輯。