ESP32:整合存储配网信息和MQTT笔记

文章目录

  • 1.给LED和KEY的所用IO增加配置项
    • 1.1 增加配置文件
    • 1.2 修改相应的c源码
  • 2. 把mqtt\tcp的工程整合到一起
    • 2.1 在何处调用 mqtt_app_start()
  • 3. 测试MQTT
  • 4. 完整的工程源码

有一段时间没有玩ESP32,很多知识点都忘记了。今天测试一下MQTT,做个笔记。
这个是在《 ESP32存储配网信息+LED显示配网状态+按键清除配网信息》的工程下面增加:

  1. LED和KEY的所用IO增加配置项;
  2. 把IDF自带《examples》下面的《protocols\mqtt\tcp》整合进工程。

参考文章:
1.作者:荆棘谷555,《基于ESP32的mqtt客户端测试及服务器搭建流程和踩坑指南》。
2.本人的《WINDOWS10环境下利用开源软件EMQX搭建MQTT服务器》。

1.给LED和KEY的所用IO增加配置项

1.1 增加配置文件

《smart_config\main》 文件夹下面增加 《Kconfig.projbuild》 文件:
在这里插入图片描述
该文件从文件夹《esp-idf\examples\protocols\mqtt\tcp\main》拷贝过来,增加:
在这里插入图片描述
执行工程全部清理命令:
在这里插入图片描述
再次配置工程:
在这里插入图片描述

1.2 修改相应的c源码

对用到LED和KEY的源码做相应的改动。
《main\smartconfig_button.c》:

#ifdef  CONFIG_GPIO_KEY_IO#define GPIO_KEY_IO   CONFIG_GPIO_KEY_IO
#else#define GPIO_KEY_IO       0
#endif

《main\smartconfig_led.c》:

#ifdef   CONFIG_WIFI_STATUS_LED_IO#define WIFI_STATUS_LED_GPIO  CONFIG_WIFI_STATUS_LED_IO
#else    #define WIFI_STATUS_LED_GPIO  2
#endif

编译,烧录,运行,一切正常。

2. 把mqtt\tcp的工程整合到一起

把文件夹《esp-idf\examples\protocols\mqtt\tcp\main》下面的 app_main.c拷贝到本工程,并改名为smartconfig_mqtt.c
在这里插入图片描述
修改同目录下的《CMakeLists.txt》,增加 smartconfig_mqtt.c
在这里插入图片描述
smartconfig_mqtt.c中的主函数全部删除:

void app_main(void)
{

}

2.1 在何处调用 mqtt_app_start()

smartconfig_main.c的主函数 app_main() 结尾处调用 mqtt_app_start()
在这里插入图片描述
这样会在wifi还没有连接时就启动MQTT,影响wifi的联网速度。应该在wifi连接成功后,才调用 mqtt_app_start()
在这里插入图片描述

3. 测试MQTT

参考《WINDOWS10环境下利用开源软件EMQX搭建MQTT服务器》搭建本地MQTT服务器。查得服务器IP地址为 192.168.110.55,于是修改源码:
在这里插入图片描述
订阅两个主题 /A/EMQ/set/B/publish/1
在这里插入图片描述

A代表EMQX的网页客户端,B代表mqtt.fx客户端。
在这里插入图片描述

在这里插入图片描述
两个客户端发布的数据都可以被ESP32接收到:
在这里插入图片描述

4. 完整的工程源码

本着互相学习,互相分享,共同进步的精神,能提供源码尽量提供源码。下面是码云的连接:
《smart_config_mqtt》.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/309978.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行车记录仪变清晰,变高清的办法一定要收藏

有时候我们会发现行车记录仪拍摄的视频不够清晰,特别是出现事故需要视频为证的时候,如果视频太模糊,很难获得交警的支持,那么如何让行车记录仪拍摄的视频变得更加清晰呢? 小编给大家分享几个办法,建议收藏…

SpringBoot 增量/瘦身部署jar 包

背景 SpringBoot 项目的部署一般采用全量jar 包方式部署相关项目,如果我们对相关的Contrller\Service\Dao\Mapper 层进行相关业务调整就需要重新编译全量jar 包(包大小约为200M左右)实在太麻烦了。 本文:重点讲解使用SpringBoot 的增量/瘦身…

Qt Creator可视化交互界面exe快速入门5

上一期介绍了加法计算器,本期介绍QObject定时器。 首先一样先建个工程,比如我这项目名为QObject 本期的任务就是制作图片在界面上显示,然后每秒定时切换,点击另一个暂停按钮,可以定格当前图片,即取消定时切换功能。 显示图片的我们可以使用显示里面的label 这个用于显示…

探索 3D 图形处理的奥秘

最近一年多来,在 3Dfx、Intel 们的狂轰滥炸中,在 Quake、古墓丽影们的推波助澜下,三维图形已经成为计算机迷眼中的又一个热点。3D 世界到底是怎样的神奇,我们又是怎样享受它的乐趣呢?就让我们来一探究竟吧。 图形基础…

【eclipse】eclipse开发springboot项目使用入门

下载eclipse Eclipse downloads - Select a mirror | The Eclipse Foundation 安装eclipse 其他一步一步即可 我们是开发java web选择如下 界面修改 Window->Preferences-> 修改eclipse风格主题 Window->Preferences->General->Appearance 修改字体和大小…

akka集群结构、节点发现机制

akka集群结构、节点发现机制 引导流程 • Akka 管理 Kubernetes API 集群发现机制 使用 Akka Cluster 的服务比无状态应用程序有额外的要求。为了形成集群,每个 Pod 需要知道哪些其他 Pod 已部署为该服务的一部分,以便它们可以相互连接。 Akka 提供了…

SpringIOC之ApplicationObjectSupport

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

Linux LVM逻辑卷

一、LVM的定义 LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM 的快照功能可以帮助我们快速备份数据。LVM 为…

最常见的SQL报错注入函数(floor、updatexml、extractvalue)及payload总结

SQL报错注入是一种常见的SQL注入攻击方式,攻击者通过注入恶意代码,触发数据库的错误响应,并从错误信息中获取有用的信息。 下面介绍最常见的三个报错注入函数用法及payload总结: 1、floor() 使用floor报错注入,需要…

openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅

文章目录 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅179.1 发布179.2 订阅179.3 冲突处理179.4 限制179.5 架构179.6 监控179.7 安全性179.8 配置设置179.9 快速设置 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅 发布和订阅基于逻辑复…

通过nginx配置防御web漏洞

一、常见web漏洞 二、nginx防御策略: 要使用Nginx配置防御Web漏洞,可以采取以下措施: 禁用不必要的HTTP方法:Nginx默认启用了许多HTTP方法,如PUT、DELETE等。可以通过在Nginx配置中禁用不必要的HTTP方法来减少潜在的安…

Abstract Factory抽象工厂模式(对象创建)

抽象工厂模式:Abstract Factory 链接:抽象工厂模式实例代码 解析 目的 在软件系统中,经常面临着“一系列相互依赖的对象工作”;同时,由于需求的变化,往往存在更多系列对象的创建工作。 如何应对这种变化…