- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
BMP280 数字气压传感器演示
一、功能模块介绍
1.1 核心主程序模块
- main.lua - 主程序入口
- bmp280_demo.lua - BMP280 功能演示模块
1.2 扩展库模块
- exs_bmx280 - BMP280/BME280 扩展库,提供初始化、气压/温度/湿度读取、IIR 滤波配置、海拔高度计算等 API
1.3 I2C 模式说明
推荐使用软件 I2C 模式:BMP280 使用标准 I2C 接口通信,软件 I2C 模式无需指定 I2C 控制器,任意 GPIO 均可模拟 I2C 时序,灵活性更高。本 demo 使用软件 I2C 模式演示。
二、演示流程介绍
本 demo 按顺序演示 exs_bmx280 扩展库的 4 项功能:HELLO → [1/4] → [2/4] → [3/4] → [4/4] → End
2.1 功能演示项说明
- [1/4] 初始化与数据读取 - 初始化 BMP280 传感器并读取温度(°C)和气压(hPa)数据
- [2/4] IIR 滤波器切换演示 - 依次切换 filter=0/1/2/3/4,观察数据平滑效果
- [3/4] 海拔高度测量 - 通过气压值计算当前海拔高度(米)
- [4/4] 关闭传感器 - 关闭传感器,结束演示
三、演示硬件环境
3.1 硬件清单
- Air780EPM 核心板 × 1
- BMP280 数字气压传感器模块 × 1 demo所演示的BMP280 气压传感器模块购买链接
- 母对母杜邦线 × 4
- TYPE-C 数据线 × 1
3.2 接线配置
3.2.1 BMP280 模块接线
| Air780EPM 核心板 | BMP280 模块 |
|---|---|
| 32/GPIO31 | SCL |
| 31/GPIO30 | SDA |
| VDD_EXT | VCC |
| GND | GND |
说明:
- 接线时注意杜邦线不宜过长,以免通信不稳定
- SCL 和 SDA 需外接 4.7kΩ~10kΩ 上拉电阻到 VCC(部分模块已自带)
- BMP280 的 I2C 地址:SDO=GND 时 0x76,SDO=VCC 时 0x77
四、演示软件环境
4.1 开发工具
- Luatools下载调试工具 - 固件烧录和代码调试
4.2 内核固件
- 点击下载Air780EPM系列最新版本内核固件,demo所使用的是 LuatOS-SoC_V2046_Air780EPM 1号固件
4.3 脚本文件
- main.lua - 程序入口
- bmp280_demo.lua - BMP280 功能演示模块
- exs_bmx280 - BMP280/BME280 扩展库
五、演示核心步骤
5.1 硬件准备
- 按照接线表将 BMP280 模块连接到核心板
- 确保电源连接正确,通过 TYPE-C USB 口供电
- 检查所有接线无误,避免短路
5.2 软件配置
在 main.lua 中加载对应的演示模块:
require "bmp280_demo"
5.3 软件烧录
- 使用 Luatools 选择最新内核固件
- 下载本项目所有脚本文件
- 将固件和脚本一起烧录到设备
- 烧录成功后设备自动重启后开始运行
5.4 功能测试
5.4.1 初始化与数据读取演示
- 设备启动后打印 "HELLO",随后自动进入 [1/4] 初始化与数据读取
- 观察日志输出,确认初始化成功
- 观察温度(°C)和气压(hPa)的连续读取
5.4.2 IIR 滤波器切换演示
- 自动进入 [2/4] IIR 滤波器切换演示
- 依次观察 filter=0(关闭)~ filter=4(16 次平均)下的数据
- filter 越大数据跳动越小
5.4.3 海拔高度测量
- 自动进入 [3/4] 海拔高度测量
- 观察基于当前气压值和海平面标准气压(101325Pa)计算的海拔高度
5.4.4 关闭传感器
- 自动进入 [4/4] 关闭传感器
- 演示完毕后打印 "End"
5.5 预期效果
- 初始化与数据读取:BMP280 初始化成功,温度与气压数据正常输出
- IIR 滤波器切换:不同滤波器下数据平滑度不同
- 海拔高度测量:根据气压计算出当前海拔高度
- 关闭传感器:传感器正常关闭
- 日志如下:
[2026-07-24 19:59:39.006][000000000.213] D/user.exs_bmx280 version -> 202607240000
[2026-07-24 19:59:39.028][000000000.214] I/user.bmp280_demo HELLO
[2026-07-24 19:59:39.586][000000001.214] I/user.bmp280_demo ===== [1/4] 初始化与数据读取 =====
[2026-07-24 19:59:39.605][000000001.224] I/user.exs_bmx280 BMP280 @ I2C 0x76
[2026-07-24 19:59:39.613][000000001.262] I/user.exs_bmx280 校准数据: T1=27251 T2=25882 T3=50 P1=39170 P2=-10689
[2026-07-24 19:59:39.622][000000001.264] I/user.exs_bmx280 BMP280 初始化完成, filter=4
[2026-07-24 19:59:39.630][000000001.265] I/user.bmp280_demo BMP280 初始化成功,版本: 202607240000
[2026-07-24 19:59:39.640][000000001.469] I/user.bmp280_demo 温度=25.55°C 气压=1008.00hPa
[2026-07-24 19:59:42.440][000000004.473] I/user.bmp280_demo 第1次读取: 温度=26.02°C 气压=1008.0hPa
[2026-07-24 19:59:43.789][000000005.748] I/mobile sim0 sms ready
[2026-07-24 19:59:43.809][000000005.749] D/mobile cid1, state0
[2026-07-24 19:59:43.822][000000005.749] D/mobile bearer act 0, result 0
[2026-07-24 19:59:43.837][000000005.750] D/mobile NETIF_LINK_ON -> IP_READY
[2026-07-24 19:59:43.852][000000005.786] D/mobile TIME_SYNC 0 tm 1784894382
[2026-07-24 19:59:44.448][000000006.477] I/user.bmp280_demo 第2次读取: 温度=26.06°C 气压=1008.0hPa
[2026-07-24 19:59:46.450][000000008.481] I/user.bmp280_demo 第3次读取: 温度=26.08°C 气压=1008.0hPa
[2026-07-24 19:59:46.476][000000008.481] I/user.bmp280_demo ---- [1/4] 完成 ----
[2026-07-24 19:59:46.949][000000008.982] I/user.bmp280_demo ===== [2/4] IIR 滤波器切换演示 =====
[2026-07-24 19:59:46.967][000000008.983] I/user.bmp280_demo 设置滤波器 filter=0
[2026-07-24 19:59:46.983][000000008.986] I/user.exs_bmx280 IIR 滤波器系数设为 0
[2026-07-24 19:59:47.059][000000009.090] I/user.bmp280_demo filter=0: 温度=26.09°C 气压=1008.00hPa
[2026-07-24 19:59:48.071][000000010.090] I/user.bmp280_demo 设置滤波器 filter=1
[2026-07-24 19:59:48.091][000000010.093] I/user.exs_bmx280 IIR 滤波器系数设为 1
[2026-07-24 19:59:48.164][000000010.197] I/user.bmp280_demo filter=1: 温度=26.10°C 气压=1008.00hPa
[2026-07-24 19:59:49.175][000000011.197] I/user.bmp280_demo 设置滤波器 filter=2
[2026-07-24 19:59:49.196][000000011.200] I/user.exs_bmx280 IIR 滤波器系数设为 2
[2026-07-24 19:59:49.284][000000011.305] I/user.bmp280_demo filter=2: 温度=26.11°C 气压=1008.00hPa
[2026-07-24 19:59:50.281][000000012.305] I/user.bmp280_demo 设置滤波器 filter=3
[2026-07-24 19:59:50.301][000000012.308] I/user.exs_bmx280 IIR 滤波器系数设为 3
[2026-07-24 19:59:50.390][000000012.412] I/user.bmp280_demo filter=3: 温度=26.12°C 气压=1008.00hPa
[2026-07-24 19:59:51.387][000000013.412] I/user.bmp280_demo 设置滤波器 filter=4
[2026-07-24 19:59:51.409][000000013.415] I/user.exs_bmx280 IIR 滤波器系数设为 4
[2026-07-24 19:59:51.497][000000013.520] I/user.bmp280_demo filter=4: 温度=26.13°C 气压=1008.00hPa
[2026-07-24 19:59:52.493][000000014.520] I/user.bmp280_demo ---- [2/4] 完成 ----
[2026-07-24 19:59:52.992][000000015.020] I/user.bmp280_demo ===== [3/4] 海拔高度测量 =====
[2026-07-24 19:59:53.011][000000015.024] I/user.bmp280_demo 温度=26.14°C 气压=1008.0hPa 海拔=43.8米
[2026-07-24 19:59:53.025][000000015.025] I/user.bmp280_demo ---- [3/4] 完成 ----
[2026-07-24 19:59:53.492][000000015.525] I/user.bmp280_demo ===== [4/4] 关闭传感器 =====
[2026-07-24 19:59:53.511][000000015.527] I/user.exs_bmx280 传感器已关闭
[2026-07-24 19:59:53.528][000000015.527] I/user.bmp280_demo ---- [4/4] 完成 ----
[2026-07-24 19:59:54.003][000000016.027] I/user.bmp280_demo ===== [演示完毕] =====
[2026-07-24 19:59:54.025][000000016.027] I/user.bmp280_demo End
5.6 故障排除
-
传感器初始化失败:
- 检查 BMP280 接线是否正确(SCL、SDA、VCC、GND)
- 确认 GPIO 引脚配置与接线一致
- 检查电源电压是否稳定(3.3V)
- 确认 SCL/SDA 上拉电阻是否连接
- 确认 exs_bmx280 扩展库已正常加载
-
读取数据异常:
- 检查传感器供电是否正常
- 自动地址检测会尝试 0x76 和 0x77,确认 SDO 引脚电平
- 检查接线无松动
-
海拔高度显示异常:
- 海拔计算基于海平面标准气压 101325Pa,天气变化会影响计算精度
- 可通过
exs_bmx280.set_sea_level_pressure(pressure)传入实际海平面气压校正
5.7 扩展功能建议
exs_bmx280 更多接口的使用可以查看 exs_bmx280 扩展库说明
六、BMP180 与 BMP280 对比
| 特性 | BMP180 | BMP280 |
|---|---|---|
| 扩展库 | exs_bmp180 | exs_bmx280 |
| 初始化方式 | exs_bmp180.setup({scl, sda}) |
exs_bmx280.setup("I2C", {scl, sda, ...}) |
| 气压单位 | Pa(帕斯卡) | hPa(百帕斯卡) |
| 温度精度 | 0.1°C | 0.01°C |
| IIR 滤波 | 不支持(过采样 OSS 方式) | 支持 filter=0~4 |
| 工作电压 | 1.8V~3.6V | 1.71V~3.6V |
| 气压范围 | 300~1100hPa | 300~1100hPa |
| 湿度测量 | 不支持 | BME280 型号支持 |
