Explorar o código

add: 添加Air780EHV/Air780EGH-PWM代码

wangshihao hai 8 meses
pai
achega
71b797da83

+ 29 - 0
module/Air780EGH/demo/pwm/breathing_led.lua

@@ -0,0 +1,29 @@
+--[[
+@module  breathing_led
+@summary PWM呼吸灯效果模块
+@version 1.0
+@date    2025.07.08
+@author  王世豪
+@usage
+使用Air780EGH核心板的GPIO引脚输出PWM波形,演示呼吸灯效果。
+]]
+
+local PWM_ID = 0
+local function breathing_led()
+    log.info("pwm", "ch", PWM_ID)
+    while 1 do
+        -- 仿呼吸灯效果
+        log.info("pwm", ">>>>>")
+        for i = 10, 1, -1 do 
+            pwm.open(PWM_ID, 1000, i*9) -- 频率1000hz, 占空比从 90% 递减到 9%
+            sys.wait(100 + i*10) 
+        end
+        for i = 10, 1, -1 do 
+            pwm.open(PWM_ID, 1000, 100 - i*9) -- 频率1000hz, 占空比从 10% 递增到 91%
+            sys.wait(100 + i*10)
+        end
+        sys.wait(2000)
+    end
+end
+
+sys.taskInit(breathing_led)

+ 69 - 0
module/Air780EGH/demo/pwm/main.lua

@@ -0,0 +1,69 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.07.08
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+1. 加载pwm输出模块,控制GPIO引脚输出PWM波形
+2. 加载呼吸灯效果模块,控制GPIO引脚输出呼吸灯效果
+
+更多说明参考本目录下的readme.md文件
+]]
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+PROJECT = "pwm"
+VERSION = "001.000.000"
+
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+-- 加载pwm输出模块
+require "pwm_output"
+
+-- -- 加载呼吸灯效果模块
+-- require "breathing_led"
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 26 - 0
module/Air780EGH/demo/pwm/pwm_output.lua

@@ -0,0 +1,26 @@
+--[[
+@module  pwm_output
+@summary PWM输出模块
+@version 1.0
+@date    2025.07.08
+@author  王世豪
+@usage
+使用Air780EGH核心板的GPIO引脚输出PWM波形,演示不同占空比的PWM波形输出效果。
+]]
+
+local PWM_ID = 0
+local function pwm_output()
+    while true do
+        -- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为10/1000=1% 持续输出
+        pwm.open(PWM_ID, 1000, 10, 0, 1000)
+        sys.wait(1000)
+        -- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为500/1000=50% 持续输出
+        pwm.open(PWM_ID, 1000, 500, 0, 1000)
+        sys.wait(1000)
+        -- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为1000/1000=100% 持续输出
+        pwm.open(PWM_ID, 1000, 1000, 0, 1000)
+        sys.wait(1000)
+    end
+end
+
+sys.taskInit(pwm_output)

+ 32 - 0
module/Air780EGH/demo/pwm/readme.md

