首先说下NB卡,NB卡简称窄带物联卡,与4G卡不一样。
NB卡是低流量,多次数触发的,用NB卡的设备适合不移动、低功耗。而4G卡是大流量大数据的,使用该卡的设备适合移动型、偏远地区等。
再说下BC28这NB模块板子,全网通模组。我用的电信NB卡,秒入网秒连接onenet,有的大佬说移动的更适合,电信的会限制某些IP,这个情况没遇到过,所以不好下定论了。
做过NB模块的都知道,目前NB还未出现自带MCU的模组,大多都是单片机AT指令去驱动NB。
又由于AT的各种版本的加入,由最开始的入网、SMS、PSM到添加的TCP、CoAP再到现在09版本的MQTT、LWM2M。
固定的AT到现在的OpenCPU开发,OpenCPU其实也是一种可编译的AT编程而已。
罗嗦了这么多,只是简略的介绍下BC28的产生历程,熟悉这些的请自动忽略。
总结下“BC28 + ONENET + MQTT ”这个项目遇到的问题点:
1.单片机+BC28,每次做“AT+QMTPUB=xxxx”后会出现“>”,然后按照规格书说需要再加“0x1A”才可以发送数据。
这个是一位大佬提供的思路:
char str[100] = {0};
int len = 0;
len = sprintf(str,"Hello world");
str[len++] = 0x1A;
uart_send(str,len);
解决之法:其实07及以后的版本里,都是有这么一个AT指令的:AT+QMTPUBEX=0,0,0,0,TOPIC,Data
这个直接发送数据,不用等待什么反馈,岂不是很方便吗?
2.BC28不常遇到的问题,但偶尔会遇到。
a.当"AT+QMTCONN=0,clientid,user,password"时,会出现"+QMTCONN:0,2 ","+QMTSTAT: 0,3",那说明你的BC28没有从基站进入ip,解决的方法:1.是不是NB卡欠费了;2.检查NB卡有没有信号;3.基站是不是出问题,如附近大片区域停电导致的(我就是遇到这种情况的。)
b.当一切可以运行了,可以正常发送数据到服务器,然后突然给你反馈个“+QMTSTAT: 0,1”,这说明断开ONENET了,需要重新连接,估计后面固件版本会优化。重新连接的逻辑处理:先QMTOPEN再QMTCONN,此时发现会有ERROR出现,那么先QMTCLOSE,然后再QMTOPEN、QMTCONN等操作。
c.上面的情况如果都没有出现,那么BC28发送基本没有问题,而接收数据这个就有个大问题了,单片机不仔细编程的话,很难找出问题点了!
当你发现发送规定的AT指令都会反馈"OK"ERROR",这说明UART串口没有任何问题,但是当接收服务器发发来的数据,却不能收到+QMTRECV带来的数据,此时你可能发现TOPIC没有任何错误呀,反馈也是"OK",按照循序走,发送也正常的呀!但是容易疏忽的是你的SUB(订阅)的TOPIC有没有带双引号,如果没有带双引号,那么会订阅不成功,必须要带双引号才行。
这个问题困扰了我许久,我在串口助手也试着都不用带双引号的参数,结果就是订阅不成功,其他都非常正常,这是目前BC28的一个隐藏的bug。
目前只有这么几个问题,如果还有别的问题出现,我会及时更新这篇文章,也欢迎大家在下方留言,说说你出现的问题或者解决方法。
需要最新的BC28JAR01A09或者重温BC28JAR01A07,还有BC28_OpenCPU_Hi1_SDK_V1.0,可以点击下面的链接:
BC2807和BC2809版本以及BC28_OPCPU_V1.0