开关机键
一、演示功能概述
POWER_ON 按键,即开关机键,在产品的结构设计可以实现一键多用,常用的功能有: - 1.按键开机:消费品常用的方法,可以省电,在需要使用的时候才开机 - 2.上电开机:在部分商用场景,可能会一直接着电源,或者没有按键开机情况,需要上电就开机 - 3.按键检测:在开机状态,可以通过上下沿,检测开机键按下或者释放,或者按下次数,从而实现业务目标 - 4.按键关机:通过POWER_ON 按键可以实现对设备进行关机,从而达到节省流量或者省电的目的 POWER_ON 支持丰富的功能,可以有效减小结构的按键设计,也可以使整机更加简洁。
二、准备硬件环境
参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。
2.1 Air8000 核心板
开发板购买链接:点击购买air8000。注意需要购买核心板.
三、准备软件环境
1. 烧录工具 Luatools;
2. 内核固件文件(底层core固件文件):目前先下载此固件,此固件底层集成了VOLTE功能 [LuatOS-SoC_V2005_Air8000.soc]
3. LuatOS需要的脚本和资源文件:https://gitee.com/openLuat/LuatOS-Air8000/tree/master/demo/power_on
4. lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件; 准备好软件环境之后,接下来查看如何烧录项目文件到Air8000开发板中,将本篇文章中演示使用的项目文件烧录到Air8000开发板中。
四、软硬件资料
4.1 API 接口介绍
https://docs.openluat.com/air8000/luatos/api/core/gpio/
4.2 硬件设计介绍
详细的硬件介绍请看:https://docs.openluat.com/air8000/luatos/hardware/design/poweron/
1. 按键开机&按键关机&按键检测
2. 上电开机
注意事项:boot(air8000 管脚1),需要悬空或者接地,不可以接到vdd_ext
五、代码示例介绍
5.1 代码介绍
--[[
1. 本demo可直接在Air8000核心板板上运行,如有需要请luat.taobao.com 购买
2.开关机使用了如下管脚
[14, "POWER_ON", " PIN14脚, 开机控制"],
4. 本程序使用逻辑:
4.1 按下开机键1.5 秒,Air8000 引擎开机
4.1 开机后,按下开机键,5秒之内不松手,则将air8000 关机,如果5秒之内松手则不关机
]]
PROJECT = "power_on"
VERSION = "1.0.0"
local taskName ="task_key"
local powerkey_pin = gpio.PWR_KEY -- 开机键
local boot_pin = 0 -- Boot 按键ID
local MSG_POWERKEY_PRESS = "POWERKEY_PRESS"
local MSG_POWERKEY_RISE = "POWERKEY_RISE"
local msg = nil
function pwroff()
log.info("power off!!")
pm.shutdown()
end
local function pwrkeycb() --长按五秒关机
if gpio.get(powerkey_pin) == 1 then
sysplus.sendMsg(taskName, MSG_POWERKEY_RISE)
else
sysplus.sendMsg(taskName, MSG_POWERKEY_PRESS)
end
end
local function setup_gpio()
gpio.setup(powerkey_pin, pwrkeycb, gpio.PULLUP,gpio.BOTH) -- 配置开机键
end
local function key_task()
setup_gpio() -- 初始化485
while true do
msg = sysplus.waitMsg(taskName, nil) -- 等待key task 的消息
if type(msg) == 'table' then
if msg[1] == MSG_POWERKEY_PRESS then
log.info("pwrkey 按下,计时5秒后关机")
sys.timerStart(pwroff, 5000) -- 开关机按下后,如果5秒内没有松开,就进入关机程序
elseif msg[1] == MSG_POWERKEY_RISE then
log.info("pwrkey 抬起,取消关机")
sys.timerStop(pwroff) -- 取消关机动作
end
else
log.error(type(msg), msg)
end
end
end
sysplus.taskInitEx(key_task, taskName)
sys.run()
5.2 功能测试
六、总结
至此,我们已经用 Air8000 核心板的开关机功能。