树莓派5基于python 虚拟环境驱动ST7735S屏幕
树莓派5截止发稿时间(2025-11)最新的OS版本是基于Debian Trixie。前一版本基于Debian Bookworm。
我在最新版的Raspberry Pi OS ( Debian Trixie)下反复调试都没有驱动成功,遂安装了上一版本的 Raspberry Pi OS ( Debian Bookworm)。
以下所有的操作都是在 Raspberry Pi OS ( Debian Bookworm)执行的。

1. SPI硬件配置
$ sudo raspi-config
> 3 Interface Options > I4 SPI > YES
$ ls -l /dev/spi*
#你应该看到如下的信息:
crw-rw---- 1 root spi 153, 0 11月23日 01:50 /dev/spidev0.0
crw-rw---- 1 root spi 153, 1 11月23日 01:50 /dev/spidev0.1
crw-rw---- 1 root spi 153, 2 11月23日 01:50 /dev/spidev10.0
2. python环境设置
$ sudo apt-get update
$ sudo apt-get install python3 python3-pip python3-pil libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libopenjp2-7 libtiff6 -y
3. 创建虚拟环境
我使用的是“--system-site-packages”,虚拟环境 myenv 会继承系统全局的 Python 包(即 /usr/lib/python3/dist-packages/ 中的包,如 RPi.GPIO, picamera2, lgpio 等)。
这在树莓派上很常见,因为很多硬件库只能通过 apt 安装(如 python3-rpi.gpio),不能用 pip 装。
#创建虚拟环境
$ python -m venv testenv --system-site-packages
#运行虚拟环境
$ source testenv/bin/activate
#安装luma库
$ pip install luma.lcd
4. 权限设置
uma.lcd使用需要权限才能访问的硬件接口。请先 成功安装后,你可能需要添加一个用户账户 你的程序会运行给哪些组允许访问这些内容接口。
$ sudo usermod -a -G spi,gpio,i2c pi
# pi用你的用户名代替
5. 接线
ST7735引脚 Raspberry Pi引脚
SCL GPIO11 (Pin 23)
SDA GPIO10 (Pin 19)
CS GPIO8 (Pin 24)
DC GPIO24 (Pin 18)
RST GPIO25 (Pin 22)
BLK 直接连3.3V或GPIO18(Pin 12),如果需要控制背光的话
VCC 3.3V (Pin 1 or 17)
GND Ground (e.g., Pin 6)
————————————————
6. 运行测试代码
# luma_cpu_temp.py
from luma.core.interface.serial import spi
from luma.lcd.device import st7735
from luma.core.render import canvas
from PIL import ImageFont
import time
import os
import psutil
# 初始化 SPI 接口(根据你的接线)
serial = spi(
port=0,
device=0,
gpio_DC=24,
gpio_RST=25,
gpio_LIGHT=18
)
# 初始化 ST7735 屏幕(请根据你的屏幕实际方向调整 width/height)
device = st7735(
serial,
width=160,
height=128,
rotate=0,
h_offset=0,
v_offset=0
)
# 加载字体
try:
font_large = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 18)
font_small = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 14)
except OSError:
font_large = ImageFont.load_default()
font_small = font_large
# 主循环
try:
while True:
with canvas(device) as draw:
# 设置背景颜色为浅灰色
draw.rectangle(device.bounding_box, fill="lightgray")
# 绘制文本内容
draw.text((10, 10), "Raspberry Pi 5", fill="black", font=font_large)
draw.text((10, 40), "Test ST7735S", fill="blue", font=font_large)
time.sleep(2) # 每2秒刷新一次
except KeyboardInterrupt:
pass
finally:
print("Exiting....")
7. 运行效果

更多推荐


所有评论(0)