STM32使用esp01s上云,MQTT.fx调试

文章目录

    • 1、mqtt协议基本概念
    • 2、mqtt协议使用
    • 3、使用MQTT.fx连接
      • 3.1、连接MQTT物联网套件-使用MQTTS协议
      • 3.2、使用多协议接入-使用MQTT协议
      • 3.3、接入腾讯云控制台
      • 3.4、接入阿里云控制台

去年做过一点上云的实践,现在把它记录下,协议这块懂得不是很多,也不是学网络的,仅作为一个记录

1、mqtt协议基本概念

MQTT协议基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,是构建构建于TCP/IP协议上,最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

框图如下所示:
STM32使用esp01s上云,MQTT.fx调试_第1张图片
这里关注一点就是:A订阅了主题1,B订阅了主题1,如果A向主题1发布了信息1,那么A和B都会收到信息1

2、mqtt协议使用

这个up主讲的非常好,我总结下怎么用,同时规避一些错误(采坑)

https://www.bilibili.com/video/BV1fu411y77M?spm_id_from=333.999.0.0

首先是用到的工具,其实叫esp8266,只不过这个模块是最便宜的,基本上4块钱就能搞定,建议选用01s,好像是引脚多了个上拉,其实也是16年的老版本了
STM32使用esp01s上云,MQTT.fx调试_第2张图片
下载固件,这里用的是安信可的固件,其实买来会有个默认固件,我们用的就是那个固件,所以如果是新买的就不用管,当然如果想要学习怎么下载固件也可以试试,固件地址:https://docs.ai-thinker.com/esp8266/sdk

STM32使用esp01s上云,MQTT.fx调试_第3张图片
还有一本关于这个模块的说明,讲的也很详细,我放到gitee里面了 https://gitee.com/lx2035/data-manual/tree/master/ESP
STM32使用esp01s上云,MQTT.fx调试_第4张图片
文中说明他怎么下载固件
STM32使用esp01s上云,MQTT.fx调试_第5张图片
后面我又查官方资料他有三种模式可选,可以根据这个接线来选择下载固件的模式:

模式 EN RST GPIOO GPIO2
UART模式
flash运行模式

当然如果比较懒的话,可以直接买下载器,本质也是个usb-ttl工具,就是他把这些引脚都给你接好了
STM32使用esp01s上云,MQTT.fx调试_第6张图片
接好线就可以下载了,选择的固件如下
STM32使用esp01s上云,MQTT.fx调试_第7张图片官方那个网页里同样提供了下载工具,这里注意下,建议先点擦除,再点下载,如果下载过程出现了提示复位这样的信息然后一直等在那里不要慌,这个是很正常的,不要把他从USB口拔掉再插进去,这是没有用的,只要把接RST的这根线拔掉,接上GND,在接回去就可以了,之后就是顺利下载了
STM32使用esp01s上云,MQTT.fx调试_第8张图片
之后把其他的都拔掉,就可以使用AT指令了,关于AT指令推荐这篇文章,总结的很到位
https://blog.csdn.net/csdnhuaong/article/details/67011585

这里在总结一点,使用AT指令的时候,需要勾选发送新行,就是多发送 \r\n,然后默认波特率是115200

STM32使用esp01s上云,MQTT.fx调试_第9张图片
这里挑几个重要的说,发送AT会有OK回应
STM32使用esp01s上云,MQTT.fx调试_第10张图片
发送AT+GMR打印版本信息

STM32使用esp01s上云,MQTT.fx调试_第11张图片
如果之前有设置过波特率,可以用这个命令修改波特率

AT+UART=115200,8,1,0,0

下面尝试连接MQTT服务器,用的是这个服务器

test.mosquitto.org

电脑打开命令行ping一下,可以看到正常连接
STM32使用esp01s上云,MQTT.fx调试_第12张图片
先使用下面的命令配置ESP01S

AT+CWMODE_DEF=3  //设置为STA+AT模式
AT+CWJAP_DEF="ZTE-tbua","88888888"  //连接WIFI
AT+SAVETRANSLINK=1,"test.mosquitto.org",1883,"TCP" //进入透传模式,连接MQTT服务器

下面开始连接MQTT服务器,这里现用mqttfx工具给他连上
STM32使用esp01s上云,MQTT.fx调试_第13张图片
新建连接如下所示
STM32使用esp01s上云,MQTT.fx调试_第14张图片
熟悉这个软件常用功能如下所示
STM32使用esp01s上云,MQTT.fx调试_第15张图片

现在我们来编辑报文,分别是连接报文和订阅报文

