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
相关产品推荐
相关产品推荐

