I2C 控制 Raspberry Pi Bright Pi with dotnet
I2C control on Raspberry Pi Bright Pi with dotnet
我已经将 Bright Pi 连接到我的 Raspberry Pi 3 B 并通过使用 Unosquare RaspberryIO and WiringPi dotnet 我正在尝试控制 LED。
我已遵循此 Quick Start guide 并且可以根据此处记录的步骤确认 LED 工作...
如果我在设备上 运行 i2cdetect -y 1
我会看到以下输出。
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
如果我 运行 这个 sudo i2cset -y 1 0x70 0x00 0x5a
然后我看到 LED 亮起
现在我相信我无法理解如何将上面的内容翻译成一些实际的代码来让它工作。到目前为止,这是我尝试过的方法:
Pi.Init<BootstrapWiringPi>();
// Register a device on the bus
var myDevice = Pi.I2C.AddDevice(0x70);
// List registered devices on the I2C Bus
foreach (var device in Pi.I2C.Devices)
{
Console.WriteLine($"Registered I2C Device: {device.DeviceId}, {device.FileDescriptor}");
}
// 1. First attempt
myDevice.Write(0x5a);
// 2. Second attempt
myDevice.Write(new byte[] { 0x00, 0x5a });
如果有帮助,Console.WriteLine
输出 Registered I2C Device: 112, 44
。根据我之前发送的命令,我不确定我是否需要以某种方式将 44 设置为零。
明确地说,写入时没有任何反应,没有 LED 亮起,也没有抛出异常。
有谁能指出我哪里做错了吗?提前致谢。
感谢这里和其他地方的评论,有人指出 WiringPi 不再维护,并且在 System.Device.I2c
命名空间下有一个 dotnet API 可用。所以在这里使用它是解决我的问题的代码:
using (var bus = I2cBus.Create(1)) // 1 for the Raspberry Pi 3B
{
using (var device = bus.CreateDevice(0x70)) // Address of Bright Pi
{
device.Write(new byte[] { 0x00, 0xFF });
// Make sure the LEDs are on
await Task.Delay(TimeSpan.FromMilliseconds(200));
CaptureImage();
await Task.Delay(TimeSpan.FromMilliseconds(200));
// Turns the LEDs off
device.Write(new byte[] { 0x00, 0x00 });
bus.RemoveDevice(0x70);
}
}
我已经将 Bright Pi 连接到我的 Raspberry Pi 3 B 并通过使用 Unosquare RaspberryIO and WiringPi dotnet 我正在尝试控制 LED。
我已遵循此 Quick Start guide 并且可以根据此处记录的步骤确认 LED 工作...
如果我在设备上 运行 i2cdetect -y 1
我会看到以下输出。
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
如果我 运行 这个 sudo i2cset -y 1 0x70 0x00 0x5a
然后我看到 LED 亮起
现在我相信我无法理解如何将上面的内容翻译成一些实际的代码来让它工作。到目前为止,这是我尝试过的方法:
Pi.Init<BootstrapWiringPi>();
// Register a device on the bus
var myDevice = Pi.I2C.AddDevice(0x70);
// List registered devices on the I2C Bus
foreach (var device in Pi.I2C.Devices)
{
Console.WriteLine($"Registered I2C Device: {device.DeviceId}, {device.FileDescriptor}");
}
// 1. First attempt
myDevice.Write(0x5a);
// 2. Second attempt
myDevice.Write(new byte[] { 0x00, 0x5a });
如果有帮助,Console.WriteLine
输出 Registered I2C Device: 112, 44
。根据我之前发送的命令,我不确定我是否需要以某种方式将 44 设置为零。
明确地说,写入时没有任何反应,没有 LED 亮起,也没有抛出异常。
有谁能指出我哪里做错了吗?提前致谢。
感谢这里和其他地方的评论,有人指出 WiringPi 不再维护,并且在 System.Device.I2c
命名空间下有一个 dotnet API 可用。所以在这里使用它是解决我的问题的代码:
using (var bus = I2cBus.Create(1)) // 1 for the Raspberry Pi 3B
{
using (var device = bus.CreateDevice(0x70)) // Address of Bright Pi
{
device.Write(new byte[] { 0x00, 0xFF });
// Make sure the LEDs are on
await Task.Delay(TimeSpan.FromMilliseconds(200));
CaptureImage();
await Task.Delay(TimeSpan.FromMilliseconds(200));
// Turns the LEDs off
device.Write(new byte[] { 0x00, 0x00 });
bus.RemoveDevice(0x70);
}
}