一、目的
本文将实现:
1、esp32与腾讯云物联网服务器通过mqtt协议通信
2、电脑和手机客户端通过mqtt与腾讯云相通信
3、腾讯云服务器内部消息转发,将手机、电脑发布的主题转发给esp32订阅,实现手机、电脑与esp32的远程通信。
二、准备
2.1 esp32
本次使用的esp32是安信可的nodeMCU-32s,开发环境是vscode+espressif-IDF。使用官方例程库中mqtt下的tcp例程。
2.2 腾讯云服务器
(看物联网通信的计费规则,好像10w条消息以下是免费的?)
依次点击:腾讯云服务器官网——控制台——物联网通信
2.3 电脑端mqtt工具
用来模拟mqtt设备,作为一个终端与esp32通过mqtt协议相互通信。软件名称是mqtt.fx,下载链接:(我点击Download没反应,最后我还是自己去百度了一个1.7.1版本的)Download (jensd.de)http://mqttfx.jensd.de/index.php/download
2.4 手机端mqtt工具
百度找的,名字叫mqtt调试工具,app封面是贞明电子。链接就不贴了。
三、腾讯云服务器设置
3.1 创建产品和设备
先在服务器上给各个设备申请一个产品,让服务器可以“识别”本地的mqtt设备。依次按照下图点击:
这里刚开始四个项目显示应该都是0,我这里是已经创建过产品了。
注意就按照图中所选择的,选择密匙认证,产品名称随意写,你能分清楚这是给哪个设备用的就好。我这里是给电脑端的mqtt.fx工具用的,所以名称是mqtt_fx。
这里的三个字符串就是之后连接要使用的密匙相关信息,先记住。
到这里就为电脑端的mqtt工具创建了一个产品,同理按照上面的步骤可以依次给esp32、手机端的mqtt工具也都创建一个产品和设备。之后的步骤在填信息的时候,esp32要填esp32的产品设备信息,电脑端的mqtt.fx和手机端的mqtt调试助手也要填它们对应的设备信息。
以下步骤默认你已经创建了三个产品以及其下的设备。
3.2 查看主题(Topic)
mqtt协议的通信方式是:假如一个设备向服务器的一个主题发布消息,所有与服务器相连的其他设备,如果它们订阅了该主题,就会被服务器转发这个消息。这个主题就是下图中的Topic。
依次点击产品列表——设备列表——点击设备名称——Topic列表。按这个步骤依次点击后就出现了下图,一般初始状态会有三个主题(图中的test是我自定义的),Topic权限下面的xxxxxxx/esp32_2/data这个路径,一会儿esp32要订阅该主题,这样esp32就能接收到电脑端mqtt.fx发送的主题消息了(虽然还差一个条件:服务器内消息转发,下文会说)。
这一部分大家也可以直接去看腾讯云官方的文档,讲得更清楚一点:
物联网通信 MQTT.fx 接入指南-快速入门-文档中心-腾讯云 (tencent.com)https://cloud.tencent.com/document/product/634/14630
四、esp32与腾讯云连接
4.1 esp32例程中mqtt的相关改动
4.1.1 在例程中修改密匙认证相关的部分
找出esp32官方的例程,我是用的vscode安装espressif扩展。按F1弹出命令框。键入ESP-IDF,然后找到并选择“展示示例项目”。
选择mqtt下的tcp项目,然后将他导入到工作区:
修改下图中这一部分,具体内容可以看这个文章。(11条消息) ESP32使用MQTT_TCP连接阿里云_荻夜的博客-CSDN博客_esp32 mqtthttps://blog.csdn.net/u012121390/article/details/115721582
上图中的 .host是下图中的产品id后面加上.iotcloud.tencentdevices.com
因为我们是密匙认证,所以端口选择1883。剩下三个就是3.1中最后要记住的三个字符串,对应名字填入即可。
4.1.2 在例程中修改订阅主题命令
图中选中的部分就是订阅主题的操作,程序中xxxxxxxxx就是上图的产品ID,这里要写的就是3.2中最后要记住的Topic,把data那一行粘贴在这儿就好。(下图的test那两行是我自己定义的,不用写)。发布和订阅的主题都只能是自己这个设备的主题,所以这个data的路径里其实就是产品ID/设备名称/data。
4.2 esp32例程中WIFI设置
方法一:按F1,键入ESP-IDF,找到下图中选中的“SDK配置编辑器(menuconfig)”
按下图依次点击。框中要填写的是WIFI账号和密码。
方法二:按F1,键入ESP-IDF,打开终端,在终端输入idf.py menuconfig
找到WIFI配置,把账号密码填入即可,我按方向键上下没办法移动选中,另一台电脑却可以,所以这个方法就不演示了。
4.3 编译烧录
1、按f1,找到ESP-IDF:打开控制台选项
2、设置对象芯片:idf.py set-target esp32
3、编译命令:idf.py build
4、下载命令(去设备管理器看是哪个端口):idf.py -p COMx flash
5、串口监视:idf.py -p COMx monitor
6、清除工程:idf.py fullclean
4.4 结果
经过以上的步骤后,就应该能实现esp32和腾讯云服务器相连,你可以使用设备里的在线调试向esp32发送消息来测试是否成功。Topic就选择刚刚在程序里粘的xxxxxxxxx/esp32_2/data。
但是到了这里还不能实现电脑、手机的消息发送到esp32,还差一步,就是数据转发。在这之前,先说一下电脑和手机客户端怎么连接腾讯云服务器。
五、电脑、手机客户端连接腾讯云服务器
5.1 电脑mqtt.fx设置
打开后界面如下,laptop是我自己定义的,初始应该不是这个。先点击图中圈中的按钮。
下图中遮住的部分要填的就是3.1中创建的电脑对应的产品和设备,大概格式是:
Broker Address:xxxxxxxx.iotcloud.tencentdevices.com
Client ID:xxxxxxxxlaptop
然后是User Credentials选项卡,因为我们选择的是密匙认证,所以要填这个。这里就是之前3.1中要记住的三条字符串里的username和password。然后选择Apply和OK。
这个界面就是发布主题消息的界面,选择主题然后发送,就可以在服务器端的在线调试同一个主题下接收到消息。跟esp32发布和订阅主题时是一样的,也是只能订阅和发布自己这个设备的主题。
如果想要mqtt.fx接收到消息,就需要该界面右边的在Subscribe选项卡中订阅该主题。订阅后如下图所示
5.2 手机mqtt调试助手设置
MQTT名称:随意
服务器地址:产品ID.iotcloud.tencentdevices.com
端口号:1883
用户名:3.1中要记住的username
密码:3.1中要记住的password
client ID:产品ID+设备名称
发布和订阅的主题还是只能选自己的主题,在3.2时我们已经说了主题在哪里找。填好之后如下图所示。注意发布消息时的格式:{"data":1},之后数据转发时有用。
到这里就实现了电脑、手机、esp32各自与服务器的连接。接下来要说的就是数据转发,用来实现各个设备之间的通信。
六、数据转发
选择规则引擎,点击新建规则。
两个空都随意填,但是最好填一个可以一眼看出其用处的,比如phone_to_esp32。
创建好之后,点击页面中的添加行为操作。
我们是要将phone发布的主题转发给esp32,这样就能实现phone控制esp32了。所以这里添加规则产品设备要选择esp32的产品和设备。你会发现,这个主题其实就是我们之前在esp32修改程序的章节里,esp32订阅的主题。
再点击行为操作上面的筛选数据板块右边的编辑。
按照下图填写,在5.2里我们手机发送数据的格式是{"data":1},这里编辑规则的data字段,就是如果phone发送的数据中含有data时,就将该消息转发给esp32的指定主题。然后因为esp32订阅了该主题,所以该消息会被发送给esp32。
注意不要忘记在这里点击启用。这样就大功告成了,你可以测试esp32是否可以接收到手机发送的消息了。同理,电脑端的mqtt.fx也可以这么设置,这里就不再赘述了。
规则引擎更多使用方法参见官方文档,我这里就是简单用了一下,没有灵魂。
物联网通信 数据转发到另一 Topic-控制台使用手册-文档中心-腾讯云 (tencent.com)
七、总结
最初配置这个的原因是自己去年买的esp32已经闲置很久了,现在打算给自己在宿舍的电脑整一个远程开机,然后拿teamviewer控制一下(我知道淘宝有很多便宜的模块能实现了,这只是折腾着玩一下)。当时配置开发环境就用了我好多时间,最后配置完好像也没那么难,其实就是网络问题搞得很难受。之前千辛万苦配置了platform+vscode+arduino的环境,但是arduino用不习惯,因为自己一直用的单片机的开发环境,最后还是用了vscode+espressif命令行。文章来源:https://www.toymoban.com/news/detail-506476.html
文章来源地址https://www.toymoban.com/news/detail-506476.html
到了这里,关于手机、电脑mqtt客户端通过腾讯云服务器远程连接ESP32的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!