IoT UART Controller 串口工具开源项目

一个面向物联网和智能家居的高扩展性串口控制器,支持多协议、多设备、红外遥控、云端同步等功能,适用于ESP32S3嵌入式平台。

^

项目简介

IoT UART Controller 是一个开源的嵌入式串口工具,支持通过串口与多种智能设备、红外模块、传感器等进行通信和控制。项目集成了丰富的协议解析、命令转发、设备管理和红外遥控能力,适合智能家居、工业自动化、DIY电子等场景。

主要功能

支持的设备类型

主要代码文件

硬件连接说明

部署与使用说明

  1. 克隆本项目源码,使用 ESP-IDF 或兼容平台编译并烧录到目标硬件(如ESP32)。
  2. 硬件连接好串口、红外模块、传感器等外设。
  3. 通过串口、MQTT、HTTP等方式与设备通信。
  4. 可通过本地命令、云端API、AI语音等方式下发控制指令。
  5. 支持自定义命令格式和协议扩展。

典型命令示例:

{ "command": "AC_ON" }
{ "command": "SEND_IR:B24D7B84000000000000000000" }

更多部署细节请加底部联系方式或源码注释。

如何在小智AI项目中集成本模块

IoT UART Controller 模块基于 iot 框架,继承自 Thing 基类,统一由 ThingManager 进行调度和管理。集成流程如下:

  1. 确保已包含头文件:
    #include "iot/things/uart_controller.h"
  2. 模块在加载时会自动通过 RegisterThing 注册工厂方法,支持统一工厂创建:
// 注册代码(在uart_controller.cc中自动完成)
struct UartControllerRegister {
    UartControllerRegister() {
        iot::RegisterThing("UartController", []() -> iot::Thing* {
            return &iot::UartController::GetInstance();
        });
    }
};
static UartControllerRegister _uart_controller_register;
  1. application.cc 启动时,将模块注册到 ThingManager
// application.cc 典型注册流程
#include "iot/thing_manager.h"
#include "iot/things/uart_controller.h"
...
auto& thing_manager = iot::ThingManager::GetInstance();
thing_manager.AddThing(iot::CreateThing("UartController"));
  1. 所有 Thing 模块均可通过 ThingManager 统一调度、状态查询和命令下发。例如:
// 统一调度和命令下发
thing_manager.Invoke(command_json); // command_json为cJSON*类型的IoT命令

说明:如需自定义模块工厂方法,可参考 UartController::Create() 静态方法实现。所有模块均需继承 Thing 并实现必要接口。

通过上述方式,UART控制器即可无缝集成到小智AI的IoT设备管理体系,实现统一的设备注册、协议解析、命令转发和状态同步。

属性与状态解读

属性名类型说明
initializedbool串口是否初始化
workingbool串口连接器是否处于工作状态,等待IoT指令
iot_command_formatbool支持的命令格式说明(如AC_ON、TV_ON、16进制等)
supported_protocolsbool支持的协议类型说明
connected_devicesstring当前已连接的智能设备列表(JSON)
isnewreceicedatastring是否有新数据接收(true/false)
last_receivedstring最后接收的数据(HEX+ASCII)
last_sentstring最后发送的数据(HEX)
tx_pinint发送引脚编号
rx_pinint接收引脚编号
baud_rateint波特率
bytes_sentint已发送字节数
bytes_receivedint已接收字节数

方法与API解读

方法名参数说明
InitializeUarttx_pin, rx_pin, baud_rate初始化串口引脚和波特率,启动接收任务
SendCommandcommand发送设备控制命令(如AC_ON、TV_OFF、16进制等)
SendUartDatadata (vector<uint8_t>)底层发送任意串口数据,支持ASCII和二进制
FetchCloudDevices从云端获取设备列表并注册到本地
UpdateCloudDevicedevice_id, device_json将设备信息保存/更新到云端
DeleteCloudDevicedevice_id删除云端设备
SetWorkingStateworking (bool)设置串口控制器工作/待命状态
GetFormattedMacAddress获取设备MAC地址(大写无冒号)

所有方法均可通过本地调用、云端API或AI指令触发。

红外控制说明

如何对接红外发射模块实现控制

硬件连接:
UART控制器可直接对接主流红外发射模块。典型连接方式如下:

TX (主控)  -->  红外模块 RX
GND       -->  GND
VCC       -->  3.3V/5V(根据模块规格)

红外码发送流程:
1. 通过 UartControllerSendUartDataSendCommand 方法发送红外码数据。
2. 支持NEC、空调、电视等主流红外协议,也可发送自定义红外码。
3. 推荐命令格式:{ "command": "SEND_IR:xxxxxxxxxxxxxxxx" },其中xxxxxxxxxxxxxxxx为16进制红外码。

代码示例:

// 发送红外码(C++调用)
#include "iot/things/uart_controller.h"
...
std::string ir_hex = "B24D7B84000000000000000000"; // 典型NEC红外码
std::string cmd = "SEND_IR:" + ir_hex;
std::vector data(cmd.begin(), cmd.end());
iot::UartController::GetInstance().SendUartData(data);

通过IoT命令下发:
也可通过AI/云端/本地IoT命令统一下发红外控制指令:

{ "command": "SEND_IR:B24D7B84000000000000000000" }

协议支持说明:
UART控制器内置NEC、空调、电视等主流红外协议解析与发送能力,支持自定义码库和学习功能。只需发送对应红外码,模块会自动识别并发射。

通过上述方式,即可实现与红外发射模块的无缝对接和家电控制。

典型应用场景

如何贡献

  1. Fork 本项目,提交你的改进或新功能
  2. 欢迎提交 issue、PR 或加入讨论
  3. 可扩展支持更多协议、设备、AI能力

许可证

本项目采用 MIT License 开源,欢迎自由使用、修改和分发。

联系方式

如有问题或合作意向,请进小智聊天机器人QQ群 1034785516 或 加微信aixiaozhi9135 联系。