一个面向物联网和智能家居的高扩展性串口控制器,支持多协议、多设备、红外遥控、云端同步等功能,适用于ESP32S3嵌入式平台。
^
IoT UART Controller 是一个开源的嵌入式串口工具,支持通过串口与多种智能设备、红外模块、传感器等进行通信和控制。项目集成了丰富的协议解析、命令转发、设备管理和红外遥控能力,适合智能家居、工业自动化、DIY电子等场景。
TX --> 红外模块RX RX --> 红外模块TX(如需回读/学习) GND --> GND VCC --> 3.3V/5V(根据模块规格)
典型命令示例:
{ "command": "AC_ON" }
{ "command": "SEND_IR:B24D7B84000000000000000000" }
更多部署细节请加底部联系方式或源码注释。
IoT UART Controller 模块基于 iot
框架,继承自 Thing
基类,统一由 ThingManager
进行调度和管理。集成流程如下:
#include "iot/things/uart_controller.h"
RegisterThing
注册工厂方法,支持统一工厂创建:// 注册代码(在uart_controller.cc中自动完成) struct UartControllerRegister { UartControllerRegister() { iot::RegisterThing("UartController", []() -> iot::Thing* { return &iot::UartController::GetInstance(); }); } }; static UartControllerRegister _uart_controller_register;
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"));
Thing
模块均可通过 ThingManager
统一调度、状态查询和命令下发。例如:// 统一调度和命令下发 thing_manager.Invoke(command_json); // command_json为cJSON*类型的IoT命令
说明:如需自定义模块工厂方法,可参考 UartController::Create()
静态方法实现。所有模块均需继承 Thing
并实现必要接口。
通过上述方式,UART控制器即可无缝集成到小智AI的IoT设备管理体系,实现统一的设备注册、协议解析、命令转发和状态同步。
属性名 | 类型 | 说明 |
---|---|---|
initialized | bool | 串口是否初始化 |
working | bool | 串口连接器是否处于工作状态,等待IoT指令 |
iot_command_format | bool | 支持的命令格式说明(如AC_ON、TV_ON、16进制等) |
supported_protocols | bool | 支持的协议类型说明 |
connected_devices | string | 当前已连接的智能设备列表(JSON) |
isnewreceicedata | string | 是否有新数据接收(true/false) |
last_received | string | 最后接收的数据(HEX+ASCII) |
last_sent | string | 最后发送的数据(HEX) |
tx_pin | int | 发送引脚编号 |
rx_pin | int | 接收引脚编号 |
baud_rate | int | 波特率 |
bytes_sent | int | 已发送字节数 |
bytes_received | int | 已接收字节数 |
方法名 | 参数 | 说明 |
---|---|---|
InitializeUart | tx_pin, rx_pin, baud_rate | 初始化串口引脚和波特率,启动接收任务 |
SendCommand | command | 发送设备控制命令(如AC_ON、TV_OFF、16进制等) |
SendUartData | data (vector<uint8_t>) | 底层发送任意串口数据,支持ASCII和二进制 |
FetchCloudDevices | 无 | 从云端获取设备列表并注册到本地 |
UpdateCloudDevice | device_id, device_json | 将设备信息保存/更新到云端 |
DeleteCloudDevice | device_id | 删除云端设备 |
SetWorkingState | working (bool) | 设置串口控制器工作/待命状态 |
GetFormattedMacAddress | 无 | 获取设备MAC地址(大写无冒号) |
所有方法均可通过本地调用、云端API或AI指令触发。
{ "command": "SEND_IR:B24D7B84000000000000000000" }
硬件连接:
UART控制器可直接对接主流红外发射模块。典型连接方式如下:
TX (主控) --> 红外模块 RX GND --> GND VCC --> 3.3V/5V(根据模块规格)
红外码发送流程:
1. 通过 UartController
的 SendUartData
或 SendCommand
方法发送红外码数据。
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::vectordata(cmd.begin(), cmd.end()); iot::UartController::GetInstance().SendUartData(data);
通过IoT命令下发:
也可通过AI/云端/本地IoT命令统一下发红外控制指令:
{ "command": "SEND_IR:B24D7B84000000000000000000" }
协议支持说明:
UART控制器内置NEC、空调、电视等主流红外协议解析与发送能力,支持自定义码库和学习功能。只需发送对应红外码,模块会自动识别并发射。
通过上述方式,即可实现与红外发射模块的无缝对接和家电控制。
本项目采用 MIT License 开源,欢迎自由使用、修改和分发。
如有问题或合作意向,请进小智聊天机器人QQ群 1034785516
或 加微信aixiaozhi9135
联系。