[作品提交] 【得捷电子Follow me第2期】任务一到任务四

haer168   2023-10-7 20:43 楼主

 

1.前期准备


1-1.硬件

将esp32-s3通过type-c数据线连接到电脑后,双击两下rst键,进入uf2模式

image.png  

https://circuitpython.org/board/adafruit_feather_esp32s3_tft/中的uf2文件直接拖到U盘中

image.png  

等待设备自动重启就好了

出现:

image.png  

这个盘符就好了。

注意:若操作不当没有进入这个模式,建议还是重新刷一下固件

官方教学:https://learn.adafruit.com/adafruit-esp32-s3-tft-feather/factory-reset#factory-reset-and-bootloader-repair-3107941

2.环境配置

我这里使用的是VScode+CircuitPython开发

首先下载相对应的插件CircuitPython

image.png  

然后打开esp32的盘符

image.png  

打开code.py的文件后

image.png  

直接输入

print("Hello, esteemed electronics enthusiast.")

按下ctrl+S后,保存文件就可以自动执行

image.png  

新手建议可以直接拷贝,感受一下这个板子带来的魅力

下面就是正文开始!!!!!!

任务一


1.下载字库

下载https://circuitpython.org/libraries中的

image.png  

下载完后找到

adafruit_bitmap_font和adafruit_display_text这两个文件

将这两个文件拖到盘符的lib文件夹中

image.png  

最后再下载一个pcf文件。https://github.com/carrothu-cn/chinese-bitmap-fonts

下载wenquanyi_13px.pcf文件,直接拖到盘符中就好了

接下来直接再code.py写入代码就好了

2.代码

# 导入必要的库
import board
import digitalio
import displayio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font

# 获取显示设备对象并设置亮度和旋转
display = board.DISPLAY
board.DISPLAY.brightness = 0.35  # 设置显示屏亮度为0.35
board.DISPLAY.rotation = 0  # 设置显示屏旋转为0度

# 加载自定义字体文件
font = bitmap_font.load_font("wenquanyi_13px.pcf")

# 设置文本颜色
color = 0xFF0000  # 这里的颜色为红色

# 初始化文本变量
text_change = 0

# 创建显示组和文本标签
text_group = displayio.Group()
text_area = label.Label(font, text="test", color=color)  # 创建文本标签对象
text_area.x = 80  # 设置文本的X坐标
text_area.y = 55  # 设置文本的Y坐标
text_area.line_spacing = 0.8  # 设置文本行间距
text_area.scale = 2  # 设置文本放大倍数

# 设置文本内容
text_area.text = "德捷\n无敌"  # 这里设置文本内容
text_group.append(text_area)  # 将文本标签添加到显示组中
display.show(text_group)  # 在显示设备上显示文本

# 进入主循环,持续显示文本
while True:
    pass  # 在此处保持循环以持续显示文本

输入后显示:

image.png  

你已经完成一个了,接着加油

任务二


连接到自己的wifi,注意:只能连接到2.4g,不可以连5g

废话不多说直接上代码

# 导入必要的库
import board
import digitalio
import displayio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font
import os
import ipaddress
import wifi
import socketpool
import time

# 获取显示设备对象并设置亮度和旋转
display = board.DISPLAY
board.DISPLAY.brightness = 1  # 设置显示屏亮度为0.35
board.DISPLAY.rotation = 0  # 设置显示屏旋转为0度

# 加载自定义字体文件
font = bitmap_font.load_font("wenquanyi_13px.pcf")

# 设置文本颜色
color = 0x0000FF  # 这里的颜色为蓝色

# 初始化文本变量
text_change = 0

# 创建显示组和文本标签
text_group = displayio.Group()
text_area = label.Label(font, text="test", color=color)  # 创建文本标签对象
text_area.x = 30  # 设置文本的X坐标
text_area.y = 50  # 设置文本的Y坐标
text_area.line_spacing = 0.5  # 设置文本行间距
text_area.scale = 2  # 设置文本放大倍数

# 连接到Wi-Fi网络
wifi.radio.connect("小爱同学专用", "czhtpylxd168")

# 设置文本内容为Wi-Fi的IPv4地址
text_area.text = "IP:" + str(wifi.radio.ipv4_address)  # 这里设置文本内容为Wi-Fi的IPv4地址
text_group.append(text_area)  # 将文本标签添加到显示组中
display.show(text_group)  # 在显示设备上显示文本

# 进入主循环,每2秒刷新一次文本
while True:
    time.sleep(2)  # 暂停2秒以刷新文本内容

 

 成功后就会显示IP地址

image.png  

创建热点

代码:

# 导入必要的库
import board
import digitalio
import displayio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font
import wifi
import os
import time

