小言_互联网的博客

W801基于Lua开发环境下流水灯程序

477人阅读  评论(0)

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进行烧录。

  1. 通过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】于2022421日增加
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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场