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.mzph.cn/news/585657.shtml

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

相关文章

基于ssm的4S店预约保养系统开发+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

如何成功拿下uniapp生命周期?

uniapp介绍 Uniapp作为一款跨平台应用开发框架,具有两个生命周期: 组件生命周期页面生命周期什么是页面? pages下面的.vue或者.nvue(app端)文件就是页面 什么是组件? 一般通常会把项目中的组件放在com…

web前端开发html/css求职简介/个人简介小白网页设计

效果图展示&#xff1a; html界面展示&#xff1a; html/css代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.…

驶入未来:网约车运营数据揭秘与可视化大屏展示

驶入未来&#xff1a;网约车运营数据揭秘与可视化大屏展示 引言1. 数据获取与准备1.1 数据来源1.2 数据结构 2. 数据处理模块2.1 数据清洗2.2 数据转换2.3 数据整合 3. 数据可视化大屏4. 创新性可视化展示5. 应用与决策支持 结语 引言 数字化时代下&#xff0c;网约车运营数据…

轮滑培训机构会员系统,轮滑俱乐部会员卡管理软件教程

轮滑培训机构会员系统&#xff0c;轮滑俱乐部会员卡管理软件教程 一、软件程序问答 1、轮滑会员管理&#xff0c;那么会员卡是否可以直接用手机号呢&#xff1f; 如下图&#xff0c;软件以 佳易王轮滑会员管理系统V16.2为例说明 会员在登记的时候&#xff0c;会员卡可以直…

python实现图像的二维傅里叶变换——冈萨雷斯数字图像处理

原理 二维傅里叶变换是一种在图像处理中常用的数学工具&#xff0c;它将图像从空间域&#xff08;我们通常看到的像素排列&#xff09;转换到频率域。这种变换揭示了图像的频率成分&#xff0c;有助于进行各种图像分析和处理&#xff0c;如滤波、图像增强、边缘检测等。 在数学…

按摩上门预约小程序源码系统 开发组合:PHP+MySQL 附带完整的搭建教程

现代生活节奏的加快&#xff0c;人们越来越注重健康与放松。按摩作为传统的舒缓方式&#xff0c;市场需求逐年上升。然而&#xff0c;传统的按摩服务预约方式较为繁琐&#xff0c;用户需拨打热线电话或前往实体店进行预约&#xff0c;这无疑增加了用户的操作成本。因此&#xf…

【JavaScript】异步解决方案的发展历程

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

揭秘营销返利模式!

随着互联网的普及和发展&#xff0c;越来越多的商家开始采用营销返利模式来吸引消费者。这种模式不仅可以提高销售额&#xff0c;还可以让消费者获得实实在在的优惠。本文将详细解析营销返利模式的秘密&#xff0c;让你轻松掌握这一有效的营销策略&#xff01; 一、什么是营销返…

C++继承与派生——(6)派生类的析构函数

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 站在巨人的肩上&#xff0c;是为了超过…

关于Omlox定位标准(一)——omlox hub

关于Omlox定位标准 Omlox是世界上第一个开放的定位标准&#xff0c;旨在实现灵活的实时定位解决方案&#xff0c;&#xff0c;可以使用来自各个制造商的单元。“omlox"一词源自拉丁词汇"omni”&#xff08;无处不在&#xff09;和"locus"&#xff08;位置…

18国签署,全球首份《安全AI系统开发指南》发布

内容概述&#xff1a; 2023年11月27日&#xff0c;美国、英国和其他十几个国家公布了首份关于如何保护AI免受流氓行为侵害的详细国际协议《安全AI系统开发指南》&#xff0c;敦促企业打造“设计安全”的AI系统。协议由英国国家网络安全中心&#xff08;NCSC&#xff09;主导&a…

基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

【Spark精讲】一文讲透SparkSQL执行过程

SparkSQL执行过程 逻辑计划 逻辑计划阶段会将用户所写的 SQL语句转换成树型数据结构(逻辑算子树)&#xff0c; SQL语句中蕴含的逻辑映射到逻辑算子树的不同节点。 顾名思义&#xff0c;逻辑计划阶段生成的逻辑算子树并不会直接提交执行&#xff0c;仅作为中间阶段 。 最终逻辑…

二、KMDF开发之HelloWord

目录 第一步、创建KMDF项目 第二步、代码里增加打印信息 最终我们是要自己开发PCIE驱动&#xff0c;这里使用HelloWord工程把整个环境打通&#xff0c;下一篇将讲KMDF双机调试环境的搭建&#xff0c;开发环境的搭建见上一篇博文《一、KMDF开发之环境搭建-CSDN博客》。 第一步…

关键字:abstract关键字

在 Java 中&#xff0c;abstract是一个关键字&#xff0c;用于修饰类和方法。当一个类被声明为抽象类时&#xff0c;它不能被实例化&#xff0c;只能被其他类继承。同时&#xff0c;抽象类可以包含抽象方法&#xff0c;抽象方法没有方法体&#xff0c;只包含方法的签名&#xf…

java spring boot 自定义 aop

以一个锁的加锁和释放为例 1、先定义注解 /*** 锁切面* author fmj*/ Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface VersionLockAOP { }2、然后定义切面类以及切点 /*** 切面*/ Component Aspect Slf4j public class VersionLockAOPAspe…

Spring AOP<一>简介与基础使用

spring AOP 基础定义 含义使用切面组织多个Advice,Advice放在切面中定义。也就是说是定义通知的自定义类。自定义的AOP类Aspect连接点方法调用&#xff0c;异常抛出可以增强的点JoinPoint &#xff1a;也就是**被增强的方法的总称&#xff0c;可以获取具体方法的信息&#xff…

Navicat删除连接报错:service in use cannot be deleted的解决方法

我在删除连接时遇到了这个报错&#xff0c;内容如图。下面我介绍两种解决方法&#xff0c;非常简单。 第一种 右键点击想要删除的连接&#xff0c;先选择“关闭连接”。再选择“删除连接” 第二种 如果第一种方法无效&#xff0c;直接关闭Navicat软件&#xff0c;重新打开。然后…

【c/c++】指针例图基础详解

文章目录 指针变量内存指针详解例1例2练习&答案解析 指针变量内存 int main(){// 各类型变量占字节数printf("char: %d\n",sizeof(char)); // 1printf("short: %d\n",sizeof(short)); // 2printf("int: %d\n",sizeof(int)); // 4pri…