前言

这节代码将在这一节的基础上实现

拷贝MQTT文件夹到当前工程

当前工程建个MQTT的文件夹,用于存放那个MQTT文件夹里面的内容

添加文件到里面

注意::::

实际源码拷贝位置

为了便于移植到各个模块上使用,我再次封装了一下

添加了 ConfigMqtt文件

添加头文件到 include.h

设置一下头文件路径

注意,如果不是用的我的工程底板,会报错一个地方

该函数是用来处理MQTT的数据.官方源码解析的固定写法.

这个Usart1ReadBuff 是缓存串口1数据的数组

注:我的模块是使用单片机串口和它通信

单片机程序会配置模块作为透传模式

单片机串口发送的数据传给模块,模块自动发给服务器

模块从服务器接收的数据直接通过串口传给单片机

如果大家使用的模块不是把数据直接传到了Usart1ReadBuff

可以定义一个新的数组

这节就使用这个定义的数组操作下链接MQTT实现通信

因为这样的话,大家无论使用的什么模块都可以参考

控制模块TCP连接上MQTT

自行根据自己的模块设置模块连接TCP    (MQTT服务器软件)

            case ://关闭移动场景,彻底关闭TCP/IP 连接
SendConfigFunction("AT+CIPSHUT\r\n",NULL,"SHUT OK",NULL,FunctionParseCompare,CompareValue);break;
case ://读取SIM状态正常
SendConfigFunction("AT+CPIN?\r\n",NULL,"OK",NULL,FunctionParseCompare,CompareValue);break;
case ://GPRS注册状态
SendConfigFunction("AT+CGREG?\r\n",NULL,"+CGREG: 0,1",NULL,FunctionParseCompare,CompareValue);break;
case ://是否附着了GPRS
SendConfigFunction("AT+CGATT?\r\n",NULL,"+CGATT: 1",NULL,FunctionParseCompare,CompareValue);break;
case ://设置为单链接
SendConfigFunction("AT+CIPMUX=0\r\n",NULL,"OK",NULL,FunctionParseCompare,CompareValue);break;
case ://透传模式
SendConfigFunction("AT+CIPMODE=1\r\n",NULL,"OK",NULL,FunctionParseCompare,CompareValue);break;
case ://设置APN
SendConfigFunction("AT+CSTT\r\n",NULL,"OK",NULL,FunctionParseCompare,CompareValue);break;
case ://激活移动场景
SendConfigFunction("AT+CIICR\r\n",NULL,"OK",NULL,FunctionParseCompare,CompareValue);break;
case ://连接TCP 服务器
SendConfigFunction("AT+CIPSTART=\"TCP\",\"47.92.31.46\",1883\r\n",NULL,"CONNECT",NULL,FunctionParseCompare,CompareValue);break;

无论如何你必须先用TCP连接上TCP服务器(MQTT软件)

现在发送连接MQTT协议

一,调用MqttConnectMqtt函数,我注释已经写的很明白了哈...

二,打包连接数据,然后发给TCP服务器(我刚才说了,我串口发送的数据GPRS会自动转发给TCP服务器)

  大家根据自己的修改,找到自己TCP发送数据的地方,把数据发出去

  

三,判断是否连接上了

MqttConnectMqttAck

  

连接上以后,订阅主题

  一,订阅一个主题

  

  注:实际订阅的时候可用一个数组存储订阅的主题

  假设是 char SubTopic[20]="wwwww"

  

二,订阅两个主题

判断是否成功订阅了主题

一,调用 MqttSubscribeAck函数判断

  

二,然后呢咱发送一条消息

注:以后发布消息

可直接

MainLen = MqttPublish(MqttPublishTopicStruct,"online",6);//组合发送的消息,消息:"online",消息个数6个
UsartOutStr(MqttSendData,MainLen);//发送MQTT协议数据(根据自己的TCP发送函数更改)

如果想改变消息等级为1

MqttPublishTopicStruct.qos = 1;

MainLen = MqttPublish(MqttPublishTopicStruct,"online",6);//组合发送的消息,消息:"online",消息个数6个
UsartOutStr(MqttSendData,MainLen);//发送MQTT协议数据(根据自己的TCP发送函数更改)

现在呢我测试下,

注意哈,实际上没有什么难的,

第一:先连接TCP

第二: 调用连接MQTT的封包函数,封装好连接的数据,然后把数据用TCP发出去

第三: 判断服务器返回的是不是连接成功

第四: 连接以后就可以订阅主题了,其实什么时候都可以订阅,随意

第五 根据服务器返回的数据,判断下是不是订阅成功了

注:这节代码不一定会测试通过,这节代码只是为了说明怎么让大家的模块连接MQTT的流程而已

解析接收的MQTT数据

把接收的数据返回回去

最后一个心跳包

你设置的心跳包多少时间,你就多少时间发送一次心跳包!

结语

你脑海里面永远记得,先连接TCP 服务器

必须把TCP服务器返回的数据写到那个数组里面

然后就是连接,判断,订阅判断,发送数据,解析数据啦.最后定时发个心跳包.仅此而已

各种平台的MQTT封包解包

https://docs.emqx.io/sdk_tools?category=MQTT_Clients

注意:注意:注意:注意:注意:注意:

我给大家提供的都是网络模块串口透传的代码(8266,Air202,SIM800),后面我会提供个W5500的,不过是用另一块板子

这节有些唠叨....

大家一定要看我的下一篇,

大家一定要看我的下一篇,

大家一定要看我的下一篇,

要想做的稳定,没有这么简单,我这节只是说说流程.

大家一定要看我的下一篇,

大家一定要看我的下一篇,

大家一定要看我的下一篇,

