# CJ202 CO2传感器组件
该组件提供了与CJ202 CO2传感器通信的功能,支持PWM信号捕获和处理。
## 特性
- 支持两种捕获模式:
- GPIO中断模式:适用于所有ESP32系列芯片
- MCPWM捕获模式:适用于支持MCPWM捕获功能的ESP32系列芯片(不包括ESP32C2和ESP32C3)
- 根据PWM信号计算CO2浓度 (0-5000ppm)
- 通过Kconfig可配置默认GPIO和捕获模式
## 硬件连接
将CJ202传感器连接到ESP32开发板:
- CJ202 VCC → ESP32 3.3V 或 5V (根据传感器规格)
- CJ202 GND → ESP32 GND
- CJ202 PWM → ESP32 GPIO (默认GPIO 4,可通过Kconfig或代码配置)
## 使用方法
### 1. 添加组件
在你的项目的`CMakeLists.txt`文件中添加组件路径:
```cmake
set(EXTRA_COMPONENT_DIRS "path/to/components/cj202_co2_sensor")
```
### 2. 配置组件
使用`menuconfig`配置组件:
```bash
idf.py menuconfig
```
在`Component config → CJ202 CO2 Sensor Configuration`中:
- 设置默认GPIO引脚
- 选择默认捕获模式
### 3. 代码示例
```c
#include "cj202_co2_sensor.h"
void app_main(void)
{
// 使用默认配置
cj202_config_t config = CJ202_DEFAULT_CONFIG();
// 或自定义配置
// config.gpio_num = 5;
// config.mode = CJ202_MODE_GPIO_INTERRUPT;
// 初始化传感器
esp_err_t ret = cj202_init(&config);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "传感器初始化失败");
return;
}
// 读取CO2浓度
uint32_t co2_ppm = cj202_get_ppm();
printf("CO2浓度: %u ppm\n", co2_ppm);
}
```
## API参考
### 初始化传感器
```c
esp_err_t cj202_init(const cj202_config_t *config);
```
### 获取CO2浓度
```c
uint32_t cj202_get_ppm(void);
```
## 示例项目
完整示例位于`examples/cj202_example/`目录。
## 技术细节
CJ202传感器使用PWM信号输出CO2浓度,信号特性:
- 周期:1004ms ±5%
- CO2浓度计算公式:Cppm = 5000 × (TH-2ms) / (TH+TL-4ms)
- TH: 高电平时间(ms)
- TL: 低电平时间(ms)
- Cppm: CO2浓度(ppm)
## 兼容性
- 所有ESP32系列芯片均支持GPIO中断模式
- ESP32C2和ESP32C3不支持MCPWM捕获模式,组件会自动使用条件编译排除该功能
[English Documentation](./README.md)
idf.py add-dependency "0x1abin/cj202_co2_sensor^0.0.1"