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

猜你喜欢

转载自blog.csdn.net/zlbdmm/article/details/125144519
今日推荐