任务汇报视频
https://training.eeworld.com.cn/video/38391
写在最前,本人是大一的一名学生,在刷B站时看到了龙哥的视频,对此颇有兴趣,等板子等了2个月,在10月初,板子终于到了,后来断断续续也把必做任务都完成了,选做任务由于学业太过繁忙,没有做。也感谢EEworld社区和得捷电子给我的这个机会。板子确实非常漂亮,非常精致。
任务1:控制屏幕显示中文(必做任务)
完成屏幕的控制,并且能显示中文
搭配器件:Adafruit ESP32-S3 TFT Feather
任务一前期准备工作:
- 乐鑫烧录工具
- 厂家的固件Adafruit_Feather_ESP32S3_TFT_FactoryTest.bi
- circuitpython固件
- IDE(我用的是Thonny)
- 字体文件
下面是具体步骤:
- 将板子连接到电脑。初次连接板子上会显示原厂自带的界面,上面有电池电压,功率等信息
- 接下去连按两下ret按键,进入DFU状态
- 然后电脑上会弹出名称为FTHRS3BOOT的U盘
- 将提前下载好的circuitpython固件拖入该U盘,只要文件拷贝好就是烧录成功了,不需要其他的软件或者其他操作,较我玩过的其他板子都更加方便。
- 因为我们需要显示中文,所以我们需要调用两个库文件,分别是adafruit_display_text, adafruit_bitmap_font,将它们拖动到FTHRS3BOOT下的lib文件夹
- 接下去在FTHRS3BOOT中新建一个文件夹,命名为fonts,将下载好的字体文件拖入,注意大小,不能用占用空间太大的字体。
- 接下去就是编写程序了,程序非常简单,考验人的就是要慢慢调整了,调整字体,位置,颜色等等,以达到最佳效果。
import board
from adafruit_display_text import bitmap_label //导入库文件
import terminalio
from adafruit_bitmap_font import bitmap_font
font = bitmap_font.load_font("fonts\wenquanyi_10pt.pcf")//定义字体
color = 0x11ff11//定义颜色
text2 = "浙江工商大学"//文本内容
scale = 2//定义字体大小
text_area2 = bitmap_label.Label(font,text=text2,scale=scale)
text_area2.x = 10//控制文本的位置
text_area2.y = 30
board.DISPLAY.show(text_area2)
while True:
pass
下附各用到的文件
任务2:网络功能使用
因为校园网是需要学校账号认证,不是简单的ssid和密码就能连上的,所以这期是在家里完成的。
任务2:网络功能使用(必做任务)
完成网络功能的使用,能够创建热点和连接到WiFi
搭配器件:Adafruit ESP32-S3 TFT Feather
在任务一的基础上,我们就没有需要前期准备的了,只要敲代码即可
以下为具体步骤:
一:创建热点
我们只需要导人os和wifi这两个库,再写下wifi.radio.start_ap的语句即可
直接上代码
import os
import wifi
wifi.radio.start_ap('ESP', '00000000')
对,非常之简洁,这样子热点就启动完毕了,其中最后一行代码的括号内前面部分是热点名称,后面部分是热点密码,大家可以自行修改
二:连接WiFi
由于这个也是一行代码就可以弄完,我决定将任务二与任务一结合起来,使得当板子连接好WiFi时能够显示一些文字
也是导人以上的库
下面是代码
import board //第一个任务所需要的库
import terminalio
from adafruit_display_text import bitmap_label
from adafruit_bitmap_font import bitmap_font
import os //第二个任务所需要的库
import wifi
font = bitmap_font.load_font("wenquanyi_10pt.pcf")
color = 0x00ff00
wifi.radio.connect('WiFi名称', 'WiFi密码') //你家的Wi-Fi名称和密码,可别真写这个进去
txt= "Wi-Fi已成功连接\n 重生之\n 我变成了ESP32 "
scale = 2 //下面的都是用来控制字体显示的具体数值
text_area = bitmap_label.Label(font,text=txt,scale=scale)
text_area.x = 8
text_area.y = 10
while True:
pass
可以看到已经成功连接了
任务3:控制WS2812B
这个任务是在是10月23日晚自习时完成的
【得捷电子Follow me第2期】任务3:控制WS2812B
该任务主要是要用按键来控制板子上的灯珠变化,其实灯珠只有那一个,按键有两个,但其中一个是rst,所以到最后也就是一个按键控制一个灯珠
一个灯也可以玩出许多效果,例如通过延时函数来控制闪烁,用代码控制颜色等等。
在该任务中,我导入了官方的neopixel库和adafruit_led_animation库,主要用来控制灯的亮灭和亮的时间长短
在我以为万事大吉时,程序没有跑通,查阅了大佬的资料后,才发现我没有读取按键和控制io口
大意了
所以我们还要取调用库digitalio和库board
以下就是具体的代码,我把我的理解都写在注释了,希望大家斧正。
import board //检测按键的库
import digitalio
import time //控灯的库
import neopixel
from adafruit_display_text import label //任务一的文字显示库(老常客了)
from adafruit_bitmap_font import bitmap_font
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.8 //控制亮度
button = digitalio.DigitalInOut(board.BUTTON) //初始化按键对象
button.direction = digitalio.Direction.INPUT //设置按键为输入
button.pull = digitalio.Pull.UP //将按键设置为上拉
but_in=3
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
display = board.DISPLAY
font_file = "fonts/wenquanyi_10pt.pcf" //加载任务一所用字体
font = bitmap_font.load_font(font_file)
def button(): //定义了一个按键函数
global but_in
if(not button.value): //按键没按下执行的操作
but_in=but_in+1
if (but_in>3): //按键没按下执行的操作
but_in=0
def dispinfo(str): //又定义了一个灯光函数
if(str=="RED"):
color = 0xFF0000
text_area = label.Label(font, text="红色", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
display.show(text_area)
pixel.fill(color)
elif(str=="GREEN"):
color = 0x00FF00
text_area = label.Label(font, text="绿色", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
pixel.fill(color)
elif(str=="BLUE"):
color = 0x0000FF
text_area = label.Label(font, text="蓝色", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
pixel.fill(color)
else :
color = 0xFFFFFF
text_area = label.Label(font, text="按下按键以开始", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
pixel.fill(color)
//分别输出红绿蓝
display.show(text_area)
while True: //最终输出的执行语句
colbutton()
if(but_in==0):
dispinfo("RED")
elif(but_in==1):
dispinfo("BLUE")
elif(but_in==2):
dispinfo("GREEN")
else:
dispinfo("START")
time.sleep(0.5) //延时
任务4:分任务1:日历&时钟
一周之后,这个任务四的分任务一确实较前几个比较难,最近几个晚自习一直在学习相关方面的知识。
发现实现天气的api调用还是比较麻烦的,看了大佬的示例,了解了可以用高德,心知天气的api,不过这些都要注册获取key,比较麻烦
我们可以用这个网站提供的免费api接口
https://www.sojson.com/api/weather.html
这其中又要我们来获取我们所在城市的城市代码
在这里给大家提供对应表
提取码:
我们get到返回到返回的json字符串后,还要进一步进行解析,前面加上各种名称,如空气质量等等,内容才能被正常阅读
这是下面的具体代码
再多说一句,随着任务的递进,我们所要导入的库文件也越来越多,然而板子的内存实在是有限,2mb,之前的字体文件太大了,导致连库都拖不进去
只好重新换了一个字体,看来还是要自己搞字体啊,用大佬们做好的内存不容易控制住,顾此失彼了。
总的来说,这是得捷电子Follow me第二期汇总贴的内容,包括四个任务:控制屏幕显示中文、网络功能使用、控制WS2812B和日历&时钟。在每个任务中,我都详细介绍了前期准备工作和具体步骤。其中,任务一需要调用两个库文件来控制屏幕显示中文,任务二需要创建热点和连接到WiFi,任务三需要控制WS2812B的灯珠变化,任务四需要获取城市代码以实现天气API调用。
作为电子信息专业的学生,这种活动既是一种激励,又是一种奖励,毕竟在课堂上可学不到什么东西,还是得自己学,自己动手实操,自己感悟。以下是我各个分任务的链接,再次感谢EEworld和得捷电子举办的本次活动。
任务一:https://bbs.eeworld.com.cn/thread-1260113-1-1.html
任务二;https://bbs.eeworld.com.cn/thread-1260316-1-1.html
任务三:https://bbs.eeworld.com.cn/thread-1260503-1-1.html
任务四:https://bbs.eeworld.com.cn/thread-1261095-1-1.html
任务二补录视频 https://training.eeworld.com.cn/video/38558
任务四补录视频 https://training.eeworld.com.cn/video/38559
代码咋还在审核捏😂
审核通过了贴评论区
代码包: https://download.eeworld.com.cn/detail/Ykern/629871
|