ESA2GJK1DH1K基础篇: 移植官方MQTT包,让TCP实现MQTT功能(以GPRS模块为例)的更多相关文章

  1. ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)

    前言 上节实现远程更新是更新的STM32F103C8T6的单片机 GPRS网络(Air202/SIM800)升级STM32: 测试STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定 ...

  2. ESA2GJK1DH1K基础篇: 移植源码中SmartConfig程序到自己的项目

    前言: 说明两个地方 1.点击按钮启动SmartConfig的地方 2.最终跳转的地方 说明 这节说明一下,如何把本人源码里面的SmartConfig程序移植到自己的工程 我要把所有的全部拿出来讲,让 ...

  3. ESA2GJK1DH1K基础篇: 来吧! 彻底了解一下MQTT

    首先你需要知道MQTT并不是什么高大上的事物,它只是一个软件,对就是一个软件.其实就是个TCP服务器 一,既然是TCP服务器,这个TCP服务器和咱平时做的有什么不一样呢. 首先,平时的时候咱做的TCP ...

  4. ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明

    说明 这一节说明一下基础篇APP源码里面MyMqttCilent.java这个文件的使用 新建工程 安装MQTT的jar包 implementation 'org.eclipse.paho:org.e ...

  5. ESA2GJK1DH1K基础篇: 测试APP扫描Air202上面的二维码绑定通过MQTT控制设备(兼容SIM800)

    前言 此程序兼容SIM800 如果想绑定SIM800,请把其IMEI号,生成二维码,用手机APP扫描. 实现功能概要 APP通过扫描二维码获取GPRS设备的IMEI号,然后设置订阅的主题:device ...

  6. ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试MQTT连接阿里云物联网平台

    前言 这节看一下在阿里云上实现MQTT通信是个怎样的流程 看了很多网上的教程,感觉讲的迷迷糊糊.... 其实感觉他们是对MQTT不够透彻,所以写的文章就是个比着葫芦画瓢的感觉 在我面前这东西就是玩具. ...

  7. ESA2GJK1DH1K基础篇: 测试APP使用SmartConfig绑定Wi-Fi 设备并控制设备

    前言 实现功能概要 STM32控制WI-Fi模块以AT指令TCP透传方式连接MQTT服务器, 实现MQTT通信控制. 测试准备工作(详细下载步骤请参考 硬件使用说明 ) 一,下载单片机程序 二,安装A ...

  8. ESA2GJK1DH1K基础篇: Android连接MQTT简单的Demo

    题外话 我老爸也问我物联网发展的趋势是什么!!!!!! 我自己感觉的:(正在朝着 "我,机器人" 这部电影的服务器方向发展) 以后的设备都会和服务器交互,就是说本地不再做处理,全部 ...

  9. ESA2GJK1DH1K基础篇: 关于各大物联网平台的MQTT通信

    前言 这节稍微唠叨点 其实我很长时间都没有出怎么连接现成的物联网平台的教程, 一直写的是教给大家自己搭建服务器,主要原因是因为我感觉连接现有的学不到东西. 现在出这种教程,是因为发现确实很多人喜欢用. ...

随机推荐

  1. [转帖]CHROME开发者工具的小技巧

    CHROME开发者工具的小技巧 https://coolshell.cn/articles/17634.html 需要仔细学习看一看呢. 2017年01月19日 陈皓 评论 58 条评论  64,08 ...

  2. [跨域问题]ssm+vue前后台分离跨域问题解决方法

    跨域未解决时: Access to XMLHttpRequest at 'http://localhost:8080/vue/findall from origin 'http://localhost ...

  3. Key ssd_300_vgg/block3_box/L2Normalization/gamma not found in checkpoint的解决方案

    在Tensorflow下使用SSD模型训练自己的数据集时,经过查找很多博客资料,已经成功训练出来了自己的模型,但就是在测试自己模型效果的时候,出现了如下错误. 2019-10-27 14:47:12. ...

  4. Java学习:常用函数接口

    常用函数接口 什么是函数式接口? 函数式接口,@FunctionalInterface,简称FI,简单的说,FI就是指仅含有一个抽象方法的接口,以@Functionalnterface标注 注意:这里 ...

  5. 2019-11-29-VisualStudio-好用插件集合

    原文:2019-11-29-VisualStudio-好用插件集合 title author date CreateTime categories VisualStudio 好用插件集合 lindex ...

  6. 在VS2019创建WebForm程序,开个箱

    现在公司用的是VS2010+ASP.NET WebForm + DevExpress控件做系统开发,好老好老了,没办法,只能在这里尝一尝新鲜的味道. TMD,还以为马上创建,谁知还有一关!!! 还是那 ...

  7. tengine 基于权重负载均衡的简单配置

    环境如下: 资源服务器_1:192.168.10.10  centos 7  tengine 2.3.0 资源服务器_2:192.168.10.129  centos 7  tengine  2.3. ...

  8. 用Python分析国庆旅游景点,告诉你哪些地方好玩、便宜、人又少

    注:本人参考“裸睡的猪”公众号同名文章,学习使用. 一.目标 使用Python分析出国庆哪些旅游景点:好玩.便宜.人还少的地方,不然拍照都要抢着拍! 二.获取数据 爬取出行网站的旅游景点售票数据,反映 ...

  9. ES6 Class(类)(九)

    一.Class类1.构造函数 constructor(){} 说明:a.如果没有重新定义带参数的构造函数,类会默认为我们提供一个不带参数的隐式构造函数b.在创建类的实例时会自动调用类中的构造函数 2. ...

  10. iOS7向开发者开放的新功能汇总

    转自:http://www.25pp.com/news/news_28002.html iOS7才放出第二个测试版本,我们已经看到了不少的新功能和新改变.最近,科技博客9to5Mac将iOS7中向开发 ...