【Luat-esp32】2.点屏-st7735

前言

已经简单熟悉了下载流程以及点灯,尝试显示屏。

显示屏信息

购买来源:1.8寸 TFT LCD 分辨率128X160 SPI串口屏 合宙LuatOS全系模块支持

引脚信息如下(图片来源于该链接):
在这里插入图片描述
需要注意的是供电是3.3v,也就是esp32的引脚7/15/20可以提供。
在这里插入图片描述

代码

luat 5.3 参考手册:
https://wiki.luatos.com/_static/lua53doc/contents.html

接口文档:
https://wiki.luatos.com/api/index.html

-- esp32 demo
--- 模块功能:lcddemo
-- @module lcd
-- @author Dozingfiretruck
-- @release 2021.01.25

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "lcddemo"
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喂一次狗

spi_lcd = spi.deviceSetup(2,5,0,0,8,40000000,spi.MSB,1,1)
log.info("lcd.init",
lcd.init("st7789",{port = "device",pin_dc = 3, pin_rst = 4,direction = 0,w = 240,h = 320,xoffset = 0,yoffset = 0},spi_lcd))

log.info("lcd.drawLine", lcd.drawLine(20,20,150,20,0x001F))
log.info("lcd.drawRectangle", lcd.drawRectangle(20,40,120,70,0xF800))
log.info("lcd.drawCircle", lcd.drawCircle(50,50,20,0x0CE0))

sys.taskInit(function()
    while 1 do
        sys.wait(500)
    end
end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

spi配置

spi操作库:https://wiki.luatos.com/api/spi.html

setup接口
在这里插入图片描述
deviceSetup接口
在这里插入图片描述

-- 官方示例
spi_device = spi.deviceSetup(0,17,0,0,8,2000000,spi.MSB,1,1)

-- esp32 + st7789
spi_lcd = spi.deviceSetup(2,5,0,0,8,40000000,spi.MSB,1,1)

对比deviceSetup
id:spi号,存疑,esp32示例是否使用的是IO2(引脚14),推测spi号因该是时钟信号的io口
cs:spi片选信号,存疑,esp32示例是否使用的是IO5(引脚6),我使用IO7
CPHA:CPHA
CPOL:CPOL,这两个用于配置上升沿下降沿触发。
dataw:数据位宽,默认8
bandrate:波特率,母鸡,仿照写40000000吧,后续再看有没有异常,难道是频率?
bitdict:大小端,默认spi.MSB, 可选spi.LSB,此处仿照选spi.MSB
ms:默认主1, 可选从机0. 通常只支持主机模式,仿照选1
mode:工作模式, 全双工1, 半双工0, 默认全双工,仿照选1

spi_lcd = spi.deviceSetup(2,7,0,0,8,40000000,spi.MSB,1,1)

目前先仿照esp32的demo,需要注意的是连线
不清楚spi为什么必须选择2,我试过其他的就失败了。

lcd配置

lcd - lcd驱动模块:https://wiki.luatos.com/api/lcd.html
1.8寸TFT LCD 128X160 (st7735S): https://doc.openluat.com/wiki/21?wiki_page_id=2650
在这里插入图片描述

pin_pwr为可选项,可不设置port:spi端口,例如0,1,2…如果为device方式则为”device”;
pin_dc:lcd数据/命令选择引脚;
pin_rst:lcd复位引脚;
pin_pwr:lcd背光引脚 可选项,可不设置;
direction:lcd屏幕方向 0:0° 1:180° 2:270° 3:90°;
w:lcd 水平分辨率;
h:lcd 竖直分辨率;
xoffset:x偏移(不同屏幕ic 不同屏幕方向会有差异);
yoffset:y偏移(不同屏幕ic 不同屏幕方向会有差异)

-- 官网示例
lcd.init("st7735s",{port = "device",pin_dc = 17, pin_pwr = 7,pin_rst = 19,direction = 2,w = 160,h = 80,xoffset = 1,yoffset = 26},spi_lcd))

-- esp32 lcddemo
lcd.init("st7789",{port = "device",pin_dc = 3, pin_rst = 4,direction = 0,w = 240,h = 320,xoffset = 0,yoffset = 0},spi_lcd))

