这可能是一个错误的地方问这个问题(但我认为它是正确的地方,因为它涉及编程)。
所以我为我们的学校项目得到了一个树莓派零。我通过 SSH 进入它以检查它可以用它做什么。我对如何使用这张卡上的 GPIO 引脚进行了一些研究。
基本上:
$ echo 17 > /sys/class/gpio/export
$ echo out > /sys/class/gpio/gpio17/direction
$ echo 1 > /sys/class/gpio/gpio17/value
$ echo 17 > /sys/class/gpio/unexport
启用 GPIO 引脚 17 并将数字 1 写入其中并“取消导出”它,不需要 root。
我还想尝试一下这张卡片中的一些语言。我尝试了 python、C# 和 Rust 没有问题(尽管 rust 编译速度很慢,但它可以工作)。所以我开始使用我最喜欢的语言 C# 和单声道。安装它并编译一个基本程序没什么大不了的,它可以工作。
所以我写这个:
using System;
using System.IO;
namespace Program
{
public static class Program
{
public static void Main()
{
if (Directory.Exists("/sys/class/gpio/gpio17/"))
File.WriteAllText("/sys/class/gpio/unexport", "17");
File.WriteAllText("/sys/class/gpio/export", "17");
File.WriteAllText("/sys/class/gpio/gpio17/direction", "out");
File.WriteAllText("/sys/class/gpio/gpio17/value", "1");
}
}
}
基本上,如果它发现 17 引脚打开,则“取消导出”它然后重新导出它,设置为输出并写入数字 1。
编译:
mcs program.cs -out:program.exe -debug && ./program.exe
输出:
Unhandled Exception:
System.UnauthorizedAccessException: Access to the path "/sys/class/gpio/gpio17/direction" is
denied.
什么?如何?它适用,sudo mono ./program.exe
不mono ./program.exe
适用当然,我总是可以使用wiringPi或python,但我对这个很好奇,找不到答案。这对我来说没有意义。/sys/class/gpio/gpio17
是一个符号链接,我也尝试访问原始路径但没有运气。
这里可能有什么问题?