.net-core - Dotnet iot System.Device.Gpio 无法使用输出模式打开引脚
问题描述
我正在尝试在 .NET Core 上使用 System.Device.Gpio 为 PinMode.Output 打开一个引脚,然后想为这个引脚写入一个值,但我得到一个异常,这表明该引脚不是为输出模式打开的,而写入是不允许这样做。
我的代码是:
[HttpGet("{pinNumber}/{inputPinValue}")]
public async Task<IActionResult> SetPin(int pinNumber, string inputPinValue)
{
PinValue value = inputPinValue == "high" ? PinValue.High : PinValue.Low;
var controller = new GpioController(PinNumberingScheme.Logical, new GpioDriverMock());
controller.OpenPin(pinNumber, PinMode.Output);
controller.Write(pinNumber, value);
var result = JsonConvert.SerializeObject($"Pin value is {value}");
return StatusCode(200, result);
}
例外情况是:
System.InvalidOperationException:无法写入未设置为输出模式的引脚。在 System.Device.Gpio.GpioController.Write(Int32 pinNumber,PinValue 值)
我还有一个单独的方法,它只读取一个引脚值并且工作正常(引脚模式是输入作为默认模式)
只是为了解释:
GpioDriverMock - 是一个模拟驱动程序以便能够在 Win 10 上调试应用程序的类。这个应用程序的目标环境是带有 Docker 的 Raspberry Pi,所以我在将应用程序转移到 Raspberry 之前删除了创建这个模拟类实例。
当我在目标 Raspberry 上运行此应用程序时,它也不起作用并返回相同的异常。
解决方案
这个样本对你有用吗?如果不是,那么还有其他问题。
https://github.com/dotnet/iot/blob/master/samples/led-blink/Program.cs
当不在容器中运行时,您的代码是否有效?在某些情况下,容器需要在特权模式下运行才能使用 GPIO 或其他引脚。
推荐阅读
- android - ADB 命令适用于手机 zzzzzzzzzzzzzzzz
- javascript - 异步调用具有多个返回的函数
- java - ProcessWindowFunction (Apache Flink Java) 中的键控状态存储行为
- foreach - 如何一次为部分中的文本字段实现视图修饰符?
- maven - 使用 maven 程序集插件从 jar-with-dependencies 中删除文件
- mysql - MySQL 四舍五入到下一百(1-99 为 100)
- sql - SQL:在 WHERE 子句中将多个 AND 与 OR 组合
- ios - 自定义字体未在 SwiftUI 中显示
- javascript - 如何在使用 Javascript 和 PHP API 成功推文后获得推特的推文按钮响应,并且还想获得一个 url 的推文总数
- amazon-web-services - 在 EKS 集群中挂载 EFS:示例部署失败