【得捷电子Follow me第2期】+任务汇总报告
[复制链接]
本帖最后由 boooil 于 2023-10-25 20:40 编辑
任务视频链接
任务总结报告
任务1:控制屏幕显示中文
在Circuit官网下载Feather ESP32-S3 TFT开发板的适配固件,格式为UF2。
将开发板接入电脑供电,按两次板子上的“RST”复位按钮,准备进行烧录。待板子上显示待烧录画面时,将下载的uf2固件文件拖入开发板文件夹中,完成烧录。
完成烧录后的代码文件树如图。
其中code.py是板子默认执行的源代码文件,setting.toml是配置文件,用于配置wifi信息等。lib文件中存放代码中需要依赖的第三方python库。font/pic是用户自行创建的用于存放自定义资源的文件夹。
从 下载字体文件,导入font文件夹。
执行如下代码:
import board
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
display = board.DISPLAY
font = bitmap_font.load_font("/font/wenquanyi_9pt.pcf")
# 创建显示组和文本标签
text_group = displayio.Group()
color = 0xFF0000
text_area = label.Label(font, text="test", color=color) # 创建文本标签对象
text_area.x = 50 # 设置文本的X坐标
text_area.y = 55 # 设置文本的Y坐标
text_area.line_spacing = 0.8 # 设置文本行间距
text_area.scale = 2 # 设置文本放大倍数
# 设置文本内容
text_area.text = "任务一中文显示" # 这里设置文本内容
text_group.append(text_area) # 将文本标签添加到显示组中
display.show(text_group) # 在显示设备上显示文本
while True:
pass
任务2:网络功能使用
在setting.toml中配置wifi名称和密码。
可以看到屏幕左上角显示ip地址,wifi连接成功。
创建热点
# 启动Wi-Fi热点
wifi.radio.start_ap('Feather WiFi', '12345678') # 启动Wi-Fi热点,SSID为'Feather WiFi',密码为'12345678'
任务3:控制WS2812B
Adafruit ESP32-S3 TFT Feather 板载了一颗 NeoPixel LED,通过板子上的boot按键来控制led灯的亮灭。
# 导入board内置库
import board
# 导入time内置库
import time
# 从digitalio内置库导入DigitalInOut, Direction, Pull
from digitalio import DigitalInOut, Direction, Pull
# 导入neopixel内置库
import neopixel
# 从adafruit_led_animation.animation.blink库导入Blink
from adafruit_led_animation.animation.blink import Blink
# 从adafruit_led_animation.color库导入五种颜色定义
from adafruit_led_animation.color import JADE, BLACK, ORANGE, GOLD, OLD_LACE
#初始化像素灯引脚
pixel_pin = board.NEOPIXEL
# 设置像素灯数量,这样分开写方便以后修改代码,例如外接ws2812灯带或者矩阵
num_pixels = 1
# 初始化像素灯
pixels = neopixel.NeoPixel(
pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=neopixel.GRB
)
# 初始化blink动态效果
blink = Blink(pixels, speed=0.5, color=BLACK)
# 初始化btn按钮对象
btn = DigitalInOut(board.BOOT0)
# 设置btn引脚为输入
btn.direction = Direction.INPUT
# 设置btn引脚为上拉
btn.pull = Pull.UP
# 定义led_color变量,用于五种颜色切换
led_color = 0
# 进入while循环
while True:
# 判断按键是否按下
if not btn.value:
# 若按键按下,则对led_color求余数,根据余数指定led颜色
if led_color % 5 == 0:
blink = Blink(pixels, speed=0.5, color=JADE)
print("LED is JADE")
elif led_color % 5 == 1:
blink = Blink(pixels, speed=0.5, color=ORANGE)
print("LED is ORANGE")
elif led_color % 5 == 2:
blink = Blink(pixels, speed=0.5, color=GOLD)
print("LED is GOLD")
elif led_color % 5 == 3:
blink = Blink(pixels, speed=0.5, color=OLD_LACE)
print("LED is OLD_LACE")
elif led_color % 5 == 4:
blink = Blink(pixels, speed=0.5, color=BLACK)
print("LED is BLACK")
# led_color 增加1
led_color = led_color + 1
else:
# 按键未按下时啥也不干
pass
# 死睡0.2秒,这期间啥也不能干
time.sleep(0.2) # sleep for debounce
# 执行led闪烁动态效果
blink.animate()
任务4:日历&时钟
import board
import os
import wifi
import ssl
import socketpool
import adafruit_requests
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
display = board.DISPLAY
# 请求获取JSON
JSON_TIME_URL = "http://t.weather.sojson.com/api/weather/city/101010100"
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
## 解析Json
response = requests.get(JSON_TIME_URL)
weather = response.json()
cityInfo = weather['cityInfo']
city_weather = weather['data']
forecast = city_weather['forecast']
dis_str = ""+cityInfo['parent']+' '+cityInfo['city']
dis_str += '\n' + weather['time'] +' '+forecast[0]['week']
dis_str += '\n 空气质量:'+city_weather['quality'] +" " +forecast[0]['type']
dis_str += "\n 最"+forecast[0]['high']+' 最'+forecast[0]['low']
dis_str += "\n 湿度: "+city_weather['shidu']+' pm2.5:'+str(city_weather['pm25']) +' pm10:'+str(city_weather['pm10'])
dis_str += forecast[0]['notice']
font = bitmap_font.load_font("/font/wenquanyi_9pt.pcf")
color = 0x9499CA
text_group = displayio.Group()
text_area = label.Label(font, text=dis_str, color=color)
text_area.x = 0
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:
pass
使用https://www.sojson.com/api/weather.html提供的api接口来查询时间和天气,获得其返回的json字符串,将json字符串进行解析,把内容输出到屏幕上。
任务总结
通过本次的开发体验,让我切身感受到了使用python语言控制板子进行各种任务输出的乐趣。虽然板子面积很小,但是五脏俱全,显示屏、LED灯,wifi模块一应俱全,可以满足很多小功能的开发。这次任务为我打开了嵌入式的新的领域,使我的技能得到了拓展,也了解到了很多之前一知半解的知识,收获满满。
代码资源链接
https://download.eeworld.com.cn/detail/boooil/629646?type__2276=n4Ix2D9iAx0Dy7DlcmoitDCDRizm%3D5wdx&alichlgref=http%3A%2F%2Fbbs.eeworld.com.cn%2Fmy%2Fhome.php%3Fcur%3Dmyhome%26act%3Ddownload
|