本文介绍了(Raspbian+C#+Mono)';System.Device.Gpio.Drivers.LibGpiodDriver';的类型初始值设定项引发异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在为一个新项目进行初步研究。我买了一部覆盆子PI 3B,我正在试着运行一个小程序来检查我们所有的必需品:
- SQL Server连接。
- 将配置文件保存在磁盘上。
- 在Raspberry GPIO中配置和使用一些DI/DO。
到目前为止,我已经在上面安装了Mono库,并且正在我的Windows计算机中使用Visual Studio 2019来构建一个WinForms应用程序。
Raspberry OS version: Raspbian GNU/Linux 10 (buster)
Mono version : Mono JIT compiler version 6.12.0.122
这些是我的应用程序的包:(.Net Framework4.8)
<packages>
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Device.Gpio" version="1.5.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net48" />
<package id="System.Runtime.InteropServices.WindowsRuntime" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.WindowsRuntime" version="4.6.0" targetFramework="net48" />
<package id="System.Security.AccessControl" version="5.0.0" targetFramework="net48" />
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>
到目前为止,我还没有连接到GPIO,我只是尝试使用以下代码读取管脚值:
private void ReadPinTest()
{
int pin = 24;
PinValue pinValue = PinValue.Low;
try
{
using (GpioController gpio = new GpioController(PinNumberingScheme.Board))
{
if (gpio == null)
{
MessageBox.Show("No GPIO controller found.");
return;
}
gpio.OpenPin(pin, PinMode.Input);
pinValue = gpio.Read(pin);
}
MessageBox.Show($"Pin {pin} is {pinValue}");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
MessageBox.Show(ex.InnerException.Message);
MessageBox.Show(ex.InnerException.StackTrace);
}
}
我收到下一个错误:
异常消息:
"System.Device.Gpio.Drivers.LibGpiodDriver"的类型初始值设定项引发异常。
内部异常消息:
libgpiod
内部异常StackTrace:
At(包装器托管到本机)Interop+libgpiod.gpiod_Version_String()
At System.Device.Gpio.Drivers.LibGpiodDriver.IsLibgpiodVersion1_5orHigher()[0x00000]in<;d49ca6cd97194f038905958dbca2c58c>;:0
At System.Device.Gpio.Drivers.LibGpiodDriver..cctor()[0x0000f]in:0
我已尝试重新安装gpiod库:
sudo apt-get install gpiod
gpiod已是最新版本(1.2-3+rpi1)。
我做错了什么?
推荐答案
当面向linux/raspbian时,我推荐使用.NET 5.0。在这个版本中,对Linux的支持有了很大的改进,而Mono的未来还不确定。它还没有正式的图形用户界面支持,但你可以使用Avalonia或尝试Maui-Linux包,它最终将进入.NET 6.0(计划在今年秋天)。
您的特定问题可能通过运行
sudo apt install -y libgpiod-dev
然而,System.Device.Gpio还没有针对Mono进行过深入的测试,因为它主要是针对.NET Core的。.NET框架支持适用于Windows。
这篇关于(Raspbian+C#+Mono)';System.Device.Gpio.Drivers.LibGpiodDriver';的类型初始值设定项引发异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!