@@ -0,0 +1,32 @@
+
+## 演示功能概述
+
+将使用Air780EGH核心板,演示PWM控制GPIO引脚输出PWM波形,以及控制GPIO引脚输出呼吸灯效果。
+
+## 演示硬件环境
+
+1、Air780EGH核心板一块
+
+2、TYPE-C USB数据线一根
+
+3、Air780EGH核心板和数据线的硬件接线方式为
+
+- Air780EGH核心板通过TYPE-C USB口供电;(核心板USB旁边的开关拨到on一端)
+
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、[Air780EGH V2008版本固件](https://docs.openluat.com/air780EGH/luatos/firmware/version/)(测试使用V2008 1号固件)
+
+## 演示核心步骤
+
+1、搭建好演示硬件环境
+
+2、通过Luatools将demo与固件烧录到核心板中
+
+3、烧录成功后,自动开机运行
+
+4、接下来通过示波器查看波形,使用发光二极管演示呼吸灯效果。

+ 29 - 0
module/Air780EHV/DEMO/pwm/breathing_led.lua

@@ -0,0 +1,29 @@
+--[[
+@module  breathing_led
+@summary PWM呼吸灯效果模块
+@version 1.0
+@date    2025.07.08
+@author  王世豪
+@usage
+使用Air780EHV核心板的GPIO引脚输出PWM波形,演示呼吸灯效果。
+]]
+
+local PWM_ID = 0
+local function breathing_led()
+    log.info("pwm", "ch", PWM_ID)
+    while 1 do
+        -- 仿呼吸灯效果
+        log.info("pwm", ">>>>>")
+        for i = 10, 1, -1 do 
+            pwm.open(PWM_ID, 1000, i*9) -- 频率1000hz, 占空比从 90% 递减到 9%
+            sys.wait(100 + i*10) 
+        end
+        for i = 10, 1, -1 do 
+            pwm.open(PWM_ID, 1000, 100 - i*9) -- 频率1000hz, 占空比从 10% 递增到 91%
+            sys.wait(100 + i*10)
+        end
+        sys.wait(2000)
+    end
+end
+
+sys.taskInit(breathing_led)

+ 69 - 0
module/Air780EHV/DEMO/pwm/main.lua

@@ -0,0 +1,69 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.07.08
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+1. 加载pwm输出模块,控制GPIO引脚输出PWM波形
+2. 加载呼吸灯效果模块,控制GPIO引脚输出呼吸灯效果
+
+更多说明参考本目录下的readme.md文件
+]]
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+PROJECT = "pwm"
+VERSION = "001.000.000"
+
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+-- 加载pwm输出模块
+require "pwm_output"
+
+-- -- 加载呼吸灯效果模块
+-- require "breathing_led"
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 26 - 0
module/Air780EHV/DEMO/pwm/pwm_output.lua

@@ -0,0 +1,26 @@
+--[[
+@module  pwm_output
+@summary PWM输出模块
+@version 1.0
+@date    2025.07.08
+@author  王世豪
+@usage
+使用Air780EHV核心板的GPIO引脚输出PWM波形,演示不同占空比的PWM波形输出效果。
+]]
+
+local PWM_ID = 0
+local function pwm_output()
+    while true do
+        -- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为10/1000=1% 持续输出
+        pwm.open(PWM_ID, 1000, 10, 0, 1000) -- 小灯微微发光
+        sys.wait(1000)
+        -- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为500/1000=50% 持续输出
+        pwm.open(PWM_ID, 1000, 500, 0, 1000) -- 小灯中等亮度
+        sys.wait(1000)
+        -- 开启pwm通道0,设置脉冲频率为1kHz,分频精度为1000,占空比为1000/1000=100% 持续输出
+        pwm.open(PWM_ID, 1000, 1000, 0, 1000) -- 小灯很高亮度
+        sys.wait(1000)
+    end
+end
+
+sys.taskInit(pwm_output)

+ 32 - 0
module/Air780EHV/DEMO/pwm/readme.md

@@ -0,0 +1,32 @@
+
+## 演示功能概述
+
+将使用Air780EHV核心板,演示PWM控制GPIO引脚输出PWM波形,以及控制GPIO引脚输出呼吸灯效果。
+
+## 演示硬件环境
+
+1、Air780EHV核心板一块
+
+2、TYPE-C USB数据线一根
+
+3、Air780EHV核心板和数据线的硬件接线方式为
+
+- Air780EHV核心板通过TYPE-C USB口供电;(核心板USB旁边的开关拨到on一端)
+
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、[Air780EHV V2008版本固件](https://docs.openluat.com/air780ehv/luatos/firmware/version/)(测试使用V2008 1号固件)
+
+## 演示核心步骤
+
+1、搭建好演示硬件环境
+
+2、通过Luatools将demo与固件烧录到核心板中
+
+3、烧录成功后,自动开机运行
+
+4、接下来通过示波器查看波形,使用发光二极管演示呼吸灯效果。