如何解决Thonny IDE中树莓派Pico连SSD1306的OSError: [Errno 110] ETIMEDOUT错误
树莓派Pico+SSD1306 OLED ETIMEDOUT错误解决方法
问题场景
使用树莓派Pico和SSD1306 OLED屏幕运行代码时出现超时错误,执行i2c.scan()返回空列表,具体信息如下:
运行代码
from machine import Pin, I2C from ssd1306 import SSD1306_I2C import framebuf width = 128 height = 64 i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=400000) oled = SSD1306_I2C(width, height, i2c) oled.fill(0) oled.text("Hola perro", 5, 8) oled.text("2022", 5, 18) oled.show()
错误信息
Traceback (most recent call last): File "<stdin>", line 12, in <module> File "ssd1306.py", line 118, in __init__ File "ssd1306.py", line 37, in __init__ File "ssd1306.py", line 74, in init_display File "ssd1306.py", line 123, in write_cmd OSError: [Errno 110] ETIMEDOUT
I2C扫描结果
>>> print(i2c.scan()) []
解决步骤
检查硬件接线
- 确认引脚对应关系:Pico的GPIO14(SDA)接OLED的SDA引脚,GPIO15(SCL)接OLED的SCL引脚;如果用I2C0总线,对应引脚是GPIO0(SDA)和GPIO1(SCL),别混淆总线编号。
- 电源适配:OLED的VCC接Pico的3.3V引脚(多数SSD1306不支持5V供电,接5V可能导致通信异常或硬件损坏),GND引脚必须和Pico的GND连通。
- 排查接线故障:检查杜邦线是否损坏、引脚是否虚焊、连接是否松动。
调整I2C配置
- 确认总线编号正确:代码中用
I2C(1)对应Pico的I2C1总线,若实际接线用的是I2C0,需修改为I2C(0, scl=Pin(1), sda=Pin(0), freq=400000)。 - 降低通信频率:部分OLED模块对400kHz的高频支持不佳,将
freq=400000改为freq=100000重试。
- 确认总线编号正确:代码中用
验证库文件正确性
- 确保Pico上的
ssd1306.py是适配MicroPython的版本,避免使用Arduino等其他平台的库文件,必要时重新上传官方适配的SSD1306库。
- 确保Pico上的
内容的提问来源于stack exchange,提问作者AmirMohammad Poresmi
相关产品推荐
相关产品推荐

