MQTT学习笔记目录(知识点、实例、工具齐全)

MQTT知识:http://x5zj.com/?p=42 和 https://www.cnblogs.com/duanxz/p/5414784.html

MQTT协议中文版: https://github.com/mcxiaoke/mqtt

MQTT协议中文版 https://mcxiaoke.gitbooks.io/mqtt-cn/content/

MQTT 协议 3.1.1 中文版 html版http://mcxiaoke.github.io/mqtt/protocol/MQTT-3.1.1-CN.html

MQTT 协议 3.1.1 中文版 pdf版http://mcxiaoke.github.io/mqtt/protocol/MQTT-3.1.1-CN.pdf
MQTT 最新文档 https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html 

MQTT协议详解 https://blog.csdn.net/wodeyuer125/article/details/50380775

MQTT概念解析  https://blog.csdn.net/qq_25205045/article/details/85490447

MQTT物联网协议详解 https://blog.csdn.net/qq_38892883/article/details/79136339

1、C# Winform客户端实现M2Mqtt连接Apollo MQTT服务器

https://blog.csdn.net/Tai4lin/article/details/89775312

2、C#使用MQTT

https://blog.csdn.net/qq_37258787/article/details/80183923

3、MQTT客户端C#版(下载)

https://download.csdn.net/download/qq_38326851/10428384

4、通过 C# 实现 MQTT 的订阅和发布

https://blog.csdn.net/qq_28537277/article/details/87188732

https://blog.csdn.net/qq84395064/article/details/88018920

5、C#使用 MQTTnet 快速实现 MQTT 通信(系列文章)

https://blog.csdn.net/panwen1111/article/details/79245161

示例源码:https://gitee.com/sesametech-group/MqttNetSln

Asp.net core 2.2 版本:https://gitee.com/sesametechgroup/AspNetCoreMqtt

MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信https://blog.csdn.net/panwen1111/article/details/79245161

MQTT(二)在windows64位上安装Python环境https://blog.csdn.net/panwen1111/article/details/79248328

MQTT(三)Python客户端+net客户端+net服务端 简单通信https://blog.csdn.net/lordwish/article/details/85006228

MQTT(四)树莓派开机自动运行Python客户端https://blog.csdn.net/panwen1111/article/details/80467128

MQTT(五)EMQ开源MQTT消息服务器https://blog.csdn.net/panwen1111/article/details/81067689

  • C#的阿里物联网平台

阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入https://blog.csdn.net/panwen1111/article/details/88365636

阿里物联网平台(二).net 实现移动端(WEB、HTML)与设备端通讯https://blog.csdn.net/panwen1111/article/details/88367428

6、基于STM32和阿里云物联网平台的MQTT通信开源项目

https://blog.csdn.net/XinAncao_/article/details/90468596

7、C# MQTT客户端--M2MQTT

https://blog.csdn.net/sxpsxp12/article/details/77870358

m2mqtt库:https://github.com/eclipse/paho.mqtt.m2mqtt 
m2mqtt手册:https://m2mqtt.wordpress.com/using-mqttclient/ 
m2mqtt下载:https://www.nuget.org/packages/M2Mqtt/


8、C# 接受MQTT服务器推送的消息

https://blog.csdn.net/lxrj2008/article/details/76080248

GitHub下载MQQT服务的源码,源码地址:https://github.com/mqtt/mqtt.github.io/wiki/libraries

9、C# MQTT 断线重连

https://blog.csdn.net/lmy_loveF/article/details/80002530

MQTT断线重连 https://blog.csdn.net/whb3299065/article/details/79290668

mqtt断开自动重连
https://blog.csdn.net/qq_29316143/article/details/86715109

MQTT 06 - MQTT 客户端自动重连机制
https://blog.csdn.net/engrossment/article/details/87854304

当网络中断后,MQTT自动重连
https://blog.csdn.net/lxrj2008/article/details/76067242