连接报文如下,用户名和密钥不写就是00 00,这里要特别注意我用的用户名还有主题变化的话其他的两个长度都要做相应的改变,这里我用的是lx

10 12 00 04 4D 51 54 54 04 C2 00 78 00 02 6C 78 00 00 00 00
协议 后面长度 协议长度 MQTT 版本 120(心跳) 客户端id(长度) lx 用户名id(长度) 密匙(长度)

订阅报文

82 07 00 02 00 02 6C 78 00
报头 长度 未知 主题长度 lx 未知

这里我把hex贴上

10 12 00 04 4D 51 54 54 04 C2 00 78 00 02 6C 78 00 00 00 00 
82 07 00 02 00 02 6C 78 00   
C0 00 //根据心跳的保活,就是在心跳时间内发一条命令告诉服务器我还连着

这里根据要求是设置透传模式后需要断开重连,我这里实测好像不需要,反正如果不行可以在设置为透传模式之后断开重连试试。

然后还要注意的一点就是设置为透传模式之后,AT指令就失效了,如果要关闭的话,发送+++这个指令即可,不要点发送新行,等一等就会出现CLOSE这个字符,就是关闭透传,这个时候在发送AT就有效了

发送连接命令,注意是16进制发送,看到返回最后是00
STM32使用esp01s上云,MQTT.fx调试_第16张图片
发送订阅,也返回结尾00
STM32使用esp01s上云,MQTT.fx调试_第17张图片
为了看的更清楚,我改用了VOFA+这个串口助手来测试,可以看到他返回了名称和主题
STM32使用esp01s上云,MQTT.fx调试_第18张图片
之后我们用之前的mqtt.fx订阅主题并发送试试,可以看到顺利接收
STM32使用esp01s上云,MQTT.fx调试_第19张图片

3、使用MQTT.fx连接

软件如下所示

STM32使用esp01s上云,MQTT.fx调试_第20张图片
可以当作一个很方便的调试工具使用,就是可以用它来链连接设备,然后接收下发的数据,连接还有订阅什么的,比较方便,是一个很好的测试工具:下载链接
http://www.mqttfx.jensd.de/index.php/download
STM32使用esp01s上云,MQTT.fx调试_第21张图片
下面开始尝试连接onenet,onenet好像出了个新版的,目前还没有试过,等以后试了在记录,这里还是用旧版的思路,然后跟我们这个上云相关的都是在控制台里面
STM32使用esp01s上云,MQTT.fx调试_第22张图片

3.1、连接MQTT物联网套件-使用MQTTS协议

进入MQTT物联网套件
STM32使用esp01s上云,MQTT.fx调试_第23张图片
添加产品后按照提示创建设备,整个过程比较简单,这里不进行赘述
STM32使用esp01s上云,MQTT.fx调试_第24张图片
点击设备可以查看设备
STM32使用esp01s上云,MQTT.fx调试_第25张图片
官方文档里面有关于这个设备的详细;连接的详细描述,如下所示,链接如下
https://open.iot.10086.cn/doc/mqtt/
STM32使用esp01s上云,MQTT.fx调试_第26张图片

下面我挑重点的说,如果不想看官方文档,可以直接看我下面说的

一般连每个云都需要一个账号和密码,一般都是一些字符串添加变化什么的,官方也一般会提供一些工具,这里onenet提供的工具如下所示,进入下载即可
STM32使用esp01s上云,MQTT.fx调试_第27张图片
下面先把这个工具用起来,把我们需要的做好,具体东西我在下面都填好了
STM32使用esp01s上云,MQTT.fx调试_第28张图片
关于unix时间戳,就是一个时间转换工具,这里的用处就是一旦时间超过了这个时间的话,服务器就会把连接的设备踢出去,生成时间戳的工具可以用如下网址
http://www.usey.cn/timestamp
STM32使用esp01s上云,MQTT.fx调试_第29张图片
下面编辑MQTT.fx工具
STM32使用esp01s上云,MQTT.fx调试_第30张图片
下面进行连接
STM32使用esp01s上云,MQTT.fx调试_第31张图片
查看设备也已经变为在线
STM32使用esp01s上云,MQTT.fx调试_第32张图片
下面尝试上传数据,文档如下,可以看到即可以上传数据点也可以上传数据命令
STM32使用esp01s上云,MQTT.fx调试_第33张图片
根据要求编写并进行订阅,可以看到订阅成功
STM32使用esp01s上云,MQTT.fx调试_第34张图片
订阅消息,数据格式是官方提供的,如下所示