# 获取显示设备对象并设置亮度和旋转
display = board.DISPLAY
board.DISPLAY.brightness = 0.35  # 设置显示屏亮度为0.35
board.DISPLAY.rotation = 0  # 设置显示屏旋转为0度

# 加载自定义字体文件
font = bitmap_font.load_font("wenquanyi_13px.pcf")

# 设置文本颜色
color = 0x00FF00  # 这里的颜色为黄色

# 初始化文本变量
text_change = 0

# 创建显示组和文本标签
text_group = displayio.Group()
text_area = label.Label(font, text="test", color=color)  # 创建文本标签对象
text_area.x = 10  # 设置文本的X坐标
text_area.y = 55  # 设置文本的Y坐标
text_area.line_spacing = 0.8  # 设置文本行间距
text_area.scale = 2  # 设置文本放大倍数

# 启动Wi-Fi热点
wifi.radio.start_ap('my wifi', '12345678')  # 启动Wi-Fi热点,SSID为'my wifi',密码为'12345678'

# 设置文本内容为Wi-Fi热点信息
text_area.text = "WiFi名字:my wifi\n密码:12345678"  # 设置文本内容为Wi-Fi热点信息
text_group.append(text_area)  # 将文本标签添加到显示组中
display.show(text_group)  # 在显示设备上显示文本

# 进入主循环,每2秒刷新一次文本
while True:
    time.sleep(2)  # 暂停2秒以刷新文本内容

板子显示颜色应该是绿色,我有点红绿色盲,看的不是很清楚

手机可以连接

image.png  

image.png  

任务三


Adafruit ESP32-S3 TFT Feather 板载了一颗 NeoPixel LED , Neopixel 是一种智能RGB LED(三色 LED)灯带,由Adafruit Industries开发.

neopixel 不是内置函数需要手动从 adafruit-circuitpython-bundle.zip 里复制导入到 esp32 才能使用。

image.png  

这个文件

我们编写代码如下:

import time
import board
import neopixel

# 初始化NeoPixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)

# 设置亮度
pixel.brightness = 0.4

# 蓝色
blue = (0, 0, 255)

# 显示颜色
pixel.fill(blue)

while True:
    pass

image.png  

使用boot按键来控制LED灯的亮灭状态和颜色

import time
import board
import neopixel
import touchio

# 寻址 NeoPixel
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)

# 设置初始亮度
brightness = 0.5

# 初始颜色为白色和蓝色
white = (255, 255, 255)
blue = (48, 211, 155)

# 显示初始颜色(白色)
pixel.fill(white)

# 初始化触摸按键
touch_1 = touchio.TouchIn(board.D5)
touch_2 = touchio.TouchIn(board.D10)
touch_3 = touchio.TouchIn(board.D7)
touch_4 = touchio.TouchIn(board.D11)

while True:
    if touch_1.value:
        # 当触摸按键 1 被触摸时,显示白色
        pixel.fill(white)
    if touch_2.value:
        # 当触摸按键 2 被触摸时,显示蓝色
        pixel.fill(blue)
    if touch_3.value:
        # 当触摸按键 3 被触摸时,增加亮度
        brightness = min(brightness + 0.1, 1.0)
        pixel.brightness = brightness
    if touch_4.value:
        # 当触摸按键 4 被触摸时,减少亮度
        brightness = max(brightness - 0.1, 0.0)
        pixel.brightness = brightness
    time.sleep(0.3)  # 延迟以避免触发太快

任务四


  我在这里使用的是高德API,使用该API需要先去注册相关账户,申请key。获取到相关json数据后,就从json数据里解析温度和天气信息。

 记得在settings.toml中配置文件

image.png  

在文件写入代码

image.png  

就修改WiFi的名称和WiFi的密码就可以了

编写代码。

import board
import displayio
import adafruit_imageload
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
import os
import rtc
import wifi
import time
import ssl
import socketpool
import adafruit_ntp
import adafruit_requests

# 使用固件自带的屏幕设备,不需要另行初始化屏幕参数
display = board.DISPLAY

# 创建图像组
group = displayio.Group()

# 加载背景图片
image, palette = adafruit_imageload.load("/pic/clock2.png")
# 是否开启透明
palette.make_transparent(1)

# 创建图像布局
grid = displayio.TileGrid(image, pixel_shader=palette)

# 将图像布局添加到图像组,默认在最底层
group.append(grid)

# 显示图像组
display.show(group)

# 加载字体并定义字体颜色为绿色
font = bitmap_font.load_font("/font/sytq_16.pcf")
nun_font = bitmap_font.load_font("/font/DingTalk_ncn_60.pcf")
color = 0x00FF00

# 初始化日期标签并设置位置
date = label.Label(font, text="10月7日", color=color)
date.x = 50
date.y = 30
group.append(date)

