## Yuniot ESP开发框架 [![Component Registry](https://components.espressif.com/components/imaxu/yuniot/badge.svg)](https://components.espressif.com/components/imaxu/yuniot) [![Supported Versions](https://img.shields.io/badge/esp_idf-5.3-red)](https://idf.espressif.com/zh-cn/index.html) [![Supported Versions](https://img.shields.io/badge/MIT-green)](https://#) ### 说明 为了方便开发乐鑫系列芯片,基于esp-idf官方版本,封装了简化版本的组件库。该组件库对常见需求进行了二次封装,可以使开发过程更专注于硬件应用。 ### 更新 #### 0.0.14 未发布 * 增加adc的二次封装, 头文件是 ```yuniot_adc.h``` * 调整事件如下: * 新增OTA请求事件 ```YUNIOT_EVENT_OTA_REQUEST```,触发主题为 ```/ota_request``` * 修改原OTA事件,现在拆分为两种 ```YUNIOT_EVENT_OTA_MODULE```、```YUNIOT_EVENT_OTA_INC```, 触发主题分别为 ```/ota_module_push``` ```/ota_inc_push``` * 调整触发下行指令事件的主题,现在为 ```/action``` * 修改默认配置文件,默认禁用定时心跳 * 调整全局配置文件 ```yuniot.header.h```到用户级include目录,组件仅提供模板文件。 #### 0.0.13 2024-11-21 * 修复不能正确读取芯片MAC ID的问题 ### 安装组件 ```shell idf.py add-dependency "imaxu/yuniot" ``` ### 使用组件 #### 全局配置 当组件下载到本地后```(通常是managed_components/imaxu__yuniot)```,在组件include目录手动创建 ```yuniot.header.h``` 文件: ```c #ifndef _ESPIDF_COMPONENT_YUNIOT_HEADER__H #define _ESPIDF_COMPONENT_YUNIOT_HEADER__H #include <stdio.h> #define YUNIOT_FUNC_ENABLE 1 #define YUNIOT_FUNC_DISABLE 0 /// 1分钟等长的毫秒数 #define YUNIOT_G_MS_TO_MINUTE 60 * 1000 /// 组件广播心跳时,附带appdata的最大字节数 #define YUNIOT_KEEPALIVE_APP_DATA_MAXSIZE 256 /// SmartConfig配网 #define YUNIOT_WIFI_CONF_SC 1 /// 低功耗蓝牙通信配网 #define YUNIOT_WIFI_CONF_BLE 2 /* <!-- 基础设置 -->*/ /// 调试日志标签 #define YUNIOT_LOG_TAG "Yuniot" /// 主循环周期,单位毫秒 #define YUNIOT_MAIN_LOOP_INTERVAL 100 /* <!-- Wifi配置 --> */ /// 是否启用Wifi #define YUNIOT_WIFI_ENABLE YUNIOT_FUNC_ENABLE /* <!-- 配网 --> */ /// 定义WIFI配网模式 #define YUNIOT_WIFI_CONF_MODE YUNIOT_WIFI_CONF_SC /* <!-- OTA --> */ /// 是否启用OTA #define YUNIOT_OTA_ENABLE YUNIOT_FUNC_ENABLE /* <!-- MQTT消息网关 --> */ /// 是否启用 MQTT #define YUNIOT_MQTT_ENABLE YUNIOT_FUNC_ENABLE /// MQTT网关主机名 #ifndef YUNIOT_MQTT_HOST #define YUNIOT_MQTT_HOST "mqtt://localhost" #endif // /// MQTT网关端口 #ifndef YUNIOT_MQTT_PORT #define YUNIOT_MQTT_PORT 1883 #endif // !1 /// MQTT网关校验用户名 #ifndef YUNIOT_MQTT_USERNAME #define YUNIOT_MQTT_USERNAME "app" #endif // !1 /// MQTT网关校验密码 #ifndef YUNIOT_MQTT_PASSWORD #define YUNIOT_MQTT_PASSWORD "123456" #endif // !1 /// MQTT 遗嘱主题 #define YUNIOT_MQTT_WILL_TOPIC "baymax/device/%s/lastwill" /// MQTT 心跳主题 #define YUNIOT_MQTT_KEEPALIVE_TOPIC "baymax/device/%s/keepalive" /// MQTT 下行指令主题 #define YUNIOT_MQTT_DOWNSTREAM_ACTION "baymax/device/%s/down_stream/action" /// MQTT 上行事件主题 #define YUNIOT_MQTT_UPSTREAM_EVENT "baymax/device/%s/up_stream/event" /// MQTT 下行执行OTA主题 #define YUNIOT_MQTT_DOWNSTREAM_OTA "baymax/device/%s/down_stream/ota" /// MQTT QOS=0 #define YUNIOT_MQTT_QOS_AT_MOST_ONCE 0 /// MQTT QOS=1 #define YUNIOT_MQTT_QOS_AT_LEAST_ONCE 1 /// MQTT QOS=2 #define YUNIOT_MQTT_QOS_EXACTLY_ONCE 2 /// MQTT 心跳周期,单位毫秒 #define YUNIOT_MQTT_KEEPALIVE_INTERVAL 10 * YUNIOT_G_MS_TO_MINUTE /* <!--重置按钮定义 -->*/ /// 是否启用重置按钮功能 #define YUNIOT_RESET_ENABLE YUNIOT_FUNC_ENABLE /// 定义重置按钮的引脚 #define YUNIOT_RESET_PIN GPIO_NUM_5 /// 定义是否需要上拉内部电阻 #define YUNIOT_RESET_PIN_PULLUP GPIO_PULLUP_DISABLE /// 定义是否需要下拉内部电阻 #define YUNIOT_RESET_PIN_PULLDOWN GPIO_PULLDOWN_ENABLE /// 重置引脚持续触发时长,如果大于0 则在指定时长后触发 YUNIOT_EVENT_RESET #define YUNIOT_RESET_PIN_HOLD_MS 3000 /* <!-- GPIO --> */ /// 对标记为 INPUT的引脚自动读取间隔 #define YUNIOT_GPIO_INPUT_READ_INTERVAL_MS 200 /* <!-- RGB LED --> */ #define YUNIOT_RGB_LED_ENABLE YUNIOT_FUNC_ENABLE #define YUNIT_RGB_LED_GIPO_NUM 8 #endif // !_ESPIDF_COMPONENT_YUNIOT_MACRO__H ``` #### 基本调用 ```c #include "yuniot.h" #include "yuniot_events.h" yuniot_event_loop_create(); yuniot_event_handle_register_with(YUNIOT_EVENT_ANY, yuniot_event_handler, NULL); yuniot_init(); yuniot_main_loop(); ``` #### 全局配置 ```c #include "yuniot_macro.h" ``` 在头文件中,包含了一系列有用的宏定义,通过修改这些宏定义来实现改变框架的行为。 #### 循环事件库 ```c #include "yuniot_events.h" ``` ##### 创建默认事件循环库 ```c esp_err_t yuniot_event_loop_create(void); ``` ##### 注册事件处理程序 ```c esp_err_t yuniot_event_handle_register_with(yuniot_event_id_t event_id, esp_event_handler_t event_handle, void *event_args); ``` *event_id* 事件ID, 参考后表《事件定义》 *event_handle* 事件处理函数,类型为esp_event_handler_t *event_args* 事件处理函数的用户参数 ##### 手动触发事件 ```c esp_err_t yuniot_event_post(yuniot_event_id_t event_id, const void *event_data, size_t event_data_size); ``` *event_id* 事件ID, 参考后表《事件定义》 *event_data* 事件触发时携带的数据 *event_data_size* 事件数据的长度 ##### 事件定义 | 事件名称 | 宏定义 | 说明 | |---------------------------|--------------------------------------|----------------------------------------------| | 主循环tick | YUNIOT_EVENT_TICK | 主循环函数在执行时,每一个循环周期都会触发该事件 | | GPIO高电平输入 | YUNIOT_EVENT_GPIO_INPUT_HIGH | 当指定监听的引脚输入高电平时,触发该事件 | | GPIO低电平输入 | YUNIOT_EVENT_GPIO_INPUT_LOW | 当指定监听的引脚输入低电平时,触发该事件 | | 硬件重置事件 | YUNIOT_EVENT_RESET | 仅在 ```YUNIOT_RESET_ENABLE```启用时有效 | | 硬件重置按钮按下事件 | YUNIOT_EVENT_RESET_BUTTON_PRESSDOWN | 仅在 ```YUNIOT_RESET_ENABLE```启用时有效 | | 硬件重置按钮抬起事件 | YUNIOT_EVENT_RESET_BUTTON_PRESSUP | 仅在 ```YUNIOT_RESET_ENABLE```启用时有效 | | Wi-Fi等待配网事件 | YUNIOT_EVENT_WIFI_WAIT_CONFIG | Wi-Fi信息不存在时,触发配网事件 | | Wi-Fi正在连接事件 | YUNIOT_EVENT_WIFI_WAIT_CONNECT | | | Wi-Fi连接成功事件 | YUNIOT_EVENT_WIFI_CONNECTED | 无线网络被正确连接,并且已获取到IP时,触发该事件 | | Wi-Fi连接断开事件 | YUNIOT_EVENT_WIFI_DISCONNECTED | 无线网络被断开时,触发该事件 | | Wi-Fi连接发生错误事件 | YUNIOT_EVENT_WIFI_ERROR | 无线网络连接发生错误时触发该事件 | | 收到内部消息队列的消息 | YUNIOT_EVENT_QUEUE_DATA_RECEIVED | 从内部队列收到数据时触发 | | MQTT连接成功 | YUNIOT_EVENT_MQTT_CONNECTED | MQTT成功连接到网关时触发 | | MQTT断开连接 | YUNIOT_EVENT_MQTT_DISCONNECTED | MQTT连接断开或被复位时触发 | | 收到OTA指令 | YUNIOT_EVENT_OTA | 收到云端推送的OTA指令时触发,仅在 ```YUNIOT_OTA_ENABLE``` 启用时有效 | #### 物理引脚控制 ```c #include "yuniot_gpio.h" ``` #### MQTT ```c #include "yuniot_mqtt.h" ``` #### 空中升级支持 ```c #include "yuniot_ota.h" ``` #### 重置设置支持 ```c #include "yuniot_reset.h" ``` #### Smart Config快速配网 ```c #include "yuniot_smart.h" ``` #### 消息队列 ```c #include "yuniot_queue.h" ```
idf.py add-dependency "imaxu/yuniot^0.0.15"