【得捷电子Follow me第2期】 汇总提交帖:上手Adafruit ESP32-S3 TFT Feather
[复制链接]
首先感谢得捷电子和EEworld组织的Follow me活动,让我体验了Adafruit ESP32-S3 TFT Feather开发板。我使用的是Mac系统,编程工具为VSCode。看了一下论坛里大家的作品,小抄了一波作业,自己改了改完成了以下四个任务。
第一部分
https://training.eeworld.com.cn/video/37987
第二部分
前期工作:
到这里下载固件 https://circuitpython.org/board/adafruit_feather_esp32s3_tft/并解压,注意左边的语言选择,我直接选的英语
然后把板子连到电脑上,快速按两下RST,屏幕就会出现让把固件放U盘里的提示,把之前解压好的固件放进去重启就可以了
然后电脑上就会出现CIRCUITPY的这个U盘,进去后打开settings.toml,添加好网络信息
CIRCUITPY_WIFI_SSID = "2.4G WIFI名称"
CIRCUITPY_WIFI_PASSWORD = "WIFI密码"
CIRCUITPY_WEB_API_PASSWORD = "WEB页面密码"
CIRCUITPY_WEB_API_PORT = 80
接下来,屏幕出现ip地址后用ip+端口就能访问CIRCUITPY的调试网页了,也可以直接使用VSCODE,打开VSCODE拓展页面,搜CIRCUITPY然后安装后,将项目文件夹直接设置为那个U盘,右下角就可以打开串口监视器了,具体可以看得捷的官方视频教程
必做任务1:控制屏幕显示中文
介绍:
本任务旨在演示如何在嵌入式系统中控制显示屏以显示中文文本。在这个任务中使用 CircuitPython 和 Adafruit 的库来控制显示屏,将中文文本显示在屏幕上。
主要代码片段及说明:
import board
from adafruit_display_text import bitmap_label
from adafruit_bitmap_font import bitmap_font
# 加载中文字体
font = bitmap_font.load_font("/font/sytq_16.pcf")
color = 0x66ccff
# 创建中文文本
text = "10月8日\n周日"
# 创建文本标签
text_box = bitmap_label.Label(font, text=text, scale=2)
text_box.x = 10
text_box.y = 30
text_box.color = color
board.DISPLAY.show(text_box)
while True:
pass
以上代码演示了如何使用 adafruit_display_text 和 adafruit_bitmap_font 库来加载中文字体,并在显示屏上创建文本标签。文本标签包括了中文文本 "10月8日\n周日",并设置了字体大小、颜色以及位置。屏幕上将显示该中文文本。
心得体会建议:
在嵌入式系统中显示中文文本需要合适的字体支持。在这个示例中,我们使用了 bitmap_font.load_font() 来加载一个中文字体文件。因为本人使用的是mac系统,安装一堆东西太麻烦,所以直接使用了大佬做好的字体。
必做任务2:网络功能使用
介绍:
本任务旨在演示如何在嵌入式系统中使用网络功能,连接到 Wi-Fi 并显示网络连接状态和 IP 地址。在这个任务中,我们使用 CircuitPython 和 Adafruit 的库来控制 Wi-Fi 模块,显示连接状态和 IP 地址。
主要代码片段及说明:
import board
from adafruit_display_text import bitmap_label
from adafruit_bitmap_font import bitmap_font
import os
import wifi
import time
text=""
font = bitmap_font.load_font("/font/OPSans_16.pcf")
color = 0x66ccff
text_box = bitmap_label.Label(font, text=text)
text_box.x = 10
text_box.y = 30
text_box.color = color
board.DISPLAY.show(text_box)
# 从环境变量获取 Wi-Fi SSID 和密码
ssid = os.getenv("CIRCUITPY_WIFI_SSID")
password = os.getenv("CIRCUITPY_WIFI_PASSWORD")
# 显示连接中状态
text_box.text = "Connecting..."
wifi.radio.connect(ssid, password)
time.sleep(1)
# 显示连接状态和 IP 地址
text_box.text = "Connected" + "\nIP:" + str(wifi.radio.ipv4_address)
while True:
pass
功能展示及说明:
以上演示了如何使用 wifi 库连接到 Wi-Fi 网络,并在显示屏上显示连接状态和获取的 IP 地址。通过环境变量获取 Wi-Fi SSID 和密码。然后,显示 "Connecting..." 表示正在连接,连接成功后显示 "Connected" 和获取的 IP 地址。
创建AP整个原理和连WIFI差不多,就不直接演示了,代码在此
import board
from adafruit_display_text import bitmap_label
from adafruit_bitmap_font import bitmap_font
import os
import wifi
import time
text=""
font = bitmap_font.load_font("/font/OPSans_16.pcf")
color = 0x66ccff
text_box = bitmap_label.Label(font, text=text)
text_box.x = 10
text_box.y = 30
text_box.color = color
board.DISPLAY.show(text_box)
# 创建AP
AP_SSID='Esp32'
AP_PWD='Esp32'
wifi.radio.start_ap(AP_SSID, 'AP_PWD')
time.sleep(1)
#屏幕显示创建的热点名称和密码
text_box.text = AP_SSID + "\n" +AP_PWD
while True:
pass
必做任务3:控制WS2812B
本任务旨在演示如何在嵌入式系统中控制 WS2812B LED,通过按下按钮来切换 LED 的颜色。在这个任务中,我们使用 CircuitPython 和 Adafruit 的库来控制 WS2812B LED,并通过按钮按下来切换 LED 的颜色,同时屏幕也会显示led的颜色。
主要代码片段及说明:
初始化显示屏
display = board.DISPLAY
group = displayio.Group()
rect = Rect(0, 0, display.width, display.height, fill=BLACK)
group.append(rect)
display.show(group)
初始化 WS2812B LED
pixels = neopixel.NeoPixel(
board.NEOPIXEL, 1, brightness=0.2, auto_write=False, pixel_order=neopixel.GRB
)
初始化按钮
btn = DigitalInOut(board.BOOT0)
btn.direction = Direction.INPUT
btn.pull = Pull.UP
led_color = 0
创建 LED 动画对象
blink = Blink(pixels, speed=0.5, color=BLACK)
while True:
if not btn.value:
按钮按下时切换 LED 颜色
if led_color % 5 == 0:
blink = Blink(pixels, speed=0.5, color=JADE)
rect.fill = JADE
display.refresh()
elif led_color % 5 == 1:
blink = Blink(pixels, speed=0.5, color=ORANGE)
rect.fill = ORANGE
display.refresh()
elif led_color % 5 == 2:
blink = Blink(pixels, speed=0.5, color=GOLD)
rect.fill = GOLD
display.refresh()
elif led_color % 5 == 3:
blink = Blink(pixels, speed=0.5, color=OLD_LACE)
rect.fill = OLD_LACE
display.refresh()
elif led_color % 5 == 4:
blink = Blink(pixels, speed=0.5, color=BLACK)
rect.fill = BLACK
display.refresh()
led_color += 1
else:
pass
time.sleep(0.4)
blink.animate()
功能展示及说明:
以上演示了如何使用 neopixel 库控制 WS2812B LED,通过按下按钮来切换 LED 的颜色。LED 的颜色可以循环切换为 JADE、ORANGE、GOLD、OLD_LACE 和 BLACK。屏幕上也会相应地显示相同颜色。
心得体会建议:
这个任务演示了如何在嵌入式系统中控制 WS2812B LED,并通过按钮按下来切换 LED 的颜色。这是一个常见的嵌入式应用场景,可以用于创建交互式的 LED 灯效或指示器。
必做任务4:日历&时钟
介绍:
本任务旨在演示如何在嵌入式系统中创建一个简单的日历和时钟应用。通过连接到 Wi-Fi 获取实时时间和天气信息,同时在显示屏上显示日期、星期、时间和天气情况。
主要代码片段及说明:
连接到 wifi
print("Connecting to", ssid)
wifi.radio.connect(ssid, password)
print("Connected to", ssid)
使用adafruit_ntp.NTP函数初始化ntp服务
pool = socketpool.SocketPool(wifi.radio)
ntp = adafruit_ntp.NTP(pool, tz_offset=8, server="ntp.aliyun.com")
使用ntp时间更新系统时间
rtc.RTC().datetime = ntp.datetime
初始化requests对象
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
def get_weather():
拼接天气API链接
getweather_url = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
获取天气json数据,解析并返回温度和天气信息
response = requests.get(getweather_url)
json_resp = response.json()
for da in json_resp["lives"]:
#print(da["temperature"])
return da["temperature"], da["weather"]
功能展示及说明:
以上代码演示了如何创建一个日历和时钟应用,通过连接到 Wi-Fi 获取实时时间和天气信息,并在显示屏上实时显示日期、星期、时间和天气情况。
第三部分:源代码
https://download.eeworld.com.cn/detail/eew_nkXjf8/629529
心得体会
很高兴能够参加DigiKey联合EEWORLD发起的Follow Me活动,这次活动提供的adafruit ESP32-S3 TFT Feather开发板十分精致,性能和拓展性也非常不错,用来自己DIY各种项目还是很适合的。这个活动提供了一个很好的机会,让开发者能够深入了解并尝试Adafruit ESP32-S3 TFT Feather开发板。这种免费使用的机会让我能够在实际项目中测试该开发板的性能,这对于个人DIY玩家来说是非常宝贵的。这个板子搭载了ESP32-S3芯片,支持Wi-Fi和蓝牙功能,而且还具有TFT显示屏,这使得它非常适合物联网和嵌入式系统开发。开发板上的GPIO引脚和外部接口也非常丰富,这对于与其他传感器和设备进行连接非常方便。我也有一些建议和意见。首先,我觉得活动的资源支持可以进一步改善。提供更多的中文教程、示例代码和文档将有助于新手更快地入门并充分利用这个开发板的功能。此外,直播回放没有时间点提示有一些遗憾,例如想了解一下字库具体的制作方式,还得自己从头到尾拖进度条,这感觉不太方便,可以像B站一样加入一些章节提示,以便能够快速定位感兴趣的章节。
总的来说,参加Follow me是一次非常有价值的体验。我期待着看到这个活动的不断发展,以使更多的用户能够受益,同时也期待看到这个开发板在物联网和嵌入式开发领域的广泛应用。本期也是我第一次参加这个活动,当时没太理解规则,只订购了板子没买一下推荐元器件有点遗憾,如果有机会参加第三期的话我会尽量把推荐元件都买了,增加一些自己DIY的空间,做一些更有趣的东西。
|