[air103]使用原生lcd做简单的ui

in luatOS开发 with 0 comment

最近好久没有更新了,因为被luatos群管理员骂惨了,说我啥都不懂
因此我闭关修炼了几天,做出了一个简单的ui,还偏偏利用了垃圾Air103,可以说是废物利用吧
(如果有钱力,可以买SPI 外置Flash挂载,lvgl库是支持外置字体的)

1.外设

一套应该便宜的,我买了Air10X(即使这样,Esp32C3依旧可用)扩展板与Air103(如果对GPIO没有很大的需求,建议购买Air101,2MB的存储够用了!),18.9到手一套(听说涨价了?幸好早买了)

2.代码

1.屏幕 官网地址

首先是平平无奇的SPI屏幕驱动:

spi_lcd = spi.deviceSetup(0,pin.PB04,0,0,8,20*1000*1000,spi.MSB,1,1)
mcu.setClk(240)    --最高性能,快一些
lcd.init("st7735v",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00, pin_rst = pin.PB03,direction = 1,w = 160,h = 80,xoffset = 0,yoffset = 24},spi_lcd)

luatOS兼容所有ST7735系列屏幕,最大2寸(反正再大点我买不起{:)}),99%都是SPI驱动(依我所见)
我还特地上网查了一下,这花样就多了:

st7796 st7789 st7735 st7735v st7735s gc9a01 gc9106l gc9306x ili9341 ili9486

就是mcu处理能力够呛啊,不一定都能用,比如最垃圾的Air103(后悔死买他了:=========={)
第二句mcu需要独立编译,反正我编译的固件几乎都有(:D)。
我这块屏幕需要Offset,大概批次不同,建议自己修改防止花屏。
那有的小白痴就问了,我这块屏幕不是ST7735V,分辨率也不对,怎么改?
举个例子,我有一个ST7735S 1.8' SPI TFT屏幕(W:128 H:160)(听说Luat官方淘宝店更便宜?只要9.9带走?WC~~亏了)
改init那一句,变成:

lcd.init("st7735s",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00, pin_rst = pin.PB03,direction = 1,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd)

还有反色问题,明明应该显示黑色但是白白的一片,怪吓人的(:=(),那是时候关闭反色了。


lcd.invoff()--关闭
lcd.invon() --启用

作为垃圾佬,ad一波还是很有必要的,那我们搞个二维码玩玩(*~*)

x=0 --横坐标
y=0 --纵坐标
size=80--绘制80*80的二维码
str='https://imzlh.top'--内容
--网址使用http://开头,当然直接字符串显示也是可以的
lcd.drawQrcode(x, y, str, size)

是不是很简单?这就是为什么拿LuatOS入门的原因(声明:我不是)
有了二维码还要有描述字段才好,那么趁机了解lcdfont很有必要

-- 设置为字体,对之后的drawStr有效,调用lcd.drawStr前一定要先设置
lcd.setFont('lcd.font_opposansm12_chinese')--12px中文
lcd.drawStr(90,40,"扫一扫,iz博客")

注意:drawStr(x,y,str)中x、y指的是左下角的定位,拿12px字体示例:
左上角起始位置:x=90,y=28,因此千万不要手欠来一个lcd.drawStr(0,0,'Hello!')还说肯定是系统有问题

那...为了更醒目,我们把ta(文字)框起来吧!

color=0x001F --貌似不支持CSS的十六进制值啊??
lcd.drawRectang0x001Fle(85,20,155,60,color)
--规定x / y位置(左上和右下边缘)开始绘制一个框

接下来,我们就可以结合一起了,ui~~go!
我写的这个更复杂一点,位于{资源包}/chips/air103/example.lua
F0D939E7-304A-4954-A82A-35C6E697F534.jpeg
(还有后续之后写)

Responses