作者:孟伟 | 最后修改:2026-04-13
一、exvib1 震动传感器概述
exvib1 是 LuatOS 的震动传感器扩展库,专门用于检测和处理震动事件,该功能基于滚珠震动传感器,能够准确检测各种震动信号。
1.1 传感器介绍:
BL_2529:是一款物理的震动传感器,触发震动后会产生一个脉冲信号。
触碰一下波形如下:
连续多次触碰波形:
1.2 exvib1 有什么用?
exvib1 扩展库主要功能包括:
1,震动事件回调:当检测到震动时,会触发回调函数,在回调函数中可以进行相应的处理,例如打印日志、控制其他设备等。
2,震动事件计数:在回调函数中可以统计检测到的震动次数,例如用于记录用户操作次数、触发报警等。
3,震动事件过滤:可以设置过滤参数,例如设置最小震动时间间隔,避免重复触发回调。
二、演示功能概述
本教程将使用 Air8000 核心板搭配 AirVIBRATING_1000 震动小板,演示 exvib1 震动传感器的核心功能,主要包括:
(1)震动事件检测与回调处理
(2)震动脉冲计数统计
(3)事件过滤参数配置
(4)实时震动监控
三、准备硬件环境


硬件清单:
- Air8000 核心板一块
- AirVIBRATING_1000 震动小板一块
- TYPE-C USB 数据线一根
硬件连接:

-
电源连接:
-
震动小板 VCC 引脚 → 核心板 VDD_EXT 引脚
- 震动小板 GND 引脚 → 核心板 GND_EXT 引脚
-
信号连接:
-
震动小板 INT_BL2529 引脚 → 核心板 GPIO20 引脚
-
供电配置:
-
Air8000 核心板通过 TYPE-C USB 口供电
- 核心板拨钮开关拨到 USB 供电位置
四、软件环境
在开始实践本示例之前,先筹备一下软件环境:
1.烧录工具: Luatools 工具;
2.内核固件:本demo开发测试时使用的固件为Air8000 V2018 版本固件,本demo对固件版本没有什么特殊要求,所以你如果要测试本demo时,可以直接使用最新版本的内核固件;如果发现最新版本的内核固件测试有问题,可以使用我们开发本demo时使用的内核固件版本来对比测试;
3.LuatOS 需要的脚本和资源文件
脚本和资源文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/gsensor/vibration1
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 核心板中,将本篇文章中演示使用的项目文件烧录到 Air8000 核心板中。
五、API 接口说明
详细 exvib1 API 文档请参考:https://docs.openluat.com/osapi/ext/exvib1/
六、代码示例介绍
6.1 功能测试核心代码
6.1.1 exvib1 扩展库核心功能:
核心功能
1、GPIO 中断检测:通过配置的 GPIO 引脚检测震动传感器产生的脉冲信号。
2、双重消抖机制:
IO 中断硬件消抖 (gpio.debounce())。
时间窗口检测:在指定的时间窗口 (time_window) 内统计有效的脉冲数量。
3、阈值触发:当统计的脉冲数超过设定的阈值 (pulse_threshold) 时,触发用户自定义的回调函数。
4、脉冲超时机制:在检测状态下,如果超过 pulse_timeout 时间没有新的脉冲产生,则提前结束当前检测周期并判断是否触发回调,提高响应速度。
状态机工作流程
1、IDLE 状态:等待第一个有效脉冲。
2、DETECTING 状态:进入检测窗口,统计脉冲数量。
3、触发条件:
时间窗口结束。
脉冲空闲时间超过设定的脉冲超时时间。
4、结果判断:脉冲数 ≥ 阈值则调用用户回调函数。
6.1.2 exvib1 扩展库使用:
--加载exvib1扩展库
local exvib1= require "exvib1"
-- 震动事件回调
local function vibration_cb(pulse_cnt)
log.info("VIB", "detected! pulses =", pulse_cnt)
end
--演示最简单的使用方法,都使用默认配置
exvib1.open({
gpio_pin = 20,
on_event = vibration_cb,
})
6.2 功能验证
将硬件连接好后,把 demo 代码烧录到核心板中,轻敲或震动传感器,观察输出日志,在 luatools 可以看到如下日志:
[2025-09-09 13:51:51.417][000000000.584] I/user.Vibration start on gpio 20
[2025-09-09 13:51:56.331][000000005.954] I/user.VIB detected! pulses = 7
[2025-09-09 13:51:56.811][000000006.444] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:00.039][000000009.664] I/user.VIB detected! pulses = 5
[2025-09-09 13:52:01.226][000000010.854] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:02.640][000000012.274] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:03.793][000000013.424] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:04.858][000000014.484] I/user.VIB detected! pulses = 4
验证要点
- 事件响应:震动时能及时触发回调函数
- 脉冲计数:脉冲数量与实际震动强度相符
- 稳定性:长时间运行无异常重启或内存泄漏
- 灵敏度:能检测到不同强度的震动事件
七、总结
至此,本教程详细介绍了 exvib1 震动传感器模块的使用方法。该模块为物联网设备提供了可靠的震动检测能力,在实际使用中可以根据需求调整参数,适用于多种应用场景。
exvib1 关键特性:
- 简单易用的 API 接口
- 可配置的灵敏度参数
- 可靠的去抖和过滤机制
可应用场景:安防报警系统、设备状态监控等场景