一、介绍
物联网应用范围日渐广泛,小到手表大到各种家电甚至汽车,可见连接因特网的好处非常之多,实时监控、记录、统计装置各种信息,甚至远程控制都可以快速达成,但这都必须以「有因特网」作为前提。目前物联网装置通讯方式大多采用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 网络技术,对于初学者来说更加容易上手。
编辑:黄飞
评论
查看更多