作为一名电子爱好者很开心能参加本次FOLLOW ME 第二期活动,同时也是通过B站UP主忙碌的死龙才得以知晓该活动,能学习一下CircuitPython以及没有使用过的ESP32。
促使我参与此次活动的另一原因是当时对HASS系统智能家居的兴趣,希望能从本次活动中学习一些基础。
本项目将包括以下内容:
任务一、完成屏幕的控制,并且能显示中文(屏幕控制,搭配Adafruit ESP32-S3 TFT Feather)
任务二、网络功能使用( 创建热点和连接wifi)
任务三、控制WS2812B(使 用 板载BOOT控制LED灯的三种变化)
任务四、完成通过互联网更新 的万年历时钟,并显示当地的天气信息(以免费 的URL地址获取信息)
一、准 备工 作
简单了解一下ESP32 S-3 feather_TFT开发板的信息,通过EEWORLD大学堂的直播课程讲解人乔楚初步了解了一些硬件信息,通过官方板载链接(https://learn.adafruit.com/adafruit-esp32-s3-tft-feather/pinouts)和引脚信息(https://learn.adafruit.com/assets/114106)了解到Adafruit ESP32-S3 TFT Feather开发板拥有4MB falsh以及2M的内存,还有便捷拉满的USB-C扣(烧录,供电,充电集成了),很方便普通玩家自己调试操作。
本来希望通过自己的电脑VSCODE方案来进行任务的开发,由于本身电脑环境问题和一些未知的情况,转而使用了网页的在线开发工具https://code.circuitpython.org/(使用下来感觉确实方便不少,调试信息反馈够用)。
首先还是按照官方的步骤来烧录固件双击rst按钮进入U盘烧入模式,具体参考链接(https://circuitpython.org/board/adafruit_feather_esp32s3_tft/)
烧录好固件后,显示按照直播内容收悉了工程的结构以及必要的库函数(https://circuitpython.org/libraries)官方库。
二、任务部分
1.完成屏幕的控制,并且能显示中文
根据直播内容知晓,显示中文, 需要把TFF字库转换为PBF或者PCF,可以前往(https://fontforge.org/)下载FONTFORGE
我这里是自己从网络找的字体,大家可以用直播学习资料里的,占用空间大的可以删除不需要的,再转换城PCF就可以了
建议使用官方资料文件给予的PCF字库,自己找字库和下载过于麻烦,还有美观性也是一大问题。
import board
import displayio #内置displayio库
from adafruit_bitmap_font import bitmap_font #导入label
from adafruit_display_text import label #导入label
#创建内容-显示
#屏幕初始化
display = board.DISPLAY
#group = displayio.Group(scale=1,x=0,y=0)
#显示组
text_group = displayio.Group()
font = bitmap_font.load_font("/fonts/jiangxizhuokai-Regular-20.pcf") #字库文件位置
text = "熬夜真秃头" #显示内容
#set the of type and color__output
text_area = label.Label(font, text=text, color=0xfffccc,x=0,y=30,line_spacing=0.5,scale=2)
text_group.append(text_area)
display.show(text_group)
while True:
pass
2.网络功能使用(创建热点和连接wifi)
该任务wifi的链接通过工程里的settings.toml直接添加自己的wifi SSID和PASSWORD即可进入局域网。
如需要进行输出,根据任务一添加几行代码即可
# connect wifi
wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
print(f"My IP address: {wifi.radio.ipv4_address}")
接下来的热点创建和连接也是很简单
#wifi.radio.start_ap(ssid='你的ID', password='你的密码')
3.任务控制WS2812B(使 用 板载BOOT控制LED灯的三种变化)
因为当时的周围没有可用按钮,直接使用了板载的BOOT按键来操作
也就是使用自带的BOOT初始化它的一些pin等(低电平,需要拉高),通过数组赋予颜色,做一个3次判断按键的死循环即可。
import time
import board
import digitalio
import neopixel
import random
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 初始化
button = digitalio.DigitalInOut(board.BOOT0)# 按钮对象
button.direction = digitalio.Direction.INPUT# 设置按钮引脚为输入
button.pull = digitalio.Pull.UP# 设置按钮引脚为上拉
# R G B数组颜色定义
color_RGB = [
(255, 0, 0),
(0, 255, 0),
(0, 0, 255)
]
t = 0
while True:
if not button.value:
# 切换颜色
if t == len(color_RGB) - 1:
t = 0
else:
t = t+1
# pixel.fill(random.choice(colorArr)) # 从colorArr中随机选择一个颜色
pixel.fill(color_RGB[t])
time.sleep(0.5)
else:
# 按键未按下时
pass
通过按BOOT来循环LED的RGB依次亮。
4.完成通过互联网更新的万年历时钟,并显示当地的天气信息(以免费的URL地址获取信息)
因为周边环境不允许,当时选择的是日历&时钟时钟任务,很方便的使用搭载的Adafruit ESP32-S3 TFT Feather屏幕。
这里当时希望通过高德地图的API来获取,时间不够麻烦了,借鉴了群里的兄弟参考,使用免费的连接获取天气信息(https://www.sojson.com/api/weather.html)天气代码需要自选查阅本地的code
解析获取到信息,自行加上各种天气抢矿,譬如AQI,海拔,或者天气软件提供的小TIPS,最后输出。
由于自己选择的题库不太好看,影响到实际观感。可进一步细化结构组成,添加背景图片,做成好看一些的画面。
这是本地获取的数据信息
三、 活动体验(意见与建议)
首先,作为一名电子爱好者很开心能参加本次得捷FOLLOW ME 第二期活动,同时也是通过B站UP主忙碌的死龙才得以知晓该活动,能学习一下CircuitPython以及没有使用过的ESP32。也感谢EEWORLD给予的课程资源和活动资源。
CircuitPython的使用情况感受就是,仅仅使用库即可,简便行大大强于STM32的开发程度。
此次活动使用该开发板遇到的问题是,任务3,4的情况下明显感觉发热量的提高。
四、资源下载
代码等待审核
|