ESP-IoT-Solution 气体传感器方案:BME690 驱动组件全解析
物联网嵌入式驱动开发硬件开发【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址https://gitcode.com/GitHub_Trending/es/esp-iot-solution点击查看免费下载本指南围绕 ESP-IoT-Solution 中气体传感器Gas Sensor的适配方案展开核心讲解已集成的 BOSCH BME690 驱动组件它是一款集空气质量、温度、湿度、气压检测于一体的环境传感器支持 I2C 与 SPI 双总线接入广泛适用于环境监测、工业安全、智能家居等场景。读完本文你将掌握 BME690 在 ESP-IDF 平台上的组件结构、I2C/SPI 接入方式、核心 API 调用流程、加热器配置与自检方法并能基于仓库中的测试用例快速搭建自己的气体检测应用。气体传感器在 ESP-IoT-Solution 中的定位ESP-IoT-Solution 在components/sensors目录下按传感器类别组织驱动其中components/sensors/gas即为气体传感器适配目录。根据 docs/zh_CN/sensors/gas.rst 的说明气体传感器用于检测空气质量、特定气体浓度、温湿度、气压等一种或多种功能典型应用包括环境监测、工业安全与智能家居。当前仓库已完成适配的气体传感器列表如下名称功能总线供应商硬件抽象层BME690空气质量、温湿度、气压I2C/SPIBOSCH—从表格可见仓库首先引入的是 BOSCH 的 BME690 环境传感器。其余行硬件抽象层列在仓库当前状态下为空说明该传感器以“BOSCH SensorAPI 原厂驱动 ESP 平台适配层”的方式直接集成尚未为其封装额外的统一 HAL 接口读者在使用时直接调用 BME69X API 即可。BME690 传感器与驱动组件概述传感器本身能做什么BME690 是 Bosch Sensortec 面向移动设备与可穿戴设备设计的集成环境传感器尺寸紧凑3.0 x 3.0 x 0.93 mm³、8 引脚 LGA 封装低功耗、长期稳定性和 EMC 鲁棒性好。其突出特点是首次在同一芯片内集成高线性、高精度的气体、气压、湿度和温度传感器。根据 components/sensors/gas/bme690/README.mdBME690 内置的气体传感器可检测宽范围气体用于测量空气质量以保障个人健康可检测的气体包括涂料、清漆、脱漆剂、清洁用品、家具、办公设备、胶水、粘合剂和酒精中的挥发性有机化合物VOC例如甲醛等。其典型应用场景包括空气质量测量个性化气象站情境感知如皮肤湿度检测、房间变化检测健身监测 / 健康管理如干燥或高温预警体积与气流测量家居自动化控制如 HVACGPS 增强缩短首次定位时间、航位推算、坡度检测室内导航楼层变化检测、电梯检测运动场景下的海拔追踪与卡路里消耗驱动组件的来源与适配方式components/sensors/gas/bme690/组件基于 Bosch Sensortec 官方 BME690_SensorAPIv1.0.3移植而来并针对 ESP 平台对common/目录做了修改。组件文件构成如下components/sensors/gas/bme690/ ├── bme69x.c / bme69x.h / bme69x_defs.h # Bosch 原厂 SensorAPI 核心 ├── common/ │ ├── bme690_common.c # ESP 平台接口适配I2C/SPI │ └── bme690_common.h ├── test_apps/ # Unity 测试应用与 pytest 脚本 ├── Kconfig # 组件配置项 ├── CMakeLists.txt # 组件构建定义 ├── idf_component.yml └── README.md其中bme69x.h、bme69x_defs.h是 Bosch 原厂 API 与数据类型定义common/bme690_common.h则提供 ESP 平台所需的接口桥接详见下文。构建依赖与组件配置Kconfig组件的 CMakeLists.txt 声明了源码与依赖idf_component_register( SRCS bme69x.c common/bme690_common.c INCLUDE_DIRS . common REQUIRES esp_driver_i2c esp_driver_spi )也就是说使用该组件时工程需要具备esp_driver_i2c与esp_driver_spi驱动且头文件搜索路径包含组件根目录与common子目录因此应用中直接#include bme69x.h与#include bme690_common.h即可。组件通过 Kconfig 暴露两个可调参数配置项类型默认值取值范围说明BME690_I2C_TIMEOUT_VALUE_MSint501–1000I2C 通信超时时间毫秒BME690_AMBIENT_TEMPint2510–50环境温度摄氏度用于定义加热器温度其中BME690_AMBIENT_TEMP会被写入传感器设备结构体的amb_temp字段用于气体加热heater温度的校准计算见 common/bme690_common.c 中bme69x_interface_init()的bme-amb_temp CONFIG_BME690_AMBIENT_TEMP;。I2C 与 SPI 双总线接入设备地址与接口选择BME690 的 I2C 地址由 SDO 引脚决定定义于 bme69x_defs.hSDO 0 → 地址0x76BME69X_I2C_ADDR_LOWSDO 1 → 地址0x77BME69X_I2C_ADDR_HIGH接口选择由bme69x_interface_init()完成传入BME69X_I2C_INTF或BME69X_SPI_INTF。该函数会做三件事为struct bme69x_dev挂接对应的read/write回调bme69x_i2c_read/write或bme69x_spi_read/write配置delay_us延时回调见下文写入环境温度amb_temp。I2C 适配层实现要点在 common/bme690_common.c 中I2C 通路基于仓库自带的i2c_bus组件实现bme69x_set_i2c_bus_handle()注入外部创建好的i2c_bus_handle_t总线句柄bme69x_interface_init()内部通过i2c_bus_device_create(i2c_bus, dev_addr, 100000)以100 kHz 时钟挂载设备寄存器读写最终调用i2c_bus_read_bytes()/i2c_bus_write_bytes()完成失败时返回BME69X_E_COM_FAILbme69x_interface_deinit()仅删除设备句柄、清空总线句柄不会反初始化 I2C 总线本身总线生命周期由调用方管理。SPI 适配层实现要点SPI 通路基于esp_driver_spi驱动bme69x_set_spi_device_handle()注入外部创建好的spi_device_handle_t设备句柄读操作时寄存器地址置位 bit7reg_addr | BME69X_SPI_RD_MSK写操作时清除 bit7reg_addr BME69X_SPI_WR_MSK读写通过spi_device_transmit()以全双工事务完成内部动态分配事务缓冲适配层对参数做了防御性校验空指针返回BME69X_E_NULL_PTR长度非法返回BME69X_E_INVALID_LENGTH。延时实现bme69x_delay_us()对微秒级与毫秒级延时做了区分处理周期 1000 µs使用esp_rom_delay_us()忙等保证微秒精度周期 ≥ 1000 µs换算后调用vTaskDelay()让出 CPU向上取整避免阻塞 RTOS 调度。核心 API 与数据采集流程初始化bme69x_init()是使用所有其他 API 之前的入口它会读取芯片 ID 以校验传感器并完成校准参数加载。对应测试用例见 bme690_test.c 中的bme690 init-deinit test其完整流程为初始化 I2C 总线i2c_bus_createbme69x_set_i2c_bus_handle(i2c_bus)注入总线句柄bme69x_interface_init(dev, BME69X_I2C_INTF)选择接口bme69x_init(dev)校验并校准结束后bme69x_interface_deinit()清理。配置传感器过采样 / 滤波 / 输出速率bme69x_set_conf()用于设置过采样、滤波与输出速率测试中使用的配置为struct bme69x_conf conf; conf.filter BME69X_FILTER_OFF; // 滤波关闭 conf.odr BME69X_ODR_NONE; // 非周期输出仅用于 forced 模式 conf.os_hum BME69X_OS_16X; // 湿度过采样 16 倍 conf.os_pres BME69X_OS_1X; // 气压过采样 1 倍 conf.os_temp BME69X_OS_2X; // 温度过采样 2 倍 rslt bme69x_set_conf(conf, bme690_dev);湿度采用最高 16 倍过采样说明测试场景对湿度精度要求最高读者可按功耗与精度权衡调整过采样倍数BME69X_OS_1X~BME69X_OS_16X。配置气体加热器气体测量依赖内置加热器bme69x_set_heatr_conf()用于配置加热温度与时长struct bme69x_heatr_conf heatr_conf; heatr_conf.enable BME69X_ENABLE; // 使能加热 heatr_conf.heatr_temp 300; // 加热温度 300°C heatr_conf.heatr_dur 100; // 加热时长 100ms rslt bme69x_set_heatr_conf(BME69X_FORCED_MODE, heatr_conf, bme690_dev);工作模式BME690 支持以下工作模式见 bme69x_defs.h宏定义值说明BME69X_SLEEP_MODE0睡眠模式默认BME69X_FORCED_MODE1强制模式单次测量后自动回到睡眠BME69X_PARALLEL_MODE2并行模式按 ODR 周期连续测量测试用例bme690 forced mode test演示了 forced 模式下的完整采集循环bme69x_set_op_mode(BME69X_FORCED_MODE, dev)触发单次测量用bme69x_get_meas_dur(BME69X_FORCED_MODE, conf, dev) (heatr_dur * 1000)计算测量总耗时并延时等待bme69x_get_data(BME69X_FORCED_MODE, data, n_fields, dev)读取并补偿后的数据从struct bme69x_data中取出temperature、pressure、humidity、gas_resistance与status字段。测试中每个样本间隔 1 秒vTaskDelay(pdMS_TO_TICKS(1000))连续采集 10 组数据并打印。值得注意的是输出代码根据BME69X_USE_FPU宏自动切换浮点与整数打印格式说明组件兼容无 FPU 的芯片配置。自检bme69x_selftest_check()可对低气体型号low gas variant的 BME69X 执行自检。测试用例bme690 self test与bme690 spi self test分别验证了 I2C 与 SPI 通路下的自检流程返回BME69X_OK即通过。错误码bme69x_check_rslt()声明于 common/bme690_common.h可将 API 返回码映射为可读日志涵盖BME69X_OK成功BME69X_E_NULL_PTR空指针BME69X_E_COM_FAIL通信失败BME69X_E_INVALID_LENGTH长度参数错误BME69X_E_DEV_NOT_FOUND未找到设备BME69X_E_SELF_TEST自检失败BME69X_W_NO_NEW_DATA暂无新数据警告测试与验证组件自带完整的 Unity 测试应用位于 test_apps/main/bme690_test.c共 6 个用例覆盖 I2C 与 SPI 两条通路测试用例接口验证内容bme690 init-deinit testI2C初始化与反初始化bme690 forced mode testI2C配置 加热器 10 次连续测量bme690 self testI2C传感器自检bme690 spi init-deinit testSPISPI 初始化与反初始化bme690 spi forced mode testSPISPI 通路连续测量bme690 spi self testSPISPI 通路自检测试中还包含内存泄漏检测setUp/tearDown记录并比对MALLOC_CAP_8BIT与MALLOC_CAP_32BIT堆余量阈值设为 -500 字节。测试硬件基于ESP-SensairShuttle板默认引脚分配为I2CSCLGPIO3SDAGPIO2频率 100 kHzSDOGPIO9置 0 以选用地址 0x76SPICSGPIO10MISOGPIO9MOSIGPIO2CLKGPIO3SPI2_HOST模式 0时钟 1 MHz。对应的自动化测试脚本为 pytest_bme690.py可用于 CI 环境。在你的工程中接入 BME690在 ESP-IDF 工程中接入该组件的典型步骤以 I2C 为例将components/sensors/gas/bme690作为依赖组件加入工程例如通过idf_component.yml声明或放入工程的components目录在应用代码中包含bme69x.h与bme690_common.h初始化 I2C 总线可用仓库的i2c_bus组件参考 components/i2c_bus/README.md并调用bme69x_set_i2c_bus_handle()注入句柄依次调用bme69x_interface_init()→bme69x_init()→bme69x_set_conf()→bme69x_set_heatr_conf()需要采样时进入 forced 模式、按测量时长等待、读取bme69x_get_data()结果通过menuconfig按需调整BME690_I2C_TIMEOUT_VALUE_MS与BME690_AMBIENT_TEMP。对于 SPI 接入则先初始化 SPI 总线并spi_bus_add_device()随后调用bme69x_set_spi_device_handle()再走相同初始化流程完整可参考测试用例中的 SPI 分支。小结ESP-IoT-Solution 的components/sensors/gas目录以 BME690 作为气体传感器的首个适配对象采用“Bosch 原厂 SensorAPI 核心 ESP 平台适配层”的架构兼顾了 API 权威性与 ESP-IDF 生态的易用性。适配层封装了 I2C/SPI 双总线读写、RTOS 友好的延时、句柄注入与去初始化等细节配合Kconfig可调参数、6 个覆盖双总线的 Unity 测试用例以及自动化的 pytest 脚本开发者可以快速、可靠地把空气质量 温湿度 气压监测能力集成到自己的智能家居、环境监测或工业安全应用中。赞分享物联网嵌入式驱动开发硬件开发【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址https://gitcode.com/GitHub_Trending/es/esp-iot-solution点击查看免费下载相关推荐ESP IoT Solution 气体传感器指南基于 BME690 的多合一环境检测实践ESP IoT Solution 气体传感器指南基于 BME690 的多合一环境检测实践 导读 本文以 esp iot solution 仓库中 gas.rs物联网嵌入式驱动开发硬件开发ESP IoT Solution 中的 BME690 环境传感器驱动Bosch BME69X SensorAPI 的 ESP32 移植实践ESP IoT Solution 中的 BME690 环境传感器驱动Bosch BME69X SensorAPI 的 ESP32 移植实践 本文基于 esp物联网嵌入式驱动开发硬件开发esp-iot-solution 中 AHT20 温湿度传感器 I2C 驱动组件使用指南esp iot solution 中 AHT20 温湿度传感器 I2C 驱动组件使用指南 导读 本文围绕 esp iot solution 仓库中的 AHT20物联网嵌入式驱动开发硬件开发上一篇【亲测免费】 探索Adobe CEP扩展的无限可能 —— 样例库全解析下一篇推荐一款令人惊叹的开源项目Svelte Apollo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

