ESP32-S3当前进度
-
已设置开机连接wifi
-
已设置NTP时间同步并显示日期和星期在屏幕(每小时同步一次)
-
已设置获取哔哩哔哩粉丝数并显示在屏幕(每10分钟获取一次)(GIF图片)
-
已设置现在当前博客实时在线人数(仅占位,尚未设置MQTT,后续设置)(PNG图片)
-
已设置建简易3D打印外壳
左侧ESP32+2.8寸触摸屏(电容屏)
右侧ESP32-S3+3.5触摸屏(电阻屏)
按照屏幕显示区域分别设置了3D打印外壳
同样的外壳大小,3.5寸的显示区域明显更大,窄边框,显示效果也明显好一些,价格也更贵
NTP时间同步
导入NTP时间模块
设置NTP参数
设置UTC时间
设置NTP服务器
修改设备时间
到此NTP时间设置完成
注意事项
-
NTP时间依赖于网络,请先连接wifi,确保网络畅通
-
默认NTP服务器地址为pool.ntp.org,国内适合改用阿里云或者淘宝NTP服务器
-
settime并非一次就可以设置成功,有时候需要多次,有时间一次,无明显规律,需要做容错处理(try except)
下图为报错信息
校准时间后,建议仍然设置8小时使用网络同步一次,因为时间的精确性在7小时左右会有秒级之类的误差(网上看到的)
使用定时器即可
需要设置定时器
-
不要使用while Ture来阻塞进程
-
不要设置time.sleep来阻塞进程,阻塞画面渲染等
可以使用Timer
实例化定时器
设置回调函数
执行定时器
period参数
-
period为定时时长,单位为毫秒
mode参数
-
mode=Timer.PERIODIC为循环执行
-
mode=Timer.ONE_SHOT 为只执行一次
callback参数
-
callback为回调函数
-
想要传参可以使用lambda表达式(不适用的话会默认有一个timer参数,导致传参各种错误)
设置Lvgl显示组件
-
文本
-
JPG或者PNG图片
-
GIF动图
组件需要设置x坐标和y坐标
组件需要动态更新文本内容(本地时间日期或者从网络获取粉丝数)
问题汇总
一.文件系统不生效
原本可以使用set_src(“S:bilibili.gif”)这样的方式读取存储在闪存中的文件,现在不可以了
不清楚是不是ESP32-S3的问题,或者是Lvgl固件的问题,需要后续插上SD卡后排查
目前的解决方式
读取二进制文件流
二.无法加载中文字体
把需要的中文字符和指定的字体转为bin文件后,无论是fs_driver还是open二进制
这两种方法都失效,无法加载字体指针文件
以下方法无反应
以下方法会报错
设置字体
解决方法
待搜索引擎查找,或者等SD卡设置后再看
当设置NTP时间同步成功后
通过以下代码获取日期
获取到的结果,0-5为年月日,时分秒
以下函数转化字符串
转化为2023-05-24 23:00:00 这样的字符
其中zero_str为自己加的补零函数
补零函数
获取当前星级几
time.localtime()的第六个数据结果为星级几
可能得结果有0-6,0为星期一,1为星期二以此类推
文案设置
博客试试在线人数已经写好了样式
就差MQTT JS文件部署到博客,同时ESP32-S3开启MQTT通信,然后动态改变文本即可
希望在开启WIFI+MQTT+LVGL(GIF)+HTTP(GET)的情况下,R16N8的性能可以正常运行
等MQTT连接成功,也可以把哔哩哔哩粉丝计数起一个服务端的MQTT定时查询,只有变化时ESP32-S3才接收消息,这样就不用十分钟请求一次HTTP了
然后加上温湿度传感器+画仪表盘
END.
