Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/sensor/spl06
wangfq 173dd6874f init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
2026-08-31 08:53:49 +08:00
..

SPL06-001 数字气压传感器演示

一、功能模块介绍

1.1 核心主程序模块

  1. main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
  2. spl06_app.lua - SPL06-001 功能演示模块,包含初始化、数据读取、海拔计算、过采样切换、模式切换与休眠唤醒等所有功能的演示用例

1.2 扩展库模块

  1. 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. [1/5] 初始化 - 初始化传感器(I2C 地址自动探测、芯片 ID 校验、校准系数读取、过采样率配置、缩放基准建立)
  2. [2/5] 数据读取 - 连续读取 5 次气压(hPa)和温度(℃),并演示单次读取接口
  3. [3/5] 海拔高度计算 - 按国际气压测高公式计算海拔高度,支持自定义海平面气压
  4. [4/5] 过采样率切换 - 依次切换气压过采样率 1x/16x/64x(含缩放因子动态自校准),观察不同精度下的数据
  5. [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 VCC3.3V
GND GND

说明:

  1. 接线时注意杜邦线不宜过长,以免通信不稳定
  2. SCL 和 SDA 需外接 4.7kΩ~10kΩ 上拉电阻到 VCC(部分模块已自带)
  3. 模块 SDO 引脚悬空(或接高电平)时 I2C 地址为 0x77,接 GND 时地址为 0x76;扩展库会自动探测,无需关心

四、演示软件环境

4.1 开发工具

4.2 内核固件

4.3 脚本文件

  1. main.lua - 程序入口
  2. spl06_app.lua - SPL06-001 功能演示模块
  3. exs_spl06 - SPL06-001 扩展库

五、演示核心步骤

5.1 硬件准备

  1. 按照接线表将 SPL06-001 模块连接到核心板
  2. 确保电源连接正确,通过 TYPE-C USB 口供电
  3. 检查所有接线无误,避免短路

5.2 软件配置

main.lua 中加载对应的演示模块:

-- 加载 spl06_app.lua 演示模块
require "spl06_app"

如需切换通信模式,修改 spl06_app.lua 中的 MODE 变量(1=软件 I2C,2=硬件 I2C)。

5.3 软件烧录

  1. 使用 Luatools 选择最新内核固件
  2. 下载本项目所有脚本文件
  3. 将固件和脚本一起烧录到设备
  4. 烧录成功后设备自动重启后开始运行

5.4 功能测试

5.4.1 初始化演示

  1. 设备启动后打印 "HELLO",随后自动进入 [1/5] 初始化
  2. 观察日志输出,确认初始化成功(应看到 芯片地址自适应:0x76/0x77初始化完成

5.4.2 数据读取演示

  1. 自动进入 [2/5] 数据读取
  2. 观察气压(hPa)和温度(℃)的连续读取,共 5 次,再观察单次读取接口结果

5.4.3 海拔计算演示

  1. 自动进入 [3/5] 海拔高度计算
  2. 观察气压值与两种海平面气压基准(默认 1013.25hPa / 自定义 1005hPa)下的海拔高度

5.4.4 过采样率切换演示

  1. 自动进入 [4/5] 过采样率切换演示
  2. 依次观察气压 OSR=01x 最快)、OSR=416x 默认)、OSR=664x 高精度)下的数据
  3. 切换高过采样时观察缩放因子动态自校准日志(缩放因子动态校准: kP ... kT ...
  4. 注意 OSR 越高,数据跳动越小,但单次测量耗时越长

5.4.5 模式切换与休眠唤醒演示

  1. 自动进入 [5/5] 模式切换与休眠唤醒
  2. 依次观察待机(standby)/单次气压(pressure/连续(both)模式的切换日志
  3. 观察睡眠 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 故障排除

  1. 传感器初始化失败

    • 检查 SPL06-001 接线是否正确(SCL、SDA、VCC、GND
    • 确认 GPIO 引脚配置与接线一致
    • 检查电源电压是否稳定(3.3V
    • 确认 SCL/SDA 上拉电阻是否连接
    • 确认 exs_spl06 扩展库已正常加载
  2. 读取数据始终为 0 或异常

    • 检查传感器供电是否正常
    • 确认 I2C 地址是否正确(SPL06-001 支持 0x76/0x77,由 SDO 引脚决定,扩展库会自动探测)
    • 确认接线无松动
    • 检查 SCL/SDA 上拉电阻
  3. 气压数据跳动过大

    • 提高过采样率(如 set_osr(6, 4) 对应 64x),数据更稳定但耗时更长
    • 传感器附近避免风吹、空调等气压扰动源

5.7 扩展功能建议

exs_spl06 更多接口的使用可以查看 exs_spl06 扩展库说明