简介:
本文档总结自B站教程“博流智能BL618开发教程11——BL618使用MQTT协议连接物联网”,本节内容主要介绍分别使用PC端软件和BL618使用MQTT协议与OneNet网站通信。
视频链接:https://www.bilibili.com/video/BV11k4y1N7W8/?spm_id_from=333.788&vd_source=c53caa1106435edac8e0670704128529
MQTT相关参考资料:
EMQ 提供了MQTT相关学习资源和学习用的服务器。

MQTTX 提供了PC的客户端软件,用于学习PC端与服务器使用MQTT协议通信的过程。

OneNet服务器操作:
打开OneNet开发者中心,点击“产品开发”中的“创建产品”。

按照下图配置好产品信息。其中,开发方案选择“标准方案”可以提供许多现成的数据模型等。

在刚刚创建好的产品右侧点击“产品开发”。

提供了许多现成的物理数据模型。

点击“设备开发” - “Topic管理” - “物模型topic”,这里定义了发布/订阅消息的Topic格式。

点击“设备管理”,“产品范围”选择刚刚创建的“温度采集”产品,点击“添加设备”。

填写设备名称。

MQTTX客户端操作:
下载MQTTX 之后,使用MQTTX在PC端模拟一个设备向OneNet网站发送信息。
连接服务器:
打开MQTTX软件,点击"+"号,按下图填写信息后,点击“Connect”。其中, “Password”需要下载token生成工具来生成。

Password生成步骤:
在OneNet文档中心的token生成工具下载token生成工具并打开。按照下图填写信息后,点击“Generate”即可生成密码。其中,“时间戳”可以上网搜索时间戳转换器来生成,时间戳代表的时间为自定义的密码失效时间。“key”即OneNet网站中产品的“access-key”,详见下一张图。

OneNet网站中点击“产品开发”,点进刚刚创建的“温度采集”设备,点击“access-key”右侧的“查看”即可查看“access-key”。

连接成功后,可以在OneNet网站上的“设备管理”中看到,“room01”设备的设备状态为在线。

订阅与发送消息:
打开上面提到过的OneNet网站的“设备开发” - “Topic管理” - “物模型topic”,复制第二行Topic。

打开MQTTX,连接服务器后,点击“New Subscription”添加订阅,将刚刚复制的Topic填入并修改设备名称。添加订阅完成以后,当设备向服务器发送数据之后,服务器返回响应信息。


按下图的格式发送数据后,可见服务端立即响应相关信息。

回到OneNet网站的“设备管理”,点入“room01”设备的“属性”页,可见刚刚发送的温度和湿度的值。

若将温度值改为保留两位小数,则报错。因为产品的“物模型”定义了温度的步长为0.1。


如图所示,按照上面的方法再添加一个订阅。


回到OneNet网站的“设备管理”,点入“room01”设备,点击“设备调试” - “应用模拟器”,定义一个温度上限值,点击“属性设置”完成设置。

打开MQTTX可见接收到从服务端发来的属性设置消息。

BL618连接服务器
样例项目1(订阅):
打开bouffalo_sdk_vmg0-vmg0\examples\vmg0\onenet_mqtt_sub
项目下的onenet_mqtt_sub.c
文件。
代码简介:
按图示要求修改相关宏定义。


效果展示:
编译、烧录进BL618,打开串口调试助手(这里使用XShell),将波特率设为2000000。(记得把MQTT断开连接!)
可以打开电脑热点,“频段”必须设置为2.4G。


输入wifi_sta_connect 热点名称 热点密码
连接热点,例如wifi_sta_connect xiaomi 88888888
。(注意,热点必须是2.4G的)

输入mqtt_sub
后,BL618处于等待状态。按照刚刚的步骤在OneNet网站上在“设备调试”中设置温度上限后,BL618接收到响应信息。

样例项目2(发布):
打开bouffalo_sdk_vmg0-vmg0\examples\vmg0\onenet_mqtt_pub
项目下的onenet_mqtt_pub.c
文件。
代码简介:
和样例项目1一样,如图修改相关宏定义。此处Topic包含订阅Topic和发布Topic。


效果展示:
编译、烧录进BL618,打开串口调试助手(这里使用XShell),将波特率设为2000000。连接wifi/热点。输入mqtt_pub
后,BL618处于等待状态。
每过3秒,BL618会向服务器发送数据,并接受到来自服务器的响应信息。

调试技巧:
如果BL618连接的是电脑的热点,在收发数据的过程中遇到问题后,可以打开抓包工具(如Wireshark)来分析请求,将BL618与服务器之间的请求和MQTTX与服务器之间的请求对比,即可找出问题所在。
