- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
SPL06-001 数字气压传感器演示
一、功能模块介绍
1.1 核心主程序模块
- main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
- spl06_app.lua - SPL06-001 功能演示模块,包含初始化、数据读取、海拔计算、过采样切换、模式切换与休眠唤醒等所有功能的演示用例
1.2 扩展库模块
- exs_spl06 - SPL06-001 扩展库,提供初始化(I2C 地址自动探测、芯片 ID 校验、校准系数读取)、气压/温度读取、过采样率切换、海拔高度计算、测量模式切换、休眠唤醒、关闭等 API
1.3 I2C 模式说明
推荐使用软件 I2C 模式:SPL06-001 使用标准 I2C 接口通信,软件 I2C 模式无需指定 I2C 控制器,任意 GPIO 均可模拟 I2C 时序,灵活性更高。本 demo 默认使用软件 I2C 模式(SCL=GPIO31, SDA=GPIO30)演示,也可通过 spl06_app.lua 中的 MODE 变量切换为硬件 I2C 模式。
SPL06-001 是双地址芯片:SDO 引脚悬空或接高电平时地址为 0x77,SDO 接 GND 时地址为 0x76。
setup()不传addr时扩展库会自动探测两个地址并校验芯片 ID,无需手动配置。
二、演示流程介绍
本 demo 按顺序演示 exs_spl06 扩展库的 5 项功能:HELLO → [1/5] → [2/5] → [3/5] → [4/5] → [5/5] → End
2.1 功能演示项说明
- [1/5] 初始化 - 初始化传感器(I2C 地址自动探测、芯片 ID 校验、校准系数读取、过采样率配置、缩放基准建立)
- [2/5] 数据读取 - 连续读取 5 次气压(hPa)和温度(℃),并演示单次读取接口
- [3/5] 海拔高度计算 - 按国际气压测高公式计算海拔高度,支持自定义海平面气压
- [4/5] 过采样率切换 - 依次切换气压过采样率 1x/16x/64x(含缩放因子动态自校准),观察不同精度下的数据
- [5/5] 模式切换与休眠唤醒 - 切换待机/单次/连续测量模式,演示休眠唤醒与资源释放
三、演示硬件环境
3.1 硬件清单
- Air780EPM 核心板 × 1
- SPL06-001 数字气压传感器模块 × 1 demo所演示的SPL06-001 数字气压传感器模块购买链接
- 母对母杜邦线 × 4
- TYPE-C 数据线 × 1
3.2 接线配置
3.2.1 I2C 模式接线
| Air780EPM 核心板 | SPL06-001 模块 |
|---|---|
| 32/GPIO31 | SCL |
| 31/GPIO30 | SDA |
| VDD_EXT | VCC(3.3V) |
| GND | GND |
说明:
- 接线时注意杜邦线不宜过长,以免通信不稳定
- SCL 和 SDA 需外接 4.7kΩ~10kΩ 上拉电阻到 VCC(部分模块已自带)
- 模块 SDO 引脚悬空(或接高电平)时 I2C 地址为 0x77,接 GND 时地址为 0x76;扩展库会自动探测,无需关心
四、演示软件环境
4.1 开发工具
- Luatools下载调试工具 - 固件烧录和代码调试
4.2 内核固件
- 点击下载Air780EPM系列最新版本内核固件,demo所使用的是 LuatOS-SoC_V2046_Air780EPM 1号固件
4.3 脚本文件
- main.lua - 程序入口
- spl06_app.lua - SPL06-001 功能演示模块
- exs_spl06 - SPL06-001 扩展库
五、演示核心步骤
5.1 硬件准备
- 按照接线表将 SPL06-001 模块连接到核心板
- 确保电源连接正确,通过 TYPE-C USB 口供电
- 检查所有接线无误,避免短路
5.2 软件配置
在 main.lua 中加载对应的演示模块:
-- 加载 spl06_app.lua 演示模块
require "spl06_app"
如需切换通信模式,修改 spl06_app.lua 中的 MODE 变量(1=软件 I2C,2=硬件 I2C)。
5.3 软件烧录
- 使用 Luatools 选择最新内核固件
- 下载本项目所有脚本文件
- 将固件和脚本一起烧录到设备
- 烧录成功后设备自动重启后开始运行
5.4 功能测试
5.4.1 初始化演示
- 设备启动后打印 "HELLO",随后自动进入 [1/5] 初始化
- 观察日志输出,确认初始化成功(应看到
芯片地址自适应:0x76/0x77和初始化完成)
5.4.2 数据读取演示
- 自动进入 [2/5] 数据读取
- 观察气压(hPa)和温度(℃)的连续读取,共 5 次,再观察单次读取接口结果
5.4.3 海拔计算演示
- 自动进入 [3/5] 海拔高度计算
- 观察气压值与两种海平面气压基准(默认 1013.25hPa / 自定义 1005hPa)下的海拔高度
5.4.4 过采样率切换演示
- 自动进入 [4/5] 过采样率切换演示
- 依次观察气压 OSR=0(1x 最快)、OSR=4(16x 默认)、OSR=6(64x 高精度)下的数据
- 切换高过采样时观察缩放因子动态自校准日志(
缩放因子动态校准: kP ... kT ...) - 注意 OSR 越高,数据跳动越小,但单次测量耗时越长
5.4.5 模式切换与休眠唤醒演示
- 自动进入 [5/5] 模式切换与休眠唤醒
- 依次观察待机(standby)/单次气压(pressure)/连续(both)模式的切换日志
- 观察睡眠 3 秒后唤醒、唤醒后数据恢复输出、最后关闭传感器
5.5 预期效果
-
初始化:SPL06-001 初始化成功,芯片地址自动探测锁定、校准系数读取正常
-
数据读取:气压与温度数据正常输出(气压约 1002.87hPa,温度约 23.6℃)
-
海拔计算:基于实测气压输出海拔高度(默认/自定义海平面气压两种)
-
过采样率切换:不同 OSR 下精度不同,OSR 越高数据越稳定;切换高过采样时自动动态校准
-
模式切换与休眠唤醒:待机/单次/连续模式切换正常,睡眠后唤醒数据恢复输出
-
日志如下:
[2026-08-21 17:28:45.888][000000000.200] I/user.main sensor_spl06 001.999.000
[2026-08-21 17:28:45.899][000000000.216] D/user.exs_spl06 version -> 202608211700
[2026-08-21 17:28:45.942][000000000.217] I/user.spl06_app HELLO
[2026-08-21 17:28:47.219][000000001.217] I/user.spl06_app ===== [1/5] 初始化 =====
[2026-08-21 17:28:47.638][000000001.225] I/user.exs_spl06 芯片地址自适应:0x76
[2026-08-21 17:28:47.681][000000001.294] I/user.exs_spl06 缩放基准原始值: P -112660 T 2295708
[2026-08-21 17:28:47.761][000000001.294] I/user.exs_spl06 初始化完成, prs_osr=4 tmp_osr=3
[2026-08-21 17:28:47.833][000000001.295] I/user.spl06_app SPL06-001 初始化成功,版本: 202608211700
[2026-08-21 17:28:47.882][000000001.795] I/user.spl06_app ===== [2/5] 数据读取 =====
[2026-08-21 17:28:47.899][000000001.795] I/user.spl06_app 连续读取 5 次气压/温度(单位 hPa / ℃)
[2026-08-21 17:28:48.336][000000001.802] I/user.spl06_app 第1次: 气压=1002.86hPa 温度=23.8℃
[2026-08-21 17:28:48.366][000000002.808] I/user.spl06_app 第2次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:28:48.408][000000003.814] I/user.spl06_app 第3次: 气压=1002.86hPa 温度=23.8℃
[2026-08-21 17:28:48.588][000000004.820] I/user.spl06_app 第4次: 气压=1002.86hPa 温度=23.8℃
[2026-08-21 17:28:49.571][000000005.826] I/user.spl06_app 第5次: 气压=1002.86hPa 温度=23.8℃
[2026-08-21 17:28:50.691][000000006.928] I/user.spl06_app 单次气压=1002.86hPa 单次温度=23.8℃
[2026-08-21 17:28:51.194][000000007.428] I/user.spl06_app ===== [3/5] 海拔高度计算 =====
[2026-08-21 17:28:51.240][000000007.440] I/user.spl06_app 气压=1002.87hPa,默认海平面气压海拔=86.8米,自定义1005hPa海拔=17.9米
[2026-08-21 17:28:51.687][000000007.940] I/user.spl06_app ===== [4/5] 过采样率切换 =====
[2026-08-21 17:28:51.709][000000007.940] I/user.spl06_app 依次切换气压过采样率 1x/16x/64x(温度保持 8x),观察数据精度
[2026-08-21 17:28:51.749][000000007.985] I/user.exs_spl06 缩放因子动态校准: kP 524310 kT 7864779
[2026-08-21 17:28:51.765][000000007.986] I/user.exs_spl06 过采样切换成功, prs_osr=0 tmp_osr=3
[2026-08-21 17:28:51.802][000000007.986] I/user.spl06_app 气压OSR=0(1x),开始采集
[2026-08-21 17:28:52.186][000000008.442] I/user.spl06_app OSR=0 第1次: 气压=1002.83hPa 温度=23.8℃
[2026-08-21 17:28:53.202][000000009.448] I/user.spl06_app OSR=0 第2次: 气压=1002.88hPa 温度=23.8℃
[2026-08-21 17:28:54.196][000000010.454] I/user.spl06_app OSR=0 第3次: 气压=1002.87hPa 温度=23.8℃
[2026-08-21 17:28:55.210][000000011.460] I/user.spl06_app OSR=0 第4次: 气压=1002.84hPa 温度=23.8℃
[2026-08-21 17:28:56.213][000000012.466] I/user.spl06_app OSR=0 第5次: 气压=1002.84hPa 温度=23.8℃
[2026-08-21 17:28:57.208][000000013.466] I/user.spl06_app OSR=0 平均气压=1002.85hPa
[2026-08-21 17:28:57.286][000000013.536] I/user.exs_spl06 缩放因子动态校准: kP 253984 kT 7868382
[2026-08-21 17:28:57.294][000000013.537] I/user.exs_spl06 过采样切换成功, prs_osr=4 tmp_osr=3
[2026-08-21 17:28:57.304][000000013.537] I/user.spl06_app 气压OSR=4(16x),开始采集
[2026-08-21 17:28:57.800][000000014.047] I/user.spl06_app OSR=4 第1次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:28:58.805][000000015.053] I/user.spl06_app OSR=4 第2次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:28:59.823][000000016.059] I/user.spl06_app OSR=4 第3次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:00.819][000000017.065] I/user.spl06_app OSR=4 第4次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:01.814][000000018.071] I/user.spl06_app OSR=4 第5次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:02.822][000000019.071] I/user.spl06_app OSR=4 平均气压=1002.85hPa
[2026-08-21 17:29:02.963][000000019.219] I/user.exs_spl06 缩放因子动态校准: kP 1040493 kT 7864292
[2026-08-21 17:29:02.970][000000019.220] I/user.exs_spl06 过采样切换成功, prs_osr=6 tmp_osr=3
[2026-08-21 17:29:02.976][000000019.220] I/user.spl06_app 气压OSR=6(64x),开始采集
[2026-08-21 17:29:03.476][000000019.730] I/user.spl06_app OSR=6 第1次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:04.489][000000020.736] I/user.spl06_app OSR=6 第2次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:05.495][000000021.742] I/user.spl06_app OSR=6 第3次: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:06.493][000000022.748] I/user.spl06_app OSR=6 第4次: 气压=1002.84hPa 温度=23.8℃
[2026-08-21 17:29:07.495][000000023.754] I/user.spl06_app OSR=6 第5次: 气压=1002.84hPa 温度=23.8℃
[2026-08-21 17:29:08.504][000000024.754] I/user.spl06_app OSR=6 平均气压=1002.85hPa
[2026-08-21 17:29:09.033][000000025.292] I/user.exs_spl06 缩放因子动态校准: kP 253960 kT 7869000
[2026-08-21 17:29:09.044][000000025.293] I/user.exs_spl06 过采样切换成功, prs_osr=4 tmp_osr=3
[2026-08-21 17:29:09.548][000000025.793] I/user.spl06_app ===== [5/5] 模式切换与休眠唤醒 =====
[2026-08-21 17:29:09.557][000000025.795] I/user.spl06_app 已切换待机模式(standby)
[2026-08-21 17:29:09.565][000000025.796] I/user.spl06_app 已切换单次气压测量模式(pressure)
[2026-08-21 17:29:09.573][000000025.797] I/user.spl06_app 已切换连续气压+温度测量模式(both)
[2026-08-21 17:29:10.046][000000026.303] I/user.spl06_app 连续模式数据: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:10.056][000000026.304] I/user.exs_spl06 已进入待机(睡眠)
[2026-08-21 17:29:10.066][000000026.305] I/user.spl06_app 已进入睡眠(待机),3 秒后唤醒
[2026-08-21 17:29:13.063][000000029.306] I/user.exs_spl06 已唤醒,恢复连续测量
[2026-08-21 17:29:13.073][000000029.306] I/user.spl06_app 已唤醒,恢复连续测量
[2026-08-21 17:29:13.561][000000029.812] I/user.spl06_app 唤醒后数据: 气压=1002.85hPa 温度=23.8℃
[2026-08-21 17:29:13.573][000000029.813] I/user.exs_spl06 传感器已关闭
[2026-08-21 17:29:13.590][000000029.813] I/user.spl06_app 已关闭传感器
[2026-08-21 17:29:13.619][000000029.814] I/user.spl06_app ===== [演示完毕] =====
[2026-08-21 17:29:13.631][000000029.814] I/user.spl06_app End
5.6 故障排除
-
传感器初始化失败:
- 检查 SPL06-001 接线是否正确(SCL、SDA、VCC、GND)
- 确认 GPIO 引脚配置与接线一致
- 检查电源电压是否稳定(3.3V)
- 确认 SCL/SDA 上拉电阻是否连接
- 确认 exs_spl06 扩展库已正常加载
-
读取数据始终为 0 或异常:
- 检查传感器供电是否正常
- 确认 I2C 地址是否正确(SPL06-001 支持 0x76/0x77,由 SDO 引脚决定,扩展库会自动探测)
- 确认接线无松动
- 检查 SCL/SDA 上拉电阻
-
气压数据跳动过大:
- 提高过采样率(如
set_osr(6, 4)对应 64x),数据更稳定但耗时更长 - 传感器附近避免风吹、空调等气压扰动源
- 提高过采样率(如
5.7 扩展功能建议
exs_spl06 更多接口的使用可以查看 exs_spl06 扩展库说明