# 初始化星期标签并设置位置
week = label.Label(font, text="周六", color=color)
week.x = 150
week.y = 30
group.append(week)

# 初始化时间标签并设置位置
time = label.Label(nun_font, text="19:09", color=color)
time.x = 20
time.y = 80
group.append(time)

# 初始化温度标签并设置位置
temp = label.Label(font, text="27°", color=color)
temp.x = 70
temp.y = 140
group.append(temp)

# 初始化天气标签并设置位置
tempzh = label.Label(font, text="阴", color=color)
tempzh.x = 110
tempzh.y = 140
group.append(tempzh)

# 显示图像组
display.show(group)

# 初始化ntp服务
pool = socketpool.SocketPool(wifi.radio)
ntp = adafruit_ntp.NTP(pool, tz_offset=8, server="ntp.aliyun.com")

# 使用ntp时间更新系统时间
rtc.RTC().datetime = ntp.datetime

# 定义函数以获取星期几的文本
def get_wday(wday):
    if wday == 0:
        return "周一"
    elif wday == 1:
        return "周二"
    elif wday == 2:
        return "周三"
    elif wday == 3:
        return "周四"
    elif wday == 4:
        return "周五"
    elif wday == 5:
        return "周六"
    elif wday == 6:
        return "周日"

# 初始化requests对象
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

# 获取天气信息的函数
def get_weather():
    # 设置城市id
    city = "450900"
    # 替换为您的高德API密钥
    key = "52825392f8832adebc6b8a502abbb5e4"
    # 拼接天气链接url
    getweather_url = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
    # 获取天气json数据
    response = requests.get(getweather_url)
    json_resp = response.json()
    # 关闭连接
    response.close()
    # 解析json数据,并返回温度和天气信息
    for da in json_resp["lives"]:
        return da["temperature"], da["weather"]

# 设置一个标志以便在设备启动时获取天气信息
status = "boot"

# 主循环
while True:
    # 每秒获取一次本地RTC时间
    t = time.localtime()
    # 首次启动或者本地RTC时间的分钟属性为0时,更新日期标签和天气标签
    if status == "boot" or t.tm_min == 0:
        # 更新日期标签
        date.text = "%d月%d日" % (t.tm_mon, t.tm_mday)
        week.text = get_wday(t.tm_wday)
        # 获取天气信息
        str_t, str_tz = get_weather()
        # 更新温度标签
        temp.text = "%s°" % (str_t)
        # 更新天气标签
        tempzh.text = str_tz
        status = "updated"
    # 每隔1秒 更新一次时钟标签,用于动态显示
    if t.tm_sec % 2 == 0:
        time.text = "%

image.png  

就可以使用了

我的心得体会


   参加这次的得捷电子活动,我深度了解到了Adafruit ESP32-S3 TFT Feather的自带高清TFT彩色显示屏和彩色led,连接WiFi和触摸按键。技术群里的网友的强大和浓郁的学习氛围。

其实我本人没有多少的建议和意见,我觉得这次活动,无论是从技术指导,或者是从售后的角度来说,我都觉得挺好的,都是有人可以帮你解决你的问题的。还有一个就是这个活动以后帮你总结好了资源的链接,不会让你去其他地方去找资源了。这是我觉得能让我学的很快的一个原因。我很感谢这个平台可以有这么活动让我去参加,去学习很多电子知识。

 

视频链接:【得捷电子Follow me第2期】任务一到任务四展示-EEWORLD大学堂

资源链接:【得捷电子Follow me第2期】需要的文件-其它相关资料下载-EEWORLD下载中心

                 【得捷电子Follow me第2期】任务代码的资源包-其它相关资料下载-EEWORLD下载中心

本帖最后由 haer168 于 2023-10-9 17:52 编辑

回复评论 (3)

资源链接:还在审核,赶紧找管理员,要不不定什么时候才能看到

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞 (1) 2023-10-8 14:54
引用: 秦天qintian0303 发表于 2023-10-8 14:54 资源链接:还在审核,赶紧找管理员,要不不定什么时候才能看到

谢谢你

 

点赞  2023-10-8 17:39
  • # 创建显示组和文本标签
  • text_group = displayio.Group()
  • text_area = label.Label(font, text="test", color=color) # 创建文本标签对象
  • text_area.x = 80 # 设置文本的X坐标
  • text_area.y = 55 # 设置文本的Y坐标
  • text_area.line_spacing = 0.8 # 设置文本行间距
  • text_area.scale = 2 # 设置文本放大倍数
  •  
  • # 设置文本内容
  • text_area.text = "德捷\n无敌" # 这里设置文本内容
  • text_group.append(text_area) # 将文本标签添加到显示组中
  • display.show(text_group) # 在显示设备上显示文本
点赞  2023-10-8 19:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复