LoRa - Arduino MKRWAN 1300 通訊模組

        最近從網上買了兩個Arduino MKRWAN,屬於LoRa開發板的一種,可以拿來研究物聯網的通訊傳輸,一個用來當發送端,另一個用來當接收端。首先瞭解開發板的架構,Arduino MKR WAN 1300開發板是由ATMEL SAMD晶片,再搭配 LoRa 模組所組成,系統方塊圖如下所示。
        在下圖的左邊,ATMEL SAMD就是Arduino Zero開發板的控制器,以Cortex-M0為核心的晶片。而在下圖的右邊,LoRa模組是由Murata公司製作的通訊模組,該模組內部包含一顆STM32L系列的控制器和一顆SX1276 LoRa晶片。在市面上容易買到單獨SX1276/78晶片的LoRa模組,這種必須仔細了解SX1276內部暫存器的設定才能順利開發與運用。另外,也有一類模組還包含一顆控制器,通常這種模組是用 AT command 方式來控制 LoRa 傳輸,很多複雜的控制命令已經被封裝成 AT 指令了,對初次接觸LoRa開發的人來說會方便許多。

Arduino MKRWAN 1300 方塊圖

        這塊開發板的編譯環境是用 Arduino IDE,然後再從開發板管理員選單中找尋相關的板卡,如下圖所示。一般我們常用的是AVR為控制器的Arduino板子,但是MKRWAN 1300是以ATMEL SAMD為核心控制器,所以要下載圖中最底下的開發套件,然後IDE自動會將套件安裝完畢。

下載Arduino SAMD的開發套件
        
        前面下載的說明是板子的開發套件,主要用來編譯我們設計的程式原碼。接下來,我們要從程式庫管理員裡面找尋LoRa相關的函式庫,如下圖所示,使用這些前人已開發的函式庫可以縮短我們摸索的時間,順便也能仔細研究其代碼怎麼設計與控制LoRa晶片。底下的函式庫列出兩個,MKRWAN開發者提供LoRaWAN的函式調用接口,如OTAA、ABP接入模式。另一個LoRa開發者提供SX1276...的函式調用接口,能讓我們設計點對點或點對多的LoRa通訊連接。上述的兩個程式碼除了這裡下載,也可以從 GitHub 取得,如果開發過程遇到問題,歡迎上 GitHub 提問。

下載 LoRa 模組的函式庫

        在準備開發MKRWAN板子之前,我們要先讀取板子上的firmware版本號,前面提到LoRa模組是由STM32Lxx控制器加上SX1276組成的,所謂firmware版本是指運行在STM32上面的程式碼,把一些複雜的控制工作封裝到STM32 firmware裡面,Arduino端的開發工作就會相對簡潔。至於FW,MKRWAN開發者在GitHub上面提供最新的firmware以及源碼,有興趣者可以下載研究。
        接著,這是重要的一步驟,要怎麼知道板子上面的版本號? MKRWAN提供的範例程式中有一個名為FirstConfiguration,只要我們將其上傳到板子,並打開序列埠監看,便能從訊息中取得板子上的版本號。當我第一次執行時,讀到模組FW為ARD-078 1.1.2,根據GitHub上的留言,這個版本被測試出不少 bugs,所以要將它升級到最新的1.1.6。升級的方式也很簡單,MRKWAN已經提供一個名為MKRWANFWUpdate_standalone的範例程式,只需把它上傳,板子的FW就會升級到最新版。完成後,我們可以再用前一個範例程式來確認版本號是否正確。
        升級後,我們開始測試LoRa的範例程式。在LoRa函式庫中提供發送與接收的範例程式,分別名為LoRaSender與LoraReceiver,將其上傳到兩塊MKRWAN板子裡,打開序列埠監看,如下圖所示,發現兩塊LoRa正在通訊呢。

Sender 和 Receiver 測試的結果

接收與通訊大功告成!!!

這個網誌中的熱門文章

Android APP 藍芽範例說明 -- BluetoothChat

Android APP BLE範例程式 -- BluetoothLeGatt

三軸重力加速計 Accelerometer