541|2

1

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子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模式,这个时候,板子屏幕会显示:

 

  1. 此时电脑会检测到有新的磁盘,我们把刚下载的
    “adafruit-circuitpython-adafruit_feather_esp32s3_tft-en_US-8.2.6.uf2”文件直接复制到
    这个新磁盘的根目录

 

 

 

 

 

 

 

 

  1. 复制完之后,板子会重启,然后进入如下画面,代表固件刷好了

 

 

  1. 下载支持库

链接:https://circuitpython.org/libraries

我下载的是adafruit-circuitpython-bundle-8.x-mpy-20231003

不过目前官网已经更新了,问题也不大

 

 

  1. 下载中文字库

 

下载网站:

链接已隐藏,如需查看请登录或者注册

下载       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的选择

  1. 网络时间获取,采用苏宁的时间api获取:http://quan.suning.com/getSysTime.do
  2. 天气、空气质量、湿度等信息采用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

最新回复

通过网络控制WS2812B的 远程控制是个亮点   详情 回复 发表于 2023-11-27 07:30
点赞 关注
 
 

回复
举报

755

帖子

5

TA的资源

纯净的硅(高级)

沙发
 

先盛赞一下楼主,先收藏起来,慢慢研究研究,顶起来

 
 
 

回复

6828

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

通过网络控制WS2812B的 远程控制是个亮点

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表