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

运行SSD1306 OLED代码时出现OSError: [Errno 5] EIO,求错误成因

问题分析:OSError: [Errno 5] EIO 错误成因

错误信息

>>> %Run -c $EDITOR_CONTENT
Traceback (most recent call last):
  File "<stdin>", line 5, 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

代码内容

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C

i2c = I2C(0, sda=Pin(16), scl=Pin(17), freq=40000)
oled = SSD1306_I2C(128, 64, i2c)

oled.fill(0)
oled.text("Hello", 0, 0)
oled.show()
import machine
import ssd1306
import time

# Define the pins for I2C communication
i2c = machine.I2C(0, sda=machine.Pin(16), scl=machine.Pin(17), freq=400000)

# Define the display object
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# Clear the display
oled.fill(0)
oled.show()

# Display something
oled.text("Hello, Pico!", 0, 0)
oled.show()

错误成因

这个Errno 5 EIO属于输入输出错误,核心是单片机与SSD1306 OLED屏的I2C通信完全失败,常见诱因如下:

  • 硬件接线问题:SDA、SCL引脚接反,线路松动/接触不良;OLED的VCC、GND供电异常(比如电压不匹配、供电不足)。
  • I2C引脚配置错误:你使用了I2C(0)总线,但不同开发板的I2C总线对应引脚不同,比如树莓派Pico的I2C0默认对应GP0、GP1,若GP16/GP17并非该板子的I2C0引脚,就会导致通信中断。
  • I2C频率不兼容:SSD1306虽标称支持最高400kHz,但如果线路过长、线材质量差,高频下会出现信号丢包。你代码里混用了40kHz和400kHz两种频率,建议先降到100kHz测试。
  • OLED地址不匹配:SSD1306默认I2C地址为0x3C或0x3D,若你的屏幕地址并非这两个,初始化时未指定就会通信失败。可以先扫描总线确认设备地址:
    from machine import I2C, Pin
    i2c = I2C(0, sda=Pin(16), scl=Pin(17))
    print(i2c.scan())
    
  • 重复初始化干扰:代码里重复导入模块、创建I2C和OLED对象,虽不会直接触发错误,但可能打乱通信时序,建议合并代码逻辑,避免重复初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:42:40