{"id":24091908,"url":"https://github.com/luhuadong/rtt-ccs811","last_synced_at":"2025-10-25T22:07:26.120Z","repository":{"id":109656459,"uuid":"271555951","full_name":"luhuadong/rtt-ccs811","owner":"luhuadong","description":"CCS811 sensor driver for RT-Thread","archived":false,"fork":false,"pushed_at":"2022-08-03T08:36:21.000Z","size":852,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-27T09:01:35.998Z","etag":null,"topics":["mcu","rt-thread","rt-thread-rtos","sensor"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luhuadong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-11T13:39:29.000Z","updated_at":"2024-03-28T08:46:41.000Z","dependencies_parsed_at":"2023-07-30T10:16:48.346Z","dependency_job_id":null,"html_url":"https://github.com/luhuadong/rtt-ccs811","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/luhuadong/rtt-ccs811","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luhuadong%2Frtt-ccs811","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luhuadong%2Frtt-ccs811/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luhuadong%2Frtt-ccs811/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luhuadong%2Frtt-ccs811/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luhuadong","download_url":"https://codeload.github.com/luhuadong/rtt-ccs811/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luhuadong%2Frtt-ccs811/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281026245,"owners_count":26431757,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mcu","rt-thread","rt-thread-rtos","sensor"],"created_at":"2025-01-10T07:44:46.383Z","updated_at":"2025-10-25T22:07:26.094Z","avatar_url":"https://github.com/luhuadong.png","language":"C","funding_links":[],"categories":["Packages"],"sub_categories":["Peripherals"],"readme":"# rtt-ccs811\nCCS811 sensor driver for RT-Thread\n\n\n\n## 1、介绍\n\nccs811 软件包是 CCS811 气体传感器的驱动软件包。CCS811 是一款低功耗数字气体传感器，用于检测室内低水平的挥发性有机化合物和二氧化碳浓度，内部集成微控制器单元 (MCU) 和模数转换器（ADC），并提供通过标准 I2C 数字接口获取 CO2 或 TVOC 数据。\n\nCCS811 模块支持 I2C 接口，IIC 地址可配置为 0x5A 或 0X5B。\n\n\n\n### 1.1 特性\n\n- 支持静态和动态分配内存。\n- 支持 sensor 设备驱动框架。\n- 线程安全。\n\n\n\n### 1.2 工作模式\n\n| 传感器       | TVOC | eCO2 |\n| :----------- | :--- | :--- |\n| **通信接口** |      |      |\n| I2C          | √    | √    |\n| **工作模式** |      |      |\n| 轮询         | √    | √    |\n| 中断         |      |      |\n| FIFO         |      |      |\n\n\n\n### 1.3 目录结构\n\n| 名称     | 说明                           |\n| -------- | ------------------------------ |\n| docs     | 文档目录                       |\n| examples | 例子目录（提供两种操作示例）   |\n| inc      | 头文件目录                     |\n| src      | 源代码目录（提供两种驱动接口） |\n\n驱动源代码提供两种接口，分别是自定义接口，以及 RT-Thread 设备驱动接口（open/read/control/close）。\n\n\n\n### 1.4 许可证\n\nccs811 软件包遵循 Apache license v2.0 许可，详见 `LICENSE` 文件。\n\n\n\n### 1.5 依赖\n\n- RT-Thread 4.0+\n- 使用动态创建方式需要开启动态内存管理模块\n- 使用 sensor 设备接口需要开启 sensor 设备驱动框架模块\n\n\n\n## 2、获取 ccs811 软件包\n\n使用 ccs811 package 需要在 RT-Thread 的包管理器中选择它，具体路径如下：\n\n```\nRT-Thread online packages ---\u003e\n    peripheral libraries and drivers ---\u003e\n        [*] sensors drivers  ---\u003e\n            [*] CCS811: Digital Gas Sensor for Monitoring Indoor Air Quality..\n```\n\n然后让 RT-Thread 的包管理器自动更新，或者使用 `pkgs --update` 命令更新包到 BSP 中。\n\n\n\n## 3、使用 ccs811 软件包\n\n### 3.1 版本说明\n\n| 版本   | 说明                                           |\n| ------ | ---------------------------------------------- |\n| latest | 基本功能测试通过                                     |\n\n目前处于公测阶段，建议开发者使用 latest 版本。\n\n\n\n### 3.2 配置选项\n\n- 选择 I2C 地址（`PKG_USING_CCS811_I2C_ADDRESS`）\n- 是否使用示例程序（`PKG_USING_CCS811_SAMPLE`）\n\n\n\n## 4、API 说明\n\n### 4.1 自定义接口\n\n#### 创建和删除对象\n\n要操作传感器模块，首先需要创建一个传感器对象。\n\n```c\nccs811_device_t ccs811_create(const char *i2c_bus_name);\n```\n\n调用这个函数时，会从动态堆内存中分配一个 ccs811_device_t 句柄，并按给定参数初始化。\n\n| 参数            | 描述                         |\n| --------------- | ---------------------------- |\n| i2c_bus_name    | 设备挂载的 IIC 总线名称      |\n| **返回**        | ——                           |\n| ccs811_device_t | 创建成功，返回传感器对象句柄 |\n| RT_NULL         | 创建失败                     |\n\n对于使用 `ccs811_create()` 创建出来的对象，当不需要使用，或者运行出错时，请使用下面的函数接口将其删除，避免内存泄漏。\n\n```c\nvoid ccs811_delete(ccs811_device_t dev);\n```\n\n| **参数**        | **描述**               |\n| --------------- | ---------------------- |\n| ccs811_device_t | 要删除的传感器对象句柄 |\n| **返回**        | ——                     |\n| 无              |                        |\n\n\n\n#### 初始化对象\n\n如果需要使用静态内存分配，则可调用 `ccs811_init()` 函数。\n\n```c\nrt_err_t ccs811_init(struct ccs811_device *dev, const char *i2c_bus_name);\n```\n\n使用该函数前需要先创建 ccs811_device 结构体。\n\n| 参数         | 描述                    |\n| ------------ | ----------------------- |\n| dev          | 传感器对象结构体        |\n| i2c_bus_name | 设备挂载的 IIC 总线名称 |\n| **返回**     | ——                      |\n| RT_EOK       | 初始化成功              |\n| -RT_ERROR    | 初始化失败              |\n\n\n\n#### 测量数据\n\n测量 TVOC 和 eCO2 浓度值，并将数据保存在传感器对象中。\n\n```c\nrt_bool_t ccs811_measure(ccs811_device_t dev);\n```\n\n| 参数     | 描述           |\n| -------- | -------------- |\n| dev      | 传感器对象句柄 |\n| **返回** | ——             |\n| RT_TRUE  | 读取成功       |\n| RT_FALSE | 读取失败       |\n\n由于 CCS811 传感器支持多种模式和测量周期，为成功获取数据，建议在调用 `ccs811_measure()` 前使用 `ccs811_check_ready()` 函数检查传感器是否准备好了。\n\n\n\n\n#### 读取 baseline\n\n```c\nrt_uint16_t ccs811_get_baseline(ccs811_device_t dev);\n```\n\n| 参数         | 描述           |\n| ------------ | -------------- |\n| dev          | 传感器对象句柄 |\n| **返回**     | ——             |\n| 16位的基线值 | 读取成功       |\n| 0            | 读取失败       |\n\n\n\n#### 设置 baseline\n\n```c\nrt_bool_t ccs811_set_baseline(ccs811_device_t dev, rt_uint16_t baseline);\n```\n\n| 参数     | 描述                   |\n| -------- | ---------------------- |\n| dev      | 传感器对象句柄         |\n| baseline | 16位的 baseline 设置值 |\n| **返回** | ——                     |\n| RT_TRUE  | 设置成功               |\n| RT_FALSE | 设置失败               |\n\n\n\n#### 设置环境数据\n\n```c\nrt_bool_t ccs811_set_envdata(ccs811_device_t dev, float temperature, float humidity);\n```\n\n| 参数        | 描述             |\n| ----------- | ---------------- |\n| dev         | 传感器对象句柄   |\n| temperature | 当前环境的温度值 |\n| humidity    | 当前环境的湿度值 |\n| **返回**    | ——               |\n| RT_TRUE     | 设置成功         |\n| RT_FALSE    | 设置失败         |\n\n在测量过程中定期设置环境温度和湿度值，有利于获取更准确的数据。\n\n\n\n#### 设置测量周期\n\n```c\nrt_bool_t  ccs811_set_measure_cycle(ccs811_device_t dev, ccs811_cycle_t cycle);\n```\n\n| 参数     | 描述           |\n| -------- | -------------- |\n| dev      | 传感器对象句柄 |\n| cycle    | 测量周期       |\n| **返回** | ——             |\n| RT_TRUE  | 设置成功       |\n| RT_FALSE | 设置失败       |\n\n测量周期包括 250ms、1s、10s 和 60s，具体可配置项如下：\n\n```c\ntypedef enum\n{\n    CCS811_CLOSED,\n    CCS811_CYCLE_1S,\n    CCS811_CYCLE_10S,\n    CCS811_CYCLE_60S,\n    CCS811_CYCLE_250MS\n\n} ccs811_cycle_t;\n```\n\n\n\n#### 设置工作模式\n\n```c\nrt_bool_t ccs811_set_measure_mode(ccs811_device_t dev, \n                                  rt_uint8_t thresh, \n                                  rt_uint8_t interrupt, \n                                  ccs811_mode_t mode);\n```\n\n| 参数      | 描述                         |\n| --------- | ---------------------------- |\n| dev       | 传感器对象句柄               |\n| thresh    | 0：不检测阈值，1：检测阈值   |\n| interrupt | 0：不使能中断，1：使能中断   |\n| mode      | 工作模式（就是设置测量周期） |\n| **返回**  | ——                           |\n| RT_TRUE   | 设置成功                     |\n| RT_FALSE  | 设置失败                     |\n\n工作模式可选项如下：\n\n```c\ntypedef enum\n{\n    CCS811_MODE_0,\n    CCS811_MODE_1,\n    CCS811_MODE_2,\n    CCS811_MODE_3,\n    CCS811_MODE_4\n\n} ccs811_mode_t;\n```\n\n\n\n#### 读取工作模式\n\n```c\nrt_uint8_t ccs811_get_measure_mode(ccs811_device_t dev);\n```\n\n| 参数               | 描述           |\n| ------------------ | -------------- |\n| dev                | 传感器对象句柄 |\n| **返回**           | ——             |\n| MEAS_MODE 寄存器值 | 读取成功       |\n| 0xFF               | 读取失败       |\n\n\n\n#### 设置报警阈值\n\n```c\nrt_bool_t ccs811_set_thresholds(ccs811_device_t dev, \n                                rt_uint16_t low_to_med, \n                                rt_uint16_t med_to_high);\n```\n\n| 参数        | 描述                                 |\n| ----------- | ------------------------------------ |\n| dev         | 传感器对象句柄                       |\n| low_to_med  | 低范围到中范围的阈值，默认为 1500ppm |\n| med_to_high | 中范围到高范围的阈值，默认为 2500ppm |\n| **返回**    | ——                                   |\n| RT_TRUE     | 设置成功                             |\n| RT_FALSE    | 设置失败                             |\n\n注意：阈值设置只针对 CO~2~ 气体浓度。\n\n\n\n### 4.2 Sensor 接口\n\nccs811 软件包已对接 sensor 驱动框架，操作传感器模块之前，只需调用下面接口注册传感器设备即可。\n\n```c\nrt_err_t rt_hw_ccs811_init(const char *name, struct rt_sensor_config *cfg);\n```\n\n| 参数      | 描述            |\n| --------- | --------------- |\n| name      | 传感器设备名称  |\n| cfg       | sensor 配置信息 |\n| **返回**  | ——              |\n| RT_EOK    | 创建成功        |\n| -RT_ERROR | 创建失败        |\n\n\n\n#### 初始化示例\n\n```c\n#include \u003crtthread.h\u003e\n#include \u003crtdevice.h\u003e\n#include \u003cboard.h\u003e\n#include \"ccs811.h\"\n\n#define CCS811_I2C_BUS_NAME       \"i2c1\"\n\nstatic int rt_hw_ccs811_port(void)\n{\n    struct rt_sensor_config cfg;\n    \n    cfg.intf.type = RT_SENSOR_INTF_I2C;\n    cfg.intf.dev_name = CCS811_I2C_BUS_NAME;\n    rt_hw_ccs811_init(\"cs8\", \u0026cfg);\n    \n    return RT_EOK;\n}\nINIT_COMPONENT_EXPORT(rt_hw_ccs811_port);\n```\n\n\n\n#### 传感器测试\n\n将上述 sensor 初始化示例代码加入工程，编译下载后即可进行测试。（注意：需要先配置好 i2c1 总线，并添加 sensor 组件）\n\n**检查传感器是否初始化成功**\n\n```shell\nmsh \u003elist_device\ndevice           type         ref count\n-------- -------------------- ----------\ntvoc_cs8 Sensor Device        0\neco2_cs8 Sensor Device        0\n```\n\n**查看 CCS811 信息**\n\n```shell\nmsh \u003esensor probe tvoc_cs8\n[4774993] I/sensor.cmd: device id: 0x81!\n\nmsh \u003esensor info\nvendor    :AMS\nmodel     :ccs811\nunit      :ppb\nrange_max :32768\nrange_min :0\nperiod_min:250ms\nfifo_max  :1\n```\n\n**读取 TVOC 数据**\n\n```shell\nmsh \u003esensor read\n[4794468] I/sensor.cmd: num:  0, tvoc:  184 ppb, timestamp:4794468\n[4794586] I/sensor.cmd: num:  1, tvoc:  184 ppb, timestamp:4794586\n[4794704] I/sensor.cmd: num:  2, tvoc:  184 ppb, timestamp:4794704\n[4794822] I/sensor.cmd: num:  3, tvoc:  184 ppb, timestamp:4794822\n[4794940] I/sensor.cmd: num:  4, tvoc:  184 ppb, timestamp:4794940\n```\n\n**读取 CO2 数据**\n\n```shell\nmsh \u003esensor read\n[4957632] I/sensor.cmd: num:  0, eco2:  871 ppm, timestamp:4957632\n[4957850] I/sensor.cmd: num:  1, eco2:  865 ppm, timestamp:4957850\n[4957968] I/sensor.cmd: num:  2, eco2:  865 ppm, timestamp:4957968\n[4958086] I/sensor.cmd: num:  3, eco2:  871 ppm, timestamp:4958086\n[4958303] I/sensor.cmd: num:  4, eco2:  871 ppm, timestamp:4958303\n```\n\n\n\n## 5、注意事项\n\n1. 为传感器对象提供静态创建和动态创建两种方式，如果使用动态创建，请记得在使用完毕释放对应的内存空间。\n2. 由于 CCS811 模块包含一个 TVOC 传感器和一个 eCO2 传感器，因此在 sensor 框架中会注册两个设备，内部提供1位 FIFO 缓存进行同步，缓存空间在调用 `rt_device_open` 函数时创建，因此 read 之前务必确保两个设备都开启成功。\n3. 由于使用 I2C 接口进行操作，因此注册时需指定具体的 I2C 总线名称，对应的句柄存放在 user_data 中。\n4. CCS811 传感器需要预热，预热时间小于15秒，此前的数据一直是 TVOC 为 0，eCO2 为 400。\n5. 数据手册建议在第一次使用传感器时，先运行48小时。\n6. CCS811 传感器会自动校准基线，但是这个过程非常缓慢。数据手册对基线校准的建议：在运行传感器的第一周，建议每24小时保存一个新的基线，运行1周后，可以每1-28天保存一次。\n7. 如需使用中断功能，请将传感器的 INT 引脚连接到主控板相应的中断引脚。\n\n\n\n## 6、相关文档\n\n见 docs 目录。\n\n\n\n## 7、联系方式\n\n- 维护：luhuadong@163.com\n- 主页：\u003chttps://github.com/luhuadong/rtt-ccs811\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluhuadong%2Frtt-ccs811","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluhuadong%2Frtt-ccs811","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluhuadong%2Frtt-ccs811/lists"}