W801基于Lua开发环境下流水灯程序
- 🌼W801开发板(双核32位WiFi+BT/BLE蓝牙双模)
- 估计是当前最便宜的32位开发板了
- 📌相关资料:
https://www.hlktech.com/Goods-199.html
🛠Lua平台搭建
Lua
固件说明
Air101和Air103是基于平头哥
XT804
内核设计的soc,使用相同内核的W800和W806同样可以使用.海凌科的HLK-W801-KIT-V1.1
开发板可以刷Air103
固件来开发。
- 🔰开发环境搭建
基于
VSCode
平台搭建教程:https://wiki.luatos.com/boardGuide/vscode.html
🌻烧录工具以及固件烧录教程
-
W801
烧录工具和教程可参考:https://wiki.luatos.com/boardGuide/flash.html
-
https://wiki.luatos.com/pages/tools.html#
-
📍Lua 源码中gpio相关源文件:
https://gitee.com/openLuat/LuatOS/tree/master/luat/modules
-
GPIO相关函数介绍:
https://wiki.luatos.com/api/gpio.html
⛳GPIO配置
- 在源码中:
LuatOS-master\luat\modules\luat_lib_gpio.c
获取管脚对应的GPIO号, 可简写为 pin.PA01 , 推荐使用简写
@api pin.get(name)
@name 管脚的名称, 例如PA01, PB12
@return int 对应的GPIO号,如果不存在则返回-1,并打印警告信息
@usage
-- 以下三个语句等价, 若提示pin这个库不存在,则代表固件版本低,请升级底层固件.
-- PA12, GPIO12, 设置为输出, 而且低电平.
gpio.setup(12, 0)
gpio.setup(pin.PA12, 0) -- 推荐使用
gpio.setup(pin.get("PA12"), 0) -- 不推荐, 太长^_^
static int luat_pin_index(lua_State *L){
size_t len;
int pin = 0;
const char* pin_name = luaL_checklstring(L, 1, &len);
if (len < 3) {
LLOGW("invaild pin id %s", pin_name);
return 0;
}
pin = luat_pin_to_gpio(pin_name);
if (pin >= 0) {
lua_pushinteger(L, pin);
return 1;
}
else {
LLOGW("invaild pin id %s", pin_name);
return 0;
}
}
实际上该库还是看不到具体引脚定义的地方。
烧录方式
1.可以使用Luatools_v2
进行烧录。
- 通过VSCode 开发直接Lua开发套件点击调试上传。
📝流水灯
从Demo中修改的来:
Luatools_\resource\103_lua_lod\core_V0013\demo\gpio\gpio
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "gpiodemo"
VERSION = "1.0.1"
log.info("main", PROJECT, VERSION)
-- sys库是标配
_G.sys = require("sys")
if wdt then
--添加硬狗防止程序卡死,在支持的设备上启用这个功能
wdt.init(9000)--初始化watchdog设置为9s
sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
--下面的GPIO引脚编号,请根据实际需要进行更改!
-- Air101开发板的3个LED分别为 PB08/PB09/PB10
-- Air103开发板的3个LED分别为 PB24/PB25/PB26
-- Air105开发板的3个LED分别为 PD14/PD15/PC3
-- 若下载到设备后提示pin库不存在,请升级固件到V0006或以上
--【HaoSir2022】于2022年4月21日增加
local rtos_bsp = rtos.bsp()
rtos_bsp = rtos_bsp:lower()
function pinx()--根据不同开发板,给LED赋值不同的gpio引脚编号
if rtos_bsp =="air101" then--Air101开发板LED引脚编号
return pin.PB08, pin.PB09, pin.PB10
elseif rtos_bsp == "air103" then--Air103开发板LED引脚编号
return pin.PB26, pin.PB25, pin.PB24
elseif rtos_bsp == "air105" then--Air105开发板LED引脚编号
return pin.PD14, pin.PD15, pin.PC3
elseif rtos_bsp == "esp32c3" then -- ESP32C3开发板的引脚
return 12, 13, 255 -- 开发板上就2个灯
else
log.info("main", "define led pin in main.lua")
return 0, 0, 0
end
end
function gpio_pin( )
return pin.PB05,pin.PB25, pin.PB26, pin.PB18, pin.PB17, pin.PB16, pin.PB11
end
--LED引脚判断赋值结束
local P1,P2,P3,P4,P5,P6,P7=gpio_pin()--赋值开发板LED引脚编号
local LED1= gpio.setup(P1, 0, gpio.PULLUP)
local LED2= gpio.setup(P2, 0, gpio.PULLUP)
local LED3= gpio.setup(P3, 0, gpio.PULLUP)
local LED4= gpio.setup(P4, 0, gpio.PULLUP)
local LED5= gpio.setup(P5, 0, gpio.PULLUP)
local LED6= gpio.setup(P6, 0, gpio.PULLUP)
local LED7= gpio.setup(P7, 0, gpio.PULLUP)
sys.taskInit(function()
--开始流水灯
local count = 0
while 1 do
--流水灯程序
sys.wait(500) --点亮时间
-- 轮流点灯
LED1(count % 7 == 0 and 1 or 0)
LED2(count % 7 == 1 and 1 or 0)
LED3(count % 7 == 2 and 1 or 0)
LED4(count % 7 == 3 and 1 or 0)
LED5(count % 7 == 4 and 1 or 0)
LED6(count % 7 == 5 and 1 or 0)
LED7(count % 7 == 6 and 1 or 0)
-- if P7 and P7 ~= 255 then --P7=1且P7不等于255
-- LED7(count % 7 == 6 and 1 or 0)
-- end
log.info("GPIO", "Go Go Go", count, rtos.bsp())
log.info("LuatOS:", "https://wiki.luatos.com")
if count//8==1 then
count =0
end
count = count + 1
end
end)
-- API文档 https://wiki.luatos.com/api/gpio.html
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
转载:https://blog.csdn.net/weixin_42880082/article/details/128506477
查看评论