Follow ME第2季使用到的开发板为Adafruit ESP32-S3 TFT Feather,板上载有TFT显示屏、NEOPixel指示灯以及电源管理芯片等外设,配合ESP32自身的Wifi和蓝牙功能,能够实现联网、获取网络数据并在显示屏上显示。
在Adafruit ESP32-S3 TFT Feather上进行开发,开发环境的搭建包括两部分,一是IDE的安装,这里选择Mu Editor,从官网下载安装包,安装选项选择默认即可。
安装完成后,选择开发板的运行模式为CircutPython。
在开发板上运行CircutPython需要烧写bootloader和CircutPython固件。其中bootloader固件只需要烧写一次即可,CircutPython固件可以选择不同版本的固件进行烧写。Bootloader固件烧写的方法通过esp flash tool下载,烧写前需要按组boot键,再按下rst键,最后松开boot键,进入Bootloader烧写模式。
完成上述操作后上电,就可以得到如下的画面:
此时,电脑上也会出现一个FTHRS3BOOT的虚拟U盘,从Adafruit官网下载该开发板对应的CircutPython UF2固件,将下载好的固件放入虚拟U盘中,会自动将固件烧写到芯片中。
烧写完成后会运行CircutPython,同时电脑上会出名为CIRCUITPY的USB设备,编写好的代码和库文件都存放在这里。其中的code.py是circutpython主程序的入口,其中的内容发生变化时,系统会复位并执行其中的代码。
在屏幕上显示中文,需要屏幕的驱动、中文字库以及字符绘制驱动,其中屏幕的驱动在CircutPython固件中已经包含,可以通过REPL中输入help(‘modules’)查看已有的固件库。
中文字库由于需要占用较大的内存空间,使用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文件夹中的内容如下。
开发板的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
程序的运行效果如视频所示。
由于circuitpython固件的名字长度长,如果不注意可能会下载错固件型号,我在下载的时候就出现了这样的问题,在S3界面下载了S2的固件。文件名只差了一个字母,得到的结果则完全不同。大家做任务的时候一定要注意这个问题。