基于ESP32-C3的WIFI+BLE空气净化器开发

 接到一个客户项目,要求三天搞定一个WIFI净化器开发。通过MCU+ESP32-C3模组的方式和云平台通讯,使用CozyLife APP远程控制,通过CozyLife对接好Google Assitant、Amazon Echo、小度、小爱、天猫精灵,最好能原生支持HomeAssiant.提供了MCU的通讯协议,经过两天努力,终于完成,先看效果视频

空气净化器示例,利用ESP32-C2透传固件,低成本、高效连接传统设备,实现智能控制

模组:https://shenzhendoit.taobao.com/category-1446967873.htm?spm=a1z10.5-c.w4010-25042544274.10.58f28e48znh1Ox&search=y&parentCatId=1446967870&parentCatName=%C0%D6%F6%CE%CF%B5%C1%D0%C4%A3%D7%E9&catName=ESP32-C3%A3%A8WIFI%2BBLE%A3%A9#bd

#include <stdio.h>
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_wifi.h"
#include "mqtt_client.h"
#include "driver/uart.h"
#include "esp_event.h"
#include "esp_cozylife.h"  // 假设有CozyLife SDK头文件

#define UART_NUM UART_NUM_1
#define UART_TX_PIN 17
#define UART_RX_PIN 16

static const char *TAG = "WIFI_PURIFIER";

// 初始化WIFI连接
void wifi_init() {
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_sta();
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);
    esp_wifi_set_mode(WIFI_MODE_STA);
    esp_wifi_start();
}

// MQTT事件处理回调
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event) {
    switch (event->event_id) {
        case MQTT_EVENT_CONNECTED:
            ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
            // 订阅必要的Topic
            esp_mqtt_client_subscribe(event->client, "/home/purifier/control", 0);
            break;
        case MQTT_EVENT_DATA:
            ESP_LOGI(TAG, "Received data: %.*s", event->data_len, event->data);
            // 处理接收到的控制指令并发送到MCU
            uart_write_bytes(UART_NUM, event->data, event->data_len);
            break;
        // 其他MQTT事件处理
        default:
            break;
    }
    return ESP_OK;
}

// 初始化MQTT客户端
void mqtt_app_start() {
    esp_mqtt_client_config_t mqtt_cfg = {
        .uri = "mqtt://mqtt_broker_url", // 替换为实际的MQTT broker URL
    };
    esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
    esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler_cb, NULL);
    esp_mqtt_client_start(client);
}

// CozyLife APP控制对接
void cozylife_init() {
    // 假设CozyLife提供了SDK,可以直接调用初始化方法
    cozylife_init_app();
}

// UART初始化
void uart_init() {
    uart_config_t uart_config = {
        .baud_rate = 115200,
        .data_bits = UART_DATA_8_BITS,
        .parity = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
    };
    uart_param_config(UART_NUM, &uart_config);
    uart_set_pin(UART_NUM, UART_TX_PIN, UART_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    uart_driver_install(UART_NUM, 1024 * 2, 0, 0, NULL, 0);
}

// 处理UART接收到的数据
void uart_task(void *arg) {
    uint8_t data[1024];
    while (1) {
        int len = uart_read_bytes(UART_NUM, data, sizeof(data), pdMS_TO_TICKS(1000));
        if (len > 0) {
            data[len] = '\0';
            ESP_LOGI(TAG, "Received from MCU: %s", data);
            // 可以在此处将MCU状态上传到云端
            esp_mqtt_client_publish(mqtt_client_handle, "/home/purifier/status", (char*)data, 0, 1, 0);
        }
    }
}

// 主程序
void app_main() {
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    wifi_init();         // 初始化WIFI
    mqtt_app_start();    // 初始化MQTT
    cozylife_init();     // 初始化CozyLife
    uart_init();         // 初始化UART

    xTaskCreate(uart_task, "uart_task", 1024 * 2, NULL, 10, NULL);  // 创建UART处理任务
}

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值