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
 
 

 

posted on 2022-06-10 19:34  广源时代  阅读(366)  评论(0编辑  收藏  举报

导航

支付宝 QQ群