Sange666

  • 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太空人天气时钟 视频讲解

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:27
  • 好友:--
  • 主题:1
  • 回复:0

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言