1.引用源码库地址 
https://github.com/eclipse/paho.mqtt.m2mqtt 
2.说明 https://m2mqtt.wordpress.com/m2mqtt_doc/ 

10、使用MQTTnet搭建Mqtt服务器

https://blog.csdn.net/weixin_42930928/article/details/82383297

完整代码:https://gitee.com/sesametech-group/MqttNetSln

Windows上搭建EMQTT服务器:https://blog.csdn.net/qq84395064/article/details/87946925

11、C# 基于开源MQTT自主接入阿里云IoT平台

https://blog.csdn.net/uaime/article/details/96423890

12、客户端工具

MQTTBox   谷歌浏览器插件
https://www.hivemq.com/blog/mqtt-toolbox-mqtt-client-chrome-app/
https://chrome.google.com/webstore/detail/mqttbox/kaajoficamnjijhkeomgfljpicifbkaf/related?utm_source=chrome-ntp-launcher
https://www.hivemq.com/mqtt-toolbox/

http://tongxinmao.com/App/Detail/id/126

通信猫软件。下载地址:链接:https://pan.baidu.com/s/1qKclPy1rJ22Ezw3MzrSYPw    提取码:eu0o 

组件库:(多个版本)

https://github.com/chkr1011/MQTTnet

https://github.com/eclipse/paho.mqtt.m2mqtt

https://github.com/xljiulang/Paho.MqttDotnet/

http://sourceforge.net/projects/mqttdotnet/

https://github.com/chkr1011/MQTTnet

来自:https://github.com/mqtt/mqtt.github.io/wiki/libraries 库

13、paho-mqtt 学习笔记 (信息量挺大) https://www.cnblogs.com/saryli/p/9726584.html

14、MQTT--topic(主题)设计 ,https://blog.csdn.net/amwha/article/details/74364175

    https://blog.csdn.net/qq84395064/article/details/78418017

 定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通信。

MQTT学习笔记目录(知识点、实例、工具齐全)_第1张图片

注意:发布者也是客户端。订阅者也是客户端

主题层级分隔符 “/”
多层通配符 “#”,“#”是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级。多层通配符必须位于它自己的层级或者跟在主题层级分隔符后面。不管哪种情况,它都必须是主题过滤器的最后一个字符 .
school/#                //也匹配单独的 “school” ,因为 # 包括它的父级。
#                       //是有效的,会收到所有的应用消息。
school/teacher/#        //有效的。
school/teacher#         //无效的。
school/teacher/#/lever  //无效的,必须是主题过滤器的最后一个字符
单层通配符  “+”,通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:
$xx
/$xx
/xx$


总结

1)、所有的主题名和主题过滤器必须至少包含一个字符

2)、主题名或主题过滤器以前置或后置斜杠 “/” 区分

3)、只包含斜杠 “/” 的主题名或主题过滤器是合法的

4)、主题名和主题过滤器是 UTF-8 编码字符串, 它们不能超过 65535 字节

5)、主题名和主题过滤器是区分大小写的

主题层级分隔符 / : 用于分割主题层级,/分割后的主题,这是消息主题层级设计中很重要的符号。 比方说: aaa/bbb和 aaa/bbb/ccc 和aaa/bbb/ccc/ddd ,这样的消息主题格式,是一个层层递进的关系,可通过多层通配符同时匹配两者,或者单层通配符只匹配一个。 这在现实场景中,可以应用到:公司的部门层级推送、国家城市层级推送等包含层级关系的场景。

单层通配符 +: 单层通配符只能匹配一层主题。比如: aaa/+ 可以匹配 aaa/bbb ,但是不能匹配aaa/bbb/ccc。 单独的+号可以匹配单层的所有推送

多层通配符 #: 多层通配符可以匹配于多层主题。比如: aaa/# 不但可以匹配aaa/bbb,还可以匹配aaa/bbb/ccc/ddd。 也就是说,多层通配符可以匹配符合通配符之前主题层级的所有子集主题。单独的#匹配所有的消息主题.

