一、目的

本文将实现:

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

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

  1. 腾讯云服务器远程连接登录流程

    腾讯云服务器购买后从哪登录连接服务器?有5种方法可以登录到云服务器操作,无论是Windows还是Linux系统在云服务器管理控制台都可以登录,腾讯云百科来详细说下腾讯云服务器远程连接登录的方法流程: ...

  2. 腾讯云服务器远程连接登陆的方法

    腾讯云服务器怎么连接登录?腾讯云服务器支持多种远程连接方法,可以使用腾讯云管理控制台自带的远程连接工具,也可以使用第三方远程连接工具,如如PuTTY.Xshell等,Linux操作系统可以SSH登录, ...

  3. 阿里云服务器远程连接账号密码获取方法

    阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同,阿里云服务器没有默认密码,如果没有设置密码需要先重置实例密码再远程连接,阿小云来详细说下阿里云 ...

  4. 轻量云服务器远程连接不了怎么办?

    ​ 轻量云服务器为轻量级云计算服务,其可满足低需求.轻体验的个人和企业用户.但是,有时候我们会遇到轻量云服务器远程连接不了的问题,这对于需要远程管理服务器的用户来说是非常困扰的.本文展示了轻量云服务器 ...

  5. Docker——更新至2021/3/2,腾讯云centos7-dockermysql远程连接

    Docker学习--ING,参考<第一本docker书> 一.什么是Docker 1.1 Docker简介 1.1.1 Docker的核心组件 1.1.2 Docker的作用 1.1.3 ...

  6. 腾讯云 mysql 远程连接

    在腾讯云服务器上,开放mysql的远程连接. 在腾讯云后台开发3306端口 回到linux服务器,查看到 防火墙是不允许3306端口的 开发防火墙的3306端口 firewall-cmd --zone ...

  7. 腾讯云redis远程连接

    1 .开启腾讯云服务器种Redis 的端口 2 并重启 3.修改 已经安装在腾讯云服务器中Redis 中配置文件redis.conf   4.重启Redis 5.采用  XShell 进行连接服务器 ...

  8. 腾讯云服务器FTP连接不上

    放行FTP端口21需要到安全组设置 小编一直用的是阿里云服务器,买了一个腾讯云服务器后在控制台找不到安全组这个选项也是疯了,最后花了九牛二愣子之力终于找到了安全组 1.在控制台中找到安全组规则

  9. 关于阿里云服务器远程连接及账户密码登录介绍

    一.远程连接 一般我们购买云服务器之后,可以直接修改实例密码和远程连接密码,然后直接可以远程连接服务器 此时输入远程连接密码之后,就可以登录到云服务器上了 二.账户名,密码登录 一般一开始我们都是通过 ...

最新文章

  1. 驰骋工作流引擎-嵌入式表单的介绍
  2. 深度学习崛起十年:“开挂”的OpenAI革新者
  3. 海量数据处理的思路和方法
  4. python opencv教程rtsp server_Python多进程opencv调用rtsp视频流
  5. Aix oracle 自动启动,AIX如何自动启动和关闭软件的运行
  6. tp5 ajax 路由,tp5中ajax方式提交表单
  7. C++输入输出:cin/cout 还是 scanf/printf?
  8. PRML-系列二之2.3
  9. 浅入深出Vue:注册
  10. c语言十几行编译出上百k,二级C语言上机编程题技巧总结选读.doc
  11. 面试官:背了几道面试题就敢说熟悉Java源码?我们不招连源码都不会看的人|原力计划...
  12. 自由与钱无关,限制你的只是自己的格局——北漂18年(77)
  13. Win10 如何解决,应用商店打不开,错误代码0x80131500问题
  14. 【短道速滑四】Halcon的texture_laws算子自我研究
  15. 一张图看懂企业经营,企业战略的本质,企业数字化转型 Road Map, 企业大脑的本质...
  16. 三大框架之---MyBaits第二章
  17. 笔记本计算机的连接无线网络连接,计算机无法连接到无线网络,我将详细教您解决笔记本电脑无法连接到无线网络...
  18. (转)逃脱者可获生机(上)
  19. 网站后台没有提示声怎么办_收藏 | 没有 PS 怎么办?10个在线作图网站,轻松搞定图片设计...
  20. 台湾国立大学(林轩田)《机器学习技法》(第7讲)blending and bagging

热门文章

  1. html怎么加漂浮物,仿天涯底部固定漂浮导航
  2. 【Java 数据结构 算法】宁可累死自己, 也要卷死别人 12 红黑树
  3. 如何在ABBYY FineReader 12中添加图像
  4. shared_from_this的使用
  5. 【C++标准库】std::chrono
  6. 微服务: 想办法让项目运行起来
  7. mysql zimbra_Zimbra 相关设置
  8. React生命周期理解
  9. shardingjdbc多数据源配置
  10. hypermesh导出cdb模型导入workbench ACP后set丢失