概述
几个注意点:
初始化的时候发送 "AT+NSOCR=STREAM,6,56000,1rn","OK" 经常会失败,原因是:下图,第一次成功了但是没检测到,以后就可能一直返回+CME ERROR: 4
目前碰到待解决的问题:
1、 给onenet发数据,平台可以收到,但是收onenet的时候总是总是"IPD" not found,打印bc28接收时发现,明明一整帧是
+NSONMI:1,47(收到消息+NSONMI:<socket>,<length>)
1,183.230.40.39,6002,4,20020000,47 (读取消息AT+NSORF=<socket>,<req_length> :返回<socket>,<ip_addr>,<port>,<length>,<data>,<remaining_length>)
OK
却总是收到类似下面的不完整帧,但是感觉就算收到上面那样一帧也不太对,后面没有onenet下发的topic和消息体
+NSONMI:1,47
9,6002,4,20020000,0
OK
解决思路:直接监听bc28的发送引脚,不用mcu打印,先定位是mcu串口收不全还是在bc28和onenet上出的问题?从下图入手
从上图入手后,再用抓包工具看是mcu串口读取慢了,还是onenet发的快了?
全局搜 NSORF ,发现任何情况都收100个了,应该够啊
下面这个接收函数有问题,联系上下文,BC35_cnt刚被清零,BC35_WaitRecive怎么出现REV_OK情况?
函数具体内容是:
_Bool BC35_WaitRecive(void)
{
if(BC35_cnt == 0){ //如果接收计数为0 则说明没有处于接收数据中,所以直接跳出,结束函数
// UsartPrintf(USART_DEBUG,"%s%drn",__FILE__,__LINE__);
return REV_WAIT;
}
if(BC35_cnt == BC35_cntPre) //如果上一次的值和这次相同,则说明接收完毕
{
BC35_cnt = 0; //清0接收计数
return REV_OK; //返回接收完成标志
}
BC35_cntPre = BC35_cnt; //置为相同
return REV_WAIT; //返回接收未完成标志
}
或者把bc35恢复出厂设置试试?
2 、发现就算下发不完整帧,mcu也不是一直能接收到,多测几次后,发现只有上传一次onenet数据,才能下发一次
解决思路:看onenet平台提供的资料和mqtt协议,是不是协议就是这么规定?或者是因为下图,下发的那帧没有读取完全,导致收不到URC
onenet提供手册 新版
3、JLINK仿真程序的时候,总是有的断点进不去,程序显示还在运行,其实已经死了
解决思路:不用例程,把例程移植到自己常用的环境下,比如cube+keil5+stlink试一下? 例程在这里,仅供参考(mcu是rbt6,+bc35-g,+移动物联网通信,+onenet,+mqtt)
其它资料:bc35中文手册
相关参考:mqtt系列博客,感觉详细 另一系列 移远官网 BC28接入onenet bc28指令发送流程 虚拟软件模拟MQTT和onenet收发
4、参考上面的链接直接用at串口发数据到onenet,接收没问题,就是一发送就返回+QMTSTAT: 0,1,连接断开了,数据也没上去,看别人说好像是要发完立刻再发连接 也好像是个bug
断开原因找到了,是因为格式不对,发送AT+QMTPUB=0,0,0,0,"$dp"之后不能直接就发json格式串,而是应该在格式串前加一些东西,比如固定和可变帧头(如果平台数据流 接收必须要符合给定的格式,给的那个软件可以都显示)
大概发送流程:
ATI
Quectel
BC28
Revision:BC28JAR01A10
OK
AT+QMTCFG="version",0,4
OK
AT+QMTOPEN=0,"183.230.40.39",6002
OK
+QMTOPEN: 0,0
AT+QMTCONN=0,"693738909","409001","k6TYrSqT9T4r1f2Cz0aafZUw=fk="
OK
+QMTCONN: 0,0,0
AT+QMTPUB=0,0,0,0,"$dp"
>:{"datastreams":[{"id":"LED","datapoints":[{"value":11}]}]}
OK
+QMTPUB: 0,0,0
5、发现不同模块和不太固件对同一指令反应不同,遇到了用BC26配置MQTT可以,用BC35G配置不可以
上图BC35-G出现的错误码50是指参数不正确
通过在技术交流群翻阅,发现BC35GJCR01A01.fwpkg这个固件支持mqtt配置,如下图,而我现在用的是BC35GJBR01A01.fwpkg,固件或者工具找不到可以私信我
担心BC35GJC的固件不能在硬件BC35GJB上运行,又找了一个
所以要升级一下,升级参考
大概流程先看一下设备型号和版本(以BC28做升级举例)
再看一下硬件接口 BC28是升级和通信都用主串口 BC35-G也是一样
升级出现了问题
换了个工具还是不行
上面原因是升级的软件放到中文路径下了
.NET Framework 下载地址 https://dotnet.microsoft.com/download/dotnet-framework/net472
有时候 出粗Sorry - something went wrong - No reponse from UE after sending SendData
还有一些奇怪问题,解决方法参考 其实是因为主程序是自己写的,升级的时候里面串口还在同时发,对升级产生干扰
MQTT simulate-device使用过程:
下载链接 https://open.iot.10086.cn/doc/art194.html#43
填入信息:第三行是 rR5dycBmq10RJ9YGORz=vtcM3Tc=
输入:{"datastreams":[{"id":"SMOKE","datapoints":[{"value":12}]}]} 是一个参数
{"datastreams":[
{"id":"SMOKE","datapoints":[{"value":14}]},
{"id":"FIRE","datapoints":[{"value":0}]},
{"id":"TEMP","datapoints":[{"value":25.5}]},
{"id":"CO","datapoints":[{"value":37}]}]} 是多参数
最后
以上就是无语路人为你收集整理的STM32通过BC28用mqtt协议连接onenet及simulate-device的使用的全部内容,希望文章能够帮你解决STM32通过BC28用mqtt协议连接onenet及simulate-device的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复