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

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()之后后面不要加任何语句!!!!!

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
基于W801单片机的智能手机充电器是一种能够更加智能化管理和保护手机充电的设计方案。这款充电器采用了W801单片机作为主控芯片,通过其强大的计算和控制能力,实现了多种功能和优化。 首先,基于W801单片机的充电器可以根据手机电池的容量和电压等信息,智能调节充电电流和电压。通过与手机之间的通信,充电器可以了解手机电池的具体状态,并根据需要进行快速充电或是低电流充电,以达到最佳充电效果,同时避免过度充电对手机电池的损害。 其次,充电器还具备安全保护功能。例如,基于W801单片机的充电器可以实现过充保护,当手机电池充满后自动停止充电,避免过度充电导致手机电池损坏。另外,充电器还可以监测电流和电压的异常情况,一旦发现异常即刻停止充电,确保手机充电安全。 此外,基于W801单片机的充电器还可以具备智能管理功能。它可以通过内置的计时器功能,记录手机充电时间和充电历史,帮助用户了解充电习惯和充电特点。同时,它还可以与用户的手机APP进行连接,实现远程控制和监测。用户可以通过手机APP查看充电器状态、调整充电参数等。 综上所述,基于W801单片机的智能手机充电器设计具备智能调节充电电流和电压、安全保护功能以及智能管理等特点,能够更好地满足用户对手机充电的需求,提供更加智能和安全的充电体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值