Lua基础|CORE-ESP32C3|eink|日期格式化|os.date|weekarray|tonumber|SOC固件编译|汉字星期|墨水屏:今天星期几?
目录
Lua5.3参考手册
软件版本
日志及soc下载工具
os.date函数说明
os.date格式化符号
示例
显示效果
希望实现
实现思路
关于汉字显示的说明
编辑编译方法可参考
示例代码
运行log记录
PS: eink - 墨水屏操作库
PS2:
1、eink-1.54寸快刷墨水屏局部刷新模式下频闪;
2、eink墨水屏:日期、星期实时刷新显示;
3、eink墨水屏:墨水屏天气日历。
Lua5.3参考手册
Lua 5.3 参考手册 - 目录
软件版本
CORE-ESP32C3:LuatOS@ESP32C3 base 22.12 bsp V1003 32bit
日志及soc下载工具
luatools 版本:2.1.88
os.date函数说明
os.date ([format [, time]])
返回一个包含日期及时刻的字符串或表。 格式化方法取决于所给字符串 format。
如果提供了 time 参数, 格式化这个时间 (这个值的含义参见 os.time 函数)。 否则,date 格式化当前时间。
如果 format 以 '!' 打头, 日期以协调世界时格式化。 在这个可选字符项之后, 如果 format 为字符串 "*t", date 返回有后续域的表: year (四位数字),month (1–12),day (1–31), hour (0–23),min (0–59),sec (0–61), wday (星期几,星期天为 1 ), yday (当年的第几天), 以及 isdst (夏令时标记,一个布尔量)。 对于最后一个域,如果该信息不提供的话就不存在。
如果 format 并非 "*t", date 以字符串形式返回, 格式化方法遵循 ISO C 函数 strftime 的规则。
如果不传参数调用, date 返回一个合理的日期时间串, 格式取决于宿主程序以及当前的区域设置 (即,os.date() 等价于 os.date("%c"))。
在非 POSIX 系统上, 由于这个函数依赖 C 函数 gmtime 和 localtime, 它可能并非线程安全的。
os.date格式化符号
| 格式符 | 含义 | 具体示例 |
| %a | 一星期中天数的简写 | (Fri) |
| %A | 一星期中天数的全称 | (Wednesday) |
| %b | 月份的简写 | (Sep) |
| %B | 月份的全称 | (May) |
| %c | 日期和时间 | (09/16/98 23:48:10) |
| %d | 一个月中的第几天 | (28)[0 - 31] |
| %H | 24小时制中的小时数 | (18)[00 - 23] |
| %I | 12小时制中的小时数 | (10)[01 - 12] |
| %j | 一年中的第几天 | (209)[01 - 366] |
| %M | 分钟数 | (48)[00 - 59] |
| %m | 月份数 | (09)[01 - 12] |
| %P | 上午或下午 | (pm)[am - pm] |
| %S | 一分钟之内秒数 | (10)[00 - 59] |
| %w | 一星期中的第几天 | (3)[0 - 6 = 星期天 - 星期六] |
| %W | 一年中的第几个星期 | (2)0 - 52 |
| %x | 日期 | (09/16/98) |
| %X | 时间 | (23:48:10) |
| %y | 两位数的年份 | (16)[00 - 99] |
| %Y | 完整的年份 | (2016) |
| %% | 字符串'%' | (%) |
示例
eink.print(25,70,os.date("%x"))eink.print(30,110,os.date("%X"))eink.print(30,150,os.date("%A"))
显示效果:

希望实现:

实现思路:
1、显示中文;
2、建立weekarry星期映射关系,索引下标0为星期日;
weekarray={"日","一","二","三","四","五","六"} --索引从1开始
os.date("%w")显示当前日期的星期数字(字符型),需转换为数字型,才能进行+1操作,与weekarry对应,拼合生成星期几的字符串,并显示
如:
--1、设置所要使用的汉字字库eink.setFont(eink.font_opposansm10_chinese)eink.print(5,70,os.date("%Y-%m-%d"))eink.print(30,110,os.date("%X"))--2、建立weekarry星期映射关系,索引下标0为星期日,local weekarray={"日","一","二","三","四","五","六"} --索引从1开始--os.date("%w")显示当前日期的星期数字(字符型),需转换为数字型,才能进行+1操作,与weekarry对应--拼合生成星期几的字符串,并显示eink.print(50,150,"星期"..weekarray[tonumber(os.date("%w")+1)])
关于汉字显示的说明:
必需在.\luatos-soc-idf5\luatos\include\luat_conf_bsp.h文件中打开font_opposansm10_chinese选项,该字库才能启用,之后再编译固件。
编译方法可参考:
合宙ESP32系列|自定义固件|在线云编译|本地编译|Windows|luat_conf_bsp.h|(2)、CORE-ESP32S3编译_打酱油的工程师的博客-CSDN博客
官方默认固件中有:font_opposansm10_chinese字体。
其他字体若未启用及编译,则无法显示汉字,会打印日志显示错误内容:
E/eink only font pointer is allow

示例代码:
while true doeink.clear(1,0)eink.setFont(eink.font_opposansm10_chinese)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.show(30,110,1)sys.wait(500)--每秒刷新2次end
运行log记录:
[2023-02-04 14:23:26.942] I/main LuatOS@ESP32C3 base 22.12 bsp V1003 32bit[2023-02-04 14:23:26.942] I/main ROM Build: Feb 4 2023 01:11:06[2023-02-04 14:23:26.942] I/fs script zone as luadb[2023-02-04 14:23:26.944] D/main loadlibs luavm 98296 14640 14736[2023-02-04 14:23:26.944] D/main loadlibs sys 159544 59384 59384[2023-02-04 14:23:27.390] D/eink spi setup complete, now setup epd[2023-02-04 14:23:27.501] I/user.e-paper 1.54 Testing Go[2023-02-04 14:23:31.723] I/user.e-paper 1.54 Testing End
PS: eink - 墨水屏操作库
https://wiki.luatos.com/api/eink.html
PS2:
基于LuatOS@ESP32C3 base 22.12 bsp V1003 32bit版本。
1、eink-1.54寸快刷墨水屏局部刷新模式下频闪;
解决方案:设置清屏参数为: eink.clear(1,0) --解决局部刷新频闪问题
2、eink墨水屏:日期、星期实时刷新显示;
CORE-ESP32C3|eink|日期格式化|IO11解锁|墨水屏操作库|SNTP自动同步|局部刷新|全局刷新|LuatOS-SOC接口|官方demo|学习(12):简单日期显示_打酱油的工程师的博客-CSDN博客
3、eink墨水屏:墨水屏天气日历。
CORE-ESP32C3|eink|墨水屏日历|天气API|LuatOS公共接口|气象要素数据V1|collectgarbage|LuatOS-SOC接口|官方demo|学习(13):墨水屏动态日历_esp32 日历_打酱油的工程师的博客-CSDN博客
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
