2025年11月20日 星期四

[PI PICO]Pico LoRa-Mesh Solar Shield 深度解析-2

一、硬體介面與腳位配置總覽

在進行程式撰寫前,確認 Pico 的腳位配置是極為重要的步驟 。使用的 Pico LoRa Mesh solar shield 板子,腳位是以功能面來區分 :

介面 功能腳位說明 實際腳位編號 (程式/GP 參考)
LoRa (SPI) 包含 SCK, MOSI, MISO, Reset, 和 LoRa SSS (Slave Select) 走 SPI 介面
I2C/QWIC 用於連接溫濕度感測器 SHT40 等模組 程式編號 6 與 7 (實際對應到 GP4 與 GP5) 
UART (序列通訊) 用於 TX/RX 通訊 TX/RX (GP編號 12/13) 
電池電壓 讀取電池電壓 ADC0 (實際對應到 GPIO26/GP26) [14, 15]
5V 開關 (5V_EN) 控制外部 5V 設備供電 GP21 (GP編號 27) 

特別提到,UART 介面設有 5V 開關 。這設計主要是針對外接比較耗電的 UART 設備,以達到省電的目的。




二、電池電壓監控程式解析 (ADC)

由於裝置主要設計為電池應用,讀取電池電壓至關重要 。電壓讀取是透過 ADC (類比數位轉換) 實現的,連接到 ADC0 (GPIO26) 腳位上。

1. 硬體原理與分壓電路

電池接口的電壓透過一個電阻分壓電路連接到 ADC0 。此電路的分壓電阻值分別是 R1 = 1MΩ(上電阻)與 R2 = 1.5MΩ(下電阻)。實際的接法是將 AD 端點接在 ADC0 上 。

2. 程式邏輯與計算

  • 讀取原始值:ADC 讀取到的原始值範圍是 0 到 4095 。
  • 電壓還原:將原始值轉換為實際的 AD 腳位電壓。由於板子工作電平為 3.3V,此還原後的電壓通常會在 3V 以下 。
  • 計算電池電壓:透過電阻分壓公式,將還原後的 AD 電壓計算回原始的電池電壓 。

💡 追求精準:校正係數

由於電子元件存在誤差,如果希望電壓讀值更接近實際電表量測值,可以使用校正係數 。校正係數的計算方式是:用實際電表量測的電壓值除以程式顯示的電壓值 。將計算出的校正係數(例如 1.0386)乘上未校正的電池電壓,即可得到更精準的值 。

節電應用:讀取電壓的目的在於提供參考。當電池電壓在 3.7V 到 4.2V 的區間內 ,程式可以根據電壓高低實施節電措施,例如放慢迴圈速度或延長感測器讀取間隔 。

三、UART 通訊與 5V 電源管理範例

UART 範例展示了如何實現序列通訊以及控制板載的 5V 開關 。

1. 5V 開關控制

控制 5V 開關是為了控制外部設備的電源,該開關由 GP21 腳位控制 。在程式中,需將 GP21 初始化為 輸出 (out) 。

  • 設為 High 即可打開開關,輸出 5V 。
  • 設為 Low (零) 則可關閉開關 。

2. UART 介面應用

UART 通訊使用 UART0 的 TX 和 RX 腳位 。測試時需要使用 USB 轉 TTL 的 Cable,連接 GND、RX 和 TX (5V 線可不接,因為板子上 5V 腳位是輸出) 。程式會將輸入的資料反饋列印出來,確認 UART 通訊正常。

若需啟用 log 輸出,可以在 `CMakeLists.txt` 中開啟 `USE_USB_SERIAL_FOR_CONSOLE_LOG` 或 `USE_UART_FOR_CONSOLE_LOG` 選項 。

四、LoRa 傳輸實戰:SHT40 溫濕度資料收發

本次課程介紹了兩組程式來演示資料的完整收發流程 :

  1. LORA SHT40 Sensor (發送端):負責讀取 SHT40 溫濕度數據,並將資料封裝後透過 LoRa 傳送 。SHT40 模組的操作方式與 Arduino 相似,使用原廠的程式庫,在 main 函式中初始化並擷取溫濕度值 。
  2. LORA Simple Receiver (接收端):負責接收數據 。

關鍵設定:無論是發送端還是接收端,都需要確保頻段(例如 915 或 433)以及中間的 LoRa 參數設定完全一致 。

接收邏輯解析

接收端使用 receive 函式進行數據接收:

  • 接收緩衝區 (Buffer) 的長度必須大於實際要接收的資料長度 。
  • 接收成功後,程式會進行 CRC (循環冗餘校驗) 確認 。
  • 接著會解析資料結構,並列印出溫濕度、RSSI (信號強度)SNR (信噪比) 等資訊 。

目前接收方式是使用 Poll (詢問) 模式 ,鼓勵夥伴們可以嘗試將接收方式改為中斷 (Interrupt) 方式作為課後練習 。

購買據點