再次感谢DigiKey和EEworld组织的Follow me 第2期活动,让我零成本入门Adafruit ESP32-S3 TFT Feather
第一部分
汇报视频- 【得捷电子Follow me第2期】视频汇报-EEWORLD大学堂
第二部分
此处我将四个任务整合在了一个文件里,便于提交,源码中有分别完成的任务
效果展示:
汇总代码如下
import board, displayio
import rtc, wifi, ssl
import time as Time
import socketpool
import neopixel
from digitalio import DigitalInOut, Direction, Pull
import adafruit_imageload
import adafruit_ntp
import adafruit_requests
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
##任务2.1 创建热点
#任务2.2链接wifi部分外置在settings.toml,详情源码包内查看
wifi.radio.start_ap('Follow_me_Tasks', 'EEworld00')#简简单单一行即可
print("Hotspot Launched")#提示
##任务1&4.1前置代码+放置标签
#(因为我设计的时钟也有中文,所以此处不再单独完成任务1,源码包中有按项目拆分的文件)
display = board.DISPLAY #定义屏幕
group = displayio.Group() #定义显示组
def lableimage(path): #加载图片标签函数
image, palette = adafruit_imageload.load(path)
return displayio.TileGrid(image, pixel_shader=palette)
#加载必要字体
font = bitmap_font.load_font("/font/sytq_16.pcf")#此字体包借用自死龙哥walker2048
timef = bitmap_font.load_font("/font/time.bdf")
def labletext(x, y, text, font=font, color=0x000000): #加载文字标签函数
return label.Label(font, text=text, color=color, x=x, y=y)
#将图片添加到显示组
grid = lableimage("/img/ddw.png") #设置图片标签
group.append(grid) #加入显示组
#将文字添加到显示组
#设置文字标签
date = labletext(48, 20, "0月0日")
day = labletext(150, 20, "周八")
time = labletext(22, 58, "00:00", font=timef)
weather = labletext(12, 112, "?")
temp = labletext(198, 112, "00°")
#加入显示组
group.append(date)
group.append(day)
group.append(time)
group.append(weather)
group.append(temp)
##任务4.2 联网获取
pool = socketpool.SocketPool(wifi.radio) #初始化
ntp = adafruit_ntp.NTP(pool, tz_offset=8, server="ntp.aliyun.com") #校正时间
rtc.RTC().datetime = ntp.datetime #校正时间
requests = adafruit_requests.Session(pool, ssl.create_default_context()) #定义请求
def get_weather():#获取天气函数
city = "120101"#地区代码
key = "cc46b036804b84ce5b7b76d9a0511c68"#此处自行填写
url = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
response = requests.get(url)#获取
json_resp = response.json()
response.close()
return json_resp["lives"][0]["temperature"], json_resp["lives"][0]["weather"]#提取参数
##任务3.1 基础设置
pixel_pin = board.NEOPIXEL
pixels = neopixel.NeoPixel(pixel_pin, 1, brightness=0.1, auto_write=False) #定义像素
def pixelsetcolor(c):#改变颜色函数,针对单个像素量身定制
pixels[0] = c
pixels.show()
#设置按钮
btn = DigitalInOut(board.BOOT0)
btn.direction = Direction.INPUT
btn.pull = Pull.UP
color = 0
days = ["周一","周二","周三","周四","周五","周六","周日"]
state = "init"
#主循环
while True:
##任务4.3 刷新标签
n = Time.localtime()
if (state == "init" or n.tm_min == 0):#每小时刷新一次
date.text = "%d月%d日" % (n.tm_mon, n.tm_mday)
day.text = days[n.tm_wday]
t, w = get_weather()
weather.text = w
temp.text = "%s°" % (t)
state = "running"
#每次循环刷新
time.text = "%02d:%02d" % (n.tm_hour, n.tm_min)
display.show(group)
##任务3.2 循环颜色
if not btn.value:
if color % 8 == 0:
pixelsetcolor(0xFF0000)
print("Pixel is R")
elif color % 8 == 1:
pixelsetcolor(0x00FF00)
print("Pixel is G")
elif color % 8 == 2:
pixelsetcolor(0x0000FF)
print("Pixel is B")
elif color % 8 == 3:
pixelsetcolor(0xFFFF00)
print("Pixel is Yellow")
elif color % 8 == 4:
pixelsetcolor(0xFF00FF)
print("Pixel is Megenta")
elif color % 8 == 5:
pixelsetcolor(0x00FFFF)
print("Pixel is Cyan")
elif color % 8 == 6:
pixelsetcolor(0xFFFFFF)
print("Pixel is Light")
elif color % 8 == 7:
pixelsetcolor(0x000000)
print("Pixel is Dark")
color += 1
else:
pass
Time.sleep(0.2)#此处为适配按键led切换设置为0.2秒,如果只是时钟设置为1秒即可
第三部分
源码下载:download.eeworld.com.cn/detail/bjm212501/629534
|