对于做 4G-Cat.1、MCU 等物联网终端开发的开发者而言,LuatOS 是一款值得了解的开发工具。它是面向物联网设备的轻量级嵌入式 Lua 脚本运行框架和实时系统,基于 Lua 5.3 完成深度优化,开发层面采用 Lua 脚本模式,核心为协程多任务设计,且拥有 70 余个核心库、20 余个扩展库和 1000 多个应用 demo 示例,可适配物联网开发的各类基础应用场景。
一、概述
1. exvib.lua可适用于合宙内部集成了G-Sensor加速度传感器DA221的模组型号
目前仅有Air8000A,Air8000D,Air780EGG,Air780EGP,Air8000U,Air8000N,Air8000DB,Air8000AB模组内置了DA221
2. DA221在Air8000A和Air8000D,Air8000U,Air8000N,Air8000DB,Air8000AB内部通过I2C0与之通信,并通过WAKEUP2接收运动监测中断
Air780EGG和Air780EGP内部通过I2C0与之通信,并通过WAKEUP2接收运动监测中断,
如您使用合宙其它型号模组外接DA221时,比如Air780EGH,建议与Air780EGG保持一致也选用I2C0和WAKEUP2
(该管脚即为Air780EGH的PIN79:USIM_DET),这样便可以无缝使用本扩展库
2.1 DA221作为加速度传感器,LuatOS仅支持运动检测这一功能,主要用于震动检测,运动检测,跌倒检测
搭配GNSS实现震动然后定位的功能,其余功能请自行研究,我们提供了三种应用场景,如果需要适配自己的场景需求,
请参考手册参数自行修改代码,调试适合自己场景的传感器值,我们不提供DA221任何其它功能的任何形式的技术支持;
关于exvib库的三种模式主要用于以下场景:
- 微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面;加速度量程2g;
- 运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测;加速度量程4g;
- 跌倒检测,用于人或物体瞬间跌倒时的检测;加速度量程8g;
二、核心示例
1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;
2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
3、更加完整和详细的 demo,请参考 LuatOS 仓库 中Air8000产品目录下的 demo/gsensor/vibration;
lua
-- 用法实例
exvib=require("exvib")
local intPin=gpio.WAKEUP2 --中断检测脚,内部固定wakeup2
local tid --获取定时打开的定时器id
local num=0 --计数器
local ticktable={0,0,0,0,0} --存放5次中断的tick值,用于做有效震动对比
local eff=false --有效震动标志位,用于判断是否触发定位
gpio.setup(164, 1, gpio.PULLUP) -- air8000整机板需要大概该电源控制i2c上电 和音频解码芯片共用,自己设计可以忽略掉
gpio.setup(147, 1, gpio.PULLUP) -- air8000整机板需要大概该电源控制i2c上电 camera的供电使能脚,自己设计可以忽略掉
--有效震动模式
--tick计数器,每秒+1用于存放5次中断的tick值,用于做有效震动对比
local function tick()
num=num+1
end
--每秒运行一次计时
sys.timerLoopStart(tick,1000)
--有效震动判断
local function ind()
log.info("int", gpio.get(intPin))
if gpio.get(intPin) == 1 then
--接收数据如果大于5就删掉第一个
if #ticktable>=5 then
log.info("table.remove",table.remove(ticktable,1))
end
--存入新的tick值
table.insert(ticktable,num)
log.info("tick",num,(ticktable[5]-ticktable[1]<10),ticktable[5]>0)
log.info("tick2",ticktable[1],ticktable[2],ticktable[3],ticktable[4],ticktable[5])
--表长度为5且,第5次中断时间间隔减去第一次间隔小于10s,且第5次值为有效值
if #ticktable>=5 and (ticktable[5]-ticktable[1]<10 and ticktable[1]>0) then
log.info("vib", "xxx")
--是否要去触发有效震动逻辑
if eff==false then
sys.publish("EFFECTIVE_VIBRATION")
end
end
end
end
--设置30s分钟之后再判断是否有效震动函数
local function num_cb()
eff=false
end
local function eff_vib()
log.info("触发有效震动")
--触发之后eff设置为true,30分钟之后再触发有效震动
eff=true
--30分钟之后再触发有效震动
sys.timerStart(num_cb,180000)
end
sys.subscribe("EFFECTIVE_VIBRATION",eff_vib)
--持续震动模式
--持续震动模式中断函数
-- local function ind()
-- log.info("int", gpio.get(intPin))
-- --上升沿为触发震动中断
-- if gpio.get(intPin) == 1 then
-- local x,y,z = exvib.read_xyz() --读取x,y,z轴的数据
-- log.info("x", x..'g', "y", y..'g', "z", z..'g')
-- end
-- end
local function vib_fnc()
-- 1,微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面;加速度量程2g;
-- 2,运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测;加速度量程4g;
-- 3,跌倒检测,用于人或物体瞬间跌倒时的检测;加速度量程8g;
--打开震动检测功能
exvib.open(1)
--设置gpio防抖100ms
gpio.debounce(intPin, 100)
--设置gpio中断触发方式wakeup2唤醒脚默认为双边沿触发
gpio.setup(intPin, ind)
end
sys.taskInit(vib_fnc)
三、常量详解
exvib扩展库没有常量。
四、函数详解
exvib.read_xyz()
功能
获取da221的xyz轴数据
注意事项
读取x,y,z轴的数据,需要注意的是,x,y,z轴数据在静止状态下,因为数据有噪声,所以x,y,z轴数据不会为固定值,数据会有微小的变化,所有传感器都有噪声,这个是无法避免的。
参数
无
返回值
local x,y,z = exvib.read_xyz()
x
lua
-- 参数含义:x轴数据;
-- 数据类型:number;
-- 取值范围:无特别限制;
-- 注意事项:无;
y
bash
-- 参数含义:y轴数据;
-- 数据类型:number;
-- 取值范围:无特别限制;
-- 注意事项:无;
z
lua
-- 参数含义:z轴数据;
-- 数据类型:number;
-- 取值范围:无特别限制;
-- 注意事项:无;
示例
lua
local x,y,z = exvib.read_xyz() --读取x,y,z轴的数据,需要注意的是,x,y,z轴数据在静止状态下,因为数据有噪声,所以x,y,z轴数据不会为固定值,数据会有微小的变化,所有传感器都有噪声,这个是无法避免的。
log.info("x", x..'g', "y", y..'g', "z", z..'g')
exvib.open(mode)
功能
打开da221三轴加速度传感器
注意事项
提供了三种应用模式,可以根据自己的应用场景进行选择,也可以自己对扩展库的值进行修改。
参数
mode
lua
参数含义:加速度传感器的应用模式;
数据类型:number;
取值范围:1 - 微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面,加速度量程2g;
2 - 运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测,加速度量程4g;
3 - 跌倒检测,用于人或物体瞬间跌倒时的检测,加速度量程8g;
是否必选:是;
注意事项:作为必需参数,若不提供会导致错误;
示例代码:exvib.open(1)
返回值
无
示例
lua
local intPin=gpio.WAKEUP2 --中断检测脚,内部固定wakeup2
--持续震动模式
--持续震动模式中断函数
local function ind()
log.info("int", gpio.get(intPin))
--上升沿为触发震动中断
if gpio.get(intPin) == 1 then
local x,y,z = exvib.read_xyz() --读取x,y,z轴的数据
log.info("x", x..'g', "y", y..'g', "z", z..'g')
end
end
-- 1,微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面;加速度量程2g;
-- 2,运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测;加速度量程4g;
-- 3,跌倒检测,用于人或物体瞬间跌倒时的检测;加速度量程8g;
--打开震动检测功能
exvib.open(1)
--设置gpio防抖100ms
gpio.debounce(intPin, 100)
--设置gpio中断触发方式wakeup2唤醒脚默认为双边沿触发
gpio.setup(intPin, ind)
exvib.close()
功能
关闭da221三轴加速度传感器
注意事项
暂无
参数
无
返回值
无
示例
五、产品支持说明
Air8000A,Air8000D,Air780EGG,Air780EGP支持exvib扩展库
今天就分享到这里啦~~~