手把手使用Micropython+合宙Esp32c3+合宙air101LCD屏幕绘制,显示图片以及ST7735的详细使用教程
一、驱动安装
CH343驱动下载
下载最新版本就好
驱动下载好后,以管理员身份运行,并点击“安装”
安装完成之后连接设备就可以在设备管理器中看到自己设备及端口

二、为合宙Esp32c3安装Micropython固件库
1.Micropython简介
MicroPython 是一种精简版的 Python 语言实现,专门用于嵌入式系统和物联网设备。它提供了一个适用于微控制器的交互式解释器和运行环境,使开发者能够在资源有限的硬件上编写和运行 Python 代码。
以下是 MicroPython 的一些主要特点:小巧且高效、交互式解释器、硬件支持、底层硬件控制、模块化扩展性、低功耗支持
总的来说,MicroPython 提供了一种简洁、高效且易于使用的编程环境,适用于嵌入式系统和物联网设备的开发。它将 Python 的易用性和灵活性带到了硬件领域,使得开发者可以更加便捷地创建各种智能设备和嵌入式项目。
2.Micropython解释器下载
使用Thonny或者VScode均可,这里两个都介绍下。
-Thonny解释器:
Thonny官网直接点击进入下载对于版本。
Thonny体量很小,是一个简单易用的适合于Micropython的IDE,美中不足的是
没有代码补全!不熟悉的人来说写起来比较费时间
-VScode:
插件名:RT-Thread MicroPython 直接搜索安装即可
安装成功后就可以看到下方有这样的标识

而大家都知道VScode的优点,比如代码补全!这是Thonny没有的
此外的两者使用会随后说明
提示:此外的两者使用会随后说明
3.ESP32C3固件库下载以及安装
固件库下载
注意分清自己的ESP32C3是哪个对应的版本:
ESP32C3固件库下载
ESP32C3-with-usb固件库下载
下载最新版即可
提示:不知道自己对应的版本可以一个一个试,但多半是ESP32C3
下载完成后会得到一个.bin格式的文件

固件库安装
有两种方法
方法一:Thonny中直接进行安装
打开Thonny,上侧的run->配置解释器后出现如图:


我这里是最新版本,点击那三条杠后会出现几个选项
选择第一个Select local MicroPython image ...选择之前的bin文件安装即可。
安装完成后重进,可以看到Thonny左侧栏多出了Micropython device即为安装成功。

方法二:使用flash_download_tool安装(推荐)
也许有些人在方法一安装失败了,那么请使用方法二,也是我极力推荐的一个方法首先需要软件flash_download_tool,下面是百度网盘下载链接
链接:https://pan.baidu.com/s/1ANF3Z20itoeXNO-FnUoNgw
提取码:anse
永久有效<


点击ok,如果你之前有一些别的在里面,特别是从方法一试过的人。简易把上面的全部清空

清空后选择正确的端口再点击

等待完成后再回到上面的几栏,点击三个点

选择你的.bin固件库,并在右侧填入0x0000,之后点击

等待片刻后就完成了,然后再回到Thonny,这时候不用操作,它会自动识别,然后也同样会在左侧出现Micropython device,安装成功!
三、代码上传到ESP32C3中
使用Thonny上传
在Micropython device 中右键新建一个.py文件即可,下面是一个测试代码,我创建一个pwmled.py
from machine import Pin,PWM
import time
led13 = PWM(Pin(13))
led13.freq(1000)
def main():
while True:
for i in range(0 , 1023):
led13.duty(i)
time.sleep_ms(2)
for i in range(1023 , -1, -1):
led13.duty(i)
time.sleep_ms(2)
if __name__=="__main__":
main()

按F5或点击如图的地方即可上传
使用vscode
点击

连接即可,然后后右键你的ledpwm.py

在vscode中下载到设备上后,如果再用Thonny打开会显示你在vscode中上传的代码。、
四、驱动合宙air101LCD
接线:其实没有接线
像这样焊接其实差不多
一插即用

ST7735.py库
合宙air101LCD的驱动芯片是ST7735。
ST7735库的下载地址
我所使用的是根据ST7735改的库,详情点击网页即可。
下载之后就导入库。
需要导入的是如下

导入方法就是在上侧Files中选择一个文件,右键后有upload to/点击即可

