作者:MakerPRO技術顧問/柯大
由於LoRa無線技術具備長距離、高穿透、抗干擾等特性,足以填補BT/Wi-Fi到2G/4G之間的許多特性缺口,因此其發展潛力備受看好。國內Wireless SiP專業廠商群登(Acsip)也推出一系列LoRa晶片組及LoRa+MCU整合的晶片產品,其中的LoRa晶片來自於Semtech,MCU(微控制器)來自於STMicro。
為了方便物聯網應用開發商及Maker開發人員,該公司特別推出因應不同需求的開發模組EVK,透過簡便的建置動作即能完成LoRa節點的佈建,同時也針對所研發的LoRa模組系列提供完整的SDK/HDK套件,且相容於LoRaWAN,讓使用者更容易實現各種應用開發。
看起來產品種類繁多,該如何來應用呢?簡單來區分,這些模組可分為不帶MCU的收發器(Transceiver)模組,以及內嵌入MCU的獨立式(Standalone)模組兩種,前者讓使用者可自選MCU,開發上較有彈性,但需使用SPI介面來串接MCU;後者因已內嵌MCU,又有Acsip自建的GUI開發環境,因此開發上較為容易,使用者可依自己的需求來選擇。
本系列文章將以不具備MCU的LoRa模組(即CW1276SL-915)以及具備MCU的LoRa模組(即AI1276-401H)為例,分別介紹如何用Maker熟悉的方式來實作LoRa通訊環境,並介紹這一套GUI 模擬測試工具軟體。
系統架構規劃
本實作案例是利用Arduino Nano MCU連接DHT11溫溼度感測器及PMS5003 PM2.5細懸浮粒子感測器,以偵測空氣品質,再與入門款的EVK模組 EK-CW1276SL-915以SPI介面連接,來做為LoRa Node,如系統架構圖的左區所示。
收集到的感測值資料利用LoRa長距離低功耗的特性來傳送到LoRa Gateway,資料格式為JSON,JSON 資料範例: { “PM25″:25,”Temp”:24.00,”Humi”:52}。接收端的LoRa Gateway則以Ameba為主控板,同樣透過SPI介面與EK-CW1276SL-915連接。
整個系統架構圖如下:
CW1276SL-195是一顆沒有MCU的晶片組,其功能方塊圖如下:
做為LoRa Node的傳送端以Arduino Nano MCU與CW1276SL-915 模組利用 SPI 介面及5V連接CON1,接線方式如下:
做為LoRa Gateway的接收端以Realtek Ameba開發板(MCU為RTL8195)與CW1276SL-915 模組利用 SPI 介面及5V連接CON1,接線方式如下:
其中NSS、NRESET及 DIO0 接腳可以程式庫之 LoRa.setPins(ss, reset, dio0) 函式來變更使用的接腳。DIO0 接腳若需使用receive callback mode 時,可接支援中斷功能的Arduino 或Ameba Pin腳。
接收端接收LoRa傳送的JSON資料,利用Arduino JSON Library parse 資料後,將資料顯示於0.96”OLED disiplay ,並依PM2.5的值以RGB LED 顯示不同值的空氣品質顔色,同時利用Ameba內建WiFi功能將資料再分別以RESTful API或MQTT格式上傳ThingSpeak IoT平台及QNAP NAS MQTT Server ,並可再利用NAS Server 提供的Node-RED container 來接收以儀表板顯示數值及曲數。
LoRa SPI程式Library可由Github 下載:https://github.com/sandeepmistry/arduino-LoRa
Arduino JSON Library可由Github 下載:https://github.com/bblanchon/ArduinoJson
Library安裝方式可參閱: https://www.arduino.cc/en/Guide/Libraries
Arduino JSON Library可由Github 下載:https://github.com/bblanchon/ArduinoJson
Library安裝方式可參閱: https://www.arduino.cc/en/Guide/Libraries
Arduino LoRa SPI Library 提供的程式庫函式如下:
啟始設定:
LoRa.begin(915E6); // 宣告傳送頻率: 915Mhz ,可宣告 (`433E6`, `866E6`, `915E6`)
傳送方式:
getPm25(); // 讀取PM2.5值 getDHT11(); // 讀取DHT11溫溼度 Sending = String (.…..); // 儲值要傳送的資料內容到字串變數 LoRa.setTxPower(txPower); //更改TX傳輸功率 2-17 ,預設為17。 LoRa.beginPacket(); // 啟動發送數據包的順序 LoRa.print(Sending); // 開始傳送資料,每個封包最大255bytes delay(50); LoRa.endPacket(); // 結束傳送資料 delay(50); … LoRa.idle(); // LoRa 模組進idle空閒(待機)模式。 LoRa.sleep(); // LoRa 模組進入省電sleep模式 ….
接收方式:
…. String response = ""; // 接收LoRa回應值的變數 int packetSize = LoRa.parsePacket(); // 讀取接收LoRa Packet大小 while (LoRa.available()) { char c = LoRa.read(); // 接收LoRa傳入的字元 Serial.print(c); response += c; } int rssi = LoRa.packetRssi(); // // 讀取接收LoRa RSSI大小 …
其餘函式功能請參閱API.me。
實機測試
ThingSpeak平台接收料曲線及儀表板如下:
利用QNAP NAS Server 提供的Node-RED container 來接收以儀表板顯示數值及曲數如下:
對於較不熟悉SPI控制方式的使用者,可選擇群登具有MCU+LoRa晶片模組,即EK-AI1276XX或EK-1278XX系列,請見下一篇文章中的介紹。
沒有留言:
張貼留言