注: 单层通配符和多层通配符只能用于订阅(subscribe)消息而不能用于发布(publish)消息,层级分隔符两种情况下均可使用。

15、知识点

问题一:单片机缓存有限,处理能力有限的情况下,消息不可能一次发出,这种情况下要怎样通过MQTT发布消息?
先组装publish协议的头,里面写好payload的长度,通过tcp发出去,然后一点一点发payload。如果拿不到payload总长度,这个事情就难办。因为你发了一个publish协议报,服务端读到head里面的payload的长度之后,就会一直读,读到需要的长度,才算这个publish结束。所以,你的需求是首先确认你发布的内容的长度,然后组publish数据包头,填写payload长度,tcp:send(head),之后一段一段发送payload,比如一次1k,还是按照正常的tcp发送数据,一直发送完毕,就算这个publish结束了。接下来的send,都属于tcp层的,这些不用你干预的。如果在tcp层,send失败,那一定是socket有问题了,连接断了,你就得重新连接mqtt服务器了,如果没有发完,那么服务端的会话也会结束,就是说服务端也没有接收到数据。重新连接,你就得重发,发送消息中途,只要断掉,就得重连,是否要重发数据,取决于你是否保存了以前的数据。还有如果消息重要,可以使用qos=1或者2,可以确保服务端收到消息,qos=1需要一个来回,qos=2需要四个来回,qos=0非常简单,只要send出去就不管了。

问题二:MQTT的开源资源多吗?
http://www.mqtt.org里面很多

问题三:MQTT为什么一般不提供持久化的功能
mqtt协议里面是按照设备一直在线设计的,数据都是保存在内存里的

问题四:MQTT是不是很耗内存?
MQTT是比较吃内存的,emqtt的实测数据是:38W,内存占14G,CPU 15%

问题五:session与client之间的关系是怎样的?
这样的,比如你一个板子,作为客户端,发起mqtt的连接请求connect到mqtt服务器,比如说就是emqtt服务吧,emqtt服务端收到这个板子的连接请求之后,在tcp层上会和板子建立一个tcp的连接,在emqtt内部,会产生一个进程,和这个板子做数据通讯,同时还会产生一个进程,叫session,这个sessoin是专门管理这个板子订阅的主题,其它板子如果发布了这个板子感兴趣的主题的时候,也会发到这个板子对应的这个session里面,如果这个session收到订阅的主题之后,发现对用的client还活着,就通过这个client把数据经过tcp发到这个板子上,如果发现client已经没有了,就是说板子和服务端断掉了,那么session就会把收到的订阅的主题,先保存在session里面,下次板子连接上了,而且cleansession=false,那么这个session就不会清除,在这次连接时,就会把以前收到的订阅消息,发给板子,大概就是这个意思。

问题六:emqtt怎么知道连上来的client是同一个呢?
连接的时候,需要设置一个clientid,这个id可以不设置,如果不设置,在emqtt服务端会自动产生一个唯一的id,如果你要用到session,必须有一个唯一个id,你可以用imei。如果你一定要收到离线消息的话,就必须使用确定的id了。

问题七:emqtt的session时间可以修改吗?
你可以改一下session的时间,现在是48小时,你可以改为一周,如果要永久,恐怕emqtt不太适合。

问题八:emqtt的访问权限什么的都是写在配置文件里的?
etc/acl.config

问题九:emqtt的分布式是怎么回事?
分布式简单说就是把你的几台服务器连在一起,里面任意一台或者多台,只要不是全坏了,emqtt都可以正常运行。emqtt的数据是在几个节点共享的,某个节点出问题,数据是不会丢的,但是节点上的session数据会丢失。
 

客户端(client):
使用mqtt的程序或设备,客户端总是通过网络连接到服务端。它可以
发布应用消息给其他相关的客户端、订阅以请求接收相关的应用消息、取消订阅以移除相关的应用消息、从服务端断开连接
服务端(server):
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端
接收来自客户端的网络连接、接收客户端发布的应用消息、处理客户端的订阅和取消订阅请求、转发应用消息给符合条件的客户端订阅


