You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32运行Micropython驱动1.54寸WaveShare红墨水屏显示红白噪声求助

问题原因及修复方案

1. 引脚冲突修复

你的代码中miso和busy两个功能同时占用了GPIO19,引脚冲突会导致SPI通信异常,最终显示乱码噪声。修改busy引脚为其他空闲GPIO(比如GPIO22),同时对应修改硬件接线即可。

2. 驱动传参逻辑修复

epaper1in54b是双色电子墨水屏驱动,display_frame()方法要求传入两个独立缓冲区:第一个为黑色内容缓冲区,第二个为红色内容缓冲区。你传入第二个参数为None,驱动会读取内存随机值作为红层数据,导致红区显示噪声。即使你不需要显示红色内容,也需要单独初始化一个全白的红层缓冲区传入。

3. 缓冲区参数适配

你当前使用的framebuf.MONO_VLSB扫描格式与驱动要求不匹配,需要修改为framebuf.MONO_HLSB,同时确认颜色值映射和驱动要求一致。

4. SPI速率调整

ESP32的SoftSPI在2MHz波特率下稳定性不足,建议降低波特率到100000,电子墨水屏本身刷新速率低,不需要高通信速率。

修正后可运行代码

from machine import Pin, SoftSPI
import epaper1in54b

# 引脚定义修正:busy改为GPIO22,避免和miso冲突
miso = Pin(19)
sck = Pin(18) # yellow 
mosi = Pin(23) # white 

cs = Pin(5) # green
dc = Pin(25) # gray
rst = Pin(21) # orange
busy = Pin(22) # 改为空闲GPIO,对应修改接线

# SPI速率调低保证稳定性
spi = SoftSPI(baudrate=100000, polarity=0, phase=0, sck=sck, mosi=mosi, miso=miso)
e = epaper1in54b.EPD(spi, cs, dc, rst, busy)

e.init()

w = 200
h = 200

import framebuf
# 初始化黑层缓冲区
buf_black = bytearray(w * h // 8)
fb_black = framebuf.FrameBuffer(buf_black, w, h, framebuf.MONO_HLSB)
# 初始化红层缓冲区,即使不用红色也需要传入
buf_red = bytearray(w * h // 8)
fb_red = framebuf.FrameBuffer(buf_red, w, h, framebuf.MONO_HLSB)

# 颜色值映射对应驱动定义
black = 1
white = 0
red = 1

# 两层都先填充白色
fb_black.fill(white)
fb_red.fill(white)
# 黑层写入文字
fb_black.text('Hello world!', 0, 0, black)
# 传入两个缓冲区
e.display_frame(buf_black, buf_red)

内容的提问来源于stack exchange,提问作者Besi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:27:02