exs_spl06 扩展库
作者:江访 | 最后修改:2026-08-21
一、概述
exs_spl06 是歌尔微电子(Goertek)SPL06-001 数字气压传感器的 LuatOS 扩展库。 SPL06-001 是一款高精度、低功耗的电容式气压传感器,内部集成 24 位 ADC, 同时测量气压与温度,广泛应用于气压测高、室内外导航、天气预报、垂直速度检测等领域。
1.1 主要特性
-
压力范围 300~1100hPa(对应海拔 +9000m ~ -500m)
-
温度范围 -40~+85°C,温度精度 ±0.5°C(+25°C 时)
-
气压绝对精度典型值 ±1hPa(0~+65°C,300~1100hPa 范围内)
-
气压相对精度 ±0.06hPa(等效 ±0.5 米海拔)
-
输出分辨率:气压 0.06Pa,温度 0.01°C
-
I2C 接口通信,支持双地址 0x77/0x76(由 SDO 引脚决定),不传地址时自动探测
-
内置 E2PROM 出厂校准系数,每颗芯片独立校准,扩展库自动读取并完成补偿计算
-
支持 8 级过采样率(1x~128x),精度/速度/功耗可调
-
内置 FIFO 可缓存最新 32 次测量结果
-
工作电压 VDD 1.7~3.6V,待机电流小于 1μA
-
支持软件 I2C 和硬件 I2C 两种模式,内置 I2C 总线卡死自动检测与恢复
-
支持海拔高度计算、测量模式切换(待机/单次/连续)、休眠唤醒等附加功能
1.2 注意事项
-
推荐使用软件 I2C 模式:SPL06-001 在异常 I2C 通信后可能锁死 SDA 总线, 软件 I2C 模式可以通过 GPIO 直接脉冲 SCL 恢复总线。
-
初始化总线恢复:每次调用
setup()时,如果传入了scl/sda引脚号, 驱动会先进行总线恢复,确保总线在通信开始前处于空闲状态。 -
运行时自动恢复:当
i2c.send()或i2c.recv()返回失败时, 驱动自动执行总线恢复并重试。 -
I2C 模式下 SCL 和 SDA 需外接 4.7kΩ~10kΩ 上拉电阻到 VCC(部分模块已自带)。
-
双地址说明:SPL06-001 有两个 I2C 地址,由 SDO 引脚决定: SDO 悬空或接高电平时地址为 0x77,SDO 接 GND 时地址为 0x76。 不传
addr参数时扩展库自动探测并锁定实际地址,接线改变后需重新上电。 -
过采样率大于 8 倍(16x~128x)时,芯片需配合移位处理,扩展库已自动完成, 无需用户干预。
-
首次上电等待校准:芯片上电后约 40ms 校准系数才就绪, 扩展库的
setup()会等待就绪后再读取,期间请勿断电。 -
未实现 FIFO 与中断功能:SPL06-001 的 INT 引脚在 I2C 模式下与地址选择 引脚复用(SDO),启用中断会影响地址配置;FIFO 仅缓存 32 次结果,本扩展库 采用即时读取模式,轮询下无使用 FIFO 的必要。
1.3 过采样率说明
通过 setup() 的 config.prs_osr/config.tmp_osr 或 set_osr() 配置,默认气压 4(16x)、温度 3(8x)。
| OSR | 倍数 | 测量时间(ms) | 精度(PaRMS) | 适用场景 |
|---|---|---|---|---|
| 0 | 1x | 3.6 | 5 | 最快,适合仅看气压趋势 |
| 1 | 2x | 5.2 | 2.5 | 低功耗周期监测 |
| 2 | 4x | 8.4 | 1.2 | 常规监测 |
| 3 | 8x | 14.8 | 0.9 | 常规测量 |
| 4 | 16x | 27.6 | 0.5 | 默认,适合大多数场景 |
| 5 | 32x | 53.2 | - | 较高精度 |
| 6 | 64x | 104.4 | - | 高精度气象站 |
| 7 | 128x | 206.8 | - | 最高精度,最慢 |
-
OSR 越高,精度越高,但测量时间越长、功耗越高
-
便携/低功耗应用推荐 OSR=0 或 1
-
气象站等高精度应用推荐 OSR=6 或 7
-
温度过采样对功耗影响小,推荐保持默认值
-
高过采样动态自校准:规格书缩放因子表在 32x/64x/128x 下真机实测存在偏差, 扩展库以默认过采样(16x 气压/8x 温度)实测原始值为基准,切换过采样时读取 新原始值按比例自动校准缩放因子(kP/kT),无需用户干预,数据始终准确
-
切换高过采样(32x/64x/128x)时若动态校准失败(芯片数据异常),扩展库自动 回退默认过采样(16x/8x)并返回 false,保证数据正常输出
1.4 硬件连接
SPL06-001 通过 I2C 接口与主控连接,SCL/SDA 需外接 4.7kΩ~10kΩ 上拉电阻。
接线图(以 Air780EHM/Air780EHV/Air780EGH 为例,软件 I2C:SCL=GPIO31, SDA=GPIO30):

