文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

【ACSip LoRa實作2】快速開發LoRa通訊功能-UART介面篇

作者:MakerPRO技術顧問/柯大

本篇延續上篇:【Acsip LoRa實作1】快速開發LoRa通訊功能-SPI介面篇

對於部份使用者可能較不熟悉SPI控制方式,可選擇群登具有MCU+LoRa晶片的模組,例如EK-AI1276XX或EK-1278XX系列,在本篇的實作測試中,我們將利用Arduino Nano MCU連接DHT11溫溼度感測器,以及PMS5003 PM2.5細懸浮粒子感測器偵測空氣品質;Arduino Nano再與具MCU款的EVK模組 EK-AI1276-401H連接,利用LoRa長距離低功耗的特性來傳送感測值資料,並以JSON格式傳送。

JSON 資料範例: { “PM25″:25,”Temp”:24.00,”Humi”:52} 。

整個系統架構圖如下:

圖片 10

以UART介面連接LoRa模組傳送、接收(以Ameba為LoRa Gateway )架構圖

傳送端以Arduino Nano MCU與Acsip LoRa 系列EK-AI1276-401H模組利用 UART介面及3.3V連接,接線方式如下:

螢幕快照 2017-01-23 下午4.48.22

螢幕快照 2017-01-23 下午4.51.37

Arduino Nano與LoRa模組介面圖示

接收端以Realtek Ameba RTL8195 MCU與Acsip LoRa 系列EK-AI1276-401H模組利用 UART介面及3.3V連接,接線方式如下:

螢幕快照 2017-01-23 下午5.07.34

螢幕快照 2017-01-23 下午5.11.49

Arduino Nano與LoRa模組介面圖示

本實作的步驟如下:

  1. 以LoRa模組提供之UART分別連接Arduino Nano 及Ameba RTL8195開發板;
  2. 以模組提供的LoRa Command Set 設定Ameba板為MASTER 模式(LoraMode MASTER),Arduino Nano 為SLAVE 模式(LoraMode SLAVE);
  3. 由MASTER自建Acsip 自訂的 AcsipLora-Net 網路協議下,MASTER 裝置邀請 SLAVE 裝置加入私有網(LoraJoinNode slveUUID), MASTER及SLAVE端即可利用  LoraNodeData command 傳送資料給對方;
  4. 由Ameba 當MASTER 接收Arduino Nano SLAVE端定時傳送溫溼度感測器及PM2.5感測值資料,並以JSON格式傳送;
  5. 以Amebao做為LoRa Gayeway,利用內建WiFi功能將資料再分別以RESTful API或MQTT格式上傳ThingSpeak IoT平台及QNAP NAS MQTT Server ,並可再利用NAS Server 提供的Node-RED container 來接收以儀表板顯示數值及曲數。

GUI 模擬測試工具軟體:LoRa_Terminator

群登EK-AI12xx系列帶MCU的LoRa開發模組為了方便開發者測試LoRa模組,提供了Winows 作業系統下的GUI 模擬測試工具軟體:LoRa_Terminator,可利用此軟體內建的選單式Command Set測試模組及自組LoRa網傳送、接收功能。

 

圖片 11

GUI 模擬測試工具軟體:LoRa_Terminator

 

螢幕快照 2017-01-23 下午4.06.20

軟體內建的選單式Command Set

常用Command Set 如下:

1. LoraGetSystemMode

詢問目前整體系統運作在哪種模式。

  • 參數:(不需帶參數)
  • 回傳值:

(成功),InNormal 表運作在一般模式下,InProductVerification 表運作在產測模式,InPingPognTest 表運作在測試模式,InIdle 表運作在閒置模式。inTD

(失敗)ERROR或是UNKNOW。

2. LoraGetMode

詢問目前 Lora 運作在哪種模式。

  • 參數:(不需帶參數)
  • 回傳值:

(成功),MASTER,表目前 Lora 運作在 MASTER 角色;SLAVE,表目前 Lora 運作在 SLAVE 角色。

(失敗) ERROR或是UNKNOW。

 3. LoraGetPara

詢問目前 Lora 的運作參數。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)例如:

RFFrequency=915000000 BW=8 SF=6 RFOscillator=Crystal

ErrorCoding=1 RFPower=17 FreqHopOn=false HeaderStatus=Implicit CRC=ON

PreambleLength=12 PayloadLength=32 TxPacketTimeout=227 RxPacketTimeout=227,

表示 Lora 的完整運作參數值。

(失敗)ERROR或是UNKNOW。

4. LoraSystemMode

設定整個裝置系統的運作模式。

  • 參數:需帶一個參數,有以下四種:inNormal-表示運作在一般模式;inPV-表示運作在生產驗證模式;inTD-表示運作在展示測試模式;inIdle-運作在閒置模式。
  • 回傳值:

(成功), OK ;(失敗),ERROR或是UNKNOW。

5. LoraMode

設定 Lora 裝置是運作在 Master 端或是 Slave 端。

  • 參數:需帶一個參數,MASTER:表示 Lora 運作在 Master 端,SLAVE:表示 Lora 運作在 Slave 端。
  • 回傳值:

