CORE-ESP32C3|eink|日期格式化|IO11解锁|墨水屏操作库|SNTP自动同步|局部刷新|全局刷新|LuatOS-SOC接口|官方demo|学习(12):简单日期显示

目录

基础资料

探讨重点

参考博文:

实现功能

硬件准备

软件版本

日志及soc下载工具

软件使用

接线示意图

IO11解锁教程可参考:

功能1:基于墨水屏的日期显示;

初始化:

日期显示:

功能2:WLAN连接示例;

功能3:SNTP时间服务器的动态更新时间;

最终效果:

完整代码(IO11已解锁状态下):


基础资料

基于ESP32C3-CORE开发板:开发板简介

上手:开发上手 - LuatOS 文档

探讨重点

对官方LuatOS-SOC接口文档中eink - 墨水屏操作库功能的复现,进行相关内容的学习及探讨,并简单演示基于WLAN的墨水屏日期显示功能。

参考博文:

合宙Air105|摄像头|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB转TTL|官方demo|学习(2-1):摄像头camera-capture_合宙air105的摄像头_打酱油的工程师的博客-CSDN博客

合宙ESP32系列|自定义固件|在线云编译|本地编译|Windows|luat_conf_bsp.h|(2)、CORE-ESP32S3编译_打酱油的工程师的博客-CSDN博客

Lua基础|CORE-ESP32C3|eink|日期格式化|os.date|weekarray|tonumber|SOC固件编译|汉字星期|墨水屏:今天星期几?

实现功能

功能1:基于墨水屏的日期显示;

功能2:WLAN连接示例;

功能3: SNTP时间服务器的动态更新时间。

硬件准备

ESP32C3-CORE开发板(经典款)1块,面包板1块,EINK1.54墨水屏。

 ​ESP32C3-CORE开发板pinout

 EINK1.54墨水屏

软件版本

CORE-ESP32C3:LuatOS@ESP32C3 base 22.12 bsp V1003 32bit

日志及soc下载工具

luatools 版本:2.1.88

Luatools软件安装目录下存放有各型号的SOC,可用于刷机。

软件使用

接口文档可参考: eink - 墨水屏操作库

接线示意图

显示屏为合宙 1.54寸v2,200x200,快刷屏,SPI标准屏

硬件接线:

显示屏SPI   -->  CORE-ESP32

GND              GND

VCC              3.3V

SCL             (IO02)

SDA             (IO03)

RES             (IO10)

DC              (IO06)

CS              (IO07)

BUSY            (IO11)-IO11默认配置为SPI-FLASH的VDD,需解锁配置为GPIO使用。如不考虑解锁,可选择右侧IO,但后期存在复用冲突风险。

按以上配置,且IO11解锁后,接线示意如下:

IO11解锁教程可参考:

https://blog.csdn.net/Medlar_CN/article/details/128885223

功能1:基于墨水屏的日期显示;

初始化:

V1003版本SOC,墨水屏初始化前需要先初始化SPI设备:

local spi_id=2  --设置spi_id

--注意:eink初始化之前需要先初始化spi

spi.setup(spi_id,nil,0,0,8,20*1000*1000)

--不初始化会显示以下错误:

