当前位置:网站首页>ESP8266_接入百度物联网核心套件、使用MQTT协议通信
ESP8266_接入百度物联网核心套件、使用MQTT协议通信
2022-06-11 09:14:00 【小老虎_IOT】
1、跟着“快速入门” 快速入门
1.1、操作流程
搜索百度智能云,注册账号,实名认证;
进入“产品”→“物联网”→“物联网核心套件”,有创建实例的界面,但是不知道怎么使用;
于是先看下文档,“文档”→“物联网核心套件”,很多关于此的描述,操作指南、开发指南、API等;
发现需要了解的信息:
- “核心概念”,在“物联网核心套件”中所使用的一些基本概念;
- “系统限制”,有MQTT相关的限制值说明;
- “快速入门”,跟着这部分内容操作,就可以新建出一个实例,新增设备,添加模板,并且通过mqtt.fx 1.7.1订阅和发布信息;
1.2、操作中了解的概念——模板
操作的过程中要添加模板,模板是个什么东西呢?那就看看模板里有什么?
观察这个界面,模板里有“主题名称”,“描述”,“权限”;
MQTT是需要发布和订阅主题的,自然就要设置主题名,模板就是添加设备时设置主题名用的;
模板test有两个默认的主题名、一个新增的主题名:
- "$iot/{device Name}/msg":订阅,云端向客户端发送消息;
- 在使用mqtt.fx的时候,只可以使用此主题名来订阅消息,不可以发布;
- "$iot/{device Name}/events":发布,客户端向云端发送消息;
- 在使用mqtt.fx的时候,只可以使用此主题名来发布消息,不可以订阅;
- "$iot/{device Name}/user/both":订阅、发布
- 在使用mqtt.fx的时候,可以使用此主题名来订阅和发布消息;

1.3、操作中了解的技巧——用户名、密码设置
虽然创建设备的时候有了用户名和密钥,但是这并不能直接作为连接MQTT的用户名和密码,要经过加密计算,下面的链接就是一个在线的加密计算器,待输入的信息都可以在设备详情里找到,然后点击“获取当前时间戳”、“点击计算”下面就自动生成了。
但是,由于我还不太了解MQTT,弄错个信息就直接断开连接,而且还不能再次重连,重连就显示用户名密码错误,还得再获取时间戳生成新的用户名密码,很麻烦,然后我发现时间戳直接填0生成的用户名和密码也是可以建立MQTT连接的,并且在断开后可以再次连接。
MQTT 连接信息计算器 - 百度天工 IoT Core (bcebos.com)
1.4、遇到的问题
mqtt.fx使用1.7.1版本
mqtt.fx 1.7.0版本确实有bug,可以连上云,但是无法订阅、发布消息,请使用1.7.1版本;
错误的主题名导致MQTT断开连接
一开始以为是连接不稳定、或者mqtt.fx版本的问题,毕竟刚才使用1.7.0的时候确实有bug嘛,其实是我还不了解MQTT协议,所以主题名填写错误导致,也顺便发现了上面1.3中用户名和密码的设置,具体例子如下;
比如设备名是"mqttfx",在mqtt.fx上成功连接了以后:
在subscribe界面,可以订阅"$iot/mqttfx/user/both"和"$iot/mqttfx/msg",订阅其他的不会生效(列表),无反应就是了;
在publish界面,可以通过"$iot/mqttfx/events"、"$iot/mqttfx/user/both"来发布消息,一旦主题名选择错误会立刻断开MQTT连接;
2、创建两个设备、添加规则,实现两个MQTT客户端的通信
2.1、简要说明下思路
esp8266就是受控设备,比如控灯;mqtt.fx是模拟用户使用的客户端,比如手机app上可以发送控制灯亮灭的界面。
从MQTT协议的角度上看,esp8266和mqtt.fx都是MQTT客户端,百度智能云是MQTT服务器;
esp8266发送的消息,mqtt.fx可以收到;
mqtt.fx发送的消息,esp8266可以收到;
这样受控设备和用户,也就是esp8266和mqtt.fx好像可以直接通讯,而并没有通过云平台一样。
2.2、创建两个设备
在云上创建两个设备,对应着ESP8266和mqtt.fx,都是test模板,也就是主题名为"$iot/{device Name}/user/both",既能订阅也能发布;

2.3、添加规则
即便在同一个实例下,不同的设备不可以通过订阅相同的主题,来进行通信,要添加规则;
规则,就是数据转发的配置,选择数据从主题1转发到主题2;
刚才不是创建了两个设备嘛,我开始以为同一个实例下设备可以直接通信,想着设备“mqttfx”通过"$iot/mqttfx/user/both"来发布消息,设备“esp8266”订阅主题"$iot/mqttfx/user/both",就可以通信了,实际测试是不可以的哦。
所以我们想要两个设备之间可以相互通信,需要设置两个规则,一个将设备“mqttfx”的消息转发到设备“”esp8266”,另一个将设备”esp8266”的消息转发到设备“mqttfx”;

配置内部的规则,记得启用
比如mqttfx_to_esp8266,数据来源选择"$iot/mqttfx/user/both",数据目的地选择"$iot/esp8266/user/both";
就可以将mqttfx通过主题"$iot/mqttfx/user/both" 发布的数据转发给"$iot/esp8266/user/both";

