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