-- [0;31mE (30865) spi_mam

-- [0;31mE (32424) spi_master: check_trans_valid(679): invalid dev handle[0m

-- [0;31mE (32425) spi_master: check_trans_valid(679): invalid dev handle[0m

-- [0;31mE (32426) spi_master: check_trans_valid(679): invalid dev handle[0m

墨水屏初始化并设置全局刷新:

    eink.model(eink.MODEL_1in54)

    log.info("eink.setup",eink.setup(0, 2,11,10,6,7))  --设置全局刷新

    eink.setWin(200, 200, 2)

    --稍微等一会,免得墨水屏没初始化完成

日期显示需要局部刷新,设置如下:

    --eink.model(eink.MODEL_1in54) --若不改变屏幕参数可不执行

    --重新配置eink

    --显示spi状态及配置epd: D/eink spi setup complete, now setup epd

    log.info("eink.setup",eink.setup(1,2,11,10,6,7)) --设置局部刷新

    eink.setWin(200, 200, 2)

    --稍微等一会,免得墨水屏没初始化完成

日期显示:

os.date函数及汉字字体说明见博文:

Lua基础|CORE-ESP32C3|eink|日期格式化|os.date|weekarray|tonumber|SOC固件编译|汉字星期|墨水屏:今天星期几?_打酱油的工程师的博客-CSDN博客

日期显示代码:

        eink.clear(1,0)   --解决局部刷新频闪问题

        --E/eink only font pointer is allow

        --eink.setFont(eink.font_opposansm10_chinese)

        eink.setFont(eink.font_opposansm24_chinese) --需编译时选择该字体

        --eink.setFont(fonts.get("sarasa_light_24")) --v1003版中不支持该函数

        eink.print(0,30,"时间显示测试")

        eink.print(5,70,os.date("%Y-%m-%d"))

        eink.print(30,110,os.date("%X"))

        local weekarray={"日","一","二","三","四","五","六"} --索引从1开始

        eink.print(50,150,"星期"..weekarray[tonumber(os.date("%w")+1)])

        eink.print(0,190,"恭祝兔年大吉")

        eink.show(30,110,0)

功能2:WLAN连接示例;

连接示例代码:

function get_ip()

        log.info("wlan", "wlan_init:", wlan.init())

        log.info("mode", wlan.setMode(wlan.STATION))

        log.info("connect", wlan.connect("你的wlan", "你的wlan密码"))

        -- 等待连上路由,此时还没获取到ip

        result, _ = sys.waitUntil("WLAN_STA_CONNECTED")

        log.info("wlan", "WLAN_STA_CONNECTED", result)

        -- 等到成功获取ip就代表连上局域网了

        result, data = sys.waitUntil("IP_READY")

        log.info("wlan", "IP_READY", result, data)

       --等待连接成功消息

        sys.wait(2000)

end

功能3:SNTP时间服务器的动态更新时间;

V1003的http库中已集成ntp时间自动同步,成功获得ip后自动连接至ntp服务器并同步更新系统时间。

完成后提示日志中显示:D/sntp time sync done

不再支持采用NTP函数手动同步。

成功同步后的log:

[2023-02-04 01:15:49.692] D/eink spi setup complete, now setup epd

[2023-02-04 01:15:49.695] I/user.eink.setup  true

[2023-02-04 01:15:49.801] I/user.e-paper 1.54   Testing Go

[2023-02-04 01:15:54.045] I/user.e-paper 1.54   Testing End

[2023-02-04 01:15:54.451] D/eink spi setup complete, now setup epd

[2023-02-04 01:15:54.451] I/user.eink.setup  true

[2023-02-04 01:16:15.114] D/sntp time sync done

最终效果:

    

                                        Sntp完成同步前                       Sntp同步后

完整代码(IO11已解锁状态下):

PROJECT = "wifidemo"
VERSION = "1.0.0"

--测试支持硬件:ESP32C3
--测试固件版本:LuatOS@ESP32C3 base 22.12 bsp V1003 32bit
-- sys库是标配
_G.sys = require("sys")
--[[特别注意, 使用http库需要下列语句]]
_G.sysplus = require("sysplus")
local spi_id=2
--注意:eink初始化之前需要先初始化spi
spi.setup(spi_id,nil,0,0,8,20*1000*1000)

function eink_init()
    --eink.model(eink.MODEL_1in54) --若不改变屏幕参数可不执行
    --重新配置eink
    --显示spi状态及配置epd: D/eink spi setup complete, now setup epd
    log.info("eink.setup",eink.setup(1,2,11,10,6,7)) --设置局部刷新
    eink.setWin(200, 200, 2)
    --稍微等一会,免得墨水屏没初始化完成
    sys.wait(100)
    eink.clear(1)
    eink.show()
end

function eink_init_all_purge()
    eink.model(eink.MODEL_1in54)
    log.info("eink.setup",eink.setup(0, 2,11,10,6,7))  --设置全局刷新
    eink.setWin(200, 200, 2)
    --稍微等一会,免得墨水屏没初始化完成
    sys.wait(100)
    log.info("e-paper 1.54", "Testing Go")
    eink.clear()
    --画几条线一个圆,显示图形OK
    eink.circle(50, 100, 40)
    eink.line(100, 20, 105, 180)
    eink.line(100, 100, 180, 20)
    eink.line(100, 100, 180, 180)
    eink.show()
    log.info("e-paper 1.54", "Testing End")
end

function get_ip()
        log.info("wlan", "wlan_init:", wlan.init())
        log.info("mode", wlan.setMode(wlan.STATION))
        log.info("connect", wlan.connect("MERCURY_57B3", "madlar##king@@13124"))
        -- 等待连上路由,此时还没获取到ip
        result, _ = sys.waitUntil("WLAN_STA_CONNECTED")
        log.info("wlan", "WLAN_STA_CONNECTED", result)
        -- 等到成功获取ip就代表连上局域网了
        result, data = sys.waitUntil("IP_READY")
        log.info("wlan", "IP_READY", result, data) --成功获得ip后自动连接ntp服务器并同步更新系统时间,完成后提示:D/sntp time sync done
        sys.wait(2000)
end


sys.taskInit(function()
    get_ip() --成功获得ip后自动连接ntp服务器并同步更新系统时间,完成后提示:D/sntp time sync done
    --eink_init_all_purge()
    eink_init()
    while true do
        eink.clear(1,0)
        --E/eink only font pointer is allow
        --eink.setFont(eink.font_opposansm10_chinese)
        eink.setFont(eink.font_opposansm24_chinese) --自行编译引入该字体
        --eink.setFont(fonts.get("sarasa_light_24")) --v1003中已不支持
        eink.print(0,30,"时间显示测试")
        eink.print(5,70,os.date("%Y-%m-%d"))
        eink.print(30,110,os.date("%X"))
        local weekarray={"日","一","二","三","四","五","六"} --索引从1开始
        eink.print(50,150,"星期"..weekarray[tonumber(os.date("%w")+1)])
        --eink.print(50,150,"星期"..os.date("%w"))
        eink.print(0,190,"恭祝兔年大吉")
        eink.show(30,110,0)
        sys.wait(500)--每秒刷新2次
    end
end)


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值