C# Net6通过System.Device.Gpio.GpioController实现控制Linux Arm工控机LED指示灯
0、背景
GPIO是单片机的引脚输入输出功能,在进行嵌入式单片机研发时一般都会有关于LED指示灯的控制,一般是向GPIO接口中写入高低电平实现LED指示灯的亮与灭。
1、实现环境
硬件设备(工控机):辉为科技BOXPC820
操作系统:Linux hw335x-core 4.19.94-gbe5389fd85 #89 PREEMPT Mon Sep 6
19:27:53 CST 2021 armv7l GNU/Linux。
LED指示灯:1路电源指示灯,3路用户可定义LED,默认1路为系统心跳灯,因此剩余2路用户自定义LED(LED编号分别为113-红,116-绿)。
设备默认如下图:
2、LED设备初始化
通过C# Net6程序控制LED指示灯之前,需要对剩余的2路可定义LED设备进行初始化定义,具体如下:
113号LED指示灯初始化
echo 113 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio113/direction
113号LED指示灯置亮测试
echo 1 > /sys/class/gpio/gpio113/value
113号LED指示灯置灭测试
echo 0 > /sys/class/gpio/gpio113/value
116号LED指示灯初始化
echo 116 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio116/direction
116号LED指示灯置亮测试
echo 1 > /sys/class/gpio/gpio116/value
116号LED指示灯置灭测试
echo 0 > /sys/class/gpio/gpio116/value
3、C# Net6编程实现控制LED指示灯的亮灭
LED指示灯初始化以后,就可以通过程序控制指示灯的亮灭了,步骤如下:
1、在VS2022中创建一个控制台应用程序,比如工程名称为ConsoleAppGpioTest。(选择net6)
2、鼠标右键工程依赖项->管理NuGet程序包(N)…,在依赖项中安装System.Device.Gpio包。
3、修改Program.cs代码如下:
using System;
namespace ConsoleAppGpioTest
{
static class Program
{
public static void Main(string[] args)
{
int pinNumber = 113; //保存LED指示灯编号
string value = "High"; //High为高电平-亮,Low为低电平-灭
if (args.Length > 0)
{
int.TryParse(args[0], out pinNumber);
}
if (args.Length > 1)
{
value = args[1];
}
Console.WriteLine($"测试pinNumber = {pinNumber}, Value = {value}");
using (System.Device.Gpio.GpioController controller = new System.Device.Gpio.GpioController())
{
controller.OpenPin(pinNumber); //打开指定编号LED设备
if (value == "High")
{
controller.Write(pinNumber, System.Device.Gpio.PinValue.High); //向指定编号的LED设备写入高电平信号-亮
}
else
{
controller.Write(pinNumber, System.Device.Gpio.PinValue.Low); //向指定编号的LED设备写入低电平信号-灭
}
controller.ClosePin(pinNumber); //关闭指定编号LED设备
}
}
}
}
4、编译此项目,并把编译后的文件发布到工控机/opt/apps/ConsoleAppGpioTest目录下,如下:
5、通过程序控制113号LED置亮
dotnet ConsoleAppGpioTest.dll 113 High
执行如下:
6、通过程序控制116号LED置亮
dotnet ConsoleAppGpioTest.dll 116 High
执行如下:
7、控制113号LED灯灭
dotnet ConsoleAppGpioTest.dll 113 Low
8、控制116号LED灯灭
dotnet ConsoleAppGpioTest.dll 116 Low