我的屏幕ic是st7735,所以string应该设为"st7735".
port:当使用的是spi设备时,应该设为"device",一致。
pin_dc:数据/命令口
pin_pwr:esp示例中没有配置,这个是lcd的背光引脚,可以不配置。
pin_rst:复位引脚,可自选,我仿照esp32设为IO4(引脚5)
direction:屏幕方向,仿照esp32为0,不旋转
w:屏幕的水平分辨率,这个自己写了,因为官方示例是翻转了的,我选择设为128(分辨率为128*160)
h:屏幕的竖直分辨率,设为160
xoffset:水平偏移,可能由于图片显示问题需要设置,目前先设为0
yoffset:竖直偏移,可能由于图片显示问题需要设置,目前先设为0

-- st7735 + esp32
lcd.init("st7735",{port = "device",pin_dc = 6, pin_pwr = 11,pin_rst = 10,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd))

这就是我的配置了。

电路连接

根据上述代码

-- 
spi_lcd = spi.deviceSetup(2,7,0,0,8,20000000,spi.MSB,1,1)

-- st7735 + esp32
lcd.init("st7735",{port = "device",pin_dc = 6, pin_pwr = 11,pin_rst = 10,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd))

在这里插入图片描述

在这里插入图片描述

参照air101:https://wiki.luatos.com/boardGuide/common/lcd.html
连接方式参照101,注意配置io口

测试代码1

--- 模块功能:lcddemo
-- @module lcd
-- @author Dozingfiretruck
-- @release 2021.01.25

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "esp32_lcdst7735"
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喂一次狗

spi_lcd = spi.deviceSetup(2,7,0,0,8,20000000,spi.MSB,1,1)

log.info("SPI OK")

log.info("lcd.init",
-- st7735 + esp32
lcd.init("st7735",{port = "device",pin_dc = 6, pin_pwr = 11,pin_rst = 10,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd))

log.info("LCD OK")

log.info("lcd.drawLine", lcd.drawLine(20,20,150,20,0x001F))
log.info("lcd.drawRectangle", lcd.drawRectangle(20,40,120,70,0xF800))
log.info("lcd.drawCircle", lcd.drawCircle(50,50,20,0x0CE0))

sys.taskInit(function()
    while 1 do
        sys.wait(500)
    end
end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

现象1

在这里插入图片描述
在这里插入图片描述

不清楚为什么会屏幕一半为花屏,但是后续没有遇到过。

代码2

--- 模块功能:lcddemo
-- @module lcd
-- @author Dozingfiretruck
-- @release 2021.01.25

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "esp32_lcdst7735"
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喂一次狗

-- spi test ok
-- spi clk is io2, cs is IO7
spi_lcd = spi.deviceSetup(2,7,0,0,8,20000000,spi.MSB,1,1)

log.info("SPI OK")

log.info("lcd.init",
-- st7735 + esp32
lcd.init("st7735",{port = "device",pin_dc = 6, pin_pwr = 11,pin_rst = 10,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd))

log.info("LCD OK")

local function display_line ()
    log.info("lcd.drawLine", lcd.drawLine(20,20,150,20,0x001F))
    log.info("lcd.drawRectangle", lcd.drawRectangle(20,40,120,70,0xF800))
    log.info("lcd.drawCircle", lcd.drawCircle(50,50,20,0x0CE0))
    -- sys.wait(1500)
    log.info("display demo")
end

local function display_str ()
    lcd.setFont(lcd.font_opposansm12)
    lcd.drawStr(40,10,"drawStr")
    
    lcd.setFont(lcd.font_opposansm16_chinese)
    lcd.drawStr(40,40,"drawStr测试")
end



-- lcd.clear(0x0CE0)
-- log.info("clear")

sys.taskInit(function()
    while 1 do
        lcd.clear()
        display_str ()
        sys.wait(1500)
        lcd.clear()
        display_line ()
        sys.wait(1500)
    end
end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

现象2

[luat]esp32+st7735

注意点

sys.wait貌似不能放在sys.taskInit外面。

不清楚为什么,前几次运行程序,跑一段时间后就不会显示了,屏幕全部空白,但是log有打印出来显示log。
不过后续就没遇到了。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值