{
    "id": 123,        
    "dp": {             
        "temperatrue": [{     
            "v": 30,       
            "t": 1552289676
        }],
        "power": [{     
            "v": 4.5,        
            "t": 1552289676 
        }],
        "status": [{
                "v": {
                    "color": "blue"
                },
                "t": 1552289677
            },
            {
                "v": {
                    "color": "red"
                },
                "t": 1552289678
            }
        ]
    }
}

STM32使用esp01s上云,MQTT.fx调试_第35张图片
进入云平台并刷新查看
STM32使用esp01s上云,MQTT.fx调试_第36张图片
下面尝试下发命令,官方描述如下所示
STM32使用esp01s上云,MQTT.fx调试_第37张图片
订阅如下
STM32使用esp01s上云,MQTT.fx调试_第38张图片
进入下发页面
STM32使用esp01s上云,MQTT.fx调试_第39张图片
编辑命令发送
STM32使用esp01s上云,MQTT.fx调试_第40张图片
进入软件可以看到收到了下发的命令
STM32使用esp01s上云,MQTT.fx调试_第41张图片
下面对命令进行一下回复
STM32使用esp01s上云,MQTT.fx调试_第42张图片
就是下发命令后立即把数据后面的cmdid获取然后在发布页面粘贴进去发布,可以看到下面返回接收成功,已经OK了
STM32使用esp01s上云,MQTT.fx调试_第43张图片
上述用到的信息资料

产品ID 489122
设备ID 893388762
设备名称 lx2035

$sys/{pid}/{device-name}/dp/post/json 数据点上传格式
$sys/{pid}/{device-name}/cmd/request/{cmdid} 设备下发格式
$sys/{pid}/{device-name}/cmd/response/{cmdid} 设备下发应答格式

$sys/489122/lx2035/dp/post/json/+
$sys/489122/lx2035/cmd/request/+
$sys/489122/lx2035/cmd/response/23e0bd09-e385-4a64-8fd4-4fe955fa25ba

3.2、使用多协议接入-使用MQTT协议

选择多协议接入,这个好像是找的到的资料最多的一个了,很多都选择这个方式接入,例程也很丰富

注:这个我用mqttfx没连接成功,原因暂且不明,等以后成功了在更新这篇文章,用的是官方工具

官方文档地址:
https://open.iot.10086.cn/doc/multiprotocol/book/develop/mqtt/device/doc-tool.html
STM32使用esp01s上云,MQTT.fx调试_第44张图片创建产品和设备
STM32使用esp01s上云,MQTT.fx调试_第45张图片
之后在官方文档下载需要的工具
STM32使用esp01s上云,MQTT.fx调试_第46张图片
编辑进行连接
STM32使用esp01s上云,MQTT.fx调试_第47张图片
进入设备页面,可以看到连接成功

STM32使用esp01s上云,MQTT.fx调试_第48张图片
下面进行数据的传输测试,订阅一个主题,名字是任意的
STM32使用esp01s上云,MQTT.fx调试_第49张图片
编辑数据上次
在这里插入图片描述
数据json格式如下:

{
    "datastreams": [
        {
            "id": "temp",
            "datapoints": [
                {
                    "value": 36.5
                }
            ]
        }
    ]
}

可以看到已经收到了数据
STM32使用esp01s上云,MQTT.fx调试_第50张图片
下面进行数据下发测试,进入下发命令
STM32使用esp01s上云,MQTT.fx调试_第51张图片
成功接收
STM32使用esp01s上云,MQTT.fx调试_第52张图片

3.3、接入腾讯云控制台

网址如下,这个常要登陆,跟微信关系挺大的,要是不行,请拿手机登陆,他这个云是很大的一个云,我们用的只是其中一个很小的部分
https://console.cloud.tencent.com/iotexplorer
STM32使用esp01s上云,MQTT.fx调试_第53张图片
之后进入公共实例,然后创建项目
STM32使用esp01s上云,MQTT.fx调试_第54张图片
之后进入产品创建,是一系列的过程
STM32使用esp01s上云,MQTT.fx调试_第55张图片
这里我们建两个自定义功能,标准功能就是谁都有的那种。一个普通变量然后一个布尔值
STM32使用esp01s上云,MQTT.fx调试_第56张图片
如下所示
在这里插入图片描述
其他这几个看着办吧,我呀不太清楚,随便设置下
STM32使用esp01s上云,MQTT.fx调试_第57张图片
最后所有的都打上钩就OK了
STM32使用esp01s上云,MQTT.fx调试_第58张图片
好,下面又进入看文档时间,读了这个文档就知道怎么接入云端了

