2018年3月24日 星期六

快速開發LoRa通訊功能-SPI介面篇

作者:MakerPRO技術顧問/柯大

由於LoRa無線技術具備長距離、高穿透、抗干擾等特性,足以填補BT/Wi-Fi到2G/4G之間的許多特性缺口,因此其發展潛力備受看好。國內Wireless SiP專業廠商群登(Acsip)也推出一系列LoRa晶片組及LoRa+MCU整合的晶片產品,其中的LoRa晶片來自於Semtech,MCU(微控制器)來自於STMicro。
ACSip的LoRa晶片系列
ACSip的LoRa晶片組系列
為了方便物聯網應用開發商及Maker開發人員,該公司特別推出因應不同需求的開發模組EVK,透過簡便的建置動作即能完成LoRa節點的佈建,同時也針對所研發的LoRa模組系列提供完整的SDK/HDK套件,且相容於LoRaWAN,讓使用者更容易實現各種應用開發。
ACSip的LoRa模組系列
ACSip的LoRa模組系列
看起來產品種類繁多,該如何來應用呢?簡單來區分,這些模組可分為不帶MCU的收發器(Transceiver)模組,以及內嵌入MCU的獨立式(Standalone)模組兩種,前者讓使用者可自選MCU,開發上較有彈性,但需使用SPI介面來串接MCU;後者因已內嵌MCU,又有Acsip自建的GUI開發環境,因此開發上較為容易,使用者可依自己的需求來選擇。
螢幕截圖 2017-01-23 18.12.36
不帶MCU的LoRa Transceiver Module,開發上較有彈性。
內嵌MCU的Standalone模組,開發上較容易。
內嵌MCU的LoRa Standalone模組,開發上較容易。
本系列文章將以不具備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連接。
整個系統架構圖如下:
P6
本實作範例的系統架構圖
CW1276SL-195是一顆沒有MCU的晶片組,其功能方塊圖如下:
CW1276SL-915 Block Diagram
CW1276SL-915 Block Diagram
做為LoRa Node的傳送端以Arduino Nano MCU與CW1276SL-915 模組利用 SPI 介面及5V連接CON1,接線方式如下:
Acsip LoRa_P2
螢幕截圖 2017-01-19 23.32.56
Arduino Nano與LoRa模組介面圖示
做為LoRa Gateway的接收端以Realtek Ameba開發板(MCU為RTL8195)與CW1276SL-915 模組利用 SPI 介面及5V連接CON1,接線方式如下:
螢幕截圖 2017-01-18 00.20.46
Ameba及LoRa模組介面圖示
Ameba及LoRa模組介面圖示
其中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 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平台接收料曲線及儀表板如下:
P7
P8利用QNAP NAS Server 提供的Node-RED container 來接收以儀表板顯示數值及曲數如下:
P9
P10
對於較不熟悉SPI控制方式的使用者,可選擇群登具有MCU+LoRa晶片模組,即EK-AI1276XX或EK-1278XX系列,請見下一篇文章中的介紹。

沒有留言:

張貼留言