一、介紹
物聯網應用范圍日漸廣泛,小到手表大到各種家電甚至汽車,可見連接因特網的好處非常之多,實時監控、記錄、統計裝置各種信息,甚至遠程控制都可以快速達成,但這都必須以「有因特網」作為前提。目前物聯網裝置通訊方式大多采用Wi-Fi 無線網絡,它擁有高速、大流量的優點,但同時也存在著基礎建設較麻煩、訊號覆蓋范圍短的缺點,應用范圍如智能家電(e.g.電視、冰箱、照明燈、風扇等);而需要時常移動的裝置則會采用4G/5G網絡,具有高速、大流量、基礎安裝方便等優點,但相對它的資費較為昂貴、續航力較低(e.g.手機)。
因此,除了采用前述兩種通訊方式外,我們還可以選擇目前物聯網盛行的NB-IoT(Narrowband Internet of Things)通訊方式,它是建立在LTE 基地臺基礎之下,與4G/5G一樣透過電信商的基地臺通訊,省去自行維護及建置基礎建設的流程,并且具有流量不需要太大、較便宜的資費、方便的基礎建設以及省電的特性,例如:在郊區收集大量感測資料并上傳至云端分析。
那么我們該如何實際使用NB-IoT 呢?本篇文章就要帶大家實作NB-IoT物聯網裝置,將傳感器數據透過NB-IoT 模塊上傳至云端平臺,并且透過云端平臺遠程控制裝置RGB LED。其中我們使用了 Linkit7697 結合OLED、PM2.5懸浮微粒傳感器PMS5003,NB-IoT模塊AM7020以及相關擴展板來完成此次的NB-IoT 項目;軟件的部分使用BlocklyDuino,它提供了圖塊式的程序設計方式,對于初學者來說更加容易理解與實作。
●材料清單
Circus7697D 雙頻 2.4G/5G
7697:bitbreakout 擴展板
MbitBotLite 擴展板
PM2.5 濃度傳感器 PMS5003
NB-IoT 通訊模塊 AM7020
二、BlocklyDuino使用教學
●安裝程序
在BlocklyDuino的大家庭中,我們使用的是BlocklyDuinoF1,大致上分成幾個步驟,如下所示:
1. 下載BlocklyDuinoV3主程序、其他的「開發板核心函式庫」與獨立制作的「擴充積木包」,共三個壓縮文件案。
2. 接著將這些壓縮文件解壓縮后,依序將「開發板核心函式庫」與「擴充積木包」文件夾內的檔案,復制并覆蓋到BlocklyDuino V3的文件夾內。
3. 完成上述步驟即完成BlocklyDuinoF1的安裝,若您之前已安裝過BlocklyDuino F1,為了新增5G Wi-Fi的功能,只需下載新的「擴充積木包」,并同樣解壓縮覆蓋即可,如下圖所示:
4. 最終完成圖
完成圖
三、NB-IoT 到底是什么?
(一)NB-IoT 介紹
NB-IoT是窄頻物聯網(NarrowbandInternet of Things)的簡稱,使用的是長期演進技術(LTE)標準的一部份,是由3GPP訂定的LPWAN無線電標準,為了讓行動設備及服務的范圍可以更遠,NB-IoT特別著重在室內的覆蓋率、低成本、長電池壽命以及高連接密度。
如下圖所示,可將物聯網架構分成三層,即「感知層」、「網絡層」、「應用層」。「感知層」負責收集各種感測資料(e.g.使用Arduino結合SHT31溫濕度傳感器);「網絡層」提供各種傳輸數據方式,能進一步將感測數據傳遞到云端伺服(e.g. NB-IoT、Wi-Fi、4G、5G等);「應用層」則是取得服務器傳感器數據并進一步應用在各種需求上。
有了架構定義之后我們就能知道NB-IoT屬于網絡層,與WiFi、4G/5G同樣是一種提供傳輸數據的通訊方式。
物聯網架構
下圖列出了目前市面上的物聯網通訊的速度及傳輸距離,其中NB-IoT分類為LPWAN(Low-Power Wide-Area Network,低功率廣域網),是一種用在物聯網(例如以電池作為供電來源),可以用低速率進行長距離通訊的無線網絡,它的特性非常適合運用在環境監測、智慧建筑、智慧停車等長距離傳輸、低功耗、低速率的應用上。
物聯網通訊的速度及傳輸距離圖表
下圖為各種LPWAN的比較圖,其中NB-IoT與4G同樣屬于國際標準,相比4G雖然速度慢了許多,但訊號強度更強、模塊成本低、并且非常省電,電池運作時間可長達10年。
LPWAN比較圖
了解NB-IoT資費也是重要的一環,以下圖表大略計算了NB-IoT的每月資費以及參考情境,參考情境使用MQTT通訊協議,一個數據點可以看作一個傳感器所上傳的數值,使用者可以根據這些情境大約估算每月數據用量。
NBIo-T月費與參考情境
(三)特性與應用
以下整理出NB-IoT的特性與應用供大家參考:
1. 特性
超低電耗
較低的模塊成本
不需要自建基礎建設
需要支付月費
有基地臺之處即可使用
基站連接速度慢
不適合移動載具
適合各裝置點分散,并且位于郊區
適合沒有市電的環境
應用
農業物聯網:溫室農棚、花卉、養殖
電力設備監控:電塔、變電箱、風力機組、太陽能電廠
公用設施:水利設施、瓦斯水表
智慧城市:智慧共桿、共享腳踏車停車樁、汽車收費
環境生態:生態保護、環境監控
NB-IoT 專案
接下來就要與大家分享本篇NB-IoT 實作項目-空氣質量檢測,首先會跟大家介紹本次項目會使用到的材料,接著是項目的硬件裝置連接與程序設定介紹。
(一)材料介紹
1.AM7020 NB-IoT 通訊模塊
AM7020 是一款 NB-oT 通訊模塊,它在腳位及大小皆能完整相容于Arduino MKR系列產品。內部系統芯片為聯發科MT2625,模塊為 SIMCOM 的SIM7020E。采 UART 接口運行 AT Command,更方便中低階處理器使用。
頻段支持主要電信商,在 SIM卡的選用上更為彈性便利。AM7020不僅支持寬電壓輸入外,Grove UART的防呆插槽及附加的 Arduino 范例程序更能讓入門用戶輕松跨足NB-IoT領域;兼具低功耗、低成本、覆蓋廣等優勢的AM7020,適用于各種場域的物聯網裝置應用。
AM7020硬件詳細請參考之前的文章。
2. IoT 定量制SIM 卡
IoT 定量制SIM 卡
此IoT定量制SIM卡提供30MB流量,超過將自動切斷數據聯機,下載速度最高5Mbps,須搭配支持4G 或NB-IoT 之終端設備。
3.Circus 7697D
Circus7697D 雙頻 2.4G/5G (相容 LinkIt 7697)?
Circus7697D 雙頻 2.4G/5G (兼容 LinkIt 7697) 特別增加連接5GHz Wi-Fi頻段功能,相較2.4Ghz擁有干擾較少、速度更快的優點,并完全兼容之前的LinkIt 7697。
4.MbitBot Lite 擴展板
MbitBotLite 擴展板
MbitBotLite 擴展板最大特色是具備18650鋰電池供電,并且可透過Micro USB充電,讓項目能獨立穩定運作,其中還提供了多達20Pin的擴充IO,并且輸出電壓支持3.3/5V,板上還內建了兩顆WS2812以及一顆蜂鳴器,使用它作為物聯網裝置底板是非常合適的選擇。
5.7697:bit breakout 擴展板
7697:bitbreakout 擴展板
7697:bitbreakout 擴展板可將 Circus 7697D轉換成micro:bit形式,并且完全兼容各種開發環境,在正面還板載兩個按鈕及1.3吋的OLED,讓使用者能夠做出更多有趣的應用。
6. PM2.5濃度傳感器 PMS5003
PMS5003是一款可量測PM1.0、PM2.5、PM10 懸浮微粒的傳感器,通訊方式使用UART,設定成自動模式將會主動傳送感測數據,不需被動請求感測數據,下圖表為PMS5003接腳說明,出廠默認為自動模式,最終只需使用到三個IO(VCC、GND、TXD)。
PMS5003接腳說明
(二)實作步驟
1. 硬件接線表順序
首先將18650電池裝入MbitbotLite(注意正負極標示),接著將Circus 7697D插入7697:bit breakout 擴展板,再將7697:bit breakout 擴展板插入Mbitbot Lite,PMS5003、AM7020請對照以下表格連接
2.AM7020 BlocklyDuino積木使用說明
接下來將詳細說明AM7020BlocklyDuino各個積木的功能及使用方式。
首先,打開BlocklyDuino并找到左側ICSHOP里面的AM7020積木,點開后如下圖所示:
紫色區塊為AM7020 NB-IoT相關積木,負責將AM7020初始化,并連接到電信商基地臺。
藍色區塊是專為AM7020量身打造的MQTT積木。
以下將依照上圖中的編號說明各個積木的功能及參數:
1. 初始化AM7020 模塊,Baud(鮑率)推薦選擇115200,內部已將UART設定為7697Serial1(Hardware Serial,7697 IO6、IO7);重起腳位對應到AM7020 模塊EN Pin(用來控制AM7020 Hardware Reset);此積木只需執行一次。
2. 聯機到NB-IoT 基地臺,選擇對應的電信商即可,此積木只需執行一次。
3. 用來檢查AM7020NB-IoT 是否與基地臺聯機,回傳是或否,推薦在重復循環里檢查。
4. 用來將AM7020NB-IoT重新聯機到基地臺,若與基地臺斷線可使用此積木快速重新聯機。
5. 首次聯機到MQTTBroker,輸入MQTT Broker位置(字符串)、端口(整數,一般為1883)、MQTT ID(字符串)(注意此ID不可與其他同一Broker內裝置相同,盡量使用任意字符串加上隨機隨機數組合MQTT ID [e.g. icshop_<隨機隨機數>]),若Broker需要賬號密碼(字符串)驗證則需填入,否則留空即可,KeepAlive(整數,單位秒)為MQTT 發送Heartbeat的間隔,用來確保與Broker保持聯機,此數值可依照Broker規范調整,以AdafruitIO 為例,5分鐘內若都沒有與Broker傳輸一次則Broker將自動與Client斷開連接,即若上傳數據的間隔超過5分鐘,則KeepAlive必須設為低于5分鐘(<300s,建議270s)。
6. MQTT 訂閱主題(字符串),須注意此訂閱Qos只支持0。
7. MQTT 發布訊息,主題(字符串),訊息(字符串),須注意此發布Qos只支持0。
8. 當收到MQTT 訂閱的主題訊息時會自動執行此積木內的程序(注意須搭配第11項積木),定時呼叫「MQTT處理」積木,只有此積木執行時才會檢查是否收到訂閱數據。
9. 用來檢查MQTT 是否與Broker聯機,回傳是或否。
10. 用來將MQTT 重新聯機到Broker,若與Broker斷線可使用此積木快速重新聯機。
11. 處理MQTT背景程序,負責檢查是否收到訂閱數據并呼叫第8項積木內容;依照第5項積木參數KeepAlive 定時向Broker發送Heartbeat以維持聯機狀態(須注意盡量避免過久呼叫此積木,否則將無法實時接收訂閱數據)。
12. 回傳接收到訊息的主題名稱,此積木用來搭配第8項積木,依照主題名稱判斷訊息來源。
13. 回傳接收到的訊息,此積木用來搭配第8項積木。
以上就是關于AM7020BlocklyDuino積木說明,若是想了解其詳細特性可參考上述說明;如果只是一般使用的話,可依照以下范例程序操作即可。
3. 設定云端平臺
此次項目使用AdafruitIO作為云端平臺,首先要設定Group(群組)與Feed(節點),設定的方式如下圖所示
接下來是建立Dashboard(儀表板),請參照下圖設定。
4. 程序設計
以上我們為大家介紹了物聯網的概念,與NB-IoT的特性及用途,并且認識此次項目的各個零件功能與用途,以及了解AM7020積木的使用方式與注意事項,接下來我們將結合前述的信息及零件完成NB-IoT 項目。
●目標功能
1.將PMS5003PM1.0、PM2.5、PM10懸浮微粒數值顯示在OLED上。
2.將AM7020聯機狀態顯示在OLED上(第一行)。
3.每分鐘將PMS5003PM1.0、PM2.5、PM10懸浮微粒數值上傳(Protocol使用MQTT)至云端AdafruitIO平臺。
4.使用AM7020 MQTT訂閱兩個AdafruitIO平臺顏色選擇器主題,用以控制Mbitbot Lite板上兩顆WS2812 LED燈。
5.接收到云端訊息時,利用蜂鳴器發出「嗶」一聲通知使用者。
●程序初始化
在開發板7697初始化里,我們只需做以下三件事情即可:
1. 建立程序所需變量。
(1)變數timer(無號長整數),初始值0,用來記錄發布訊息的時間間隔。
(2)變數oled_timer(無號長整數),初始值0,用來記錄更新OLED的時間間隔。
2. 初始化MbitbotLite上的兩顆WS2812 LED、初始化OLED、AM7020、將AM7020聯機到基地臺,過程中透過OLED顯示聯機狀態(顯示在OLED第一行)。
3. 設定MQTT 各項參數(請務必將MQTTID、賬號、密碼改為自己的,勿依照下圖范例輸入一樣的數據)并聯機到MQTT Broker(范例中使用AdafruitIO)、訂閱兩個顏色選擇器主題(icshop.rgb-l、icshop.rgb-r)、顯示MQTT聯機狀態、歸零發布定時器。
●重復執行
1. 讀取PMS5003傳感器數據
2. 檢查AM7020NB-IoT聯機狀態,若斷開聯機則更新OLED顯示狀態并重新聯機到基地臺。
3. 檢查MQTT聯機狀態,若斷開聯機則更新OLED顯示狀態并重新聯機到MQTTBroker,聯機完成后重新訂閱主題(icshop.rgb-l、icshop.rgb-r)。
4. 執行MQTT 處理用以實時接收訂閱數據。
5. 檢查是否已到達發布訊息的間隔并發布數據到各主題上(icshop.pm1、icshop.pm2-5、icshop.pm10)。
6. 檢查是否已到達更新OLED的間隔并更新OLED顯示內容(顯示MQTT聯機狀態、PM1.0、PM2.5、PM10感測數值)。
●處理收到的MQTT訂閱數據
1. 當收到訂閱數據時透過蜂鳴器發出「嗶」一聲(聲音長度300ms)。
2. 判斷消息主題(icshop.rgb-l、icshop.rgb-r)并控制WS2812LED顏色。
以上就是所有的積木程序代碼,讀者可以依照上述程序代碼自行操作或直接下載所有范例程序。
https://github.com/CIRCUSPi/AM7020_X_BlocklyDuino
●查看結果
回到云端平臺后我們可以查看PM1.0、PM2.5、PM10傳感器數據,長期觀察空氣質量,也可透過右邊兩個顏色選擇器修改裝置上的RGB LED燈顏色;了解了遠程控制的方式后,我們也可將它改為控制其他裝置,例如:郊區的路燈、農田中的灑水器、遮陽簾、排風扇等裝置。
五、小結
NB-IoT 日漸普及化,并且符合國際標準,擁有不需要自建基礎建設等多項優勢,讓我們可以將物聯網裝置任意安裝到各種地方,不再需要擔心網絡來源、管理以及穩定性的問題,這些都是由電信商維護,我們只需要把重點放在數據收集、分析及應用上,并且藉由搭配NB-IoT模塊AM7020,積木軟件BlocklyDuino 就能輕松使用NB-IoT 網絡技術,對于初學者來說更加容易上手。
編輯:黃飛
?
評論
查看更多