当前位置: 首页 > 基础知识 > 用Esp32-c3 圣诞点灯

用Esp32-c3 圣诞点灯

发布于:2022-12-25 基础知识 0条评论 898 views

圣诞点灯

2022年,大家过的都挺不容易的。终于挺到了圣诞节,我就又用手头的小开发板做了个圣诞树,区别于去年用的air101,今年用的是Esp32-C3这颗芯片的开发板,依然是合宙出品。下面是购买的链接:

https://item.taobao.com/item.htm?spm=a312a.7700824.w4002-24045920841.20.278066f5uRLCwj&id=666579064570

固件现在有两个分支,一个是打盹的消防车开发的,地址是: 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


标签: ,

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注