Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/sensor/lis2dh12
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
..

LIS2DH12 三轴加速度传感器演示

一、功能模块介绍

1.1 核心主程序模块

  1. main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
  2. lis2dh12_demo.lua - LIS2DH12 功能演示模块,包含数据读取、量程切换、输出速率切换、温度读取等所有功能的演示用例

1.2 扩展库模块

  1. exs_lis2dh12 - LIS2DH12 扩展库,提供初始化、三轴加速度数据读取、量程切换、输出速率切换、功耗模式切换、温度读取、睡眠/唤醒、关闭等 API

1.3 I2C 模式说明

推荐使用软件 I2C 模式LIS2DH12 在异常 I2C 通信后可能锁死 SDA 总线。本库已内置 I2C 总线卡死自动检测与恢复功能。本 demo 使用软件 I2C 模式演示。

二、演示流程介绍

本 demo 按顺序演示 exs_lis2dh12 扩展库的 5 项功能:HELLO → [1/5] → [2/5] → [3/5] → [4/5] → [5/5] → End

2.1 功能演示项说明

  1. [1/5] 初始化与数据读取 - 初始化 LIS2DH12 传感器并读取三轴加速度数据(X/Y/Z,单位 g),附带 data_ready 中断示例
  2. [2/5] 量程切换演示 - 在 ±2g(高精度)和 ±4g(宽范围)量程之间切换,观察数据变化
  3. [3/5] 输出速率切换 - 依次切换 25Hz / 50Hz / 100Hz / 200Hz 输出速率
  4. [4/5] 温度读取演示 - 使能温度传感器并读取芯片温度
  5. [5/5] 休眠与唤醒演示 - 演示 sleep()/wakeup() 待机与唤醒

三、演示硬件环境

3.1 硬件清单

  • Air780EPM 核心板 × 1
  • CJMCU-LIS2DH12 三轴加速度传感器模块 × 1 demo所演示的LIS2DH12 三轴加速度传感器模块购买链接
  • 母对母杜邦线 × 6
  • TYPE-C 数据线 × 1

3.2 接线配置

3.2.1 I2C 模式接线

Air780EPM 核心板
CJMCU-LIS2DH12 模块
32/GPIO31
SCL
31/GPIO30
SDA
30/GPIO29
INT1
VDD_EXT
VCC
GND
GND

说明:接线时注意杜邦线不宜过长,以免通信不稳定。

四、演示软件环境

4.1 开发工具

4.2 内核固件

4.3 脚本文件

  1. main.lua - 程序入口
  2. lis2dh12_demo.lua - LIS2DH12 功能演示模块
  3. exs_lis2dh12 - LIS2DH12 扩展库

五、演示核心步骤

5.1 硬件准备

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

5.2 软件配置

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

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

5.3 软件烧录

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

5.4 功能测试

5.4.1 初始化与数据读取演示

  1. 设备启动后打印 "HELLO",随后自动进入 [1/5] 初始化与数据读取
  2. 观察日志输出,确认初始化成功
  3. 观察三轴加速度数据(X/Y/Z,单位 g)的连续读取

5.4.2 量程切换演示

  1. 自动进入 [2/5] 量程切换演示
  2. 观察 ±4g 宽范围量程下的数据
  3. 观察 ±2g 高精度量程下的数据

5.4.3 输出速率切换演示

  1. 自动进入 [3/5] 输出速率切换演示
  2. 依次观察 25Hz / 50Hz / 100Hz / 200Hz 下的数据读取
  3. 最终恢复为 100Hz

