- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
BMP180 数字气压传感器演示
一、功能模块介绍
1.1 核心主程序模块
- main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
- bmp180_demo.lua - BMP180 功能演示模块,包含数据读取、过采样率切换、海拔高度计算等所有功能的演示用例
1.2 扩展库模块
- exs_bmp180 - BMP180 扩展库,提供初始化、气压/温度读取、过采样率切换、海拔高度计算、关闭等 API
1.3 I2C 模式说明
推荐使用软件 I2C 模式:BMP180 使用标准 I2C 接口通信,软件 I2C 模式无需指定 I2C 控制器,任意 GPIO 均可模拟 I2C 时序,灵活性更高。本 demo 使用软件 I2C 模式演示。
二、演示流程介绍
本 demo 按顺序演示 exs_bmp180 扩展库的 4 项功能:HELLO → [1/4] → [2/4] → [3/4] → [4/4] → End
2.1 功能演示项说明
- [1/4] 初始化与数据读取 - 初始化 BMP180 传感器并读取温度(°C)和气压(Pa/hPa)数据
- [2/4] 过采样率切换演示 - 依次切换 OSS=0/1/2/3,观察不同精度下的温度与气压数据
- [3/4] 海拔高度测量 - 通过气压值计算当前海拔高度(米)
- [4/4] 关闭传感器 - 演示正确的传感器关闭流程
三、演示硬件环境
3.1 硬件清单
- Air780EPM 核心板 × 1
- BMP180 数字气压传感器模块 × 1 demo所演示的BMP180 气压传感器模块购买链接
- 母对母杜邦线 × 4
- TYPE-C 数据线 × 1
3.2 接线配置
3.2.1 BMP180 模块接线
| Air780EPM 核心板 | BMP180 模块 |
| 32/GPIO31 | SCL |
| 31/GPIO30 | SDA |
| VDD_EXT | VCC |
| GND | GND |
说明:
- 接线时注意杜邦线不宜过长,以免通信不稳定
- SCL 和 SDA 需外接 4.7kΩ~10kΩ 上拉电阻到 VCC(部分模块已自带)
四、演示软件环境
4.1 开发工具
- Luatools下载调试工具 - 固件烧录和代码调试
4.2 内核固件
- 点击下载Air780EPM系列最新版本内核固件,demo所使用的是 LuatOS-SoC_V2046_Air780EPM 1号固件
4.3 脚本文件
- main.lua - 程序入口
- bmp180_demo.lua - BMP180 功能演示模块
- exs_bmp180 - BMP180 扩展库
五、演示核心步骤
5.1 硬件准备
- 按照接线表将 BMP180 模块连接到核心板
- 确保电源连接正确,通过 TYPE-C USB 口供电
- 检查所有接线无误,避免短路
5.2 软件配置
在 main.lua 中加载对应的演示模块:
-- 加载 bmp180_demo.lua 演示模块
require "bmp180_demo"
5.3 软件烧录
- 使用 Luatools 选择最新内核固件
- 下载本项目所有脚本文件
- 将固件和脚本一起烧录到设备
- 烧录成功后设备自动重启后开始运行
5.4 功能测试
5.4.1 初始化与数据读取演示
- 设备启动后打印 "HELLO",随后自动进入 [1/4] 初始化与数据读取
- 观察日志输出,确认初始化成功
- 观察温度(°C)和气压(Pa/hPa)的连续读取
5.4.2 过采样率切换演示
- 自动进入 [2/4] 过采样率切换演示
- 依次观察 OSS=0(最快)、OSS=1、OSS=2、OSS=3(最高精度)下的数据
- 注意 OSS 越高,数据跳动越小,但转换时间越长
5.4.3 海拔高度测量
- 自动进入 [3/4] 海拔高度测量
- 观察基于当前气压值和海平面标准气压(101325Pa)计算的海拔高度
5.4.4 关闭传感器
- 自动进入 [4/4] 关闭传感器
- 演示完毕后打印 "End"
5.5 预期效果
- 初始化与数据读取:BMP180 初始化成功,温度与气压数据正常输出
- 过采样率切换:不同 OSS 下精度不同,OSS 越高数据越稳定
- 海拔高度测量:根据气压计算出当前海拔高度
- 关闭传感器:传感器正常关闭
- 日志如下:
[2026-07-23 15:30:32.854][000000000.247] I/user.main BMP180_Demo 001.000.000
[2026-07-23 15:30:32.868][000000000.259] D/user.exs_bmp180 version -> 202607220900
[2026-07-23 15:30:32.882][000000000.260] I/user.bmp180_demo HELLO
[2026-07-23 15:30:33.032][000000001.261] I/user.bmp180_demo ===== [1/4] 初始化与数据读取 =====
[2026-07-23 15:30:33.042][000000001.269] I/user.exs_bmp180 BMP180 @ I2C 0x77, CHIP_ID=0x55
[2026-07-23 15:30:33.055][000000001.286] I/user.exs_bmp180 校准数据: AC1=6464 AC2=-1308 AC3=-14829 AC4=33096 AC5=24574 AC6=21778
[2026-07-23 15:30:33.069][000000001.286] I/user.exs_bmp180 初始化完成, oss=0
[2026-07-23 15:30:33.081][000000001.286] I/user.bmp180_demo BMP180 初始化成功,版本: 202607220900
[2026-07-23 15:30:33.092][000000001.502] I/user.bmp180_demo 温度=24.1°C 气压=1004.56hPa
[2026-07-23 15:30:35.560][000000004.517] I/user.bmp180_demo 第1次读取: 温度=24.1°C 气压=100450.0Pa
[2026-07-23 15:30:37.582][000000006.533] I/user.bmp180_demo 第2次读取: 温度=24.1°C 气压=100450.0Pa
[2026-07-23 15:30:39.588][000000008.548] I/user.bmp180_demo 第3次读取: 温度=24.1°C 气压=100453.0Pa
[2026-07-23 15:30:39.605][000000008.548] I/user.bmp180_demo ---- [1/4] 完成 ----
[2026-07-23 15:30:40.099][000000009.049] I/user.bmp180_demo ===== [2/4] 过采样率切换演示 =====
[2026-07-23 15:30:40.121][000000009.049] I/user.bmp180_demo 设置过采样率为 oss=0
[2026-07-23 15:30:40.136][000000009.050] I/user.exs_bmp180 过采样率切换为 oss=0
[2026-07-23 15:30:40.208][000000009.165] I/user.bmp180_demo oss=0: 温度=24.1°C 气压=1004.59hPa
[2026-07-23 15:30:41.203][000000010.165] I/user.bmp180_demo 设置过采样率为 oss=1
[2026-07-23 15:30:41.216][000000010.165] I/user.exs_bmp180 过采样率切换为 oss=1
[2026-07-23 15:30:41.328][000000010.284] I/user.bmp180_demo oss=1: 温度=24.1°C 气压=1004.57hPa
[2026-07-23 15:30:42.320][000000011.284] I/user.bmp180_demo 设置过采样率为 oss=2
[2026-07-23 15:30:42.336][000000011.284] I/user.exs_bmp180 过采样率切换为 oss=2
[2026-07-23 15:30:42.444][000000011.409] I/user.bmp180_demo oss=2: 温度=24.1°C 气压=1004.56hPa
[2026-07-23 15:30:43.456][000000012.409] I/user.bmp180_demo 设置过采样率为 oss=3
[2026-07-23 15:30:43.469][000000012.409] I/user.exs_bmp180 过采样率切换为 oss=3
[2026-07-23 15:30:43.595][000000012.546] I/user.bmp180_demo oss=3: 温度=24.1°C 气压=1004.60hPa
[2026-07-23 15:30:44.589][000000013.546] I/user.bmp180_demo ---- [2/4] 完成 ----
[2026-07-23 15:30:45.086][000000014.046] I/user.bmp180_demo ===== [3/4] 海拔高度测量 =====
[2026-07-23 15:30:45.118][000000014.082] I/user.bmp180_demo 温度=24.1°C 气压=100457.0Pa 海拔=72.5米
[2026-07-23 15:30:45.135][000000014.082] I/user.bmp180_demo ---- [3/4] 完成 ----
[2026-07-23 15:30:45.631][000000014.583] I/user.bmp180_demo ===== [4/4] 演示完毕 =====
[2026-07-23 15:30:45.646][000000014.583] I/user.bmp180_demo ---- [4/4] 完成 ----
[2026-07-23 15:30:46.126][000000015.083] I/user.bmp180_demo ===== [演示完毕] =====
[2026-07-23 15:30:46.139][000000015.083] I/user.bmp180_demo End
5.6 故障排除
-
传感器初始化失败:
- 检查 BMP180 接线是否正确(SCL、SDA、VCC、GND)
- 确认 GPIO 引脚配置与接线一致
- 检查电源电压是否稳定(3.3V)
- 确认 SCL/SDA 上拉电阻是否连接
- 确认 exs_bmp180 扩展库已正常加载
-
读取数据始终为零或异常:
- 检查传感器供电是否正常
- 检查 I2C 地址是否正确(BMP180 固定地址 0x77)
- 确认接线无松动
- 检查 SCL/SDA 上拉电阻
-
海拔高度显示异常:
- 海拔计算基于海平面标准气压 101325Pa,天气变化会影响计算精度
- 可通过
get_altitude(pressure, sea_level_pressure)传入实际海平面气压校正
5.7 扩展功能建议
exs_bmp180 更多接口的使用可以查看 exs_bmp180 扩展库说明
