手机、电脑mqtt客户端通过腾讯云服务器远程连接ESP32

本文详细介绍了如何实现ESP32与腾讯云物联网服务器的MQTT连接,以及如何通过电脑和手机客户端进行通信。首先创建腾讯云产品和设备,然后配置ESP32的MQTT例程,包括WiFi设置和主题订阅。接着,电脑和手机通过mqtt.fx及mqtt调试工具连接服务器,并设置数据转发规则,使手机或电脑的消息能被ESP32接收,实现远程通信。
摘要由CSDN通过智能技术生成

一、目的

        本文将实现:

        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命令行。

       

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值