MicroPython[ESP32]:ESP32-S3 N16R8+MicroPython+Lvgl(ft6x36+横屏触控)

NO.1
ESP32-S3

ESP32-S3已刷入MicroPython+Lvgl

MicroPython[ESP32]:编译ESP32-S3  (SPIRAM Octal)16外8内 固件和ESP32 LVGL

修正一下,文章提到的lvgl s3只支持8外存8内存,不正确,因为昨天构建并使用了3种固件

  1. 一个官方MicroPython:ESP32-S3 N8R8的固件

  2. 一个自编译MicroPython:ESP32-S3 N16R8的固件

  3. 一个自编译MicroPython+Lvgl8:ESP32的固件

  4. 一个网上找的的MicroPython+Lvgl9:ESP32-S3 N16R8的固件

今天屏幕到后,测试了显示驱动和触控驱动的正确性,同时也再次确认了内存的使用率

确实是支持ESP32-S3 N16R8的固件(MicroPython+Lvgl)

此图片的alt属性为空;文件名为image-786.png

查看外存(在控制台)

import esp
esp.flash_size()/1024/1024

查看内存(在控制台)

import micropytho
micropython.mem_info()
NO.2
屏幕模块

这次的屏幕是

3.5寸TFT液晶显示屏模块串口SPI驱动ILI9488带电容触摸RGB320*480

此图片的alt属性为空;文件名为image-787.png

x宝的卖家说显示驱动ILI9488和触控驱动ft6x36是和板子固定的

所以看起来长得一样的板子,可能用的驱动不同,比如我之前2.8 TTF ili9341+xpt2046

3.5寸TFT液晶显示屏的背面

此图片的alt属性为空;文件名为image-788.png

NO.3
接线说明

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)
NO.4
计划说明

ESP32-S3+MicroPython+Lvgl

ili9488+ft6x36

实际效果,横屏展示+触控点击

此图片的alt属性为空;文件名为image-789-1024x576.png

由于屏幕换为了3.5寸更大的,所以之前打印的3D外壳也需要修改尺寸,重新设置

此图片的alt属性为空;文件名为image-790-1024x555.png

显示尺寸的更改意味着可以容纳更多的信息组件展示

初步的设计

  1. 展示日期,时间,节日,天气(文字+图表)

  2. 电池电量(如果带电池的话)

  3. 哔哩哔哩粉丝计数器(其他平台待定)

  4. 博客网站实时在线人数(谷歌,百度,必应,不限于搜索引擎)

  5. 备忘录,消息通知,番茄钟(因为有触控),日历,待办事项

此图片的alt属性为空;文件名为image-791.png

目前ESP32-S3 R16N8的顶配,后面再试试屏幕图画+wifi+mqtt会不会卡机重启,理论上是没有问题的

为了画上面的图,试用了excalidraw

为了在excalidraw加上手写字体-沐瑶手写体,写了一个Chrome插件

此图片的alt属性为空;文件名为image-792-1024x416.png

使用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"
                    ]
                }
            }
        ],
    });
})
NO.5
MQTT NGINX SSL

为了统计博客在线人数,使用了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)

NO.6
Tips

测试ESP32-S3+ili9488+ft6x36触控屏的时候

  1. 看英文论坛解决了480*620横屏的问题(设置rot=0x20)

  2. 看ft6x36源码,设置inv_x,inv_y,swap_xy参数,解决了显示屏旋转,但是触控区域对应旋转的问题(总以为没有接线成功),在技术群问了也没人会

  3. 解决了触控接线问题,参考ili9341+xpt2046成功的经验,思考共通之处,以前接线尝试,最终接线成功

此图片的alt属性为空;文件名为image-793.png

一度怀疑硬件触控有问题,或者接线查不到资料接线有问题

最后,都一一解决了

END.