10 分钟用 TaoToken 跑通 Qwen3.7 Flash 的 MCP 示例仓库

10 分钟用 TaoToken 跑通 Qwen3.7 Flash 的 MCP 示例仓库

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 13:14:05 阅读更多 →
go-micro Agent 接口设计:Service 承载能力、Agent 承载智能的统一架构指南

go-micro Agent 接口设计:Service 承载能力、Agent 承载智能的统一架构指南

后端微服务AI AgentRPC框架 【免费下载链接】go-micro A Go agent harness and service framework 项目地址: https://gitcode.com/gh_mirrors/go/go-micro 点击查看 免费下载 导读 本文以 go-micro 的 AGENT_DESIGN.md 为核心,系统讲解 Agent 接口的完…

2026/9/20 13:13:05 阅读更多 →
Jotai 贡献指南:从 Issue 报告到 Pull Request 提交的完整开发工作流

Jotai 贡献指南:从 Issue 报告到 Pull Request 提交的完整开发工作流

前端状态管理 【免费下载链接】jotai 👻 Primitive and flexible state management for React 项目地址: https://gitcode.com/gh_mirrors/jo/jotai 点击查看 免费下载 Jotai 是一个面向 React 的原始且灵活的状态管理库,其仓库(…

2026/9/20 13:13:05 阅读更多 →

