1.前期准备
1-1.硬件
将esp32-s3通过type-c数据线连接到电脑后,双击两下rst键,进入uf2模式
将https://circuitpython.org/board/adafruit_feather_esp32s3_tft/中的uf2文件直接拖到U盘中
等待设备自动重启就好了
出现:
这个盘符就好了。
注意:若操作不当没有进入这个模式,建议还是重新刷一下固件
2.环境配置
我这里使用的是VScode+CircuitPython开发
首先下载相对应的插件CircuitPython
然后打开esp32的盘符
打开code.py的文件后
直接输入
print("Hello, esteemed electronics enthusiast.")
按下ctrl+S后,保存文件就可以自动执行
新手建议可以直接拷贝,感受一下这个板子带来的魅力
下面就是正文开始!!!!!!
任务一
1.下载字库
下载https://circuitpython.org/libraries中的
下载完后找到
adafruit_bitmap_font和adafruit_display_text这两个文件
将这两个文件拖到盘符的lib文件夹中
最后再下载一个pcf文件。https://github.com/carrothu-cn/chinese-bitmap-fonts
下载wenquanyi_13px.pcf文件,直接拖到盘符中就好了
接下来直接再code.py写入代码就好了
2.代码
# 导入必要的库
import board
import digitalio
import displayio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font
# 获取显示设备对象并设置亮度和旋转
display = board.DISPLAY
board.DISPLAY.brightness = 0.35 # 设置显示屏亮度为0.35
board.DISPLAY.rotation = 0 # 设置显示屏旋转为0度
# 加载自定义字体文件
font = bitmap_font.load_font("wenquanyi_13px.pcf")
# 设置文本颜色
color = 0xFF0000 # 这里的颜色为红色
# 初始化文本变量
text_change = 0
# 创建显示组和文本标签
text_group = displayio.Group()
text_area = label.Label(font, text="test", color=color) # 创建文本标签对象
text_area.x = 80 # 设置文本的X坐标
text_area.y = 55 # 设置文本的Y坐标
text_area.line_spacing = 0.8 # 设置文本行间距
text_area.scale = 2 # 设置文本放大倍数
# 设置文本内容
text_area.text = "德捷\n无敌" # 这里设置文本内容
text_group.append(text_area) # 将文本标签添加到显示组中
display.show(text_group) # 在显示设备上显示文本
# 进入主循环,持续显示文本
while True:
pass # 在此处保持循环以持续显示文本
输入后显示:
你已经完成一个了,接着加油
任务二
连接到自己的wifi,注意:只能连接到2.4g,不可以连5g
废话不多说直接上代码
# 导入必要的库
import board
import digitalio
import displayio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font
import os
import ipaddress
import wifi
import socketpool
import time
# 获取显示设备对象并设置亮度和旋转
display = board.DISPLAY
board.DISPLAY.brightness = 1 # 设置显示屏亮度为0.35
board.DISPLAY.rotation = 0 # 设置显示屏旋转为0度
# 加载自定义字体文件
font = bitmap_font.load_font("wenquanyi_13px.pcf")
# 设置文本颜色
color = 0x0000FF # 这里的颜色为蓝色
# 初始化文本变量
text_change = 0
# 创建显示组和文本标签
text_group = displayio.Group()
text_area = label.Label(font, text="test", color=color) # 创建文本标签对象
text_area.x = 30 # 设置文本的X坐标
text_area.y = 50 # 设置文本的Y坐标
text_area.line_spacing = 0.5 # 设置文本行间距
text_area.scale = 2 # 设置文本放大倍数
# 连接到Wi-Fi网络
wifi.radio.connect("小爱同学专用", "czhtpylxd168")
# 设置文本内容为Wi-Fi的IPv4地址
text_area.text = "IP:" + str(wifi.radio.ipv4_address) # 这里设置文本内容为Wi-Fi的IPv4地址
text_group.append(text_area) # 将文本标签添加到显示组中
display.show(text_group) # 在显示设备上显示文本
# 进入主循环,每2秒刷新一次文本
while True:
time.sleep(2) # 暂停2秒以刷新文本内容
成功后就会显示IP地址
创建热点
代码:
# 导入必要的库
import board
import digitalio
import displayio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font
import wifi
import os
import time
# 获取显示设备对象并设置亮度和旋转
display = board.DISPLAY
board.DISPLAY.brightness = 0.35 # 设置显示屏亮度为0.35
board.DISPLAY.rotation = 0 # 设置显示屏旋转为0度
# 加载自定义字体文件
font = bitmap_font.load_font("wenquanyi_13px.pcf")
# 设置文本颜色
color = 0x00FF00 # 这里的颜色为黄色
# 初始化文本变量
text_change = 0
# 创建显示组和文本标签
text_group = displayio.Group()
text_area = label.Label(font, text="test", color=color) # 创建文本标签对象
text_area.x = 10 # 设置文本的X坐标
text_area.y = 55 # 设置文本的Y坐标
text_area.line_spacing = 0.8 # 设置文本行间距
text_area.scale = 2 # 设置文本放大倍数
# 启动Wi-Fi热点
wifi.radio.start_ap('my wifi', '12345678') # 启动Wi-Fi热点,SSID为'my wifi',密码为'12345678'
# 设置文本内容为Wi-Fi热点信息
text_area.text = "WiFi名字:my wifi\n密码:12345678" # 设置文本内容为Wi-Fi热点信息
text_group.append(text_area) # 将文本标签添加到显示组中
display.show(text_group) # 在显示设备上显示文本
# 进入主循环,每2秒刷新一次文本
while True:
time.sleep(2) # 暂停2秒以刷新文本内容
板子显示颜色应该是绿色,我有点红绿色盲,看的不是很清楚
手机可以连接
任务三
Adafruit ESP32-S3 TFT Feather 板载了一颗 NeoPixel LED , Neopixel 是一种智能RGB LED(三色 LED)灯带,由Adafruit Industries开发.
neopixel 不是内置函数需要手动从 adafruit-circuitpython-bundle.zip 里复制导入到 esp32 才能使用。
这个文件
我们编写代码如下:
import time
import board
import neopixel
# 初始化NeoPixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 设置亮度
pixel.brightness = 0.4
# 蓝色
blue = (0, 0, 255)
# 显示颜色
pixel.fill(blue)
while True:
pass
使用boot按键来控制LED灯的亮灭状态和颜色
import time
import board
import neopixel
import touchio
# 寻址 NeoPixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 设置初始亮度
brightness = 0.5
# 初始颜色为白色和蓝色
white = (255, 255, 255)
blue = (48, 211, 155)
# 显示初始颜色(白色)
pixel.fill(white)
# 初始化触摸按键
touch_1 = touchio.TouchIn(board.D5)
touch_2 = touchio.TouchIn(board.D10)
touch_3 = touchio.TouchIn(board.D7)
touch_4 = touchio.TouchIn(board.D11)
while True:
if touch_1.value:
# 当触摸按键 1 被触摸时,显示白色
pixel.fill(white)
if touch_2.value:
# 当触摸按键 2 被触摸时,显示蓝色
pixel.fill(blue)
if touch_3.value:
# 当触摸按键 3 被触摸时,增加亮度
brightness = min(brightness + 0.1, 1.0)
pixel.brightness = brightness
if touch_4.value:
# 当触摸按键 4 被触摸时,减少亮度
brightness = max(brightness - 0.1, 0.0)
pixel.brightness = brightness
time.sleep(0.3) # 延迟以避免触发太快
任务四
我在这里使用的是高德API,使用该API需要先去注册相关账户,申请key。获取到相关json数据后,就从json数据里解析温度和天气信息。
记得在settings.toml中配置文件
在文件写入代码
就修改WiFi的名称和WiFi的密码就可以了
编写代码。
import board
import displayio
import adafruit_imageload
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import os
import rtc
import wifi
import time
import ssl
import socketpool
import adafruit_ntp
import adafruit_requests
# 使用固件自带的屏幕设备,不需要另行初始化屏幕参数
display = board.DISPLAY
# 创建图像组
group = displayio.Group()
# 加载背景图片
image, palette = adafruit_imageload.load("/pic/clock2.png")
# 是否开启透明
palette.make_transparent(1)
# 创建图像布局
grid = displayio.TileGrid(image, pixel_shader=palette)
# 将图像布局添加到图像组,默认在最底层
group.append(grid)
# 显示图像组
display.show(group)
# 加载字体并定义字体颜色为绿色
font = bitmap_font.load_font("/font/sytq_16.pcf")
nun_font = bitmap_font.load_font("/font/DingTalk_ncn_60.pcf")
color = 0x00FF00
# 初始化日期标签并设置位置
date = label.Label(font, text="10月7日", color=color)
date.x = 50
date.y = 30
group.append(date)
# 初始化星期标签并设置位置
week = label.Label(font, text="周六", color=color)
week.x = 150
week.y = 30
group.append(week)
# 初始化时间标签并设置位置
time = label.Label(nun_font, text="19:09", color=color)
time.x = 20
time.y = 80
group.append(time)
# 初始化温度标签并设置位置
temp = label.Label(font, text="27°", color=color)
temp.x = 70
temp.y = 140
group.append(temp)
# 初始化天气标签并设置位置
tempzh = label.Label(font, text="阴", color=color)
tempzh.x = 110
tempzh.y = 140
group.append(tempzh)
# 显示图像组
display.show(group)
# 初始化ntp服务
pool = socketpool.SocketPool(wifi.radio)
ntp = adafruit_ntp.NTP(pool, tz_offset=8, server="ntp.aliyun.com")
# 使用ntp时间更新系统时间
rtc.RTC().datetime = ntp.datetime
# 定义函数以获取星期几的文本
def get_wday(wday):
if wday == 0:
return "周一"
elif wday == 1:
return "周二"
elif wday == 2:
return "周三"
elif wday == 3:
return "周四"
elif wday == 4:
return "周五"
elif wday == 5:
return "周六"
elif wday == 6:
return "周日"
# 初始化requests对象
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
# 获取天气信息的函数
def get_weather():
# 设置城市id
city = "450900"
# 替换为您的高德API密钥
key = "52825392f8832adebc6b8a502abbb5e4"
# 拼接天气链接url
getweather_url = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
# 获取天气json数据
response = requests.get(getweather_url)
json_resp = response.json()
# 关闭连接
response.close()
# 解析json数据,并返回温度和天气信息
for da in json_resp["lives"]:
return da["temperature"], da["weather"]
# 设置一个标志以便在设备启动时获取天气信息
status = "boot"
# 主循环
while True:
# 每秒获取一次本地RTC时间
t = time.localtime()
# 首次启动或者本地RTC时间的分钟属性为0时,更新日期标签和天气标签
if status == "boot" or t.tm_min == 0:
# 更新日期标签
date.text = "%d月%d日" % (t.tm_mon, t.tm_mday)
week.text = get_wday(t.tm_wday)
# 获取天气信息
str_t, str_tz = get_weather()
# 更新温度标签
temp.text = "%s°" % (str_t)
# 更新天气标签
tempzh.text = str_tz
status = "updated"
# 每隔1秒 更新一次时钟标签,用于动态显示
if t.tm_sec % 2 == 0:
time.text = "%
就可以使用了
我的心得体会
参加这次的得捷电子活动,我深度了解到了Adafruit ESP32-S3 TFT Feather的自带高清TFT彩色显示屏和彩色led,连接WiFi和触摸按键。技术群里的网友的强大和浓郁的学习氛围。
其实我本人没有多少的建议和意见,我觉得这次活动,无论是从技术指导,或者是从售后的角度来说,我都觉得挺好的,都是有人可以帮你解决你的问题的。还有一个就是这个活动以后帮你总结好了资源的链接,不会让你去其他地方去找资源了。这是我觉得能让我学的很快的一个原因。我很感谢这个平台可以有这么活动让我去参加,去学习很多电子知识。
视频链接:【得捷电子Follow me第2期】任务一到任务四展示-EEWORLD大学堂
资源链接:【得捷电子Follow me第2期】需要的文件-其它相关资料下载-EEWORLD下载中心
【得捷电子Follow me第2期】任务代码的资源包-其它相关资料下载-EEWORLD下载中心
本帖最后由 haer168 于 2023-10-9 17:52 编辑