(成功), OK;(失敗) ERROR或是UNKNOW。

6. LoraJoinNode

在 Acsip 自訂的 AcsipLora-Net 網路協議下,MASTER 裝置邀請 SLAVE 裝置加入自身網域。

例如:LoraJoinNode 420024,表示邀請 Lora 位址是 420024 的 SLAVE 裝置加入網域。

  • 參數:需帶一個參數,此參數為 SLAVE 裝置本身的 Lora 位址。
  • 回傳值:

(成功),OK,表示此邀請連結事件建立成功。

(失敗) ERROR或是UNKNOW,表示此邀請連結事件建立失敗。

補充1:參數必須是一個 6 碼長度的位址,字元需為 0~9、A~F、a~f。

補充2:在事件執行完後,MASTER 與 SLAVE 各自都會自動回報是否成功的訊息,如下:

NodeAddr=420024 Join the AcsipLoraNet SUCCESSED!,表示成功加入網域。

若顯示NodeAddr=420024 Join the AcsipLoraNet FAILED!,則表示加入網域失敗。

7. LoraLeaveNode

在 Acsip 自訂的 AcsipLora-Net 網路協議下,MASTER 命令 SLAVE 裝置斷線、離開網域。

例如:LoraLeaveNode 420024,表示命令 Lora 位址是 420024 的 SLAVE 裝置斷線、離開網域。

  • 參數:需帶一個參數,此參數為 SLAVE 裝置本身的 Lora 位址。
  • 回傳值:

(成功)OK,表示此離線事件建立成功。

(失敗)ERROR或是UNKNOW,表示此離線事件建立失敗。

補充1:參數必須是一個 6 碼長度的位址,字元需為 0~9、A~F、a~f。

補充2:在事件執行完後,MASTER 與 SLAVE 各自都會自動回報是否成功的訊息,如下:

NodeAddr=420024 Leave the AcsipLoraNet SUCCESSED!,表示成功離線。

NodeAddr=420024 Leave the AcsipLoraNet FAILED!,表示離線失敗(一樣連線中)。

8. LoraSetNodePara

在 Acsip 自訂的 AcsipLora-Net 網路協議下,當 SLAVE 裝置連結上 MASTER 後,可以利用此指令

在 MASTER 端設定 SLAVE 的運作參數,設定 SLAVE 端的睡眠時間長度與裝置別名。

  • 參數:可以帶一個參數,或帶二個參數,不然就是帶三個參數;在只帶一個參數時,參數一定是 Lora位址:在只帶二個參數時,第一個參數是 Lora 位址,第二個參數可以是睡眠時間長度(單位秒)或是裝置別名;在只帶三個參數時,第一個參數是 Lora 位址,第二個參數是睡眠時間長度(單位秒),第三個參數為裝置別名。
  • 回傳值:

(成功)OK,表示此指令運作成功。

(失敗)ERROR或是UNKNOW,表示此指令運作失敗。

補充1:此指令專屬 MASTER 執行。

補充2:裝置別名的資料輸入必須為 Base64 編碼格式。

補充3:裝置別名前後需使用””(雙引號)(只有此參數需使用雙引號)。

補充4:範例說明

Ex1: LoraSetNodePara 300057

Mean : Clear Lora SLAVE Node 300057’s Interval & Aliases.

Ex2: LoraSetNodePara 300057 20

Mean : Set Lora SLAVE Node 300057’s Interval=20.

Ex3: LoraSetNodePara 300057 0

Mean : Set Lora SLAVE Node 300057’s Interval=0.(Clear Interval)

Ex4: LoraSetNodePara 300057 “QAZW”

Mean : Set Lora SLAVE Node 300057’s Aliases= QAZW.

Ex5: LoraSetNodePara 300057 “”

Mean : Clear Lora SLAVE Node 300057’s Aliases.

Ex6: LoraSetNodePara 300057 10 “abcd”

Mean : Set Lora SLAVE Node 300057’s Interval=10 & Aliases= abcd.

9. LoraGetNodePara

在 Acsip 自訂的 AcsipLora-Net 網路協議下,下此指令可以查詢目前連結上 MASTER 端的SLAVE,其運作參數為何。

  • 參數:需帶一個參數,參數為 Lora 位址。
  • 回傳值:

(成功)最後會回傳 OK,表示此指令運作成功。回傳 OK 前會回傳一串結果,舉例:Node=420024 EVT=GetNode 222 qazwsxed,表示 Lora 位址 420024,其睡眠時間長度(單位秒)為 222 秒,裝置別名為 qazwsxed(Base64 編碼)。

(失敗)ERROR或是UNKNOW,表示此指令運作失敗。

補充1:此指令專屬 MASTER 執行。

補充2:別名的資料為 Base64 編碼格式。

10. LoraNodeData

在 Acsip 自訂的 AcsipLora-Net 網路協議下,MASTER 或 SLAVE 裝置欲傳資料給予對方。

  • 參數:

MASTER 裝置,需帶二個參數,一個參數為 Lora 位址,另一參數為欲傳輸的資料