mqtt包括客户端、代理两部分,以智能家居系统为例,末端智能电器与手机为客户端,云中心为代理。客户端首先向代理发起请求,代理收到后对客户端认证,认证通过后在客户端和代理之间建立一个TCP长连接通道,客户端通过该通道订阅若干关注的主题(TOPIC),同时在自身状态发生变化时,向相应的主题发布消息,代理将该消息发给正在订阅该主题的所有客户端。与http不同,mqtt是一种多对多的通信协议,设备不直接相连,而是通过一个代理实现互相通信。他是一种天然的异步协议,可以很好地将请求端和响应端解耦。

MQTT协议的好处:
1、特别轻量级,使用一个8位的系统,30K的空间,就可运行MQTT的客户端
2、本身是针对不稳定网络设计的,通常意义上的传输协议都是基于稳定网络传输,会专门为了这种稳定网络去做一些优化。MQTT正相反,协议较多地考虑了网络的不确定性,它本身还非常精简,最小的传输字节只有两个,使得在较恶劣的网络条件下仍然有较好的消息可达率。
3、它的消息交互模式跟传统意义上不太一样,采用了发布和订阅的模式。当数据源发布一条消息的时候,可以有多个订阅端同时能收到这个消息,这对于很多设备互联的物联网场景比较灵活。
4、具有消息发布服务质量(Qos)机制,用户可根据应用场景需要,选择“至多一次”、“至少一次”或“只有一次”的传输质量,在效率和质量之间进行权衡。
5、客户端异常中断的通知机制(last-will-and-testament)。当一个设备连不上的时候,服务器端有一个专门的机制能马上知道这个设备出了什么情况,从而可以非常快的反馈,对某一个结点做出一些补偿。

针对没有TCP/IP支持的终端环境MQTT无法应用的情况:
可以采用MQTT-SN(MQTT For Sensor Networks)协议进行补充,它是为了非常受限类似传感器设计的,能够基于IEEE 802.15.4等无线局域网发送UDP数据包,再通过MQTT-SN网关与MQTT broker建立连接。

协议可拆分为:固定头部+可变头部+消息体
可变头部内容字节长度 + Playload/负荷字节长度 = 剩余长度

byte1:
message type:总共四位代表可16种消息类型,去除0和15保留待用,共14种。
DUP flag:如果 DUP 标志被设置为 0, 表示这是客户端或服务端第一次请求发送这个 PUBLISH 报文。 如果 DUP 标志被设置为 1,表示这可能是一个早前报文请求的重发。
Qos level:选择“至多一次”、“至少一次”或“只有一次”的传输质量
RETAIN:仅针对publish消息。1:表示发送的消息需要一直持久保存(不受服务器重启影响),不但要发送给当前的订阅者,并且以后新来的订阅了此Topic name的订阅者会马上得到推送。
备注:新来乍到的订阅者,只会取出最新的一个RETAIN flag = 1的消息推送。
0:仅仅为当前订阅者推送此消息。
byte2:
remaining length在当前消息中剩余的byte(字节)数,包含可变头部和负荷(称之为内容/body,更为合适)。单个字节最大值:01111111,16进制:0x7F,10进制为127。单个字节为什么不能是11111111(0xFF)呢?因为MQTT协议规定,第八位(最高位)若为1,则表示还有后续字节存在。同时MQTT协议最多允许4个字节表示剩余长度。那么最大长度为:0xFF,0xFF,0xFF,0x7F,二进制表示为:11111111,11111111,11111111,01111111,十进制:268435455 byte=261120KB=256MB=0.25GB

报文标识符:16位
客户端和服务端彼此独立的分配报文标识符。因此,客户端服务端组合使用相同的报文标识符可以实现并发的消息交换。