https://cloud.tencent.com/document/product/1081/46507
STM32使用esp01s上云,MQTT.fx调试_第59张图片
这里他也提供了一个配网工具帮助我们接入
STM32使用esp01s上云,MQTT.fx调试_第60张图片
下载是个压缩包,然后只需要关注它里面个网页就行了
STM32使用esp01s上云,MQTT.fx调试_第61张图片
需要的数据从这里获取
STM32使用esp01s上云,MQTT.fx调试_第62张图片
然后在MQTTfx下面填入,有不懂的可以看看数据长度什么的,差不多就说明你填对了
STM32使用esp01s上云,MQTT.fx调试_第63张图片
参数说明在文档里也有
STM32使用esp01s上云,MQTT.fx调试_第64张图片
点击连接可以看到设备在线
STM32使用esp01s上云,MQTT.fx调试_第65张图片
设备下行数据。官方文档描述如下,一定要看我红字部分
STM32使用esp01s上云,MQTT.fx调试_第66张图片
订阅后如下所示
STM32使用esp01s上云,MQTT.fx调试_第67张图片
发布一个可以看到数据
在这里插入图片描述
MQTT端如下所示,接收数据正常

STM32使用esp01s上云,MQTT.fx调试_第68张图片
下面进行设备属性上报,文档描述如下
STM32使用esp01s上云,MQTT.fx调试_第69张图片
需要添加的东西在物模型协议里面,下面是我用的样例,因为我用了两个变量

{
    "method":"report",
    "clientToken":"123",
    "timestamp":1628646783,
    "params":{
        "data1":20.5,
        "data2":1
    }
}

STM32使用esp01s上云,MQTT.fx调试_第70张图片
效果如下,可以看到成功发送了命令
STM32使用esp01s上云,MQTT.fx调试_第71张图片

3.4、接入阿里云控制台

网址:https://iot.console.aliyun.com/lk/summary/new
先说位置,或者尝试直接搜索:物联网平台
STM32使用esp01s上云,MQTT.fx调试_第72张图片
公共实例下面创建设备
STM32使用esp01s上云,MQTT.fx调试_第73张图片
跟腾讯云一样,加两个参数,开始上报
STM32使用esp01s上云,MQTT.fx调试_第74张图片
阿里云这里做的特别好,直接复制,点击MQTT连接参数
STM32使用esp01s上云,MQTT.fx调试_第75张图片
可以看到,啥工具都不需要了,直接复制
STM32使用esp01s上云,MQTT.fx调试_第76张图片
一对一粘贴
STM32使用esp01s上云,MQTT.fx调试_第77张图片
之后连接就会显示在线了
STM32使用esp01s上云,MQTT.fx调试_第78张图片
下面进行设备的下发数据,格式在产品里面有说明

/a1xZ1EhVjDH/${deviceName}/user/get 模版

/a1xZ1EhVjDH/test1/user/get

STM32使用esp01s上云,MQTT.fx调试_第79张图片
点击发布
STM32使用esp01s上云,MQTT.fx调试_第80张图片
可以看到成功接收到消息
STM32使用esp01s上云,MQTT.fx调试_第81张图片
下面是上传数据,用这个自定义topic
STM32使用esp01s上云,MQTT.fx调试_第82张图片
模版如下

/a1xZ1EhVjDH/${deviceName}/user/update
/a1xZ1EhVjDH/test1/user/update

发送
STM32使用esp01s上云,MQTT.fx调试_第83张图片
因为还不是物模型的模版,可以在日志里面看到我们的消息
STM32使用esp01s上云,MQTT.fx调试_第84张图片
下面用官方的命令来试试,还是两个命令
STM32使用esp01s上云,MQTT.fx调试_第85张图片
设备下发
STM32使用esp01s上云,MQTT.fx调试_第86张图片
可以看到数据成功接收
STM32使用esp01s上云,MQTT.fx调试_第87张图片
下面进行本地发送到云端,数据模版如下

{
    "method": "thing.service.property.set",
    "id": "1469549558",
    "params": {
        "led": 0,
        "temp": 36.5
    },
    "version": "1.0.0"
}

切换到发布页面,发布如下
STM32使用esp01s上云,MQTT.fx调试_第88张图片
进入查看,可以看到修改成功!
STM32使用esp01s上云,MQTT.fx调试_第89张图片
然后stm32其实也就是这样订阅发送这些模版数据进行更新的,下次再写,等我优化下代码。

你可能感兴趣的:(单片机学习记录,stm32,物联网,onenet,阿里云,腾讯云)