微信小程序控制空调之接收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设置
-
选择开发板:ESP32 Dev Module
-
设置串口波特率: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. 测试步骤
-
编译上传程序到ESP32
-
打开串口监视器查看连接状态
-
使用MQTTX发布测试消息:
-
-
使用手机红外检测APP验证信号发射。
五、常见问题解决
1. WiFi连接失败
-
检查SSID和密码是否正确,尽量使用数字和字母组合,可以变更下自己的WiFi
-
确保路由器支持2.4GHz频段(这个很关键)
2. MQTT连接不稳定
-
检查MQTT服务器状态
-
增加keepalive间隔:
总结
本文详细介绍了基于ESP32和MQTT的空调远程控制系统实现方案,核心优势包括:
-
低成本:使用通用开发板和公共MQTT服务
-
易扩展:支持多种空调品牌协议
-
高可靠:具备完善的网络重连机制
-
强安全:可扩展TLS加密和认证机制
通过本项目,你可以将传统空调升级为智能设备,实现:
-
手机远程控制
-
定时开关机
-
温度自动调节
-
能耗统计分析