当前位置: 首页 > news >正文

微信小程序控制空调之接收MQTT消息

目录

目录

目录

前言

一、项目概述

二、环境配置

1. 所需库安装

2. Arduino IDE设置

三、代码

1. 网络连接配置

2. WiFi连接实现

3. MQTT客户端连接

4. MQTT消息回调处理

四、测试

1. 测试工具

2. 测试步骤

1. WiFi连接失败

2. MQTT连接不稳定

总结


前言

本文将详细介绍如何使用ESP32开发板通过MQTT协议接收云端指令,实现对空调设备的远程控制。项目采用PubSubClient库实现MQTT通信,通过GPIO电平变化控制STM32芯片实现红外遥控器信号。

环境:arduino

芯片:ESP32


一、项目概述

本项目构建了一个基于MQTT的智能空调控制系统,核心功能包括:

  • 通过WiFi连接家庭网络

  • 订阅MQTT主题接收控制指令

  • 解析云端下发的温度设置命令

  • 通过GPIO电平变化模拟红外遥控信号

  • 实现空调的远程开关和温度调节

二、环境配置

1. 所需库安装

在Arduino IDE中安装以下库:

工具 -> 管理库 -> 搜索安装:
- WiFi (内置)
- PubSubClient by Nick O'Leary

2. Arduino IDE设置

  1. 选择开发板:ESP32 Dev Module

  2. 设置串口波特率:115200

三、代码

1. 网络连接配置

// WiFi配置
const char *ssid = "205";            // WiFi名称
const char *password = "12341234";   // WiFi密码// MQTT服务器配置
const char *mqtt_broker = "broker.emqx.io"; // 公共MQTT代理
const char *mqtt_topic = "aircon/temperature"; // 订阅主题
const char *mqtt_username = "emqx";         // MQTT用户名
const char *mqtt_password = "public";       // MQTT密码
const int mqtt_port = 1883;                 // MQTT端口

2. WiFi连接实现

void connectToWiFi() {WiFi.begin(ssid, password);Serial.print("Connecting to WiFi");while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("\nConnected to WiFi");Serial.print("IP Address: ");Serial.println(WiFi.localIP());
}

3. MQTT客户端连接

void connectToMQTT() {while (!mqtt_client.connected()) {String client_id = "esp32-client-" + String(WiFi.macAddress());Serial.printf("Connecting to MQTT Broker as %s.....\n", client_id.c_str());if (mqtt_client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {Serial.println("Connected to MQTT broker");mqtt_client.subscribe(mqtt_topic);mqtt_client.publish(mqtt_topic, "ESP32 connected"); } else {Serial.print("Failed, rc=");Serial.print(mqtt_client.state());Serial.println(" retrying in 5 seconds");delay(5000);}}
}

4. MQTT消息回调处理

核心控制逻辑

void mqttCallback(char *topic, byte *payload, unsigned int length) {Serial.print("Message received on topic: ");Serial.println(topic);Serial.print("Payload: ");// 打印完整消息内容for (unsigned int i = 0; i < length; i++) {Serial.print((char)payload[i]);}// 解析温度设置指令if(length >= 2 && (char)payload[0] == 'T') {int temperature = (int)(payload[1] - '0'); // 转换ASCII数字为整数Serial.print("\nSetting temperature to: ");Serial.println(temperature);// 根据温度执行不同操作if(temperature == 24) {// 发送24对应IO,控制STM32发送信号digitalWrite(13, HIGH);delay(100); // 红外信号高电平持续时间digitalWrite(13, LOW);} else if(temperature == 26) {// 发送26℃对应IO,控制STM32发送信号digitalWrite(14, HIGH);delay(100); // 红外信号高电平持续时间digitalWrite(14, LOW);}}Serial.println("\n-----------------------");
}

5.loop函数

void loop() {if (!mqtt_client.connected()) {connectToMQTT();}mqtt_client.loop();
}

四、测试

1. 测试工具

工具类型推荐工具用途
MQTT客户端MQTTX消息发布测试
串口监视器Arduino IDE调试信息输出
红外分析仪逻辑分析仪验证红外信号

2. 测试步骤

  1. 编译上传程序到ESP32

  2. 打开串口监视器查看连接状态

  3. 使用MQTTX发布测试消息:

  4. 使用手机红外检测APP验证信号发射。

五、常见问题解决

1. WiFi连接失败

  • 检查SSID和密码是否正确,尽量使用数字和字母组合,可以变更下自己的WiFi

  • 确保路由器支持2.4GHz频段(这个很关键)

2. MQTT连接不稳定

  • 检查MQTT服务器状态

  • 增加keepalive间隔:


总结

本文详细介绍了基于ESP32和MQTT的空调远程控制系统实现方案,核心优势包括:

  • 低成本:使用通用开发板和公共MQTT服务

  • 易扩展:支持多种空调品牌协议

  • 高可靠:具备完善的网络重连机制

  • 强安全:可扩展TLS加密和认证机制

通过本项目,你可以将传统空调升级为智能设备,实现:

  • 手机远程控制

  • 定时开关机

  • 温度自动调节

  • 能耗统计分析

http://www.lryc.cn/news/582772.html

相关文章:

  • Maven 打包排除特定依赖的完整指南(详细方法 + 示例)
  • 作业03-SparkSQL开发
  • 无缝矩阵的音频合成与音频分离功能详解
  • Rust BSS段原理与实践解析
  • RustFS一款Rust 驱动的 高性能 分布式存储系统
  • Modbus TCP转Profinet网关实现视觉相机与西门子PLC配置实例研究
  • Tomcat:启用https(Windows)
  • 传输层协议TCP、UDP
  • CI/CD — DevOps概念之实现k8s持续交付持续集成(一)
  • 数据结构:位图
  • IDEA Maven报错 无法解析 com.taobao:parent:pom:1.0.1【100%解决 此类型问题】
  • 分布式光纤传感:为储能安全保驾护航
  • 广度优先与深度优先遍历核心逻辑理解及实践
  • 关于 scrapy框架 详解
  • OpenCV在Visual Studio 2022下的配置
  • Android 中的多线程编程全面解析
  • 【机器学习笔记 Ⅲ】5 强化学习
  • 【docker】linux CentOS docker 安装流程
  • Centos和麒麟系统如何每天晚上2点10分定时备份达梦数据库
  • Redis:高性能内存数据库与缓存利器
  • java内存缓存实现 与 redis缓存实现 (ConcurrentHashMap 应用)
  • Mac安装Docker(使用orbstack代替)
  • 从深度学习的角度看自动驾驶
  • ubuntu24.04(vmware workstation 17.6pro)无法安装vmtools的问题解决
  • Using Spring for Apache Pulsar:Quick Tour
  • 短视频矩阵管理平台的崛起:源头厂商的深度解析
  • Rust 的 Copy 语义:深入浅出指南
  • huggingface笔记:文本生成Text generation
  • 【Node.js】文本与 pdf 的相互转换
  • 在 Linux(openEuler 24.03 LTS-SP1)上安装 Kubernetes + KubeSphere 的防火墙放行全攻略