树莓派Pico驱动SSD1306 OLED报OSError: [Errno 5] EIO故障求助
Raspberry Pi Pico 连接SSD1306 OLED 触发OSError: [Errno 5] EIO
问题描述
尝试将SSD1306 OLED显示屏与Raspberry Pi Pico配合使用,每次运行代码都会返回错误OSError: [Errno 5] EIO。此前通过修改库文件中的默认I2C地址(从0x3C改为i2c.scan()返回的0x3D)暂时解决了问题,但未修改任何代码的情况下故障再次出现。
使用代码
from machine import Pin, I2C from ssd1306 import SSD1306_I2C i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) oled = SSD1306_I2C(128, 64, i2c) oled.text("hello world", 0, 0) oled.show()
报错信息
Traceback (most recent call last): File "<stdin>", line 11, in <module> File "/lib/ssd1306.py", line 110, in __init__ File "/lib/ssd1306.py", line 36, in __init__ File "/lib/ssd1306.py", line 71, in init_display File "/lib/ssd1306.py", line 115, in write_cmd OSError: [Errno 5] EIO
修改后的库代码片段
class SSD1306_I2C(SSD1306): def __init__(self, width, height, i2c, addr=0x3D, external_vcc=False): self.i2c = i2c self.addr = addr self.temp = bytearray(2) self.write_list = [b"\x40", None] # Co=0, D/C#=1 super().__init__(width, height, external_vcc)
解决方向
- 检查硬件连接:重新插拔SDA、SCL引脚,确保接触无虚焊、松动;确认OLED供电为稳定3.3V,排查面包板电源线路是否有压降。
- 动态验证I2C地址:先单独运行
print(i2c.scan())确认当前设备地址,不要依赖历史结果;代码中显式指定地址,无需修改库文件,示例:oled = SSD1306_I2C(128, 64, i2c, addr=0x3D) - 降低I2C频率:高速400000Hz可能适配性差,尝试改为100000Hz:
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=100000) - 硬件重置:断开Pico和OLED电源,等待几秒后重新上电,排除临时硬件异常。
- 替换库文件:重新下载可靠来源的ssd1306库,避免文件损坏导致的错误。
内容的提问来源于stack exchange,提问作者odog
相关产品推荐
相关产品推荐