SLAVE 裝置,只需帶一個參數,為欲傳輸的資料

  • 回傳值:

(成功)OK,表示此資料傳輸事件建立成功。

(失敗)ERROR或是UNKNOW,表示此資料傳輸事件建立失敗。

補充1:欲傳輸的資料輸入必須為 Base64 編碼格式。

補充2:在事件執行完後,MASTER 與 SLAVE 各自都會自動回報是否成功的訊息,且自動回報對方傳過來的資料,此時資料也是 Base64 編碼。

11. LoraListNodes

在 Acsip 自訂的 AcsipLora-Net 網路協議下,MASTER 目前網域連結了多少 SLAVE 裝置節點及其

Lora 位址。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)如下回傳 Nodes=1 420024 460057,表示目前有二個 SLAVE 節點連結中,且此兩節點的 Lora 位址為 420024 與 460057。

(失敗) ERROR或是UNKNOW,表示裝置目前狀態有誤,例如裝置是執行在 SLAVE 角色模式(此指令只可給 MASTER 角色使用)。

12. LoraGetGateWayAddr

在 Acsip 自訂的 AcsipLora-Net 網路協議下,SLAVE 裝置目前是連結到哪一個 MASTER。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)如下回傳 LoraGateWayAddr=460057,表示此 SLAVE 裝置連結到一個 Lora 位址為 460057 的 MASTER 裝置。

(失敗) ERROR或是UNKNOW,表示裝置目前狀態有誤,例如裝置是執行在 MASTER 角色模式(此指令只可給 SLAVE 角色使用)。

13. GetUUID

詢問裝置的通用唯一識別碼(UUID)。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)例如 UUID=464845343133511600460057,以上為裝置的UUID,長度是12位元組。

(失敗)ERROR或是UNKNOW。

 14. GetFWVersion

詢問目前韌體的版本。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)例如 FirmwareVersion=0.5.160411,表目前韌體版本是 0.5.160411。

(失敗)ERROR或是UNKNOW。

15. LoraGetSNR

詢問目前 Lora 的 SNR 值。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)例如 SNR=0,單位 dB。

(失敗)ERROR或是UNKNOW。

 16. LoraGetRSSI

詢問目前 Lora 的 RSSI 值。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)例如 RSSI=-45,單位 dBm。

(失敗)ERROR或是UNKNOW。

17. FactoryReset

設定裝置回復至出廠預設值。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)OK。

(失敗)ERROR或是UNKNOW。

18. LoraReset

重置 Lora IC。

  • 參數:(不需帶參數)
  • 回傳值:

(成功)OK。

(失敗)ERROR或是UNKNOW。

19. LoraPayloadLength

設定 Lora 封包的 Payload 長度。

  • 參數:需帶一個參數,1~128,單位是 byte。
  • 回傳值:

(成功)OK。

(失敗)ERROR或是UNKNOW。

20. LoraPreambleLength

設定 Lora 封包的 Preamble 長度。

  • 參數:需帶一個參數,6~ 65535,單位是 symbol。
  • 回傳值:

(成功)OK。

(失敗)ERROR或是UNKNOW。其餘Command Set功能請參閱開發說明。

 

Arduino UART 控制LoRa 傳送、接收範例:

傳送Command Set :

String sendLoRacmd(String cmd, unsigned int Dutytime){

String response = "";  // 接收LoRa回應值的變數

LoRa.print(cmd); // 送出LoRa命令到LoRa模組

unsigned long timeout = Dutytime + millis();

while (LoRa.available() || millis() < timeout) {

while(LoRa.available()) {

char c = LoRa.read(); // 接收LoRa傳入的字元

response += c;

}

}



//Serial.print(response);  // 顯示LoRa的回應

return (response);

}

接收資料 :

String  GS_LoRa_Receive(unsigned int Dutytime)

{

unsigned long timeout = Dutytime + millis();

String response = "";  // 接收LoRa回應值的變數

while (LoRa.available() || millis() < timeout) {

while(LoRa.available()) {

char c = LoRa.read(); // 接收LoRa傳入的字元

response += c;

}

}

if (response == "") return("");

return(response);  // 顯示LoRa的回應

}

四、結論

目前市場上對於LoRa的應用開發可說是需求若渴,而群登所提出用SiP(System in Package)製程製造的LoRa Transceiver/Standalone模組解決方案,不只讓尺寸的微型化往前邁進一大步,並針對所研發的LoRa模組系列提供完整的SDK/HDK套件,且相容於LoRaWAN,讓用戶更容易實現各種應用開發。

Acsip LoRa SiP

Acsip以SiP技術開發微型化 LoRa模組,並提供完整的技術支援。(圖片來源:Acsip)

延伸閱讀

柯大

柯大

現為MakerPRO技術顧問,有近30年資訊電子產業研發經驗,關心最新技術,並投入不綴。亦熱心指導新興團隊參與技術創意競賽,獲獎無數。
專長包括物聯網軟硬體整合規劃設計、資訊服務系統整合規劃。熟悉各種物聯網開發板,包括Arduino、Edison、Linkit one、Ameba…...等。
柯大

上一篇: | 下一篇:

468 ad

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO