- 2023-10-26
-
上传了资料:
【得捷电子Follow me第2期】 任务汇总
- 2023-10-19
-
发表了主题帖:
【得捷电子Follow me第2期】任务汇总+修改版
#【得捷电子Follow me第2期】任务汇总
十分荣幸能够参加这次**得捷电子Follow me第2期**的活动!我也是熬了几天把任务给干完了。
通过这次活动我是学习到了许多新事物,比如:Markdown , circuitpython , 如何写帖子等等
[TOC]
##Adafruit Feather ESP32-S3 TFT 介绍:
###硬件方面:
Adafruit Feather ESP32-S3 TFT 板子上有着丰富的资源
####特征:
- ESP32-S3 双核 240MHz 天硅处理器 - 下一代 ESP32-Sx,配备原生 USB,可用作键盘/鼠标、MIDI 设备、磁盘驱动器等!
- 迷你模块具有FCC / CE认证,并带有4 MB的闪存和2 MB的PSRAM - 您可以拥有巨大的数据缓冲区。
- 彩色 1.14“ IPS TFT,240x135 像素 - 采用 ST7789 芯片组的明亮多彩显示屏,可从任何角度观看。
- 电源选项 - USB C 型或锂聚合物电池
- 通过 USB-C 供电时内置电池充电。
- LiPoly 电池监控器 - LC709203芯片主动监控电池的电压和充电状态/通过 I2C 报告的百分比。
- 重置和DFU(BOOT0)按钮以进入ROM引导加载程序(这是一个USB串行端口,因此您不需要单独的电缆!
- 串行调试输出引脚(可选,用于检查硬件串行调试控制台)
- 用于 I2C 设备的 STEMMA QT 连接器,具有可切换电源,因此您可以进入低功耗模式。
- 开/电/用户LED + 状态 NeoPixel 具有引脚控制电源,可实现低功耗。
- 低功耗友好!在深度睡眠模式下,我们可以从Lipoly连接获得80~100uA的电流消耗。静态电流来自电源稳压器、ESP32-S2 芯片和锂聚合物显示器。关闭 NeoPixel 和外部 I2C/TFT 电源,以获得最低的静态电流消耗。
- 与Arduino或CircuitPython一起使用
####引脚排列:
###软件方面:
####编译环境:
复制和编辑 CIRCUITPY 驱动器上的文件即可进行迭代。要创建和编辑代码,您只需要一个编辑器。有很多选择。官方文档是推荐使用 **Mu** , 与可以使用 **Thonny** 或 **vscode+circuitpython**
####编程资料:
[外置库](https://learn.adafruit.com/adafruit-esp32-s3-tft-feather/circuitpython-libraries "外置库")
[库文件文档](https://docs.circuitpython.org/projects/bundle/en/latest/drivers.html "库文件文档")
##任务汇总
其实我每个任务都有单独的帖子,但不能计算到提交帖内,所以在此再次赘述
也可以直接点击链接进行观看
[任务一](https://bbs.eeworld.com.cn/thread-1259275-1-1.html "任务一")
[任务二](https://bbs.eeworld.com.cn/thread-1259365-1-1.html "任务二")
[任务三](https://bbs.eeworld.com.cn/thread-1259422-1-1.html "任务三")
[任务四](https://bbs.eeworld.com.cn/thread-1259426-1-1.html "任务四")
###任务一
【得捷电子Follow me第2期】 任务1:控制屏幕显示中文
####刷固件
这里是第一个任务,笔者打算从刚收到板子刷固件讲起(凑点字数)
我们刚收到板子是有厂商默认的固件,上电后如下
上面有两个按键,RST和BOOT,双击RST即可进入UF2模式
电脑上会弹出如图下的U盘设备
我们这时只需要将UF2格式的固件复制到U盘里即可完成固件更新,十分方便 !
[固件链接](https://circuitpython.org/board/adafruit_feather_esp32s3_tft/ "固件链接")
字体文件的裁剪我使用的是FontForge和Fontmin
编程方式我是用 vscode+circuitpython 进行编程
code.py文件里放我们的程序
lib文件夹里放我们的外置库
对于外置库的下载我们可以在 vscode 用命令行的方式 >circuitpython show available libraries,也可以直接把外置库文件复制到U盘的llib里
####代码
下面开始是任务正文
首先是效果展示
import 的库
```python
import board
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
```
屏幕基础配置
```python
# 1. 屏幕基础配置
display = board.DISPLAY
```
字体使用
```python
# 2. 使用字体
font_file = "fonts/SJxinweibeijian_test-21.bdf"
font = bitmap_font.load_font(font_file)
```
我们在U盘设备里创建Fonts文件夹用来存放字体文件
屏幕显示
```python
# 3. 屏幕显示
text = "行路难,\n行路难,\n多歧路,\n今安在?"
text_group = displayio.Group(scale=1,x=0,y=0,)
text_area = label.Label(font, text=text, color=0xFFFFFF, x=85, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
```
scale可调整放大倍数
label.Label(font, text=text, color=0xFFFFFF, x=85, y=25),font为前面创建的字体对象 ; color是RGB色彩,RGB即是代表红、绿、蓝三个通道的颜色,0~255十进制转换为十六进制
完整代码
```python
import board
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 1. 屏幕基础配置
display = board.DISPLAY
# 2. 使用字体
font_file = "fonts/SJxinweibeijian_test-21.bdf"
font = bitmap_font.load_font(font_file)
# 3. 屏幕显示
text = "行路难,\n行路难,\n多歧路,\n今安在?"
text_group = displayio.Group(scale=1,x=0,y=0,)
text_area = label.Label(font, text=text, color=0xFFFFFF, x=85, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
while True:
pass
```
###任务二
【得捷电子Follow me第2期】任务2:连接WIFI和创建热点
此任务相对简单,连接WIFI和创建热点都只需要使用一句函数即可完成
话不多说,我们直接 上代码!:Onion-37:
####WiFi连接
效果图
import 的库
```python
import board
import displayio
import terminalio
import wifi
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
```
WiFi连接
```python
# 3. WiFi连接
wifi.radio.connect(SSID, PASSWORD)
```
屏幕显示
```python
# 4. 屏幕显示
text="WiFi:"+SSID+"\n"+"IP:"+str(wifi.radio.ipv4_address)
text_group = displayio.Group(scale=2,x=0,y=0,)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
```
str() 函数可以将对象转化字符串
完整代码
```python
import board
import displayio
import terminalio
import wifi
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 1. 屏幕基础配置
display = board.DISPLAY
# 2. 设置wifi和密码
SSID = "ESP32-S3"
PASSWORD = "12345678"
# 3. WiFi连接
wifi.radio.start_ap(SSID, PASSWORD)
# 4. 屏幕显示
text="WiFi:"+SSID+"\n"+"PASSWORD:"+PASSWORD
text_group = displayio.Group(scale=2,x=0,y=0,)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
while True:
pass
```
####创建热点
效果图
基于上文的代码,我们只需效果部分即可
设置wifi和密码
```python
# 2. 设置wifi和密码
SSID = "ESP32-S3"
PASSWORD = "12345678"
```
这里填要创建的WiFi和WiFi密码,密码是8~64位的
创建热点
```python
# 3. WiFi连接
wifi.radio.start_ap(SSID, PASSWORD)
```
相比于前面,只需要将connect替换成start_ap即可
完整代码
```python
import board
import displayio
import terminalio
import wifi
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 1. 屏幕基础配置
display = board.DISPLAY
# 2. 设置wifi和密码
SSID = "ESP32-S3"
PASSWORD = "12345678"
# 3. WiFi连接
wifi.radio.start_ap(SSID, PASSWORD)
# 4. 屏幕显示
text="WiFi:"+SSID+"\n"+"PASSWORD:"+PASSWORD
text_group = displayio.Group(scale=2,x=0,y=0,)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
while True:
pass
```
###任务三
【得捷电子Follow me第2期】任务3:控制WS2812B
本文会涉及通用的编程思维,十分推荐一个学习网站——菜鸟教程
import 的库
```python
import board
import neopixel
import digitalio
import time
```
neopixel是一个外置库,是用来控制WS2812B
按键基础配置
```python
# 按键基础配置
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
```
板子上的按键是按下为低电平,所以要加上上拉电阻
WS2812B基础配置
```python
# WS2812B 电源控制
power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)
power.direction = digitalio.Direction.OUTPUT
power.value = True
# WS2812B设置
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 亮度
pixel.brightness = 0.5
```
首先,我们需要将WS2812B引脚置为高电平
neopixel.NeoPixel(board.NEOPIXEL, 1) board.NEOPIXEL为WS2812B的控制引脚,后者为WS2812B的数量
颜色控制函数
```python
def WS2812B(color):
pixel.fill(((color&0x0000FF),(color&0x00FF00)>>8,(color&0xFF0000)>>16))
```
这里我定义了一个函数
pixel.fill()函数可以控制颜色,传递的参数为元组(不了解的可以去菜鸟教程);元组的元素有三个,分别为:R,G,B
那么我们这函数用途就很明显了,是想用一个十六进制数来控制WS2812B的颜色
主循环
```python
color=0x0000FF
flag=False
while True:
if button.value==False:
if flag==False:
flag=True
WS2812B(color=color)
if color==0xFF0000:
color=0X0000FF
else :
color8,(color&0xFF0000)>>16))
color=0x0000FF
flag=False
while True:
if button.value==False:
if flag==False:
flag=True
WS2812B(color=color)
if color==0xFF0000:
color=0X0000FF
else :
color
- 2023-10-15
-
发表了主题帖:
【得捷电子Follow me第2期】任务汇总
【得捷电子Follow me第2期】任务汇总
本文为任务汇总,详情可点击下方链接
任务一:https://bbs.eeworld.com.cn/thread-1259275-1-1.html
任务二:https://bbs.eeworld.com.cn/thread-1259365-1-1.html
任务三:https://bbs.eeworld.com.cn/thread-1259422-1-1.html
任务四:https://bbs.eeworld.com.cn/thread-1259426-1-1.html
资源下载:https://download.eeworld.com.cn/detail/eew_DG590F/629572
视频任务:https://training.eeworld.com.cn/course/68143
-
上传了资料:
【得捷电子Follow me第2期】 任务汇总
-
发表了主题帖:
【得捷电子Follow me第2期】任务4.1:日历&时钟
【得捷电子Follow me第2期】任务4.1:日历&时钟
本文的代码 “参考” 了许多帖子的代码,望海涵
完整代码
import board
import digitalio
import time
import wifi
import os
import ssl
import socketpool
import adafruit_requests
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 屏幕基础配置
display = board.DISPLAY
# 使用字体
font_file = "fonts/SJxinweibeijian-Regular-21.bdf"
font = bitmap_font.load_font(font_file)
# WiFi连接
wifi.radio.connect(os.getenv("WIFI_SSID"), os.getenv("WIFI_PASSWORD"))
# JSON获取
JSON_URL = "http://t.weather.itboy.net/api/weather/city/"+os.getenv("city")
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
response = requests.get(JSON_URL)
# JSON分析
weather = response.json()
cityInfo = weather['cityInfo']
city_weather = weather['data']
forecast = city_weather['forecast']
dis_str = ""+cityInfo['parent']+' '+cityInfo['city'] +' '+weather['time'][:11] + forecast[0]['week']
dis_str += '\n 空气质量:'+city_weather['quality'] +" " +forecast[0]['type']
dis_str += "\n 最"+forecast[0]['high']+' 最'+forecast[0]['low']
dis_str += "\n 湿度: "+city_weather['shidu']
# 屏幕显示
text_group = displayio.Group(scale=1,x=0,y=0,)
text_area = label.Label(font, text=dis_str, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
while True:
pass
- 2023-10-14
-
发表了主题帖:
【得捷电子Follow me第2期】任务3:控制WS2812B
【得捷电子Follow me第2期】任务3:控制WS2812B
本文会涉及通用的编程思维,十分推荐一个学习网站——菜鸟教程
import 的库如下
import board
import neopixel
import digitalio
import time
neopixel是一个外置库,是用来控制WS2812B
按键基础配置
# 按键基础配置
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
板子上的按键是按下为低电平,所以要加上上拉电阻
WS2812B基础配置
# WS2812B 电源控制
power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)
power.direction = digitalio.Direction.OUTPUT
power.value = True
# WS2812B设置
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 亮度
pixel.brightness = 0.5
首先,我们需要将WS2812B引脚置为高电平
neopixel.NeoPixel(board.NEOPIXEL, 1) board.NEOPIXEL为WS2812B的控制引脚,后者为WS2812B的数量
颜色控制函数
def WS2812B(color):
pixel.fill(((color&0x0000FF),(color&0x00FF00)>>8,(color&0xFF0000)>>16))
这里我定义了一个函数
pixel.fill()函数可以控制颜色,传递的参数为元组(不了解的可以去菜鸟教程);元组的元素有三个,分别为:R,G,B
那么我们这函数用途就很明显了,是想用一个十六进制数来控制WS2812B的颜色
主循环
color=0x0000FF
flag=False
while True:
if button.value==False:
if flag==False:
flag=True
WS2812B(color=color)
if color==0xFF0000:
color=0X0000FF
else :
color<<=8
elif button.value==True:
flag=False
这里定义了一个color,flag来存储我们的WS2812B颜色数据和按键标志位
按键按下,color左移8位,color在0x0000FF,0x00FF00,0xFF0000之间循环
flag的用途为按键标志位,可以使我们按键按下时程序只执行一次
完整代码
import board
import neopixel
import digitalio
import time
# 按键基础配置
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
# WS2812B 电源控制
power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)
power.direction = digitalio.Direction.OUTPUT
power.value = True
# WS2812B设置
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 亮度
pixel.brightness = 0.5
def WS2812B(color):
pixel.fill(((color&0x0000FF),(color&0x00FF00)>>8,(color&0xFF0000)>>16))
color=0x0000FF
flag=False
while True:
if button.value==False:
if flag==False:
flag=True
WS2812B(color=color)
if color==0xFF0000:
color=0X0000FF
else :
color<<=8
elif button.value==True:
flag=False
-
加入了学习《Digi-Key: Follow Me 系列(2) 直播回放》,观看 Adafruit ESP32-S3 TFT Feather开发板使用入门
-
发表了主题帖:
【得捷电子Follow me第2期】任务2:连接WIFI和创建热点
本帖最后由 eew_梁历 于 2023-10-15 03:08 编辑
【得捷电子Follow me第2期】任务2:连接WIFI和创建热点
此任务相对简单,连接WIFI和创建热点都只需要使用一句函数即可完成
话不多说,我们直接 上代码!
WiFi连接:
效果图
import 的库如下
import board
import displayio
import terminalio
import wifi
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
连接WIFI和创建热点使用的是wifi的函数
屏幕基础配置
# 1. 屏幕基础配置
display = board.DISPLAY
设置wifi和密码
# 2. 设置wifi和密码
SSID = "Redmi K40"
PASSWORD = "15813991772"
这里填自己的WiFi名和密码
WiFi连接
# 3. WiFi连接
wifi.radio.connect(SSID, PASSWORD)
屏幕显示
# 4. 屏幕显示
text="WiFi:"+SSID+"\n"+"IP:"+str(wifi.radio.ipv4_address)
text_group = displayio.Group(scale=2,x=0,y=0,)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
str() 函数可以将对象转化字符串
完整代码
import board
import displayio
import terminalio
import wifi
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 1. 屏幕基础配置
display = board.DISPLAY
# 2. 设置wifi和密码
SSID = "Redmi K40"
PASSWORD = "15813991772"
# 3. WiFi连接
wifi.radio.connect(SSID, PASSWORD)
# 4. 屏幕显示
text="WiFi:"+SSID+"\n"+"IP:"+str(wifi.radio.ipv4_address)
text_group = displayio.Group(scale=2,x=0,y=0,)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
while True:
pass
创建热点:
效果图
基于上文的代码,我们只需效果部分即可
设置wifi和密码
# 2. 设置wifi和密码
SSID = "ESP32-S3"
PASSWORD = "12345678"
这里填要创建的WiFi和WiFi密码,密码是8~64位的
创建热点
# 3. WiFi连接
wifi.radio.start_ap(SSID, PASSWORD)
相比于前面,只需要将connect替换成start_ap即可
屏幕显示
# 4. 屏幕显示
text="WiFi:"+SSID+"\n"+"PASSWORD:"+PASSWORD
text_group = displayio.Group(scale=2,x=0,y=0,)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
完整代码
import board
import displayio
import terminalio
import wifi
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 1. 屏幕基础配置
display = board.DISPLAY
# 2. 设置wifi和密码
SSID = "ESP32-S3"
PASSWORD = "12345678"
# 3. WiFi连接
wifi.radio.start_ap(SSID, PASSWORD)
# 4. 屏幕显示
text="WiFi:"+SSID+"\n"+"PASSWORD:"+PASSWORD
text_group = displayio.Group(scale=2,x=0,y=0,)
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=10, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
while True:
pass
- 2023-10-13
-
上传了资料:
【得捷电子Follow me第2期】 任务1:控制屏幕显示中文
-
发表了主题帖:
【得捷电子Follow me第2期】 任务1:控制屏幕显示中文
本帖最后由 eew_DG590F 于 2023-10-13 19:56 编辑
【得捷电子Follow me第2期】 任务1:控制屏幕显示中文
这里是第一个任务,笔者打算从刚收到板子刷固件讲起(凑点字数)
我们刚收到板子是有厂商默认的固件,上电后如下
上面有两个按键,RST和BOOT,双击RST即可进入UF2模式
电脑上会弹出如图下的U盘设备
我们这时只需要将UF2格式的固件复制到U盘里即可完成固件更新,十分方便 !
固件链接:https://circuitpython.org/board/adafruit_feather_esp32s3_tft/
字体文件的裁剪我使用的是FontForge和Fontmin,这里不多赘述
编程方式我是用 vscode+circuitpython 进行编程
code.py文件里放我们的程序
lib文件夹里放我们的外置库
对于外置库的下载我们可以在 vscode 用命令行的方式 >circuitpython show available libraries,也可以直接把外置库文件复制到U盘的llib里
下面开始是任务正文
首先是效果展示
import 的库如下
import board
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
adafruit_display_text是用于文本显示,adafruit_bitmap_font是用于字体选择
要记得将外置库下载到lib里
屏幕基础配置如下
# 1. 屏幕基础配置
display = board.DISPLAY
字体使用
# 2. 使用字体
font_file = "fonts/SJxinweibeijian_test-21.bdf"
font = bitmap_font.load_font(font_file)
我们在U盘设备里创建Fonts文件夹用来存放字体文件
屏幕显示
# 3. 屏幕显示
text = "行路难,\n行路难,\n多歧路,\n今安在?"
text_group = displayio.Group(scale=1,x=0,y=0,)
text_area = label.Label(font, text=text, color=0xFFFFFF, x=85, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
scale可调整放大倍数
label.Label(font, text=text, color=0xFFFFFF, x=85, y=25),font为前面创建的字体对象 ; color是RGB色彩,RGB即是代表红、绿、蓝三个通道的颜色,0~255十进制转换为十六进制
最后是完整代码
import board
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
# 1. 屏幕基础配置
display = board.DISPLAY
# 2. 使用字体
font_file = "fonts/SJxinweibeijian_test-21.bdf"
font = bitmap_font.load_font(font_file)
# 3. 屏幕显示
text = "行路难,\n行路难,\n多歧路,\n今安在?"
text_group = displayio.Group(scale=1,x=0,y=0,)
text_area = label.Label(font, text=text, color=0xFFFFFF, x=85, y=25)
text_group.append(text_area) # Subgroup for text scaling
display.show(text_group)
while True:
pass