ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESP-IoT-Solution 气体传感器方案:BME690 驱动组件全解析

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),仅供参考
返回列表