301-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-官方MQTT代码测试
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
说明
这节测试一下官方提供的MQTT代码.
如果想知道MQTT的实质大家伙一定要看完上一节,
其实MQTT服务器就是个TCP服务器, 就是负责数据转发,
不过要让MQTT服务器转发设备之间的数据,就需要按照MQTT协议来.
现在各个厂商都有云平台,然后支持MQTT接入,大家伙只需要知道,
连接MQTT实际上就是先使用TCP连接上TCP(MQTT)服务器,然后发送MQTT连接协议
连接协议无非就是把ClientID(设备唯一码),用户名,密码等信息打包成协议发送给MQTT服务器.
然后就连接上了,然后设备就靠订阅主题接收数据, 靠发布主题来发送数据.
无论怎么着,实际上只是TCP通信, 只不过通信的数据格式是MQTT协议.
一般单片机都是使用这个库(以前写的移植教程被我删了...后面补上)
https://www.emqx.com/en/mqtt-client-sdk
准备工作
安装好NB卡和天线
测试1
1,找到mqtt的例程,点进去这函数
2,提示
大家伙不要被什么onenet啦,aliyun啦迷惑...始终记住连接MQTT无非就是先连接TCP,
然后clientid,用户名,密码啥的,只不过各个平台组装这些参数规则不一样而已.
3,测试连接我的MQTT服务器(自建的服务器)
根据下面的修改一下
MQTT的IP地址填写的域名:mnif.cn 填写IP地址也可以:47.92.31.46
3,发送数据改下(去掉官方那些花里胡哨的)
len = sprintf(mqtt_payload,"%s", "1111111111111111111111111");//发送的数据 message.payload = mqtt_payload; //发送的数据 message.payloadlen = len;//发送的数据长度 //发布消息; 发布的主题:11223344 MQTTPublish(&mqttClient, "11223344", &message);
4,编译
KeilBuild.bat ec616_0h00-mqtt_example
5,下载(我使用keil下载)
6,打开个MQTT调试助手,连接同一个MQTT服务器, 订阅下11223344这个主题
然后每隔一段时间就会收到模组发送的消息
阿里云的demo
这个后面会单独写教程, 现在官方提供的例程没有断线重连,测试了也没啥用,所以就不测试了
测试2
1,上面那个例程就只是简单的连接和发送数据
下面这个demo更接近了点实际应用,接收和发送数据都单独使用的任务,发送数据使用了队列
2,把测试函数替换为 mqtt_demo_send_task_init
3,改为自己的服务器信息
4,每隔一段时间发送数据是在这里(实际是把消息存储到队列)
去掉花里胡哨的以后
5,从队列提取消息并发送
6,接收消息(这里面的例程都是调用的这个函数接收数据)
咱最终处理数据就是在这个里面
md->topicName = aTopicName;
//主题长度是 md->topicName->lenstring.len
md->message = aMessage;
//消息长度是 md->message->payloadlen