feat: 添加 AHT30 温湿度传感器支持,优化 I2C 传感器管理逻辑
This commit is contained in:
@@ -3,13 +3,22 @@
|
||||
`i2c_master_messager` 用于统一管理工程中的 I2C 传感器。
|
||||
当前已接入:
|
||||
|
||||
- BH1750 光照传感器(默认地址 `0x23`)
|
||||
- BH1750 光照传感器(使用驱动默认地址)
|
||||
- AHT30 温湿度传感器(使用驱动默认地址)
|
||||
|
||||
设计目标:
|
||||
|
||||
- 提供统一的数据结构,方便其他模块读取
|
||||
- 提供独立采集任务,周期性更新数据
|
||||
- 为后续新增其他 I2C 传感器预留扩展位置
|
||||
- 各传感器驱动相互独立,管理层只做调度与数据汇总
|
||||
- 支持每个传感器独立采样周期(例如光照快采、温湿度慢采)
|
||||
|
||||
## 驱动分层
|
||||
|
||||
- `k0i05__esp_ahtxx`:AHT30 驱动组件(通过组件管理器引入)
|
||||
- `bh1750`:使用 ESP 组件管理器驱动
|
||||
- `i2c_master_messager.c`:统一总线管理、任务轮询、线程安全数据缓存
|
||||
|
||||
## 对外数据结构
|
||||
|
||||
@@ -20,13 +29,18 @@
|
||||
- `bh1750.valid`:当前数据是否有效
|
||||
- `bh1750.last_update_ms`:最后一次成功更新时间(毫秒)
|
||||
- `bh1750.last_error`:最后一次采集错误码
|
||||
- `aht30.temperature_c`:温度(摄氏度)
|
||||
- `aht30.humidity_rh`:湿度(%RH)
|
||||
- `aht30.valid`:当前数据是否有效
|
||||
- `aht30.last_update_ms`:最后一次成功更新时间(毫秒)
|
||||
- `aht30.last_error`:最后一次采集错误码
|
||||
|
||||
后续新增传感器时,建议继续在 `i2c_master_messager_data_t` 中增加对应字段。
|
||||
|
||||
## API
|
||||
|
||||
- `esp_err_t i2c_master_messager_init(const i2c_master_messager_config_t *config);`
|
||||
- 初始化 I2C 总线和 BH1750
|
||||
- 初始化 I2C 总线(传感器驱动在任务中懒初始化)
|
||||
- `esp_err_t i2c_master_messager_start(void);`
|
||||
- 启动循环采集任务
|
||||
- `esp_err_t i2c_master_messager_stop(void);`
|
||||
@@ -36,6 +50,18 @@
|
||||
- `esp_err_t i2c_master_messager_deinit(void);`
|
||||
- 释放总线和传感器资源
|
||||
|
||||
## menuconfig 配置
|
||||
|
||||
路径:`Component config -> I2C Master Messager`
|
||||
|
||||
- `启用 BH1750 光照传感器`:开关 BH1750
|
||||
- `启用 I2C 内部上拉电阻`:控制是否打开芯片内部上拉
|
||||
- `BH1750 采样周期 (ms)`:光照采样周期
|
||||
- `启用 AHT30 温湿度传感器`:开关 AHT30
|
||||
- `AHT30 采样周期 (ms)`:温湿度采样周期
|
||||
|
||||
这两个周期相互独立,可按业务需求分别调优。
|
||||
|
||||
## 使用示例
|
||||
|
||||
```c
|
||||
@@ -46,10 +72,13 @@ void app_main(void)
|
||||
{
|
||||
i2c_master_messager_config_t cfg = {
|
||||
.i2c_port = I2C_NUM_0,
|
||||
.scl_io_num = GPIO_NUM_5,
|
||||
.sda_io_num = GPIO_NUM_4,
|
||||
.read_period_ms = 1000,
|
||||
.bh1750_addr = 0x23,
|
||||
.scl_io_num = GPIO_NUM_5,
|
||||
.sda_io_num = GPIO_NUM_4,
|
||||
.i2c_enable_internal_pullup = true,
|
||||
.bh1750_enable = true,
|
||||
.aht30_enable = true,
|
||||
.bh1750_read_period_ms = 500,
|
||||
.aht30_read_period_ms = 2000,
|
||||
.bh1750_mode = BH1750_CONTINUE_1LX_RES,
|
||||
};
|
||||
|
||||
@@ -58,8 +87,11 @@ void app_main(void)
|
||||
|
||||
while (1) {
|
||||
i2c_master_messager_data_t data;
|
||||
if (i2c_master_messager_get_data(&data) == ESP_OK && data.bh1750.valid) {
|
||||
printf("BH1750: %.2f lx\n", data.bh1750.lux);
|
||||
if (i2c_master_messager_get_data(&data) == ESP_OK && data.bh1750.valid && data.aht30.valid) {
|
||||
printf("BH1750: %.2f lx, AHT30: %.2f C %.2f %%RH\n",
|
||||
data.bh1750.lux,
|
||||
data.aht30.temperature_c,
|
||||
data.aht30.humidity_rh);
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
}
|
||||
@@ -72,6 +104,6 @@ void app_main(void)
|
||||
|
||||
1. 在 `i2c_master_messager_data_t` 中增加该传感器的数据结构
|
||||
2. 在 `i2c_master_messager_config_t` 中增加该传感器配置项
|
||||
3. 在 `i2c_master_messager_init()` 中完成驱动初始化
|
||||
3. 在任务循环中按需完成驱动初始化与重试
|
||||
4. 在采集任务中加入周期读取逻辑并更新共享数据
|
||||
5. 在 `deinit()` 中释放对应资源
|
||||
|
||||
Reference in New Issue
Block a user