ESP32-S3已刷入MicroPython+Lvgl
《MicroPython[ESP32]:编译ESP32-S3 (SPIRAM Octal)16外8内 固件和ESP32 LVGL》
修正一下,文章提到的lvgl s3只支持8外存8内存,不正确,因为昨天构建并使用了3种固件
-
一个官方MicroPython:ESP32-S3 N8R8的固件
-
一个自编译MicroPython:ESP32-S3 N16R8的固件
-
一个自编译MicroPython+Lvgl8:ESP32的固件
-
一个网上找的的MicroPython+Lvgl9:ESP32-S3 N16R8的固件
今天屏幕到后,测试了显示驱动和触控驱动的正确性,同时也再次确认了内存的使用率
确实是支持ESP32-S3 N16R8的固件(MicroPython+Lvgl)
查看外存(在控制台)
import esp
esp.flash_size()/1024/1024
查看内存(在控制台)
import micropytho
micropython.mem_info()
这次的屏幕是
3.5寸TFT液晶显示屏模块串口SPI驱动ILI9488带电容触摸RGB320*480
x宝的卖家说显示驱动ILI9488和触控驱动ft6x36是和板子固定的
所以看起来长得一样的板子,可能用的驱动不同,比如我之前2.8 TTF ili9341+xpt2046
3.5寸TFT液晶显示屏的背面
ESP32-S3
ili9488屏幕 | ESP32-S3开发板 |
VCC | 3.3V |
GND | GND |
CS | 10 |
RESET | 18 |
DC | 17 |
SDI(MOSI) | 11 |
CLK(CLK) | 12 |
LED | 16 |
SDO(MISO) | 13 |
NC/3V3 | / |
CTP-SDA | 6 |
CTP-SCL | 7 |
CTP-INT | / |
CTP-RST | / |
注意
这个显示屏不用像上次一样,杜邦线一分二
只需要SDA,SCL接两个独立的针脚即可
代码示例
横屏(480*320)+触控
from ili9XXX import ili9488
from ft6x36 import ft6x36
from machine import Pin, I2C
# 让屏幕亮
p16 = Pin(16, Pin.OUT)
p16.value(1)
disp = ili9488(miso=13, mosi=11, clk=12, cs=10, dc=17, rst=18,
spihost=VSPI_HOST, mhz=20,power=-1,backlight=-1,
factor=16, hybrid=True, width=480, height=320,rot=0x20,
invert=False, double_buffer=True, half_duplex=False)
touch = ft6x36(sda=6, scl=7,inv_x=False, inv_y=False, swap_xy=True)
ESP32-S3+MicroPython+Lvgl
ili9488+ft6x36
实际效果,横屏展示+触控点击
由于屏幕换为了3.5寸更大的,所以之前打印的3D外壳也需要修改尺寸,重新设置
显示尺寸的更改意味着可以容纳更多的信息组件展示
初步的设计
-
展示日期,时间,节日,天气(文字+图表)
-
电池电量(如果带电池的话)
-
哔哩哔哩粉丝计数器(其他平台待定)
-
博客网站实时在线人数(谷歌,百度,必应,不限于搜索引擎)
-
备忘录,消息通知,番茄钟(因为有触控),日历,待办事项
目前ESP32-S3 R16N8的顶配,后面再试试屏幕图画+wifi+mqtt会不会卡机重启,理论上是没有问题的
为了画上面的图,试用了excalidraw
为了在excalidraw加上手写字体-沐瑶手写体,写了一个Chrome插件
使用Chrome扩展 declarativeNetRequest API设置了字体文件的重定向
这样就不用像以前一样自部署后,覆盖字体然后重新构建excalidraw,只需要开启Chrome插件,随时可以更换手写字体
代码笔记
// 打印后台服务日志
console.log("service-worker.js")
// 获取当前扩展某个资源的绝对URL(可以直接在浏览器打开对应网页或者引用资源)
let fileUrl = chrome.runtime.getURL(`font/muyao.woff2`)
console.log("fileUrl", fileUrl)
// 监听当扩展完成安装时
chrome.runtime.onInstalled.addListener(() => {
// 动态更新重定向规则(避免在rule.json中获取不到chrome扩展的id,导致无法引用扩展中的字体资源,但在后台服务中可以通过函数动态获取资源地址和扩展id)
// 后续也可以添加html,来完成切换字体代理或者其他资源重定向的效果
chrome.declarativeNetRequest.updateDynamicRules({
removeRuleIds: [1],
addRules: [
{
"id": 1,
"priority": 1,
"action": {
"type": "redirect",
"redirect": {
"transform": {
"scheme": "chrome-extension",
"host": chrome.runtime.id,
"path": "/font/muyao.woff2"
}
}
},
"condition": {
"urlFilter": "excalidraw.com/Virgil.woff2",
"resourceTypes": [
"font"
]
}
}
],
});
})
为了统计博客在线人数,使用了MQTT
参考文章
《MicroPython[ESP32]:MQTT消息订阅与发布以及断联通知》
但是上次没设置SSL证书,也就是WebSocket WSS协议和MQTTS协议
本次使用Nginx部署
代码记录
location /wss {
proxy_pass https://0.0.0.0:8084/mqtt;
proxy_http_version 1.1;
proxy_read_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# return 404;
}
location /ws {
proxy_pass http://0.0.0.0:8083/mqtt;
proxy_http_version 1.1;
proxy_read_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# return 404;
}
location /mqtts {
proxy_pass https://0.0.0.0:8883/;
proxy_http_version 1.1;
proxy_read_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# return 404;
}
location /mqtt {
proxy_pass http://0.0.0.0:1883/;
proxy_http_version 1.1;
proxy_read_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# return 404;
}
注意
以下代码表示支持WebSocket协议
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
连接wss和mqtts的时候,端口号为443
连接ws和mqtt的时候,记得带上自定义的path(/ws /mqtt)
测试ESP32-S3+ili9488+ft6x36触控屏的时候
-
看英文论坛解决了480*620横屏的问题(设置rot=0x20)
-
看ft6x36源码,设置inv_x,inv_y,swap_xy参数,解决了显示屏旋转,但是触控区域对应旋转的问题(总以为没有接线成功),在技术群问了也没人会
-
解决了触控接线问题,参考ili9341+xpt2046成功的经验,思考共通之处,以前接线尝试,最终接线成功
一度怀疑硬件触控有问题,或者接线查不到资料接线有问题
最后,都一一解决了
END.