┌──────────────┐ ┌──────────────────┐
│ 主控 │ │ SPL06-001 │
│ (Air780EHM) │ │ 数字气压传感器 │
│ │ │ │
│ GPIO31 ──────┼────────────────────┼──→ SCL │
│ │ │ │
│ GPIO30 ──────┼────────────────────┼──→ SDA │
│ │ │ (需外接上拉电阻)│
│ │ │ │
│ VDD_EXT ─────┼────────────────────┼──→ VCC │
│ │ │ │
│ GND ────┼────────────────────┼──→ GND │
│ │ │ │
│ GND ────┼────────────────────┼──→ SDO(可选, │
│ │ │ 接 GND=0x76) │
└──────────────┘ └──────────────────┘
各平台示例接线(以软件 I2C 模式为例):
- Air780EHM/Air780EHV/Air780EGH:SCL=GPIO31, SDA=GPIO30

- Air780EPM:SCL=GPIO31, SDA=GPIO30

- Air8000:SCL=GPIO1, SDA=GPIO2

- Air8101:SCL=GPIO4, SDA=GPIO5

1.5 加载方式
-- 扩展库需要 require 加载后才能调用
local exs_spl06 = require "exs_spl06"
二、核心示例
2.1 按使用接口划分
2.1.1 软件 I2C 模式(推荐)
主动轮询读取:
local exs_spl06 = require "exs_spl06"
local result = exs_spl06.setup({scl = 31, sda = 30})
if not result then return end
while true do
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("温度=%.1f°C 气压=%.1fhPa", data.temperature, data.pressure))
end
sys.wait(5000) -- 等待 5 秒后再次读取
end
2.1.2 硬件 I2C 模式
主动轮询读取:
local exs_spl06 = require "exs_spl06"
local result = exs_spl06.setup({i2c_id = 0, scl = 31, sda = 30})
-- 或仅使用硬件 I2C(无总线恢复)
-- local result = exs_spl06.setup({i2c_id = 0})
if not result then return end
while true do
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("温度=%.1f°C 气压=%.1fhPa", data.temperature, data.pressure))
end
sys.wait(5000) -- 等待 5 秒后再次读取
end
2.2 按使用场景划分
2.2.1 气压与温度轮询读取(省电)
适用场景:每隔几秒读一次气压和温度,不关心实时变化。
local result = exs_spl06.setup({
scl = 31, sda = 30,
prs_osr = 0, -- 1x 超低功耗,单次测量仅 3.6ms
})
if not result then return end
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("温度=%.1f°C 气压=%.1fhPa", data.temperature, data.pressure))
end
2.2.2 高精度气压测量(气象站)
适用场景:气象观测、室内外气压监测,需要高精度数据。
local result = exs_spl06.setup({
scl = 31, sda = 30,
prs_osr = 6, -- 64x 高精度,单次测量约 104ms
})
if not result then return end
while true do
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
end
sys.wait(10000) -- 等待 10 秒后再次读取
end
2.2.3 过采样率动态切换
适用场景:在低功耗和高精度模式之间动态切换。
-- 高精度模式测量(64x)
exs_spl06.set_osr(6, 4)
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("高精度: 温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
end
-- 切回低功耗模式(1x)
exs_spl06.set_osr(0, 4)
data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("低功耗: 温度=%.1f°C 气压=%.1fhPa", data.temperature, data.pressure))
end
2.2.4 海拔高度计算
适用场景:气压测高、室内外导航。
local pressure = exs_spl06.get_pressure()
if pressure then
-- 默认海平面气压 1013.25 hPa
local h = exs_spl06.get_altitude(pressure)
-- 可传自定义海平面气压(更准)
local h2 = exs_spl06.get_altitude(pressure, 1005)
log.info("exs_spl06", string.format("气压=%.2fhPa 海拔=%.1f米(默认) %.1f米(1005hPa)", pressure, h, h2))
end
2.2.5 测量模式切换
适用场景:需要连续采集时用连续模式,需要低功耗时用待机/单次模式。
-- 连续气压+温度测量(后台模式)
exs_spl06.set_mode("both")
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("连续模式: 温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
end
-- 待机模式(电流 < 1µA)
exs_spl06.set_mode("standby")
2.2.6 休眠唤醒
适用场景:低功耗场景下临时睡眠,唤醒后恢复测量(无需重新初始化)。
-- 进入待机(等效睡眠,电流 < 1µA,校准系数不丢失)
exs_spl06.sleep()
sys.wait(3000) -- 睡眠 3 秒
-- 唤醒并恢复连续测量(无需重新读取校准系数)
exs_spl06.wakeup()
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("唤醒后: 温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
end
三、常量解释
扩展库常量,顾名思义是由 exs_spl06 扩展库中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;
每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为扩展库可能会变更每个常量对应的常量取值;
如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;
3.1 exs_spl06.I2C_ADDR_H
常量含义:I2C 设备高地址,SDO 引脚悬空或接高电平时芯片默认使用该地址
数据类型:number
注意事项:取值为 0x77;setup() 不传 addr 时扩展库自动探测本地址与 I2C_ADDR_L,无需手动指定
示例代码:local result = exs_spl06.setup({scl = 31, sda = 30, addr = exs_spl06.I2C_ADDR_H})
3.2 exs_spl06.I2C_ADDR_L
常量含义:I2C 设备低地址,SDO 引脚接 GND 时芯片使用该地址
数据类型:number
注意事项:取值为 0x76;与 I2C_ADDR_H 的差异由 SDO 引脚决定,接线固定后地址即固定,一般不需手动指定
示例代码:local result = exs_spl06.setup({scl = 31, sda = 30, addr = exs_spl06.I2C_ADDR_L})
3.3 exs_spl06.OSR_1X
常量含义:过采样率 1x,单次测量最快(气压约 3.6ms),精度最低
数据类型:number
注意事项:取值为 0;适合低功耗、高刷新率场景(如气压变化趋势监测);与 OSR_2X 相比噪声更大
示例代码:exs_spl06.set_osr(exs_spl06.OSR_1X, exs_spl06.OSR_8X)
3.4 exs_spl06.OSR_2X
常量含义:过采样率 2x,单次测量较快(气压约 3.7ms),精度较低
数据类型:number
注意事项:取值为 1;适合低功耗场景,精度略优于 OSR_1X
示例代码:exs_spl06.set_osr(exs_spl06.OSR_2X, exs_spl06.OSR_8X)
3.5 exs_spl06.OSR_4X
常量含义:过采样率 4x,单次测量较快(气压约 4.8ms),精度中等
数据类型:number
注意事项:取值为 2;适合一般场景的功耗/精度折中
示例代码:exs_spl06.set_osr(exs_spl06.OSR_4X, exs_spl06.OSR_8X)
3.6 exs_spl06.OSR_8X
常量含义:过采样率 8x,单次测量约 7.5ms,精度较高
数据类型:number
注意事项:取值为 3;也是温度过采样的默认档位,适合常规应用
示例代码:exs_spl06.set_osr(exs_spl06.OSR_16X, exs_spl06.OSR_8X)
3.7 exs_spl06.OSR_16X
常量含义:过采样率 16x,单次测量约 27.6ms,精度高
数据类型:number
注意事项:取值为 4;为气压过采样的默认档位(setup 默认),也是缩放因子动态自校准的基准锚点
示例代码:exs_spl06.setup({scl = 31, sda = 30, prs_osr = exs_spl06.OSR_16X})
3.8 exs_spl06.OSR_32X
常量含义:过采样率 32x,单次测量约 54.4ms,精度更高
数据类型:number
注意事项:取值为 5;测量耗时明显增加,适合精度优先且刷新率要求不高的场景
示例代码:exs_spl06.set_osr(exs_spl06.OSR_32X, exs_spl06.OSR_8X)
3.9 exs_spl06.OSR_64X
常量含义:过采样率 64x,单次测量约 104ms,高精度
数据类型:number
注意事项:取值为 6;适合气象站、高度计等精度敏感场景;切换时扩展库自动完成缩放因子动态自校准
示例代码:exs_spl06.set_osr(exs_spl06.OSR_64X, exs_spl06.OSR_8X)
3.10 exs_spl06.OSR_128X
常量含义:过采样率 128x,单次测量最慢(约 208ms),精度最高
数据类型:number
注意事项:取值为 7;功耗与耗时最高,仅在需要极限精度的静态气压测量场景使用
示例代码:exs_spl06.set_osr(exs_spl06.OSR_128X, exs_spl06.OSR_8X)
四、函数详解
4.1 初始化
4.1.1 exs_spl06.setup(config)
功能
初始化 SPL06-001 气压传感器,配置 I2C 通信引脚,自动探测并锁定芯片地址, 等待校准系数就绪并读取,配置过采样率。
参数
config
参数含义:初始化配置表
数据类型:table
取值范围:包含以下子参数:
{
参数含义:SCL 时钟引脚 GPIO 编号
数据类型:number
取值范围:有效的 GPIO 编号
是否必选:与 sda 一起可选
注意事项:与 sda 一起传入时无 i2c_id 则创建软件 I2C(推荐),
有 i2c_id 则走硬件 I2C 并附带总线恢复
参数示例:31
config.scl ,
参数含义:SDA 数据引脚 GPIO 编号
数据类型:number
取值范围:有效的 GPIO 编号
是否必选:与 scl 一起可选
注意事项:该引脚需外接 4.7kΩ~10kΩ 上拉电阻到 VCC
参数示例:30
config.sda ,
参数含义:硬件 I2C 总线 ID
数据类型:number
取值范围:有效的 I2C 总线编号
是否必选:可选
注意事项:默认 0。与 scl/sda 一起传时使用硬件 I2C 通信 + 引脚恢复总线;
不传 scl/sda 时使用硬件 I2C 但无总线恢复能力
参数示例:1
config.i2c_id ,
参数含义:I2C 设备地址(芯片支持多个地址,可不传,自动探测)
数据类型:number
取值范围:0x77 / 0x76(由 SDO 引脚决定:SDO 悬空或接高电平 = 0x77,
SDO 接 GND = 0x76)
是否必选:否
注意事项:不传时扩展库自动探测两个地址并校验芯片 ID,命中后锁定实际
地址;接线改变后需重新上电探测。传了则直接使用该地址并跳过
探测
参数示例:0x76
config.addr ,
参数含义:气压过采样率
数据类型:number
取值范围:0~7,对应 1x/2x/4x/8x/16x/32x/64x/128x
是否必选:否
注意事项:默认 4(16x),适合大多数场景;低功耗选 0~1,
高精度气象站选 6~7,详见"1.3 过采样率说明"
参数示例:6
config.prs_osr ,
参数含义:温度过采样率
数据类型:number
取值范围:0~7,对应 1x/2x/4x/8x/16x/32x/64x/128x
是否必选:否
注意事项:默认 3(8x),与缩放校准锚点一致;温度测量功耗极低,
一般保持默认即可
参数示例:3
config.tmp_osr ,
}
是否必选:否,可不传任何参数使用默认值(硬件 I2C,地址自动探测)
参数示例:
-- 方式一:软件 I2C 模式(推荐)
exs_spl06.setup({scl = 31, sda = 30})
-- 方式二:硬件 I2C + 总线恢复
exs_spl06.setup({i2c_id = 1, scl = 31, sda = 30})
-- 方式三:指定地址 + 高精度过采样
exs_spl06.setup({scl = 31, sda = 30, addr = 0x76, prs_osr = 6})
返回值
local result = exs_spl06.setup(config)
result
含义说明:初始化是否成功
数据类型:boolean
取值范围:true(成功),false(失败)
注意事项:失败时请检查接线、供电和 I2C 地址
返回示例:true
示例
-- 软件 I2C 模式
local result = exs_spl06.setup({scl = 31, sda = 30})
if not result then return end
4.2 数据读取
4.2.1 exs_spl06.get_data()
功能
读取 SPL06-001 气压和温度数据,自动进行校准补偿。 采用连续测量模式:内部维持 BOTH_CONT 连续测量,等待最新气压/温度数据就绪后 读取(PRS_RDY/TMP_RDY 周期置位,一定能等到)。若当前处于待机/单次模式 (如 sleep 后),会自动恢复连续测量。单次测量耗时取决于过采样率 (16x 约 27.6ms,64x 约 104ms)。
⚠️ 协程限制:必须在 sys.taskInit 创建的协程中调用 原因:内部使用轮询等待测量完成,需要 sys.wait 让步 最长等待:最长约 2 秒(气压+温度各等待一次),每 5ms 检测一次
参数
无
返回值
local data = exs_spl06.get_data()
data
含义说明:气压和温度数据表
数据类型:table 或 nil
取值范围:
data.temperature - 温度,单位 °C,精确到小数点后 1 位,
范围 -40.0~+85.0,如 25.1
data.pressure - 气压,单位 hPa,精确到小数点后 2 位,
范围 300.00~1100.00,如 1013.25
注意事项:失败返回 nil,失败时请检查 I2C 通信
返回示例:{temperature = 25.1, pressure = 1013.25}
示例
local data = exs_spl06.get_data()
if data then
-- 温度单位 °C,气压单位 hPa
log.info("exs_spl06", string.format("温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
else
log.error("exs_spl06", "读取数据失败")
end
4.2.2 exs_spl06.get_pressure()
功能
单次读取当前气压值,自动完成补偿计算。
内部基于 get_data() 实现:连续测量模式下等待最新气压/温度数据就绪后,
直接取其中的气压分量返回。
⚠️ 协程限制:必须在 sys.taskInit 创建的协程中调用 原因:内部使用轮询等待测量完成,需要 sys.wait 让步 最长等待:最长约 2 秒(气压+温度各等待一次),每 5ms 检测一次
参数
无
返回值
local pressure = exs_spl06.get_pressure()
pressure
含义说明:补偿后的气压值
数据类型:number 或 nil
取值范围:300.00~1100.00(单位 hPa,精确到小数点后 2 位)
注意事项:失败返回 nil
返回示例:1013.25
示例
local pressure = exs_spl06.get_pressure()
if pressure then
log.info("exs_spl06", string.format("气压=%.2fhPa", pressure))
end
4.2.3 exs_spl06.get_temperature()
功能
单次读取当前温度值,自动完成补偿计算。
内部基于 get_data() 实现:连续测量模式下等待最新气压/温度数据就绪后,
直接取其中的温度分量返回。
⚠️ 协程限制:必须在 sys.taskInit 创建的协程中调用 原因:内部使用轮询等待测量完成,需要 sys.wait 让步 最长等待:最长约 2 秒(气压+温度各等待一次),每 5ms 检测一次
参数
无
返回值
local temperature = exs_spl06.get_temperature()
temperature
含义说明:补偿后的温度值
数据类型:number 或 nil
取值范围:-40.0~+85.0(单位 °C,精确到小数点后 1 位)
注意事项:失败返回 nil
返回示例:25.1
示例
local temperature = exs_spl06.get_temperature()
if temperature then
log.info("exs_spl06", string.format("温度=%.1f°C", temperature))
end
4.3 参数配置
4.3.1 exs_spl06.set_osr(prs_osr, tmp_osr)
功能
动态修改气压和温度的过采样率,无需重新初始化。 过采样率越高,精度越高但测量时间越长、功耗越高。 切换后扩展库自动触发缩放因子动态自校准(以 16x 气压/8x 温度为基准 按比例校准 kP/kT),规避规格书高过采样缩放因子真机偏差,无需用户干预。
⚠️ 协程限制:必须在 sys.taskInit 创建的协程中调用 原因:内部需要重启连续测量并轮询等待新原始值,使用 sys.wait 让步 最长等待:最长约 2.5 秒(先丢弃切换过渡期前两轮测量结果,再重试 3 次,间隔 100ms)
参数
prs_osr
参数含义:气压目标过采样率
数据类型:number
取值范围:0~7,对应 1x/2x/4x/8x/16x/32x/64x/128x
是否必选:否
注意事项:不传则保持当前气压过采样率。超范围自动裁剪到 0~7。
低功耗选 0~1,默认精度选 4,高精度选 6~7
参数示例:6
tmp_osr
参数含义:温度目标过采样率
数据类型:number
取值范围:0~7,对应 1x/2x/4x/8x/16x/32x/64x/128x
是否必选:否
注意事项:不传则保持当前温度过采样率。超范围自动裁剪到 0~7。
温度测量功耗极低,一般保持默认即可
参数示例:3
返回值
local ok = exs_spl06.set_osr(6, 3)
ok
含义说明:切换是否成功
数据类型:boolean
取值范围:true(成功),false(失败)
注意事项:高过采样(32x/64x/128x)动态校准失败时,自动回退默认
过采样(16x/8x)并返回 false,保证数据正常输出
返回示例:true
示例
-- 切换为 64x 高精度(气压 64x + 温度 16x)
local ok = exs_spl06.set_osr(6, 4)
if ok then
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("高精度: 温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
end
end
-- 切换回 1x 低功耗(温度保持 8x)
exs_spl06.set_osr(0)
4.4 资源释放
4.4.1 exs_spl06.close()
功能
关闭 SPL06-001 传感器,令芯片进入待机模式(功耗小于 1μA), 并释放 I2C 资源、重置内部状态。
close 后需要重新调用 setup() 才能再次使用。 close 后调用 get_data() 会返回 nil 并提示"请先 setup()"。
参数
无
返回值
无
示例
exs_spl06.close()
4.5 海拔高度计算
4.5.1 exs_spl06.get_altitude(pressure, sea_level_pressure)
功能
根据气压值计算海拔高度(国际气压测高公式:h = 44330 × (1 − (P/P0)^(1/5.255)))。 为纯计算接口,不操作传感器硬件,无需协程限制。
参数
pressure
参数含义:实测气压值
数据类型:number
取值范围:300.00~1100.00(单位 hPa)
是否必选:是
注意事项:建议传入 get_pressure()/get_data() 的返回值
参数示例:1002.80
sea_level_pressure
参数含义:海平面气压基准值
数据类型:number
取值范围:900.00~1100.00(单位 hPa)
是否必选:否
注意事项:不传时默认 1013.25 hPa(标准大气压)。当地海平面气压
可从气象局或气压校准获得,传入更准
参数示例:1005
返回值
local h = exs_spl06.get_altitude(1002.80)
h
含义说明:海拔高度
数据类型:number
取值范围:-500~9000(单位 米,粗略估计)
注意事项:输入的 pressure 或 sea_level_pressure 非法(<=0)时返回 0
返回示例:87.4
示例
local pressure = exs_spl06.get_pressure()
if pressure then
local h = exs_spl06.get_altitude(pressure) -- 默认海平面气压 1013.25hPa
local h2 = exs_spl06.get_altitude(pressure, 1005) -- 自定义海平面气压 1005hPa
log.info("exs_spl06", string.format("气压=%.2fhPa 海拔=%.1f米(默认) %.1f米(1005hPa)", pressure, h, h2))
end
4.6 测量模式切换
4.6.1 exs_spl06.set_mode(mode)
功能
切换测量模式(写 MEAS_CFG 寄存器的 MEAS_CTRL 位): 待机(standby)/ 单次气压(pressure)/ 单次温度(temperature)/ 连续气压+温度(both)。
参数
mode
参数含义:目标测量模式
数据类型:string
取值范围:
"standby" - 待机,停止测量,电流 < 1µA
"pressure" - 单次气压测量,测完自动回待机
"temperature" - 单次温度测量,测完自动回待机
"both" - 连续气压+温度测量(后台模式)
是否必选:是
注意事项:不区分大小写
参数示例:"both"
返回值
local ok = exs_spl06.set_mode("both")
ok
含义说明:切换是否成功
数据类型:boolean
取值范围:true(成功),false(失败)
注意事项:传入非法模式(不在上述四个取值内)时返回 false
返回示例:true
示例
-- 连续气压+温度测量(后台模式)
local ok = exs_spl06.set_mode("both")
if ok then
sys.wait(500) -- 等待后台连续测量稳定
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("连续模式: 温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
end
end
-- 回待机低功耗
exs_spl06.set_mode("standby")
4.7 休眠唤醒
4.7.1 exs_spl06.sleep()
功能
进入低功耗待机(等效睡眠,电流 < 1µA,校准系数不丢失)。 与 close 的区别:sleep 不释放 I2C 资源,wakeup 可直接恢复测量。
参数
无
返回值
无
示例
exs_spl06.sleep()
sys.wait(3000) -- 睡眠 3 秒
4.7.2 exs_spl06.wakeup()
功能
从待机唤醒,恢复连续气压+温度测量(无需重新读取校准系数)。
参数
无
返回值
无
示例
exs_spl06.wakeup()
local data = exs_spl06.get_data()
if data then
log.info("exs_spl06", string.format("唤醒后: 温度=%.1f°C 气压=%.2fhPa", data.temperature, data.pressure))
end
4.8 版本信息
4.8.1 exs_spl06.version()
功能
获取 exs_spl06 库的版本号。
参数
无
返回值
local ver = exs_spl06.version()
ver
含义说明:版本号字符串
数据类型:string
取值范围:格式 "yyyymmddhhmm"(年月日时分)
注意事项:无
返回示例:"202608211900"
示例
local ver = exs_spl06.version()
log.info("exs_spl06", "版本号:", ver)
五、功能特性说明
版本号:202608211700
-
发布时间:2026-08-21
-
支持功能:
-
初始化:I2C 地址自动探测(0x76/0x77 双地址)-> 芯片 ID 校验 -> 校准系数读取 -> 过采样率配置 -> 缩放基准建立
-
数据读取:气压/温度自动校准补偿(get_data/get_pressure/get_temperature)
-
过采样率在线切换:0~7 档(1x~128x),切换时自动完成缩放因子动态自校准
-
海拔高度计算:国际气压测高公式,支持自定义海平面气压
-
测量模式切换:待机 / 单次气压 / 连续气压+温度
-
休眠唤醒:sleep/wakeup 低功耗管理
-
I2C 总线卡死自动检测与恢复
-
六、产品支持说明
所有支持 luatos 二次开发的模块,具体可以查看选型手册。