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