1 前言
尝试air105+st7735通过lvgl显示图片,目前只实现了bin格式图片的显示,后续再看看png格式。
2 硬件连接
3 图片格式转换
lvgl官网有提供图片格式转换。
https://lvgl.io/tools/imageconverter
选择本地的图片,然后color format使用lcd配置,比如我的st7735是16真彩(即色RGB彩组成为5:6:5),所以选择16colors
输出格式可以是bin也可以是c,我选择bin,方便存入lua文件系统加载。
4 lua的图片格式支持
源码中显示支持bin格式图片
5 图片载入
通过luatools下载的图片是存在luadb格式下的。
如下图,可以查看到到存储的文件大小。
6 代码
--- 模块功能:lcd- air105+st7735
-- @module lvgl_img_bin
-- @author youkai
-- @release 2022.02.20
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "esp32_mpu6050"
VERSION = "1.0.0"
log.info("main", PROJECT, VERSION)
-- sys库是标配
_G.sys = require("sys")
-- 1. display: st7735+air105 hspi
function init_air105_st7735 ()
spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,96*1000*1000,spi.MSB,1,1)
-- SPI 5 (HSPI) 片选PC14
log.info("lcd.init",
lcd.init("st7735",{port = "device",pin_dc = pin.PE9 ,pin_rst = pin.PC12,pin_pwr = pin.PE8,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd))-- SPI 5 HSPI
log.info("LCD OK")
end
function init_lvgl()
if lvgl.init(128,160) == true then
log.debug("lvgl init ok.")
else
log.debug("lvgl init error.")
end
end
function lvgl_img_test(file_path)
local scr = lvgl.obj_create()
local img = lvgl.img_create(scr,nil) --
local style_img = lvgl.style_create()
lvgl.style_set_image_recolor(style_img, lvgl.STATE_DEFAULT, lvgl.color_make(0xff, 0xff, 0xff))
lvgl.style_set_image_recolor_opa(style_img, lvgl.STATE_DEFAULT, 0)
lvgl.style_set_image_opa(style_img, lvgl.STATE_DEFAULT, 255)
lvgl.obj_add_style(img, lvgl.IMG_PART_MAIN, style_img)
lvgl.obj_set_pos(img, 0, 0)
lvgl.obj_set_size(img, 128, 160)
lvgl.obj_set_click(img, true)
lvgl.img_set_src(img,file_path)
lvgl.img_set_pivot(img, 0,0)
lvgl.img_set_angle(img, 0)
log.info("scr_load",lvgl.scr_load(scr))
end
log.info("end require")
--添加硬狗防止程序卡死
-- wdt.init(15000)--初始化watchdog设置为15s
-- sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
-- 初始化屏幕
init_air105_st7735 ()
init_lvgl()
-- ================main start================
sys.taskInit(function()
-- ps:有wait不能放在外面
img_path = "/luadb/bbb.bin"
log.info("fsize:"..img_path, fs.fsize(img_path))
lvgl_img_test(img_path)
sys.wait(1500)
while 1 do
sys.wait(10)
end
end)
-- ================main end==================
sys.run()