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

ADXL345/ADXL346 三轴加速度传感器演示

一、功能模块介绍

1.1 核心主程序模块

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

1.2 扩展库模块

  1. exs_adxl34x - ADXL345/ADXL346 扩展库,提供初始化、三轴加速度数据读取、量程切换、输出速率切换、睡眠/唤醒、关闭等 API

1.3 I2C 模式说明

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

二、演示流程介绍

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

2.1 功能演示项说明

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

三、演示硬件环境

3.1 硬件清单

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

ADXL345/ADXL346 模块接线实物图

3.2 接线配置

3.2.1 ADXL345/ADXL346 模块接线

Air780EPM 核心板
ADXL345/ADXL346 模块
32/GPIO31
SCL
31/GPIO30
SDA
30/GPIO29
INT1
VDD_EXT
VCC
GND
GND

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

四、演示软件环境

4.1 开发工具

4.2 内核固件

4.3 脚本文件

  1. main.lua - 程序入口
  2. adxl34x_demo.lua - ADXL345/ADXL346 功能演示模块
  3. exs_adxl34x - ADXL345/ADXL346 扩展库

五、演示核心步骤

5.1 硬件准备

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

5.2 软件配置

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

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

5.3 软件烧录

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

5.4 功能测试

5.4.1 初始化与数据读取演示

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

5.4.2 量程切换演示

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

5.4.3 输出速率切换演示

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

5.4.4 休眠与唤醒演示

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

5.5 预期效果

  • 初始化与数据读取ADXL345/ADXL346 初始化成功,三轴加速度数据正常输出
  • 量程切换:量程切换后数据范围随之变化,灵敏度不同
  • 输出速率切换:不同速率下均能正常读取数据
  • 休眠与唤醒sleep 后进入低功耗,wakeup 后数据读取正常
  • 日志如下:
