ESA2GJK1DH1K基础篇: 移植官方MQTT包,让TCP实现MQTT功能(以GPRS模块为例)
前言
这节代码将在这一节的基础上实现

拷贝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模块为例)的更多相关文章
- ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)
前言 上节实现远程更新是更新的STM32F103C8T6的单片机 GPRS网络(Air202/SIM800)升级STM32: 测试STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定 ...
- ESA2GJK1DH1K基础篇: 移植源码中SmartConfig程序到自己的项目
前言: 说明两个地方 1.点击按钮启动SmartConfig的地方 2.最终跳转的地方 说明 这节说明一下,如何把本人源码里面的SmartConfig程序移植到自己的工程 我要把所有的全部拿出来讲,让 ...
- ESA2GJK1DH1K基础篇: 来吧! 彻底了解一下MQTT
首先你需要知道MQTT并不是什么高大上的事物,它只是一个软件,对就是一个软件.其实就是个TCP服务器 一,既然是TCP服务器,这个TCP服务器和咱平时做的有什么不一样呢. 首先,平时的时候咱做的TCP ...
- ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明
说明 这一节说明一下基础篇APP源码里面MyMqttCilent.java这个文件的使用 新建工程 安装MQTT的jar包 implementation 'org.eclipse.paho:org.e ...
- ESA2GJK1DH1K基础篇: 测试APP扫描Air202上面的二维码绑定通过MQTT控制设备(兼容SIM800)
前言 此程序兼容SIM800 如果想绑定SIM800,请把其IMEI号,生成二维码,用手机APP扫描. 实现功能概要 APP通过扫描二维码获取GPRS设备的IMEI号,然后设置订阅的主题:device ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试MQTT连接阿里云物联网平台
前言 这节看一下在阿里云上实现MQTT通信是个怎样的流程 看了很多网上的教程,感觉讲的迷迷糊糊.... 其实感觉他们是对MQTT不够透彻,所以写的文章就是个比着葫芦画瓢的感觉 在我面前这东西就是玩具. ...
- ESA2GJK1DH1K基础篇: 测试APP使用SmartConfig绑定Wi-Fi 设备并控制设备
前言 实现功能概要 STM32控制WI-Fi模块以AT指令TCP透传方式连接MQTT服务器, 实现MQTT通信控制. 测试准备工作(详细下载步骤请参考 硬件使用说明 ) 一,下载单片机程序 二,安装A ...
- ESA2GJK1DH1K基础篇: Android连接MQTT简单的Demo
题外话 我老爸也问我物联网发展的趋势是什么!!!!!! 我自己感觉的:(正在朝着 "我,机器人" 这部电影的服务器方向发展) 以后的设备都会和服务器交互,就是说本地不再做处理,全部 ...
- ESA2GJK1DH1K基础篇: 关于各大物联网平台的MQTT通信
前言 这节稍微唠叨点 其实我很长时间都没有出怎么连接现成的物联网平台的教程, 一直写的是教给大家自己搭建服务器,主要原因是因为我感觉连接现有的学不到东西. 现在出这种教程,是因为发现确实很多人喜欢用. ...
随机推荐
- HTTP之网关的分类
网关的分类 ========================摘自<HTTP权威指南>============================= 1. HTTP/*:服务器端Web网关 请 ...
- Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道松哥说的是对的了! 在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是 ...
- POSIX 正则表达式 BRE与ERE的差异
BRE,标准正则表达式,basic regular expressions ERE,扩展正则表达式,Extended Regular Expressions POSIX 正则表达式 传统上,POSIX ...
- SCCM+WSUS的方式分发补丁
简单来说,System Center Configuration Manager(SCCM/ConfigMgr)由SMS(Systems Management Server)发展而来,其作为一款针对企 ...
- JavaIO学习:字节流
JavaIO流之字节流 字节流 抽象基类:InputStream,OutputStream. 字节流可以操作任何数据. 注意: 字符流使用的数组是字符数组,char[] chs : 字节流使用的数组是 ...
- Markdown温故知新(0):导航目录
Markdown温故知新(0):导航目录 Markdown温故知新(1):Markdown面面观 Markdown温故知新(2):详解七大标准语法 Markdown温故知新(3):六个实用扩展语法 M ...
- Delphi - 采用第三方控件TMS、SPComm开发串口调试助手
第三方控件TMS.SPComm的下载与安装 盒子上可搜索关键字进行下载,TMS是.dpk文件,SPComm.pas文件: 安装方法自行百度,不做赘述. 通过TMS控件进行界面布局 界面预览: Delp ...
- Android 常用炫酷控件(开源项目)git地址汇总
第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...
- pom.xml管理jar包——安全性框架配置文件
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- 设计模式之(九)桥接模式(Bridge)
桥接模式是怎么诞生的呢?来看一个场景. 一个软件企业开发一套系统,要兼容所有的不同类型硬件和和各种操作系统.不同种类硬件主要是 电脑.平板电脑.手机.各种操作系统是苹果系统.windows 系统.Li ...