Menu
最新消息
【Acsip LoRa實作1】快速開發LoRa通訊功能-SPI介面篇

Posted on 一月 19, 2017

作者: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 LoRa SPI Library 提供的程式庫函式如下:

啟始設定:

1

LoRa.begin(915E6); // 宣告傳送頻率: 915Mhz ,可宣告 (`433E6`, `866E6`, `915E6`)

傳送方式:

1

2

3

4

5

6

7

8

9

10

11

12

13

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模式

.

接收方式:

1

2

3

4

5

6

7

8

9

10

.

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系列,請見下一篇文章中的介紹。

 

*以上資料來源 (MAKERPRO 自造達人社群/媒體/平台)

上一頁
Top