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

树莓派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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:20:35