[作品提交] 【得捷电子Follow me第2期】+任务1:控制屏幕显示中文

EPTmachine   2023-8-14 12:21 楼主

Follow ME第2季使用到的开发板为Adafruit ESP32-S3 TFT Feather,板上载有TFT显示屏、NEOPixel指示灯以及电源管理芯片等外设,配合ESP32自身的Wifi和蓝牙功能,能够实现联网、获取网络数据并在显示屏上显示。

1 开发环境搭建

在Adafruit ESP32-S3 TFT Feather上进行开发,开发环境的搭建包括两部分,一是IDE的安装,这里选择Mu Editor,从官网下载安装包,安装选项选择默认即可。

安装完成后,选择开发板的运行模式为CircutPython。

122003h0gh700qs2ikfxhf.png

在开发板上运行CircutPython需要烧写bootloader和CircutPython固件。其中bootloader固件只需要烧写一次即可,CircutPython固件可以选择不同版本的固件进行烧写。Bootloader固件烧写的方法通过esp flash tool下载,烧写前需要按组boot键,再按下rst键,最后松开boot键,进入Bootloader烧写模式。

122003i0a07np970mzh70a.png

完成上述操作后上电,就可以得到如下的画面:

122003fpg65ye0pye2se0b.jpg

此时,电脑上也会出现一个FTHRS3BOOT的虚拟U盘,从Adafruit官网下载该开发板对应的CircutPython UF2固件,将下载好的固件放入虚拟U盘中,会自动将固件烧写到芯片中。

烧写完成后会运行CircutPython,同时电脑上会出名为CIRCUITPY的USB设备,编写好的代码和库文件都存放在这里。其中的code.py是circutpython主程序的入口,其中的内容发生变化时,系统会复位并执行其中的代码。

122003gwwoit3wbgg3iwpx.png

2 控制屏幕显示中文

在屏幕上显示中文,需要屏幕的驱动、中文字库以及字符绘制驱动,其中屏幕的驱动在CircutPython固件中已经包含,可以通过REPL中输入help(‘modules’)查看已有的固件库。

122003kjkzrz0kxn50nck5.png

中文字库由于需要占用较大的内存空间,使用carrothu-cn/chinese-bitmap-fonts (github.com)其中的一个字体(wenquanyi_10pt.pcf)。将字体文件存储到CIRCUTPY设备的lib文件夹下。就可以在程序中导入并使用该字符集了。

另外还需在lib文件夹下添加额外的adafruit_display_text库中的label, wrap_text_to_lines模块、adafruit_bitmap_font中的bitmap_font模块。这样就可以轻松地在显示屏上显示中文了。

CIRCUTPY设备上的lib文件夹中的内容如下。

122003y3nttdegm6c3fl2f.png

开发板的BOOT按键可以作为按键输入来控制程序的运行,按键未按下时为True,通过检测其上升沿来调节显示文字的内容,显示中文的程序以及相应的注释如下。

# 在这里写上你的代码 :-)
#导入使用到的lib
import board
import digitalio
import displayio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font

#初始化按键相关变量
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
button_buf = button.value

#初始化显示屏参数
display = board.DISPLAY
board.DISPLAY.brightness = 0.35
board.DISPLAY.rotation = 0

font = bitmap_font.load_font("lib\wenquanyi_10pt.pcf")
color = 0xFF0000

text_change = 0

#设定文本显示范围
text_group = displayio.Group()
text_area = label.Label(font, text="Follow ME2 ", color=color)
text_area.x = 2
text_area.y = 10
text_area.line_spacing = 0.8
text_area.scale = 1

#启动屏幕显示
text_group.append(text_area)
display.show(text_group)
while True:
    # 检测按键边沿的上升沿,并改变文本切换控制变量
    if ((button_buf != button.value) and (button.value==False)) :
        text_change = text_change + 1
    button_buf = button.value
    
    if (text_change==1):
        text_area.text="EEWorld Forum社区\n"
    elif (text_change==2):
        text_area.text="ESP32 S3 Demo程序\n"
    elif (text_change==3):
        text_area.text="Feather Series产品\n"
    elif (text_change==4):
        text_change=1
        

程序的运行效果如视频所示。

任务一演示

 

3 问题

122003abnnzc421c2jr89n.png

由于circuitpython固件的名字长度长,如果不注意可能会下载错固件型号,我在下载的时候就出现了这样的问题,在S3界面下载了S2的固件。文件名只差了一个字母,得到的结果则完全不同。大家做任务的时候一定要注意这个问题。

回复评论 (2)

主要问题还是中文字库由于需要占用较大的内存空间,,,

点赞  2023-8-15 07:46
界面非常好看呀,在哪里搞到的?感谢分享!
点赞  2023-8-20 21:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复