init: Air780EPM 官方 LuatOS 项目代码基线

- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
wangfq
2026-08-31 08:53:49 +08:00
commit 173dd6874f
813 changed files with 125484 additions and 0 deletions
@@ -0,0 +1,64 @@
--[[
@module drv_led
@summary LED指示灯驱动配置功能模块
@version 1.0
@date 2026.07.23
@author 江访
@usage
本文件为LED指示灯驱动配置功能模块,提供了LED灯在正常工作状态和PSM+休眠状态下的控制逻辑。
LED状态说明:
1、正常工作状态(LED点亮):设备初始化完成、数据采集中、网络通信中
2、PSM+模式(LED熄灭):进入深度休眠前关闭,降低功耗
本文件的对外接口有2个:
1、sys.subscribe("LED_SET_HIGH", led_set_high_func):拉高LED指示灯
2、sys.subscribe("LED_SET_LOW", led_set_low_func):拉低LED指示灯
其他模块通过 sys.publish 控制LED
sys.publish("LED_SET_HIGH", gpio_led) -- 拉高LED
sys.publish("LED_SET_LOW", gpio_led) -- 拉低LED
]]
-- ==================== LED拉高事件处理 ====================
--[[
LED拉高事件处理函数
订阅LED_SET_HIGH消息,收到后拉高指定GPIO引脚。
LED点亮表示设备处于正常工作状态。
@param number gpio_led GPIO引脚号(例如27
]]
local function led_set_high_func(gpio_led)
if not gpio_led then return end
gpio.setup(gpio_led, 1)
gpio.set(gpio_led, 1)
log.info("drv_led", "GPIO" .. gpio_led .. " 拉高")
end
-- ==================== LED拉低事件处理 ====================
--[[
LED拉低事件处理函数
订阅LED_SET_LOW消息,收到后拉低指定GPIO引脚。
LED熄灭表示设备即将进入低功耗模式。
@param number gpio_led GPIO引脚号(例如27
]]
local function led_set_low_func(gpio_led)
if not gpio_led then return end
gpio.set(gpio_led, 0)
log.info("drv_led", "GPIO" .. gpio_led .. " 拉低")
end
-- ==================== 事件订阅 ====================
sys.subscribe("LED_SET_HIGH", led_set_high_func)
sys.subscribe("LED_SET_LOW", led_set_low_func)
log.info("drv_led", "模块已加载,等待LED_SET_HIGH/LED_SET_LOW消息")
-- 如果项目启动后需要LED保持某种状态,直接在此处配置初始状态
-- 此处的配置取决于硬件设计,合宙核心板上电后GPIO默认状态为高阻态
@@ -0,0 +1,92 @@
--[[
@module drv_psm
@summary PSM+模式(pm.power WORK_MODE 3)驱动配置功能模块
@version 1.0
@date 2026.07.23
@author 江访
@usage
本文件为PSM+模式驱动配置功能模块,提供了PSM+模式的配置模板,包括以下几点:
1、在进入PSM+模式前,配置深度休眠定时器(dtimer),设定唤醒时间
2、提供进入PSM+模式的入口函数,包括pm.power(pm.WORK_MODE, 3)、等待和重启兜底
3、在进入PSM+模式前,可以根据实际项目需求配置其他功能引脚
PSM+模式说明:
1、pm.power(pm.WORK_MODE, 3)配置后,并不会立即进入休眠
2、等所有协程都处于阻塞状态时,才会自动进入PSM+模式
3、进入PSM+模式后,RAM掉电,不执行任何脚本代码
4、RTC定时器到达或外部中断唤醒后,系统冷启动
本文件的对外接口只有1个:
1、sys.subscribe("DRV_SET_PSM", set_drv_psm):订阅"DRV_SET_PSM"消息;
其他模块如果需要进入PSM+模式,先发布"DRV_SET_PSM"消息,然后阻塞本task即可。
]]
-- ==================== PSM+入口主函数 ====================
--[[
PSM+模式任务函数
订阅DRV_SET_PSM消息后,在task协程中执行此函数。
函数流程:
1、配置深度休眠定时器(设定唤醒时间)
2、调用pm.power(pm.WORK_MODE, 3)进入PSM+模式
3、等待80秒——如果未成功进入PSM+,强制重启
注意:
1、必须在调用前关闭所有外设(传感器等)
2、必须在调用前拉低LED
3、进入PSM+前需要先配置好深度休眠定时器dtimer
4、PSM+模式下,所有引脚状态保持进入前的电平
@param number sleep_min_s PSM+休眠时间(分钟)
]]
local function psm_task(sleep_min_s)
log.info("drv_psm", "进入PSM+模式,休眠" .. sleep_min_s .. "分钟后唤醒")
-- 设置RTC深度休眠定时器
-- pm.dtimerStart(id, ms)
-- id=0表示使用定时器0,到达时间后系统自动唤醒
-- 此处的时长不要小于80秒
local sleep_ms = sleep_min_s * 60 * 1000
pm.dtimerStart(0, sleep_ms)
log.info("drv_psm", "深度休眠定时器已设置:", sleep_ms, "ms")
-- 在进入PSM+模式前,可以根据实际项目需求配置以下功能项:
-- 1、飞行模式:PSM+模式下飞行模式自动开启,无需手动操作
-- 2、USB功能:内核固件已自动关闭USB功能(2025年3月后版本)
-- 3、AGPIO配置:根据硬件设计配置GPIO24~28的电平状态
-- 详情可参考 lowpower/drv/drv_psm.lua 中的 set_psm_func_item()
-- 配置最低功耗模式为PSM+模式
-- pm.power(pm.WORK_MODE, 3)表示允许系统进入PSM+模式
-- 执行后不会立即进入休眠,等所有协程阻塞后自动进入
pm.power(pm.WORK_MODE, 3)
-- 等待80秒:给内核固件足够时间进入PSM+
-- 如果成功进入PSM+,此后的代码不会执行(RAM掉电)
-- 如果没有进入(例如有协程未阻塞),80秒后强制重启
sys.wait(80000)
log.info("drv_psm", "进入PSM+失败,重启")
rtos.reboot()
end
-- ==================== 事件处理 ====================
--[[
DRV_SET_PSM 事件处理函数
其他模块通过 sys.publish("DRV_SET_PSM", sleep_min_s) 触发:
sleep_min_s参数为休眠时间(分钟)
注意:本订阅处理函数使用sys.taskInit创建独立协程执行psm_task
这是因为pm.power和内部sys.wait需要在协程中运行
]]
local function set_drv_psm(sleep_min_s)
sys.taskInit(psm_task, sleep_min_s or 15)
end
-- ==================== 事件订阅 ====================
sys.subscribe("DRV_SET_PSM", set_drv_psm)
log.info("drv_psm", "模块已加载,等待DRV_SET_PSM消息")
@@ -0,0 +1,16 @@
--[[
@module netdrv_device
@summary 网络驱动设备功能模块
@version 1.0
@date 2026.07.21
@author 江访
@usage
本文件为网络驱动设备功能模块,核心业务逻辑为:
根据Air8780P项目需求,选择并且配置合适的网卡(网络适配器)
本demo使用4G网卡(LWIP_GP
本文件没有对外接口,直接在main.lua中require "netdrv_device"就可以加载运行
]]
-- 加载"4G网卡"驱动模块
require "netdrv_4g"