5.4.4 温度读取演示

  1. 自动进入 [4/5] 温度读取演示
  2. 使能温度传感器并等待稳定
  3. 读取并显示芯片温度(单位 °C

5.4.5 休眠与唤醒演示

  1. 自动进入 [5/5] 休眠与唤醒演示
  2. 观察 sleep() 进入待机模式
  3. 观察 wakeup() 唤醒后数据恢复

5.5 预期效果

  • 初始化与数据读取:LIS2DH12 初始化成功,三轴加速度数据正常输出
  • 量程切换:量程切换后数据范围随之变化,灵敏度不同
  • 输出速率切换:不同速率下均能正常读取数据
  • 温度读取:正常读取芯片温度(约 20-40°C)
  • 休眠与唤醒sleep 后进入低功耗,wakeup 后数据读取正常
  • 日志如下:
[2026-07-21 10:30:03.304][000000000.179] I/main LuatOS@Air780EPM base 26.04 bsp V2046 32bit
[2026-07-21 10:30:03.305][000000000.179] I/main ROM Build: Jul  7 2026 20:39:17
[2026-07-21 10:30:03.307][000000000.181] W/pins /luadb/pins_air780epm.json not exist!!
[2026-07-21 10:30:03.310][000000000.183] D/main loadlibs luavm 1048568 14784 14784
[2026-07-21 10:30:03.312][000000000.184] D/main loadlibs sys   2366664 82756 89356
[2026-07-21 10:30:03.315][000000000.184] D/main loadlibs psram 2366664 82756 89356
[2026-07-21 10:30:03.317][000000000.201] I/user.main LIS2DH12_Demo 001.999.000
[2026-07-21 10:30:03.319][000000000.217] D/user.exs_lis2dh12 version -> 202607170900
[2026-07-21 10:30:03.320][000000000.218] I/user.lis2dh12_demo HELLO
[2026-07-21 10:30:03.512][000000001.218] I/user.lis2dh12_demo ===== [1/5] 初始化与数据读取 =====
[2026-07-21 10:30:03.515][000000001.233] I/user.exs_lis2dh12 LIS2DH12 @ I2C 0x19
[2026-07-21 10:30:03.517][000000001.243] I/user.exs_lis2dh12 REG读回 CTRL1=0x57 CTRL4=0x88 STATUS=0x0F INT1_CFG=0x00
[2026-07-21 10:30:03.518][000000001.252] I/user.exs_lis2dh12 INT1 已注册, gpio=29
[2026-07-21 10:30:03.520][000000001.252] I/user.exs_lis2dh12 初始化完成 mode=I2C range=2g odr=100Hz mode=highres
[2026-07-21 10:30:03.533][000000001.253] I/user.lis2dh12_demo LIS2DH12 初始化成功,版本: 202607170900
[2026-07-21 10:30:03.539][000000001.269] I/user.exs_lis2dh12 CTRL1=0x57 CTRL2=0x00 CTRL3=0xC0 CTRL4=0x88 CTRL5=0x0C CTRL6=0x00 STATUS=0xFF INT1_SRC=0x00 INT2_SRC=0x00 FIFO_SRC=0x20
[2026-07-21 10:30:03.544][000000001.478] I/user.lis2dh12_demo X=-0.965 Y=-0.008 Z=-0.029 g
[2026-07-21 10:30:04.086][000000002.295] I/mobile sim0 sms ready
[2026-07-21 10:30:04.091][000000002.296] D/mobile cid1, state0
[2026-07-21 10:30:04.096][000000002.296] D/mobile bearer act 0, result 0
[2026-07-21 10:30:04.100][000000002.297] D/mobile NETIF_LINK_ON -> IP_READY
[2026-07-21 10:30:04.104][000000002.353] D/mobile TIME_SYNC 0 tm 1784601007
[2026-07-21 10:30:04.724][000000002.986] I/user.lis2dh12_demo 1次读取: X=-0.368 Y=-0.170 Z=-0.713 g
[2026-07-21 10:30:05.223][000000003.494] I/user.lis2dh12_demo 2次读取: X=-0.083 Y=0.008 Z=-1.023 g
[2026-07-21 10:30:05.732][000000004.004] I/user.lis2dh12_demo 3次读取: X=-0.119 Y=0.108 Z=0.237 g
[2026-07-21 10:30:05.735][000000004.004] I/user.lis2dh12_demo ---- [1/5] 完成 ----
[2026-07-21 10:30:06.013][000000004.271] I/user.lis2dh12_demo int1: 朝向=front X=-0.670 Y=-0.097 Z=-0.194 g
[2026-07-21 10:30:06.243][000000004.504] I/user.lis2dh12_demo ===== [2/5] 量程切换演示 =====
[2026-07-21 10:30:06.247][000000004.505] I/user.lis2dh12_demo 切换量程为 4g
[2026-07-21 10:30:06.252][000000004.508] I/user.exs_lis2dh12 量程切换为 4g
[2026-07-21 10:30:06.555][000000004.816] I/user.lis2dh12_demo 4g 量程: X=0.102 Y=0.350 Z=-0.872 g
[2026-07-21 10:30:07.549][000000005.816] I/user.lis2dh12_demo 切换量程为 2g(高精度)
[2026-07-21 10:30:07.553][000000005.819] I/user.exs_lis2dh12 量程切换为 2g
[2026-07-21 10:30:07.861][000000006.127] I/user.lis2dh12_demo 2g 量程: X=-0.063 Y=0.379 Z=0.801 g
[2026-07-21 10:30:08.856][000000007.127] I/user.lis2dh12_demo ---- [2/5] 完成 ----
[2026-07-21 10:30:09.369][000000007.627] I/user.lis2dh12_demo ===== [3/5] 输出速率切换 =====
[2026-07-21 10:30:09.374][000000007.628] I/user.lis2dh12_demo 设置输出速率为 25Hz
[2026-07-21 10:30:09.378][000000007.631] I/user.exs_lis2dh12 输出速率切换为 25Hz
[2026-07-21 10:30:09.881][000000008.139] I/user.lis2dh12_demo 25Hz : X=0.033 Y=0.084 Z=0.999 g
[2026-07-21 10:30:10.377][000000008.639] I/user.lis2dh12_demo 设置输出速率为 50Hz
[2026-07-21 10:30:10.382][000000008.643] I/user.exs_lis2dh12 输出速率切换为 50Hz
[2026-07-21 10:30:10.890][000000009.151] I/user.lis2dh12_demo 50Hz : X=0.145 Y=0.163 Z=0.982 g
[2026-07-21 10:30:11.385][000000009.651] I/user.lis2dh12_demo 设置输出速率为 100Hz
[2026-07-21 10:30:11.388][000000009.654] I/user.exs_lis2dh12 输出速率切换为 100Hz
[2026-07-21 10:30:11.898][000000010.162] I/user.lis2dh12_demo 100Hz : X=0.754 Y=0.033 Z=0.060 g
[2026-07-21 10:30:12.395][000000010.662] I/user.lis2dh12_demo 设置输出速率为 200Hz
[2026-07-21 10:30:12.398][000000010.665] I/user.exs_lis2dh12 输出速率切换为 200Hz
[2026-07-21 10:30:12.905][000000011.173] I/user.lis2dh12_demo 200Hz : X=-0.589 Y=-0.397 Z=0.942 g
[2026-07-21 10:30:13.215][000000011.481] I/user.lis2dh12_demo int1: 朝向=down X=-0.341 Y=-0.250 Z=0.819 g
[2026-07-21 10:30:13.419][000000011.676] I/user.exs_lis2dh12 输出速率切换为 100Hz
[2026-07-21 10:30:13.423][000000011.676] I/user.lis2dh12_demo ---- [3/5] 完成 ----
[2026-07-21 10:30:13.915][000000012.176] I/user.lis2dh12_demo ===== [4/5] 温度读取演示 =====
[2026-07-21 10:30:13.919][000000012.177] I/user.lis2dh12_demo 使能温度传感器
[2026-07-21 10:30:13.923][000000012.178] I/user.exs_lis2dh12 温度传感器 已使能
[2026-07-21 10:30:14.087][000000012.353] I/user.lis2dh12_demo int1: 朝向=front X=-0.906 Y=0.708 Z=-0.263 g
[2026-07-21 10:30:14.118][000000012.381] I/user.lis2dh12_demo 芯片温度: 39.0 °C
[2026-07-21 10:30:14.122][000000012.382] I/user.exs_lis2dh12 温度传感器 已禁用
[2026-07-21 10:30:14.125][000000012.382] I/user.lis2dh12_demo ---- [4/5] 完成 ----
[2026-07-21 10:30:14.616][000000012.883] I/user.lis2dh12_demo ===== [5/5] 休眠与唤醒演示 =====
[2026-07-21 10:30:14.619][000000012.884] I/user.lis2dh12_demo 进入 power-down 模式(低功耗)
[2026-07-21 10:30:14.623][000000012.886] I/user.exs_lis2dh12 已进入 power-down 模式
[2026-07-21 10:30:25.117][000000023.386] I/user.lis2dh12_demo  power-down 模式唤醒
[2026-07-21 10:30:25.120][000000023.389] I/user.exs_lis2dh12 已从 power-down 模式唤醒,ODR=100Hz
[2026-07-21 10:30:25.336][000000023.597] I/user.lis2dh12_demo 唤醒后数据: X=-0.933 Y=0.196 Z=-0.178 g
[2026-07-21 10:30:25.340][000000023.597] I/user.lis2dh12_demo ---- [5/5] 完成 ----
[2026-07-21 10:30:25.833][000000024.098] I/user.lis2dh12_demo ===== [演示完毕] =====
[2026-07-21 10:30:25.837][000000024.104] I/user.exs_lis2dh12 传感器已关闭
[2026-07-21 10:30:25.842][000000024.104] I/user.lis2dh12_demo End

5.6 故障排除

  1. 传感器初始化失败

    • 检查 LIS2DH12 接线是否正确(SCL、SDA、VCC、GND
    • 确认 GPIO 引脚配置与接线一致
    • 检查电源电压是否稳定(3.3V
    • 确认 exs_lis2dh12 扩展库已正常加载
  2. 读取数据始终为零

    • 检查传感器供电是否正常
    • 检查 I2C 地址是否正确(SA0=GND 时地址 0x18SA0=VCC 时地址 0x19
    • 确认接线无松动
  3. 量程切换无效果

    • 确认 set_range() 参数为 "2g"、"4g"、"8g" 或 "16g"
    • 切换后需等待传感器稳定再读取数据
  4. 温度读取失败

    • 确认已在 setup 时设置 enable_temp = true 或调用 enable_temp(true)
    • 使能后需等待约 200ms 让 ADC 稳定

5.7 扩展功能建议

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