readme

## 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"
```

Links

Maintainer

  • xuwh <xuwhdev@gmail.com>

License: MIT

Tags

To add this component to your project, run:

idf.py add-dependency "imaxu/yuniot^0.0.15"

or download archive

Stats

  • Archive size
    Archive size ~ 34.07 KB
  • Downloaded in total
    Downloaded in total 23 times
  • Downloaded this version
    This version: 0 times

Badge

imaxu/yuniot version: 0.0.15
|