圣诞点灯
2022年,大家过的都挺不容易的。终于挺到了圣诞节,我就又用手头的小开发板做了个圣诞树,区别于去年用的air101,今年用的是Esp32-C3这颗芯片的开发板,依然是合宙出品。下面是购买的链接:
固件现在有两个分支,一个是打盹的消防车开发的,地址是:
https://gitee.com/openLuat/luatos-soc-idf5
早期的版本是梦程大佬开发的,地址是
https://gitee.com/dreamcmi/LuatOS-ESP32
我个人一直比较偏向使用梦程大佬写的分支,主要是源码可读性比较强,注释多,我如果在上面动手动脚会比较方便。 可惜测试后发现LCD.Draw方法梦程大佬的版本似乎支持的不太好,跑不起来,所以用了车车的版本,也就是上面的第一个版本。
两个版本的详细差别,我还没来得及比,等我研究出来了再单写文章。
下面是源码,比较简单,我也做了注释,相信您一看就懂:
--- 模块功能:圣诞快乐
-- @module christmas_tree
-- @author miuser
-- @release 2021.12-25
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "christmas_tree"
VERSION = "1.0.0"
log.info("main", PROJECT, VERSION)
-- sys库是标配
_G.sys=require("sys")
--添加硬狗防止程序卡死
wdt.init(15000)--初始化watchdog设置为15s
sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
sys.taskInit(function()
spi_lcd = spi.deviceSetup(2, 7, 0, 0, 8, 40000000, spi.MSB, 1, 1) --初始化SPI
lcd.init("st7735v",{port = "device",pin_dc = 6, pin_pwr = 11,pin_rst = 10,direction = 1,w = 160,h = 80,xoffset = 0,yoffset = 24},spi_lcd) --初始化LCD
lcd.invoff() --屏幕是反色的数据,所以设置反色
-- rgb格式是原始数据方式保存的RGB数据,数据存储形式为rgb565,每像素两个字节,可以用ffmpeg生成
local rgb_file = "/luadb/tree.rgb"
local file_size = fs.fsize(rgb_file)
print(rgb_file.." file_size",file_size)
local file = io.open(rgb_file, "rb")
if file then
local file_cnt = 0
local buff = zbuff.create({160,80,16},25600)--分辨率160*80 160*80*2=25600
repeat --四帧图像循环播放,每帧25600,文件总共102400字节
log.info("info","left="..tostring(file_size - file_cnt))
if (file_size - file_cnt < 25600) then
log.info("rewind")
file_cnt=0
file:close()
file = io.open(rgb_file, "rb")
end
if file:fill(buff) then
file_cnt = file_cnt + 25600
--这行语句负责把buff的数据刷新到屏幕,梦晨大佬的V03版本固件报错,还在找原因。
lcd.draw(0, 0, 159, 79, buff)
sys.wait(50)
end
until(false )
end
end)
-- 主循环, 必须加
sys.run()
这是实际显示的效果, 完整的软件源码以及视频工具下载链接如下: christmastree demo