在Raspberry Pi的 I²C通信中,使用PCF8574 LCD时出现System.IO.IOException错误121(.NET)
我正在尝试将树莓派通过I²C连接到带有焊接HW-61板的Midas MCOB21605G1V-EYP显示屏。
HW-61板的VCC引脚连接到一个Wago分线连接器。该连接器有一根来自5V电源的线,另一根线通往Whadda WPI410电平转换器。
HW-61板的GND引脚也连接到另一个Wago分线连接器(不同的一个)。这个连接器有三根额外的GND线:一根来自树莓派,一根来自电源,一根来自Whadda WPI410电平转换器。
HW-61板的SDA和 SCL引脚连接到电平转换器上的相应引脚。在低压侧,电平转换器已经正确连接至树莓派。
如标题所述,我遇到了错误: “System.IO.IOException: Error 121(远程I/O错误)在执行I²C数据传输时。”
不过,I²C地址是正确的,并且树莓派上的I²C已启用。
代码:
using Iot.Device.CharacterLcd;
using Iot.Device.Pcx857x;
using se24_lite_display_manager.Models;
using System.Device.Gpio;
using System.Device.I2c;
namespace se24_lite_display_manager.Services
{
public class DisplayDriver
{
private Lcd1602? _lcd;
private readonly LiteDisplayManagerSettings _settings;
private readonly ILogger<DisplayDriver> _logger;
public DisplayDriver(LiteDisplayManagerSettings settings, ILogger<DisplayDriver> logger)
{
_settings = settings;
_logger = logger;
Start();
}
private void Start()
{
_logger.LogInformation("Starting the display...");
try
{
var i2cConnection = new I2cConnectionSettings(busId: 1, deviceAddress: 0x27);
var i2cDevice = I2cDevice.Create(i2cConnection);
var driverPcf = new Pcf8574(i2cDevice);
var gpioController = new GpioController(driverPcf);
_lcd = new Lcd1602(
registerSelectPin: 0,
enablePin: 2,
dataPins: new int[] { 4, 5, 6, 7 },
backlightPin: 3,
readWritePin: 1,
controller: gpioController
);
_lcd.Clear();
_lcd.Write("Hello World");
}
catch (Exception ex)
{
_logger.LogError($"{ex}");
_lcd = null;
}
}
}
}
解决方案
我不记得遇到过这个具体的错误,所以这不是一个简单的连接问题。但你的代码看起来没有道理,因为你先初始化了Pcf8574,但随后却从未使用它,而是以并行访问模式初始化显示(使用GPIO控制器)。
第一:我假设异常发生在 new Pcf8574() 调用处,因为那是唯一会进行I²C通信的地方。第二:Pcf8574是一个I²C GPIO扩展器,可能并不是你用来连接显示屏的设备。第三:Lcd1602类已经包含对常见I²C接口芯片的支持(包括你使用的那个,我相信)。所以你需要做的只有如下:
var i2cConnection = new I2cConnectionSettings(busId: 1, deviceAddress: 0x27);
var i2cDevice = I2cDevice.Create(i2cConnection);
_lcd = new Lcd1602(i2cDevice, true); // Depending on your chip, you might need to try false as the second argument
_lcd.Clear();
_lcd.Write("Hello World");
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。