最新新闻

OpenClaw 横向对比国产龙虾,模型 Base URL 填 TaoToken

OpenClaw 横向对比国产龙虾,模型 Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 15:54:00 阅读更多 →
ast-grep(sg)CLI 命令参考实战:sg run / scan / test / new / lsp 全解析

ast-grep(sg)CLI 命令参考实战:sg run / scan / test / new / lsp 全解析

人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排 【免费下载链接】oh-my-openagent OmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering. 项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-…

2026/9/21 15:53:59 阅读更多 →
OpenClaw 跑 Agent 前,onboard 选模型供应商改走 TaoToken 通道行不行?

OpenClaw 跑 Agent 前,onboard 选模型供应商改走 TaoToken 通道行不行?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 15:53:59 阅读更多 →
jsoniter Fuzzy Mode 模糊类型转换全解析:Any 类型跨类型取值转换对照表与源码实现

jsoniter Fuzzy Mode 模糊类型转换全解析:Any 类型跨类型取值转换对照表与源码实现

容器运行时云原生CLI 【免费下载链接】podman Podman: A tool for managing OCI containers and pods. 项目地址: https://gitcode.com/gh_mirrors/po/podman 点击查看 免费下载 jsoniter(github.com/json-iterator/go)是一个与 Go 标准库 e…

2026/9/21 15:53:59 阅读更多 →
中职中医康复专业现代化实训室建设方案

中职中医康复专业现代化实训室建设方案

1. 项目背景与核心需求中职中医康复专业作为培养基层康复技术人才的重要阵地,其实训室建设直接关系到学生的实操能力培养质量。传统实训室往往存在设备陈旧、功能单一、与临床脱节等问题,而现代康复医学的发展又对人才提出了更高要求。这个建设方案的核心…

2026/9/21 15:53:59 阅读更多 →
commitlint 规则配置完全指南:Level、Applicable 与 Value 的三种写法及内置规则全参考

commitlint 规则配置完全指南:Level、Applicable 与 Value 的三种写法及内置规则全参考

commitlint 规则配置完全指南:Level、Applicable 与 Value 的三种写法及内置规则全参考 【免费下载链接】commitlint 📓 Lint commit messages 项目地址: https://gitcode.com/gh_mirrors/co/commitlint commitlint 通过「规则(Rules&…

2026/9/21 15:52:59 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →