树莓派Python通过I2C多路器访问LCD时遇OSError 121远程I/O错误求助
解决树莓派I2C多路器Remote I/O错误(Errno 121)
问题核心
你的i2cdetect -y 1结果完全没有设备,连I2C多路器的默认地址0x70都扫不到,说明树莓派根本没检测到多路器,这是导致write_byte(0x70, 0xFF)报错的直接原因。
排查与解决步骤
1. 确认树莓派I2C功能已启用
- 打开终端执行
sudo raspi-config,进入Interface Options → I2C,选择启用后重启树莓派。 - 也可以手动编辑
/boot/config.txt,确保存在一行dtparam=i2c_arm=on,没有则添加,保存后重启。
2. 重新检查硬件连接细节(新手易忽略点)
- 电平匹配:I2C多路器(如TCA9548A)和SSD1306 LCD统一用3.3V供电,避免5V电平导致设备不响应。
- 引脚对应:树莓派SDA对应GPIO2(物理引脚3),SCL对应GPIO3(物理引脚5),不要接反多路器的SDA/SCL引脚。
- 地址引脚:多路器的A0-A3引脚默认需接地,这样地址才是
0x70;若这些引脚接高电平,地址会偏移,导致扫不到。 - 线路质量:避免用过长的杜邦线,若信号衰减,给SDA/SCL线各加一个4.7kΩ的上拉电阻(一端接VCC,一端接对应引脚)。
3. 单独测试多路器
- 断开所有LCD屏幕,仅将多路器的VCC、GND、SDA、SCL接到树莓派,再执行
i2cdetect -y 1:- 若能看到
0x70,说明多路器正常,问题出在LCD连接或多路器与LCD的匹配上。 - 若仍看不到,大概率是多路器损坏,更换一个测试。
- 若能看到
4. 代码小调整
- 在初始化SMBus后添加延时,避免设备未就绪就写入:
import time bus = smbus2.SMBus(1) time.sleep(1) # 给设备预留初始化时间 bus.write_byte(0x70, 0xFF)
内容的提问来源于stack exchange,提问作者Frenchman
相关产品推荐
相关产品推荐