如果它显示都是‘正在启动’直接cancel就可以上传了。
五、ST7735代码使用
1.引入库以及一些初始化
代码如下(示例):
from machine import SPI, Pin # 导入 SPI 和 Pin 类模块
from ST7735 import TFT, bitSwap, FontLib # 导入 TFT、bitSwap 和 FontLib 类模块
import time # 导入 time 模块
import framebuf # 导入 framebuf 模块
import random # 导入 random 模块
USE_FRAME_BUFFER = True # 设置使用帧缓冲器(frame buffer)
# 初始化 SPI 接口,设置波特率、极性、相位和引脚号
spi = SPI(1, baudrate=40000000, polarity=0, phase=0, sck=Pin(2), mosi=Pin(3), miso=Pin(10))#无需修改
tft = TFT(spi, '/combined.bin', 6, 10, 7) # 创建 TFT 对象,指定 SPI、字库文件路径和引脚配置
#由于直接应用了/combined.bin字体库可以直接写中文
tft.init_7735(tft.REDTAB80x160) # 初始化 TFT,设置显示类型为 80x160 像素
tft.fill(TFT.WHITE) # 填充屏幕为白色,实际显示为黑色
#上述都无需改动
2.测试代码
代码如下(示例):
from machine import SPI, Pin # 导入 SPI 和 Pin 类模块
from ST7735 import TFT, bitSwap, FontLib # 导入 TFT、bitSwap 和 FontLib 类模块
import time # 导入 time 模块
import framebuf # 导入 framebuf 模块
import random # 导入 random 模块
USE_FRAME_BUFFER = True # 设置使用帧缓冲器(frame buffer)
# 初始化 SPI 接口,设置波特率、极性、相位和引脚号
spi = SPI(1, baudrate=40000000, polarity=0, phase=0, sck=Pin(2), mosi=Pin(3), miso=Pin(10))#无需修改
tft = TFT(spi, '/combined.bin', 6, 10, 7) # 创建 TFT 对象,指定 SPI、字库文件路径和引脚配置
#由于直接应用了/combined.bin字体库可以直接写中文
tft.init_7735(tft.REDTAB80x160) # 初始化 TFT,设置显示类型为 80x160 像素
tft.fill(TFT.WHITE) # 填充屏幕为白色,实际显示为黑色
#上述都无需改动
#不停显示字符
text=['你好!','世界!','在干嘛?','上号!','氪不改非']
font_width = 11
font_height = 14
def show_text():
x,y=random.randint(0,120),random.randint(0,60)+1
r = random.randint(0,4)
tft.fillrect((x,y),(font_width*len(text[r]),font_height),TFT.color(random.randint(0,255),random.randint(0,255),random.randint(0,255)))
tft.text(
(x,y),
text[r],
TFT.color(random.randint(0,255),random.randint(0,255),random.randint(0,255)),
1
)
time.sleep_ms(200)
if __name__=="__main__":
while True:
time.sleep(1)
for i in range(100):
show_text()
tft.fill(TFT.WHITE)
效果:
3.图片显示以及一些基础绘制函数使用
推荐使用一串代码来生成.dat格式文件
from PIL import Image #需要PIL库
import struct
import os
def image_to_dat(image_path, output_path):
image = Image.open(image_path)
image = image.convert('RGB')
width, height = image.size
dat_file_path = os.path.splitext(output_path)[0] + '.dat'
with open(dat_file_path, 'wb') as f:
for y in range(height):
for x in range(width):
r, g, b = image.getpixel((x, y))
inverted_r = 255 - r
inverted_g = 255 - g
inverted_b = 255 - b
color565 = ((inverted_r & 0xF8) << 8) | ((inverted_g & 0xFC) << 3) | (inverted_b >> 3)
color_bytes = struct.pack('>H', color565)
f.write(color_bytes)
print(f"成功生成 {dat_file_path} 文件。")
# 调用示例
image_path = 'C:/Users/ansel/Desktop/746b3cb26942a31d976fe77df0dc9622.jpg' # 图像文件路径
output_path = 'C:/Users/ansel/Downloads/4.dat' # 输出的 .dat 文件路径
image_to_dat(image_path, output_path)
成功将图片转化为565颜色的.dat格式后,将文件update to /设备里。
以下是图片显示的代码:
with open('/4.dat', 'rb') as f:
for row in range(80):
buffer = f.read(160)
tft.image(0,row,159,row,buffer)
效果:

剩余的简单看一下ST7735.py里的函数即可:
x,y=10,10
#翻转屏幕:rotation
tft.rotation(1) #0到4的整数
#画像素点:pixel
tft.pixel((x,y),TFT.BLACK) #参数分别为位置坐标,颜色
#字符串输出:text
tft.text((x,y),'你好!WORLF!',TFT.BLACK,1,True)#参数分别为位置坐标,字符串,颜色,字体大小,是否自动换行
#字符输出:char
tft.char((x,y),'1',TFT.BLACK,1)#参数分别为位置坐标,字符,颜色,字体大小
#画线:line
tft.line((x,y),(x+10,y+10),TFT.BLACK)#参数分别为起始位置坐标,末位置坐标,颜色
#画竖线以及画横线:vline以及hline
tft.vline((x,y),10,TFT.BLUE)#参数分别为起始位置坐标,长度,颜色
tft.hline((x,y),10,TFT.BLUE)#参数分别为起始位置坐标,长度,颜色
#画矩形边框以及填充矩形:rect以及fillrect
tft.rect((x,y),(10,20),TFT.GREEN)#参数分别为起始位置坐标,长宽,颜色
tft.fillrect((x,y),(10,20),TFT.GREEN)#参数分别为起始位置坐标,长宽,颜色
#画圆边框及填充圆:circle以及fillcircle
tft.circle((x,y),10,TFT.BLACK)#参数分别为起始位置坐标,半径,颜色
tft.fillcircle((x,y),10,TFT.BLACK)#参数分别为起始位置坐标,半径,颜色
#

浙公网安备 33010602011771号