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

目录

目录

目录

前言

一、项目概述

二、环境配置

[1. 所需库安装](#1. 所需库安装)

[2. Arduino IDE设置](#2. Arduino IDE设置)

三、代码

[1. 网络连接配置](#1. 网络连接配置)

[2. WiFi连接实现](#2. WiFi连接实现)

[3. MQTT客户端连接](#3. MQTT客户端连接)

[4. MQTT消息回调处理](#4. MQTT消息回调处理)

四、测试

[1. 测试工具](#1. 测试工具)

[2. 测试步骤](#2. 测试步骤)

[1. WiFi连接失败](#1. WiFi连接失败)

[2. MQTT连接不稳定](#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加密和认证机制

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

  • 手机远程控制

  • 定时开关机

  • 温度自动调节

  • 能耗统计分析

相关推荐
2601_9499506315 小时前
考研英语资料太散?用小程序把真题、词汇和错题放到一起
人工智能·学习·考研·小程序·刷题·小程序推荐
jianqiang.xue16 小时前
ESP-IDF保姆级入门11|FreeRTOS队列通信全解:生产者消费者+中断数据转发+多任务解耦,彻底搞定任务间交互
单片机·嵌入式硬件·物联网·架构·esp32
jianqiang.xue16 小时前
ESP-IDF保姆级入门09|ADC模拟量采集全解:电位器调压+光敏传感器+OLED显示,打通模拟→数字全链路
stm32·单片机·物联网·架构·esp32
逗脑IDE17 小时前
零基础学ESP32:光敏传感器——让ESP32拥有“感光”能力!
python·物联网·esp32·智能家居
lhldsg18 小时前
树洞倾诉的核心需求与产品定位误区
java·前端·小程序
lhldsg18 小时前
宠物同城领养平台开发实战:从需求分析到上线部署指南
java·前端·小程序·需求分析·宠物
171320330计算机毕设编程19 小时前
基于SpringBoot的在线拍卖系统
android·java·spring boot·小程序·课程设计
2501_9160074719 小时前
Flutter与游戏App加固避坑指南:如何为混合开发与高交互应用选对安全方案?
安全·flutter·游戏·ios·小程序·uni-app·iphone
andrsted1 天前
老师可以用小程序在线整理题库、课堂检测和错题集
学习·微信小程序·小程序·学习方法
show4331 天前
2026小程序视频转文字多语种识别引擎选型:22方言25外语
小程序·音视频