保持连接(keepalive 16位)是一个以秒为单位的时间间隔,指客户端在发送完当前报文的时刻到下一个报文发送时刻,两者之间的最大间隔。客户端必须保证两个报文的传输间隔不超过保持连接的值,若在保持连接的时间内没有报文要发送,必须发送一个 pingreq报文。
 

16、ESP8266 调试基础知识必备

一、ESP8266模块工作模式
ESP8266模块可以工作在多种模式下实现不同的功能。

(1)SoftAP模式(软路由模式)
在此模式下,模块本身相当于一个路由器,其他设备可链接到该模块发送的信号,主要应用在主从设备的主机部分。 


(2)station模式(客户端模式)
在此模式下,模块相当于一个客户端,可以链接到其他路由器发出的WIFI信号。主要应用在网络通信中。 


(3)SoftAP+station共存模式(混合模式)
在此模式下,模块可在与其他设备链接的同时充当路由器,结合上面两种模式的综合应用,一般可应用在需要网络通信且在主从关系中的主机。 


二、ESP8266模块的功能
ESP8266在开发中常用以下几个功能:

(1)透传功能(TCP数据包发送)
将串口收到的数据转换成TCP数据包,向指令中指定的主机发送数据。该功能存在与所有工作模式下。ESP8266接受到来自串口的数据,然后通过网络将数据传出去,不对数据进行处理,发送方和接收方的数据内容、长度完全一致,传输过程就好像透明一样。

透传首先需要建立链接,包括无线网络链接,模块与Host设备链接,TCP通讯链接。

(2)省电功能
无数据休眠:可通过数据唤醒 
低功耗休眠:可通过IO口指令唤醒 
定时启动休眠:通过内部的定时器唤醒

三、AT指令
AT 即Attention,AT指令一般应用于终端设备与PC应用之间的连接与通信。是一种用于终端设备喝Host设备连接与通信的指令。

ESP8266需要通过来自Host的AT指令来完成各项功能,下面以与电脑透传为例,简单叙述一个完整的功能测试流程。以下所有指令均需要在指令后加一个换行,且指令对大小敏感,不要混淆大小写。

1、测试工作情况(AT)
将模块与电脑链接,打开串口调试助手,设置波特率为115200,停止位1位,数据位8位,无校验。 
(此设置为默认设置,如果对模块的通信参数做过调整,以调整的参数为准) 
发送指令为“AT”。

如果正常通信,返回OK。

2、重启模块(AT+RST)
在固件正常的情况下,发现工作不正常,通过重启模块可以解决大部分问题。在不方便通过断电实现重启的场景中,也可以通过AT指令来重启模块。指令为:AT+RST。

重启成功,则返回重启信息,且重启之前的数据不会丢失。在重启完成后会返回“ready”,说明此时进入了正常工作模式。

3、查看版本信息(AT+GMR)
通过此指令,可以查询到wifi模块的版本信息,固件版本信息和模块内的实时时间。

4、恢复出厂设置(AT+RESTORE)
当WIFI模块因为参数配置错误而无法正常工作时,可以通过恢复出厂设置来使模块内保存的所有配置信息恢复默认(当然是建立在串口模块还能正常通信的情况下)。

恢复出厂设置完成后,会返回一个OK,然后重启,并返回启动信息。

5、选择工作模式(AT+CWMODE)
(1)工作模式查询(AT+CWMODE=?)
工作模式可以通过指令查询,查询成功后返回可设置的范围。 


(2)Station模式(AT+CWMODE=1)
通过上指令可以将模块设置为Station模式,设置成功后返回OK。

(3)AP模式(AT+CWMODE=2)
通过上指令可以将模块设置为AP模式,设置成功后返回OK

(4)混合模式(AT+CWMODE=3)
通过上指令可以将模块设置为混合模式,设置成功后返回OK

6、将模块链接到wifi(Station模式与混合模式下)
步骤如下:

(1)使用AT+CWLAP指令查询范围内的wifi模块
搜索成功后,返回范围内所有wifi模块的信息,在最后传回一个OK。

