- 2023-12-06
-
上传了资料:
【得捷电子Follow me第2期】 第二期任务提交,四个任务(天气&时钟)
- 2023-11-26
-
加入了学习《Follow me 第二期任务提交,四个任务的演示》,观看 作品提交
- 2023-11-25
-
发表了主题帖:
【得捷电子Follow me第2期】 第二期任务提交,四个任务
视频连接https://training.eeworld.com.cn/video/38560
前言:
本人以前只用过keil开发STM32系列的单片机,这次有幸参与Follow me第二期活动,涨了不少见识。
所以我是个小白,是跟着论坛网友的帖子学习一步步实现这几个任务的。
一、前期准备
安装Mu Editor 地址:https://codewith.mu/
选择Windows版本
下载安装之后,运行后选择CircuitPython模式
下载固件
1.去这个 地址下载:https://circuitpython.org/board/adafruit_feather_esp32s3_tft/
2.下载完成后得到这个文件
3.用type-c数据线将板子与电脑连接,然后板子会出现这样的画面(这个是出厂模式):
4.我们双击这个RST按钮,会进入UF2模式,这个时候,板子屏幕会显示:
此时电脑会检测到有新的磁盘,我们把刚下载的
“adafruit-circuitpython-adafruit_feather_esp32s3_tft-en_US-8.2.6.uf2”文件直接复制到
这个新磁盘的根目录
复制完之后,板子会重启,然后进入如下画面,代表固件刷好了
下载支持库
链接:https://circuitpython.org/libraries
我下载的是adafruit-circuitpython-bundle-8.x-mpy-20231003
不过目前官网已经更新了,问题也不大
下载中文字库
下载网站:https://github.com/carrothu-cn/chinese-bitmap-fonts
下载 wenquanyi_10pt.pcf
然后在CIRCUITPY目录下再新建一个fonts文件夹,把wenquanyi_10pt.pcf拖进去
至此,基本的工作已经准备完毕了
任务一(中文显示):
功能:显示“你好!我是Sange666”字样,并且每秒切换字体颜色一次。
import board
import terminalio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import time
font = bitmap_font.load_font("fonts\wenquanyi_10pt.pcf")
colors = [0xFF0000, 0xFF9900, 0xFFFF00, 0x00FF00, 0x0000FF, 0x9900FF] # 不同颜色
text = "你好!我是Sange666"
scale = 2
text_area = label.Label(font, text=text, scale=scale)
text_area.x = 3
text_area.y = 33
board.DISPLAY.show(text_area)
color_index = 0
while True:
text_area.color = colors[color_index]
color_index = (color_index + 1) % len(colors)
time.sleep(0.5)
任务二(网络功能使用)
连接WIFI
import os
import ipaddress
import wifi
# 开始扫描Wi-Fi网络
networks = wifi.radio.start_scanning_networks()
# 显示每个检测到的网络的信息
for network in networks:
print("\t%s\t\tRSSI: %d\tChannel: %d" % (str(network.ssid, "utf-8"), network.rssi, network.channel))
# 停止扫描网络
wifi.radio.stop_scanning_networks()
# 连接到指定的Wi-Fi网络
wifi.radio.connect("1315", "12345678")
# 定义要ping的IP地址
ping_ip = ipaddress.IPv4Address("192.168.31.1")
# 打印本地IPv4地址
print("本地IPv4地址:", wifi.radio.ipv4_address)
# 持续ping指定的IP地址
while True:
try:
# 使用3秒的超时时间ping IP地址
ping = wifi.radio.ping(ip=ping_ip, timeout=3)
if ping is not None:
print(f"Ping到192.168.31.1: {ping} 毫秒")
except Exception as e:
print(f"错误: {e}")
创建热点,特别简单,就一行代码
import time
import ipaddress
import wifi
# 设置AP模式并启动
wifi.radio.start_ap(ssid='Sange666', password='12345678', authmode=[wifi.AuthMode.WPA2, wifi.AuthMode.PSK])
wifi.radio.start_dhcp_ap()
# 持续等待
while True:
time.sleep(1)
任务三(控制WS2812B):
功能:RGB灯实现红绿蓝白随机跳变,且具备呼吸灯的效果
首先复制neopixel.mpy到lib下
import time
import board
import neopixel
import random
# 初始化NeoPixel对象
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 设置亮度
pixel.brightness = 0.3
def breathe(color, duration):
steps = 50 # 调整步数以控制渐变的平滑度
for i in range(steps):
# 计算当前步数的亮度值
brightness = i / (steps - 1)
# 根据亮度值设置颜色并填充
pixel.fill((int(color[0] * brightness), int(color[1] * brightness), int(color[2] * brightness)))
time.sleep(duration / steps)
while True:
# 红色呼吸
breathe((255, 0, 0), 1)
# 绿色呼吸
breathe((0, 255, 0), 1)
# 蓝色呼吸
breathe((0, 0, 255), 1)
# 随机颜色呼吸
random_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
breathe(random_color, 1)
# 白色呼吸
breathe((255, 255, 255), 1)
任务四(日历&时钟)
1.支持库
API的选择
网络时间获取,采用苏宁的时间api获取:http://quan.suning.com/getSysTime.do
天气、空气质量、湿度等信息采用https://www.sojson.com/api/weather.html这家免费api接口
import ssl
import time
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import wifi
import adafruit_requests
import socketpool
import board
# 显示颜色映射
color = {
"red": 0xFF0000,
"cyan": 0x00FFFF,
"yellow": 0xFFFF00,
"white": 0xFFFFFF,
"green": 0x00FF00,
"orange": 0xFF9900,
"magenta": 0xFF00FF,
"blue": 0x0000FF,
}
# 获取JSON数据,返回一个字典,包含有城市、天气、温度、湿度、空气质量、时间Key
def fetch_data():
data_dict = {}
# 获取网络时间和天气信息
time_date = requests.get(JSON_TIME_URL).json()
city_data = requests.get(JSON_WEATHER_URL).json()
# 处理时间数据
time_list = time_date["sysTime2"].split(" ")
data_dict["date"] = time_list[0]
data_dict["time"] = time_list[1][0:5]
# 处理城市和天气数据
data_dict["city"] = city_data["cityInfo"]["city"]
data_dict["weather"] = city_data["data"]["forecast"][0]["type"]
data_dict["temp"] = city_data["data"]["wendu"]
data_dict["air"] = city_data["data"]["quality"]
data_dict["humi"] = city_data["data"]["shidu"]
return data_dict
# wifi连接
while not wifi.radio.connected:
try:
wifi.radio.connect("1315", "12345678")
except ConnectionError:
print("连接错误,等待重试")
time.sleep(2)
print(f"IP地址:{wifi.radio.ipv4_address}")
# 苏宁的时间URL
JSON_TIME_URL = "http://quan.suning.com/getSysTime.do"
# 修改城市气象代码,即可获取其他城市天气情况
JSON_WEATHER_URL = "http://t.weather.sojson.com/api/weather/city/101300501"
# 显示屏初始化
font = bitmap_font.load_font("fonts\wenquanyi_10pt.pcf")
display = board.DISPLAY
group = displayio.Group()
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
# 开机显示
data_dict = fetch_data()
# 调整字体大小和布局,适应屏幕尺寸
datelable = label.Label(font, text=data_dict["date"], color=color["orange"], scale=3, x=10, y=10)
timelable = label.Label(font, text=data_dict["time"], color=color["cyan"], scale=4, x=10, y=70)
wealable = label.Label(font, text=data_dict["weather"], color=color["magenta"], scale=2, x=10, y=110)
templable = label.Label(font, text=data_dict["temp"] + "°C", color=color["red"], scale=2, x=160, y=110)
citylable = label.Label(font, text=data_dict["city"], color=color["yellow"], scale=2, x=10, y=40)
airlable = label.Label(font, text="空气:" + data_dict["air"], color=color["green"], scale=2, x=120, y=40)
humilable = label.Label(font, text="湿度:" + data_dict["humi"], color=color["blue"], scale=2, x=40, y=110)
# 定义颜色列表和索引
color_list = list(color.values())
color_index = 0
group.append(timelable)
group.append(datelable)
group.append(citylable)
group.append(wealable)
group.append(templable)
group.append(airlable)
group.append(humilable)
display.show(group)
i=20
while True:
# 随机获取下一个颜色
color_index = (color_index + 1) % len(color_list)
# 更新标签颜色
timelable.color = color_list[(color_index + 1) % len(color_list)]
datelable.color = color_list[(color_index + 2) % len(color_list)]
citylable.color = color_list[(color_index + 3) % len(color_list)]
wealable.color = color_list[(color_index + 4) % len(color_list)]
templable.color = color_list[(color_index + 5) % len(color_list)]
airlable.color = color_list[(color_index + 6) % len(color_list)]
humilable.color = color_list[(color_index + 7) % len(color_list)]
# 每隔20s更新网络数据
if i < 0:
i = 20
data_dict = fetch_data()
else:
i -= 1
timelable.text = data_dict["time"]
datelable.text = data_dict["date"]
citylable.text = data_dict["city"]
wealable.text = data_dict["weather"]
templable.text = data_dict["temp"] + "°C"
airlable.text = "空气:" + data_dict["air"]
humilable.text = "湿度:" + data_dict["humi"]
display.show(group)
# 每隔1s更新数据
time.sleep(1)
心得总结:
在参与DigiKey得捷电子技术专区的Follow me第2期活动后,我深感收获满满,不仅拓展了对电子工程领域的认识,还提升了实际项目开发的能力,我更深刻地理解了所使用的控制器及外设,应用方向及应用场景。这使我能够更清晰地表达项目的核心思想,提升了我的沟通表达能力,我深入了解了这些任务的实现原理和应用场景。同时,可选任务中通过网络控制WS2812B更是让我体验到了远程控制的便捷和创新。通过上传整体源代码,我不仅分享了我的项目成果,也为其他参与者提供了学习和借鉴的机会。这种开放、分享的精神促使整个活动变得更加有意义和价值。
代码包:https://download.eeworld.com.cn/detail/Sange666/630236
-
加入了学习《【得捷电子Follow me第2期】任务汇总 ESP32S3太空人天气时钟 视频讲解》,观看 【得捷电子Follow me第2期】任务汇总 ESP32S3太空人天气时钟 视频讲解