wmls电子屏创作
1代码
1. 硬件准备
- ESP32开发板
- 1.28英寸圆形TFT显示屏 (使用ST7789驱动芯片)
- 连接线
- 供电方式: 通过USB给ESP32供电
2. GIF 动画准备
- 准备一个尺寸为240x240的GIF动画,并将其放入ESP32的SPIFFS文件系统中。
3. 代码实现
为了显示GIF动画,我们需要使用一个支持GIF解码的库。以下代码使用了Arduino_GFX库和GIFDecoder库来实现GIF动画的显示。
安装库
- 安装
Arduino_GFX
库和GIFDecoder
库,这些库在Arduino库管理器中都可以找到。
代码示例
#include <Arduino_GFX_Library.h>
#include <SPIFFS.h>
#include <GIFDecoder.h>
#define TFT_BLK 33 // 背光引脚
#define TFT_DC 2 // 数据/命令引脚
#define TFT_RST 4 // 重置引脚
#define TFT_CS -1 // 芯片选择引脚(如果不使用,设为-1)
#define TFT_MOSI 23 // SPI MOSI引脚
#define TFT_SCLK 18 // SPI 时钟引脚
// 初始化TFT
Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, TFT_SCLK, TFT_MOSI, -1);
Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */);
GIF gif;
void setup() {
// 初始化串口输出(用于调试)
Serial.begin(115200);
// 初始化文件系统
if (!SPIFFS.begin(true)) {
Serial.println("SPIFFS Mount Failed");
return;
}
// 初始化显示屏
gfx->begin();
gfx->fillScreen(BLACK);
// 打开GIF文件
File f = SPIFFS.open("/animated.gif", "r");
if (!f) {
Serial.println("Failed to open GIF file");
return;
}
// 初始化GIF解码器
gif.begin(gfx, gifDrawFrame);
gif.open(f);
}
void loop() {
// 解码并显示GIF动画
if (gif.playFrame(true, 0)) {
delay(50); // 控制动画速度
} else {
gif.close();
File f = SPIFFS.open("/animated.gif", "r");
gif.open(f);
}
}
// 回调函数,用于绘制每一帧
void gifDrawFrame(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t *pixels) {
gfx->draw16bitRGBBitmap(x, y, (uint16_t*)pixels, w, h);
}
4. 上传GIF文件
- 将240x240尺寸的
animated.gif
上传到ESP32的SPIFFS文件系统中。
5. 编译与上传
- 将代码编译并上传到ESP32开发板上。
6. 调试与运行
- 上传成功后,ESP32将开始显示你上传的GIF动画。
7. 注意事项
- GIF大小: 由于ESP32的内存有限,建议使用较小尺寸和较少帧数的GIF,以避免性能瓶颈。
- FPS控制: 通过调整代码中的
delay(50)
来控制动画的播放速度。
通过这个方式,你可以在ESP32的圆形显示屏上展示动态图片或动画。如果你需要显示更复杂的动画,可以考虑使用更高性能的微控制器或者进一步优化图片的分辨率和帧数。
是的,接线是实现项目的重要步骤。接线的方式取决于你所使用的显示屏和控制器的具体型号。下面是使用ESP32开发板与1.28英寸的圆形TFT显示屏(以ST7789驱动芯片为例)进行接线的详细步骤。
2接线
1. 硬件连接
- ESP32开发板
- 1.28英寸圆形TFT显示屏(ST7789驱动芯片)
- 连接线
2. 引脚定义
你需要将ESP32的引脚与显示屏的引脚正确连接,以下是常见的引脚对应关系:
- VCC: 连接到ESP32的
3.3V
或5V
电源引脚 - GND: 连接到ESP32的
GND
- SCK: 连接到ESP32的
GPIO 18
(SPI时钟) - SDA: 连接到ESP32的
GPIO 23
(SPI数据线,MOSI) - RES: 连接到ESP32的
GPIO 4
(重置引脚) - DC: 连接到ESP32的
GPIO 2
(数据/命令控制引脚) - CS: 连接到ESP32的
GPIO 5
(芯片选择引脚,若不使用可连接GND
) - BLK: 连接到ESP32的
GPIO 33
(背光控制引脚,或直接连接3.3V
)
3. 具体接线说明
显示屏引脚 | 功能 | ESP32引脚 |
---|---|---|
VCC | 电源输入 | 3.3V 或 5V |
GND | 地 | GND |
SCK | SPI时钟 | GPIO 18 |
SDA | SPI数据(MOSI) | GPIO 23 |
RES | 重置 | GPIO 4 |
DC | 数据/命令选择 | GPIO 2 |
CS | 芯片选择 | GPIO 5 (或接 GND ) |
BLK | 背光控制 | GPIO 33 或 3.3V |
4. 硬件接线图
ESP32 1.28" TFT Display
[3.3V] ---------> VCC
[GND] ----------> GND
[GPIO 18] ------> SCK
[GPIO 23] ------> SDA
[GPIO 4] -------> RES
[GPIO 2] -------> DC
[GPIO 5] -------> CS (或直接连接到GND)
[GPIO 33] ------> BLK (或直接连接到3.3V)
5. 注意事项
- 电压匹配: 确保显示屏的供电电压与ESP32的输出电压匹配。大多数TFT显示屏可以在3.3V和5V之间工作,但最好确认显示屏的规格。
- 信号连接: SPI时钟(SCK)和数据(MOSI)引脚必须正确连接,否则无法正确传输显示数据。
- 背光控制: 如果需要控制显示屏的背光,可以将BLK引脚连接到ESP32的PWM引脚(如GPIO 33)以调节亮度;否则可以直接连接到3.3V保持背光常亮。
6. 测试与验证
- 接线完成后,上传测试代码来验证接线是否正确。如果显示屏正常启动并能显示内容,说明接线正确。如果显示屏不工作,检查各引脚的连接。
3硬件
是的,ESP32开发板和TFT显示屏是需要自行购买的硬件组件。它们在很多电子元器件网站或在线商城都有售卖。以下是购买这些硬件的一些建议:
1. ESP32开发板
- 型号选择: ESP32开发板有多个版本,一般推荐带有USB接口的开发板,如
ESP32 DevKitC
或NodeMCU-32S
,这些版本安装和使用都比较方便。 - 购买地点: 可以在Amazon、eBay、淘宝、Aliexpress、国内外的电子元件供应商等平台购买。
2. 1.28英寸圆形TFT显示屏
- 型号选择: 确保购买带有ST7789驱动芯片的1.28英寸圆形TFT显示屏,这种屏幕通常支持SPI通信协议。
- 购买地点: 同样可以在Amazon、eBay、淘宝、Aliexpress等平台找到。
3. 其他配件
- 连接线: 杜邦线(公对母、公对公)用于连接ESP32和显示屏。通常可以成套购买。
- 电源线/适配器: 如果使用USB供电,可以直接通过ESP32的USB端口供电;也可以选择购买5V的USB电源适配器。
4. 注意事项
- 兼容性: 购买时,确保显示屏的驱动芯片与计划使用的代码库兼容(如ST7789)。同时要确认ESP32的电压与显示屏匹配,通常ESP32为3.3V。
- 质量: 选择评价较高的商家,确保购买的硬件质量可靠。
5. 额外的硬件或工具(可选)
- 面包板和跳线: 用于方便地进行电路连接和调试。
- 3D打印机: 如果需要自制外壳,可以考虑使用3D打印机。
在购买这些硬件之后,按照我们之前讨论的接线和代码步骤,你就可以开始动手制作了。如果在购买或使用过程中有任何问题,随时可以向我咨询。
面包板和跳线是电子项目中常用的工具,尤其在原型设计和电路调试中非常常见。
1. 面包板(Breadboard)
-
用途: 面包板是一种用于临时搭建电路的工具,不需要焊接,因此适合初学者和快速原型开发。它有许多小孔,可以插入电子元件和连接线,快速建立和修改电路。
-
结构:
- 电源轨: 面包板的两侧通常有两条长的横向连接的孔排,通常标注为“+”和“-”,用于连接电源和地(GND)。这些孔之间是相互连通的。
- 信号线列: 中间部分是垂直排列的孔,每列的孔之间也是相互连通的,用来连接电路中的信号和组件。
-
常见尺寸: 面包板有多种尺寸,小的面包板可能只有170个孔,大的可能有830个孔甚至更多。
-
优点:
- 无需焊接,易于拆装和调整电路。
- 可以快速进行电路测试和调试。
2. 跳线(Jumper Wires)
-
用途: 跳线是用于在面包板和电子元件之间进行连接的导线。跳线有不同的类型,适合不同的连接方式。
-
类型:
- 公对公跳线(Male to Male): 两端都是公头,适合连接面包板之间的孔或将元件插入面包板中。
- 公对母跳线(Male to Female): 一端是公头,另一端是母头,常用于连接面包板和带有引脚的组件(如ESP32、传感器等)。
- 母对母跳线(Female to Female): 两端都是母头,常用于连接两个带有引脚的组件。
-
长度: 跳线有多种长度,常见的有10cm、20cm、30cm等。选择合适的长度可以减少电路中的杂乱。
3. 使用示例
假设你要在ESP32和TFT显示屏之间建立连接,你可以使用面包板和跳线来简化连接:
- 将ESP32开发板插入面包板: 将ESP32插在面包板上,以便通过跳线连接它的引脚。
- 使用跳线进行连接: 使用公对母跳线,将ESP32的引脚连接到面包板,再用另一根跳线将面包板上的孔连接到显示屏的引脚。
4. 购买建议
- 面包板: 你可以购买中等大小(400-830孔)的面包板,足够容纳ESP32和其他元件。
- 跳线: 通常成套出售,有多种长度和类型,建议选择带有多种类型的套装,方便不同的连接需求。
通过面包板和跳线,你可以轻松搭建和调试电路,而无需进行焊接。
bak micropthon开发
是的,使用MicroPython开发ESP32项目也是一个不错的选择。MicroPython是一种轻量级的Python实现,非常适合嵌入式系统的开发,比如ESP32。它使得编写代码和调试更加简洁直观,尤其适合已经熟悉Python语言的开发者。
使用MicroPython开发ESP32和TFT显示屏
1. 准备工作
- ESP32开发板
- 1.28英寸圆形TFT显示屏(ST7789驱动芯片)
- MicroPython固件: 确保ESP32板子上已经刷入了MicroPython固件。
- 连接线和面包板(如果需要)
2. 硬件连接
硬件连接方式与之前讲解的C++代码部分基本一致。确保正确连接VCC、GND、SCK、SDA、RES、DC、CS、BLK引脚。
3. 开发环境
- Thonny IDE: 推荐使用Thonny IDE,它对MicroPython支持很好,并且内置了REPL(Read-Eval-Print Loop),可以直接与ESP32交互。
- uPyCraft IDE 或 VS Code + Pymakr插件: 也是常见的MicroPython开发工具。
4. 安装必要的MicroPython库
- st7789py_mpy库: 用于驱动TFT显示屏(ST7789芯片)。
使用以下命令安装该库:
import upip
upip.install('micropython-st7789')
5. 代码示例
下面是一个在ESP32上使用MicroPython显示图片的代码示例:
import time
import machine
import st7789
# 引脚定义
tft_clk = machine.Pin(18)
tft_mosi = machine.Pin(23)
tft_dc = machine.Pin(2)
tft_rst = machine.Pin(4)
tft_cs = machine.Pin(5)
tft_bl = machine.Pin(33, machine.Pin.OUT)
# 初始化SPI
spi = machine.SPI(1, baudrate=30000000, polarity=1, phase=1, sck=tft_clk, mosi=tft_mosi)
# 初始化显示屏
tft = st7789.ST7789(
spi,
240,
240,
reset=tft_rst,
cs=tft_cs,
dc=tft_dc,
backlight=tft_bl,
rotation=0
)
tft.init()
# 显示背景色
tft.fill(st7789.BLACK)
# 加载并显示BMP图片
def display_image(filename):
with open(filename, "rb") as f:
if f.read(2) == b'BM': # BMP文件标志
f.seek(18)
width = int.from_bytes(f.read(4), 'little')
height = int.from_bytes(f.read(4), 'little')
if width == 240 and height == 240:
f.seek(54)
for row in range(height):
for col in range(width):
b = f.read(1)
g = f.read(1)
r = f.read(1)
color = st7789.color565(int.from_bytes(r, 'little'), int.from_bytes(g, 'little'), int.from_bytes(b, 'little'))
tft.pixel(col, height - 1 - row, color)
# 显示图像
display_image('/image1.bmp')
# 动态显示,轮换两张图片
while True:
display_image('/image1.bmp')
time.sleep(5)
display_image('/image2.bmp')
time.sleep(5)
6. 图片处理
- 图片格式: 上面示例中使用的是BMP格式的图片,分辨率为240x240。
- 图片上传: 使用Thonny IDE等工具将BMP文件上传到ESP32的文件系统中。
7. 调试与运行
- 将代码上传至ESP32,ESP32将轮流显示两张图片。如果图片太大或者ESP32的内存不足,可能需要调整图片的分辨率或帧数。
总结
使用MicroPython在ESP32上开发TFT显示屏的项目可以显著简化开发流程,特别是对Python熟悉的开发者。通过Thonny IDE等工具,可以轻松编写、调试和运行代码。如果需要更多的指导或有其他问题,欢迎随时提问。