跳转至

开关机键

一、演示功能概述

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 核心板的开关机功能。