(2)使用AT+CWJAP="",""指令加入到AP
如果没有密码,password为空。 
在链接成功后,返回图中的数据。如果没有返回“WIFI GOT IP”,说明路由可能没有开启DHCP服务,需要手动配置IP地址。 
在最后会返回一个OK表示操作完成(不代表链接成功),如果返回FAIL说明密码可能有错误。

7、查询本地IP(AT+CIFSR)
通过上指令,可以查询AP的IP和MAC地址,同时也可以查询到本地的IP和MAC地址。

查询成功后返回查询信息和OK。

8、建立TCP链接
本文中TCP链接使用单链接,如需多链接,请参考用户手册。

(1)设置为单点链接(AT+CIPMUX=0)
开启单链接,设置成功后返回OK。

(2)建立TCP链接(AT+CIPSTART="type","addr",port)
建立TCP或UDP链接,端口打开后返回OK。 
第一个参数是链接类型,可填写“TCP”或者“UDP”。 
第二个参数是目标IP。 
第三个参数是端口号。

(3)发送数据(AT+CIPSEND)
使用指令:AT+CIPSEND="length",之后返回一个“>”表示数据传输开始,当长度满length时,数据发送出去。

(4)退出透传模式
发送一次+++并换行,退出透传模式。

(5)关闭传输(AT+CIPCLOSE)
使用上指令关闭TCP端口。
 

透传模式

1、首先恢复出厂设置
指令为AT+RESTORE


2、设置应用模式
指令为AT+CWMODE=3
注释:1为Station,2为AP,3为AP兼Station 模式 


3、重启模块
指令为AT+RST

4、查看附近无线网络
指令为AT+CWLAP

5、加入AP
指令为AT+CWJAP="SSID","PWD"


6、获取本地IP地址
指令为AT+CIFSR


7、开启透传模式
指令为AT+CIPMODE=1


8、连接到服务器
指令为AT+CIPSTART="TCP","服务器IP地址",端口


9、开启透传
指令为AT+CIPSEND


10、收到的数据如下


退出透传模式的办法是发送+++        (后面不要加回车)即可退出。
 

Step 1:最小系统启动

这个应该算是比较基础的,若想从FLASH启动进入AT系统,只需中间四个脚接VCC高电平即可,其中GPIO0为高电平代表从FLASH启动,GPIO0为低电平代表进入系统升级状态,此时可以经过串口升级内部固件。

GPIO16(RST)可做外部硬件复位使用。

Step 2:开启服务器(Server)模式(可以让其他客户端连接)

AT+CWMODE=3 //将模块设置为Station+AP模式,提供路由模式,正常返回OK

指令:AT+CWMODE= mode
说明:mode:1-Station模式,2-AP模式,3-AP兼Station模式
响应:OK

AT+RST //重启模块,正常返回ready,(WIFi GOT IP)

指令:AT+RST
响应:OK

AT+CIPMUX=1 //开启多连接模式,正常返回OK

指令:AT+CIPMUX=mode
说明:mode:0-单路连接模式,1-多路连接模式
响应:OK

AT+CIPSERVER=1,8080//创建服务器

指令:AT+CIPSERVER=mode[,port]
说明:mode:0-关闭server模式,1-开启server模式
   port:端口号,缺省值为333
响应:OK
说明:(1) AT+ CIPMUX=1时才能开启服务器;关闭server模式需要重启
   (2)开启server后自动建立server监听,当有client接入会自动按顺序占用一个连接。

AT+CIFSR //查询IP地址

指令:AT+CIFSR
说明:查看本模块的IP地址
 注意:AP模式下无效!会造成死机现象!
响应:+CIFSR:APIP,“192.168.4.1”
   +CIFSR:APMAC,“62:01:94:0f:15:37”
   +CIFSR:STAIP,“192.168.1.133”
   +CIFSR:STAMAC,“60:01:94:0f:15:37”