[2026-07-21 10:26:41.222][000000000.177] I/main LuatOS@Air780EPM base 26.04 bsp V2046 32bit
[2026-07-21 10:26:41.225][000000000.177] I/main ROM Build: Jul  7 2026 20:39:17
[2026-07-21 10:26:41.228][000000000.179] W/pins /luadb/pins_air780epm.json not exist!!
[2026-07-21 10:26:41.231][000000000.181] D/main loadlibs luavm 1048568 14784 14784
[2026-07-21 10:26:41.233][000000000.181] D/main loadlibs sys   2366664 82756 89356
[2026-07-21 10:26:41.234][000000000.182] D/main loadlibs psram 2366664 82756 89356
[2026-07-21 10:26:41.237][000000000.199] I/user.main ADXL34X_Demo 001.999.000
[2026-07-21 10:26:41.240][000000000.213] D/user.exs_adxl34x version -> 202607170900
[2026-07-21 10:26:41.242][000000000.214] I/user.adxl34x_demo HELLO
[2026-07-21 10:26:41.524][000000001.214] I/user.adxl34x_demo ===== [1/4] 初始化与数据读取 =====
[2026-07-21 10:26:41.527][000000001.235] I/user.exs_adxl34x ADXL346 @ 0x53
[2026-07-21 10:26:41.530][000000001.302] I/user.exs_adxl34x INT1 已注册, int_gpio=29
[2026-07-21 10:26:41.532][000000001.303] I/user.exs_adxl34x 初始化完成 mode=I2C range=2g odr=100Hz
[2026-07-21 10:26:41.535][000000001.303] I/user.adxl34x_demo ADXL345/ADXL346 初始化成功,版本: 202607170900
[2026-07-21 10:26:41.701][000000001.506] I/user.adxl34x_demo X=0.984 Y=0.098 Z=0.156 g
[2026-07-21 10:26:41.718][000000001.626] I/user.adxl34x_demo int1: X=1.086 Y=-0.156 Z=0.223 g
[2026-07-21 10:26:41.727][000000001.768] I/user.adxl34x_demo int1: X=0.988 Y=-0.039 Z=0.184 g
[2026-07-21 10:26:41.734][000000002.030] I/user.adxl34x_demo int1: X=1.004 Y=-0.043 Z=0.172 g
[2026-07-21 10:26:42.468][000000002.789] I/user.adxl34x_demo int1: X=0.457 Y=0.152 Z=0.566 g
[2026-07-21 10:26:42.575][000000002.910] I/user.adxl34x_demo int1: X=0.363 Y=0.535 Z=0.832 g
[2026-07-21 10:26:42.685][000000003.009] I/user.adxl34x_demo 1次读取: X=0.895 Y=0.297 Z=-0.352 g
[2026-07-21 10:26:42.690][000000003.020] I/user.adxl34x_demo int1: X=0.422 Y=0.336 Z=0.020 g
[2026-07-21 10:26:42.905][000000003.231] I/user.adxl34x_demo int1: X=0.617 Y=0.156 Z=0.133 g
[2026-07-21 10:26:42.982][000000003.303] I/user.adxl34x_demo int1: X=0.434 Y=0.133 Z=1.035 g
[2026-07-21 10:26:43.182][000000003.397] I/mobile sim0 sms ready
[2026-07-21 10:26:43.191][000000003.398] D/mobile cid1, state0
[2026-07-21 10:26:43.197][000000003.399] D/mobile bearer act 0, result 0
[2026-07-21 10:26:43.203][000000003.399] D/mobile NETIF_LINK_ON -> IP_READY
[2026-07-21 10:26:43.209][000000003.449] D/mobile TIME_SYNC 0 tm 1784600806
[2026-07-21 10:26:43.214][000000003.498] I/user.adxl34x_demo int1: X=0.430 Y=0.320 Z=1.234 g
[2026-07-21 10:26:43.219][000000003.512] I/user.adxl34x_demo 2次读取: X=0.742 Y=0.230 Z=0.738 g
[2026-07-21 10:26:43.312][000000003.632] I/user.adxl34x_demo int1: X=0.012 Y=0.043 Z=0.840 g
[2026-07-21 10:26:43.360][000000003.679] I/user.adxl34x_demo int1: X=0.387 Y=0.246 Z=0.844 g
[2026-07-21 10:26:43.501][000000003.825] I/user.adxl34x_demo int1: X=-0.008 Y=-0.039 Z=1.012 g
[2026-07-21 10:26:43.687][000000004.015] I/user.adxl34x_demo 3次读取: X=-0.035 Y=-0.020 Z=0.973 g
[2026-07-21 10:26:43.694][000000004.015] I/user.adxl34x_demo ---- [1/4] 完成 ----
[2026-07-21 10:26:44.110][000000004.438] I/user.adxl34x_demo int1: X=0.152 Y=0.496 Z=0.930 g
[2026-07-21 10:26:44.172][000000004.499] I/user.adxl34x_demo int1: X=0.113 Y=0.414 Z=0.652 g
[2026-07-21 10:26:44.188][000000004.515] I/user.adxl34x_demo ===== [2/4] 量程切换演示 =====
[2026-07-21 10:26:44.193][000000004.515] I/user.adxl34x_demo 切换量程为 4g
[2026-07-21 10:26:44.199][000000004.518] I/user.exs_adxl34x 量程切换为 4g
[2026-07-21 10:26:44.267][000000004.589] I/user.adxl34x_demo int1: X=-0.281 Y=0.711 Z=0.906 g
[2026-07-21 10:26:44.501][000000004.821] I/user.adxl34x_demo int1: X=0.867 Y=1.242 Z=0.547 g
[2026-07-21 10:26:44.505][000000004.824] I/user.adxl34x_demo 4g 量程: X=0.867 Y=1.242 Z=0.547 g
[2026-07-21 10:26:44.564][000000004.898] I/user.adxl34x_demo int1: X=-0.078 Y=2.055 Z=0.359 g
[2026-07-21 10:26:44.611][000000004.942] I/user.adxl34x_demo int1: X=-0.508 Y=1.648 Z=1.047 g
[2026-07-21 10:26:44.658][000000004.991] I/user.adxl34x_demo int1: X=-0.227 Y=1.477 Z=0.352 g
[2026-07-21 10:26:44.706][000000005.041] I/user.adxl34x_demo int1: X=0.297 Y=1.891 Z=0.914 g
[2026-07-21 10:26:44.815][000000005.139] I/user.adxl34x_demo int1: X=-0.445 Y=2.031 Z=0.180 g
[2026-07-21 10:26:44.863][000000005.191] I/user.adxl34x_demo int1: X=0.281 Y=1.812 Z=0.688 g
[2026-07-21 10:26:44.925][000000005.254] I/user.adxl34x_demo int1: X=0.219 Y=1.953 Z=0.336 g
[2026-07-21 10:26:44.987][000000005.319] I/user.adxl34x_demo int1: X=-0.375 Y=1.953 Z=0.391 g
[2026-07-21 10:26:45.491][000000005.824] I/user.adxl34x_demo 切换量程为 2g(高精度)
[2026-07-21 10:26:45.507][000000005.827] I/user.exs_adxl34x 量程切换为 2g
[2026-07-21 10:26:45.804][000000006.131] I/user.adxl34x_demo 2g 量程: X=0.027 Y=0.977 Z=0.078 g
[2026-07-21 10:26:46.807][000000007.131] I/user.adxl34x_demo ---- [2/4] 完成 ----
[2026-07-21 10:26:47.305][000000007.631] I/user.adxl34x_demo ===== [3/4] 输出速率切换 =====
[2026-07-21 10:26:47.312][000000007.632] I/user.adxl34x_demo 设置输出速率为 25Hz
[2026-07-21 10:26:47.316][000000007.633] I/user.exs_adxl34x 输出速率切换为 25Hz
[2026-07-21 10:26:47.816][000000008.137] I/user.adxl34x_demo 25Hz : X=0.035 Y=0.969 Z=0.074 g
[2026-07-21 10:26:48.311][000000008.637] I/user.adxl34x_demo 设置输出速率为 50Hz
[2026-07-21 10:26:48.314][000000008.639] I/user.exs_adxl34x 输出速率切换为 50Hz
[2026-07-21 10:26:48.811][000000009.142] I/user.adxl34x_demo 50Hz : X=0.031 Y=0.973 Z=0.074 g
[2026-07-21 10:26:49.309][000000009.642] I/user.adxl34x_demo 设置输出速率为 100Hz
[2026-07-21 10:26:49.314][000000009.644] I/user.exs_adxl34x 输出速率切换为 100Hz
[2026-07-21 10:26:49.824][000000010.147] I/user.adxl34x_demo 100Hz : X=0.031 Y=0.984 Z=0.070 g
[2026-07-21 10:26:50.320][000000010.647] I/user.adxl34x_demo 设置输出速率为 200Hz
[2026-07-21 10:26:50.324][000000010.649] I/user.exs_adxl34x 输出速率切换为 200Hz
[2026-07-21 10:26:50.817][000000011.152] I/user.adxl34x_demo 200Hz : X=0.031 Y=0.977 Z=0.074 g
[2026-07-21 10:26:51.332][000000011.653] I/user.exs_adxl34x 输出速率切换为 100Hz
[2026-07-21 10:26:51.345][000000011.654] I/user.adxl34x_demo ---- [3/4] 完成 ----
[2026-07-21 10:26:51.834][000000012.154] I/user.adxl34x_demo ===== [4/4] 休眠与唤醒演示 =====
[2026-07-21 10:26:51.842][000000012.155] I/user.adxl34x_demo 进入待机模式(低功耗)
[2026-07-21 10:26:51.848][000000012.156] I/user.exs_adxl34x 已进入待机模式
[2026-07-21 10:27:02.329][000000022.656] I/user.adxl34x_demo 从待机模式唤醒
[2026-07-21 10:27:02.335][000000022.657] I/user.exs_adxl34x 已从待机模式唤醒
[2026-07-21 10:27:02.532][000000022.860] I/user.adxl34x_demo 唤醒后数据: X=0.027 Y=0.969 Z=0.070 g
[2026-07-21 10:27:02.536][000000022.861] I/user.adxl34x_demo ---- [4/4] 完成 ----
[2026-07-21 10:27:03.035][000000023.361] I/user.adxl34x_demo ===== [演示完毕] =====
[2026-07-21 10:27:03.082][000000023.363] I/user.exs_adxl34x 传感器已关闭
[2026-07-21 10:27:03.139][000000023.363] I/user.adxl34x_demo End

5.6 故障排除

  1. 传感器初始化失败

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

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

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

5.7 扩展功能建议

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