通过


让 LED 闪烁

可以单独控制常规用途 I/O (GPIO) 引脚。 这对于控制 LED、中继和其他有状态设备非常有用。 在本主题中,你将使用 .NET 和 Raspberry Pi 的 GPIO 引脚为 LED 供电并重复闪烁。

先决条件

  • 基于 ARM 的单板计算机(ARMv7 或更高版本)(SBC)
  • 5 毫米 LED
  • 330欧姆电阻器
  • 试验板
  • 跳线
  • Raspberry Pi GPIO 扩展板(可选/推荐)
  • .NET SDK 10 或更高版本

注释

本教程编写为假设目标设备为 Raspberry Pi。 但是,本教程可用于支持.NET的任何基于 Linux 的 SBC,例如 Orange Pi、ODROID 等。

确保设备上启用了 SSH。 对于 Raspberry Pi,请参阅 Raspberry Pi 文档中的 SSH 服务器设置

准备硬件

使用硬件组件生成线路,如下图所示:

一个 Fritzing 图表,显示带 LED 和阀的电路

上图描述了以下连接:

  • GPIO 18 到 LED 阳极(较长、正极导线)
  • LED 阴极(较短、负极导线)到 330 Ω 电阻器(任一端)
  • 330 Ω 电阻器(另一端)到地面

根据需要,请参阅以下引脚分配关系图:

Raspberry Pi GPIO 接头引脚排列图。图片由 Raspberry Pi 基金会提供。
图片由 Raspberry Pi Foundation 提供

小提示

建议将 GPIO 扩展板与面包板结合使用,以简化与 GPIO 标头的连接。

创建应用

在首选开发环境中完成以下步骤:

  1. 使用 .NET CLIVisual Studio 创建新的.NET控制台应用。 将其命名为 BlinkTutorial

    dotnet new console -o BlinkTutorial
    cd BlinkTutorial
    
  2. System.Device.Gpio 包添加到项目。 使用项目目录中的 .NET CLIVisual Studio

    dotnet package add System.Device.Gpio --version 4.0.1
    
  3. 将 Program.cs 的内容替换为以下代码:

    using System;
    using System.Device.Gpio;
    using System.Threading;
    
    Console.WriteLine("Blinking LED. Press Ctrl+C to end.");
    int pin = 18;
    using var controller = new GpioController();
    controller.OpenPin(pin, PinMode.Output);
    bool ledOn = true;
    while (true)
    {
        controller.Write(pin, ((ledOn) ? PinValue.High : PinValue.Low));
        Thread.Sleep(1000);
        ledOn = !ledOn;
    }
    

    在前面的代码中:

    • using 声明创建一GpioController个实例。 声明 using 可确保对象被妥善处理并释放硬件资源。
    • GPIO 引脚 18 已打开以供输出
    • while循环无限期运行。 每次迭代:
      1. 将值写入 GPIO 引脚 18。 如果 ledOn 为 true,则写 PinValue.High(启用)。 否则,它将写入 PinValue.Low
      2. 休眠 1000 毫秒。
      3. 切换 ledOn 的值。
  4. 构建应用程序。 如果使用 .NET CLI,请运行 dotnet build。 若要在 Visual Studio 中生成,请按 Ctrl+Shift+B

  5. 将应用作为独立应用部署到 SBC。 有关说明,请参阅 将 .NET 应用部署到 Raspberry Pi。 请确保使用 .. 授予可执行文件chmod +x权限。

  6. 切换到部署目录并运行可执行文件,在 Raspberry Pi 上运行应用。

    ./BlinkTutorial
    

    LED 每隔一秒闪烁一次。

  7. Ctrl+C 终止程序。

祝贺! 你已经使用 GPIO 让 LED 闪烁。

获取源代码

本教程的源码可以在 GitHub 上找到。

后续步骤