2.4、两个MQTT客户端通信
至此,已经可以用mqtt.fx模拟在两个MQTT客户端之间实现数据的传输了,下一步,就是把云实例中设备"esp8266"替换真正的ESP8266,然后仍然用mqtt.fx模拟另一个客户端。

3、ESP8266使用MQTT协议通信
3.1、代码移植
本来想直接使用例程的,但是发现连不上wifi,一直打印"no 402 found, reconnect after 1s",于是替换之前写的能连上wifi的代码,并且把例程中其他部分暂时注释掉,还是不行,弄了很久最后放弃直接用例程,而是把例程需要的代码全部移植到之前的工程框架中,之前有一集关于makefile的,教怎么新建文件夹保存源文件和头文件的,我压根没放在心上.....现在就得回过头再看看把配置makefile的知识补上,没学习的内容就是一个坑,不填上迟早要掉进去。
3.1.1、在app文件夹下,新增子文件夹modules和mqtt,并添加.c文件如下

3.1.2、在app/include文件夹下,新增子文件夹modules和mqtt,并添加.h文件如下
我把mqtt_config.h也放在app/include/mqtt下了,因为都是mqtt相关的配置,我想放在一起;

3.1.3、复制app/user下的Makefile,粘贴到app/modules和app/mqtt目录下

3.1.4、修改app/modules/Makefile和app/mqtt/Makefile,替换为libxxx.a

3.1.5、修改app/Makefile,有3处,指明新增源文件和头文件的位置,还有.a静态库

3.1.6、复制user_main.c的内容
P.S. 因为注意到user_rf_cal_sector_set的内容与之前不一致,而这个函数与MQTT也不相关所以并没复制这个函数,复制了应该也没事,但没亲自试过所以备注在这里喽;
移植工作到此结束,总结一下,就是复制了mqtt和modules下的源文件和头文件,以及user_main.c
3.2、配置mqtt_config.h
我打马赛克的地方,是要根据百度智能云实际申请的内容修改的;

3.3、修改user_main.c中要发布和订阅的主题名为"$iot/esp8266/user/both"

3.4、开启debug.h中的打印
我也是下载完才发现这个问题,debug.h中默认是不开启的INFO,所以程序中INFO打印的信息都不会显示,记得添加以下宏定义:
#define GLOBAL_DEBUG_ON3.4、编译、下载,验证
打开mqtt.fx,将设备"mqttfx"连上云,订阅"$iot/mqttfx/user/both";
复位esp8266,设备"esp8266"连上云,发送了"ESP8266_Online",可在mqttfx端可以收到,又因为"$iot/esp8266/user/both"的权限是既发布又订阅,所以esp8266自己也收到了"ESP8266_Online";

设备"mqttfx"在主题"$iot/mqttfx/user/both"下发送"LED_ON",设备"esp8266"收到主题"$iot/esp8266/user/both"的"LED_ON",且灯被点亮;
同理,发送"LED_OFF",esp8266灯熄灭;

边栏推荐
- Machine learning notes - in depth Learning Skills Checklist
- js基础--Date对象
- Error [error] input tesnor exceeded available data range [neuralnetwork (3)] [error] input tensor '0' (0)
- MySQL:Got a packet bigger than ‘max_ allowed_ packet‘ bytes
- Analysis of high frequency interview questions in massive data processing
- Device = depthai Device(““, False) TypeError: _init_(): incompatible constructor arguments.
- Zhiyun health submitted the statement to HKEx again: the loss in 2021 exceeded 4billion yuan, an increase of 43% year-on-year
- 报错device = depthai.Device(““, False) TypeError: _init_(): incompatible constructor arguments.
- [image processing] spatial domain image enhancement
- 机器学习笔记 - 卷积神经网络备忘清单
猜你喜欢

MSF SMB based information collection

Machine learning notes - spatial transformer network using tensorflow

报错Version mismatch between installed depthai lib and the required one by the scrip.

Identifier keyword literal data type base conversion character encoding variable data type explanation operator

Bowen dry goods | Apache inlong uses Apache pulsar to create data warehousing
![[image processing] spatial domain image enhancement](/img/d9/6afee1006570651ccf93ed8da95dd3.png)
[image processing] spatial domain image enhancement

Revisiting Self-Training for Few-Shot Learning of Language Model,EMNLP2021

Output image is bigger (1228800b) than maximum frame size specified in properties (1048576b)

Exclusive interview - dialogue on open source Zhai Jia: excellent open source projects should be seen by more people. I am honored to participate in them

Typescript -- preliminary study of variable declaration
随机推荐
Flask (VI) - template
[share] how do enterprises carry out implementation planning?
Why is it difficult to implement informatization in manufacturing industry?
Typescript -- preliminary study of variable declaration
Type-C docking station adaptive power supply patent protection case
ESP8266_SmartConfig
考研數學 【數列極限證明題】題型方法總結
Detailed explanation of this and static
【软件】ERP体系价值最大化的十点技巧
Package details
Simulation of map and set
Talk about reading the source code
Modularnotfounderror: no module named 'find_ version’
报错[error] input tesnor exceeds available data range [NeuralNetwork(3)] [error] Input tensor ‘0‘ (0)
Type-C Bluetooth speaker single port rechargeable OTG solution
【智能开发】血压计方案设计与硬件开发
机器学习笔记 - 卷积神经网络备忘清单
[software] ten skills to maximize the value of ERP system
[ERP system] how much do you know about the professional and technical evaluation?
Flask (III) -- variable rules