NBIoT与MQTT传输与接收

电子说

1.3w人已加入

描述

NBIoT可以大幅降低企业布署设备的WiFi需求,也可避免因为场域WiFi不稳定所造成的问题,那么NBIoT要如何实做?

本文将会以NBIoT传输MQTT,并以计算机的MQTTLens进行接收为例,说明整个传输接收流程。

首先我们必须准备NBIoT的模块,以笔者所开发的ESP32开发整合版就有留NBIoT接口,我们的NBIoT使用的芯片是基于联发科(MTK-2526)的BC26模块,虽然他是USB外型,但并非USB传输格式,只是我们帅气的黄董认为做成USB外型比较坚固耐用,并且可以后续进行串接。

MQTT

关于上面的扩充版,详细规格数据可以参考附件:

一、NBIoT基础设定:

目前NBIoT大多采用ATCommand通讯,若读者已经取得上面的扩充版及任何的NBIoT SIM卡,那就可以开始下面的流程。

1. 在ESP32上安装ATCommand沟通程序:

此程序会将ESP32的序列通讯输入转至NBIoT(Serial2 RX:16、TX:17)中,这样我们就可以手动来下达AT命令

2. ATI:ATI是查询系统版本,不过我们会用来测试BC26是否正常,输入ATI后,会得到BC26的回复如下图。若无响应,那就必须检查模块是否有插好。另外就是ESP32 1.0.6的版本也会造成无法响应,因此先选择1.0.4。

MQTT

3. AT+QCCID :此指令用于检查SIM卡状态,一般来说,会列出该SIM卡的卡号,如下图,若SIM卡未安装,则会显示ERROR

MQTT

4.AT+QCGDEFCONT?:询问APN设定方式,由于不同系统商会有不同的APN(APN, Access Point Name)设定,例如下图就是以中华电信或远传电信为例,两者都采用"IPV4V6","internet.iot"为APN,当我们利用这个指令查询时,就会得到这个结果,下一步就是利用这个指令来设定这张NBIoT模块的APN。要注意的是这里的「?」一定要使用半角「?」不可使用全角「?」。

MQTT

5.AT+QCGDEFCONT=<>:上一步询问SIM卡的APN后,我们将APN名称放到指令最后,例如以远传NBIoT为例,其指令如下「AT+QCGDEFCONT="IPV4V6","internet.iot" 」,

MQTT

到此为止,就完成NBIoT的设定工作,以上五个步骤只须做一次,以后NBIoT模块只要开机会就自动以APN寻找当地有服务的基地头,并完成网络注册(上网)。

二、NBIoT数据传输:

当NBIoT完成APN设定后,就可以准备传输资料了,请依照以下步骤。

1. AT+CEREG? :询问基地台注册状态,也就是否有找到服务的基地台,若响应为「+CEREG: 0,1 」代表注册完成,可以准备传输资料,若是「+CEREG: 0, 0」或「+CEREG: 0,2 」都是代表无法上网,可能是讯号不佳,或者当地无服务等问题。

MQTT

2.AT+CESQ:询问网络状态,也就是询问网络讯号强弱,以下图而言,第一个数字为39,代表网络讯号还不错,数字为0~63之间,越大代表网络讯号越好,10以下就必须注意传输可能会很不稳定,建议更换布置地点或增加天线强度,还有就是「99」则是故障的意思。

MQTT

MQTT

到这里我们已经确认NBIoT已经完成联机,下一步我们以MQTT联机到免注册的Broker:mqtt.eclipseprojects.io,进行一次的推播为例。

3. AT+QMTOPEN=0,"<>",<>:NBIoT开启MQTT服务器,若是使用「eclipseprojects」的话,指令全部为「AT+QMTOPEN=0,"mqtt.eclipseprojects.io",1883」,此时响应除了OK之外,再等候几秒就会得到服务器的响应「+QMTOPEN: 0,0」,代表服务器已经收到要求,正在等候联机。

MQTT

4.AT+QMTCONN=0,"<>":联机到MQTT服务器,这里的ClientID用随机数即可,例如本例为「AT+QMTCONN=0,"ESP32-1234567890"」,如果两个装置使用相同的ClientID就会无法联机,不过这里要注意,从步骤3的AT+QMTOPEN到 AT+QMTCONN,时间不可超过60秒(没有详细计算),若时间太久,服务器会关闭,联机就会失败。若服务器的回应是「+QMTCONN: 0,0,0 」代表联机成功,可以推播主题了。

MQTT

5.AT+QMTPUB=0,0,<>,<>,"<<你的主题>>","<<内容>>":将内容推播到你的主题内,例如我要将温度「28」推播到主题「yourTopic/class205/temp」时,我的指令为「AT+QMTPUB=0,0,0,0,"yourTopic/class205/temp","28"」,代表我要用qos=0,不要retain传送28到主题「yourTopic/class205/temp」内,若服务器回复为「+QMTPUB:0,0,0」就代表服务器已经收到数据。

MQTT

6. 到MQTTLens查看订阅主题:此时到计算机的MQTTLens(或手机MQTTDash等APP)查看是否有收到订阅的资料

MQTT

用NodeRed接收,并用Dashboard的Gauge呈现

MQTT

7. AT+QMTCLOSE=0:关闭MQTT服务器联机,当传输完毕后,若短期内不会再使用,可以关闭与MQTT的联机,节省电源。

MQTT

到此为止,我们就完成一次的MQTT推播,当然啦,这次我们是手动传输,目的是让读者了解MQTT的传输流程,未来系统要实际使用时,要写一个自动传输的程序,这部份后续再分享。

除了用MQTTLens来接收之外,也可以利用NodeRed来接收并储存数据,并可以利用Dashboard来呈现,Nodered可以说是搭配MQTT最好用的工具了。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分