说明:+CIFSR:APIP,AP的IP(其实我也不是太懂这个AP到底是个什么鬼)
   +CIFSR:APMAC,AP的MAC地址
   +CIFSR:STAIP:    本模块IP地址
   +CIFSR:STAMAC: 本模块MAC地址
现在可以接入设备了,比如我现在介入了两个设备:每接入一个设备就会有一个提示:

0,CONNECT
1,CONNECT

前面的数字就是设备的ID号,给设备发送信息的时候会用到,如果记不住这个ID号了,可以用下面的指令查询:

AT+CIPSTATUS //查看当前建立的连接

指令:AT+CIPSTATUS
响应:STATUS: states
   + CIPSTATUS:id,type,addr,port,type
   OK
说明:id:连接的id号0-4
   type:字符串参数,类型TCP或UDP
   addr:字符串参数,IP地址
   port:端口号
   type: 0-本模块做client的连接,1-本模块做server的连接

AT+CIPSEND=1,6 //向某个连接发送数据

指令:1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=length
   2)多路连接时(+CIPMUX=1),指令为:AT+CIPSEND= id,length
响应:收到此命令后先换行返回”>”,然后开始接收串口数据,当数据长度满length时发送数据。
   如果未建立连接或连接被断开,返回ERROR
   如果数据发送成功,返回 SEND OK
说明:id:需要用于传输连接的id号
   length:数字参数,表明发送数据的长度,最大长度为2048

Step 3:开启客户端(Client)模式(连接服务器)

AT+CWMODE=3//将模块设置为Station+AP模式,提供路由模式,正常返回OK(其实是接着上边来的)

指令:AT+CWMODE= mode
说明:mode:1-Station模式,2-AP模式,3-AP兼Station模式
响应:OK

AT+RST //重启模块,正常返回ready,(WIFi GOT IP)

指令:AT+RST
响应:OK

AT+CIPSERVER=0 //关闭server服务 (如果没有开启server服务,可免除此步骤)

指令:AT+CIPSERVER=mode[,port]
说明:mode:0-关闭server模式,1-开启server模式
   port:端口号,缺省值为333
响应:OK
说明:(1) AT+ CIPMUX=1时才能开启服务器;关闭server模式需要重启
   (2)开启server后自动建立server监听,当有client接入会自动按顺序占用一个连接。

AT+CIPMUX=1//开启多连接模式

指令:AT+CIPMUX=mode
说明:mode:0-单路连接模式,1-多路连接模式
响应:OK

AT+CIPSTART=2,“TCP”,“192.168.1.122”,8080//建立TCP连接

指令:1)单路连接时(+CIPMUX=0),指令为:AT+CIPSTART= type,addr,port
   2)多路连接时(+CIPMUX=1),指令为:AT+CIPSTART=id,type,addr,port
响应:如果格式正确且连接成功,返回 OK,否则返回 ERROR
   如果连接已经存在,返回 ALREAY CONNECT
说明:id:0-4,连接的id号
   type:字符串参数,表明连接类型,”TCP”-建立tcp连接,”UDP”-建立UDP连接
   addr:字符串参数,远程服务器IP地址
   port:远程服务器端口号

此时使用网络工具在本机建立一个服务器,就可以连接上,实现收发功能


AT+CIPSEND=2,8//向服务器发送数据

指令:1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=length
   2)多路连接时(+CIPMUX=1) ,指令为: AT+CIPSEND= id,length
响应:收到此命令后先换行返回”>”,然后开始接收串口数据
   当数据长度满length时发送数据。
   如果未建立连接或连接被断开,返回ERROR
   如果数据发送成功,返回 SEND OK
说明:id:需要用于传输连接的id号
   length:数字参数,表明发送数据的长度,最大长度为2048
 

--------------------------------------------------------------------END-------------------------------------------------

继续整理中。。。。 有了此篇文字,学习MQTT不用再东奔西跑了!!

你可能感兴趣的:(学习笔记,物联网笔记,个人作品,网络笔记)