可以单独控制常规用途 I/O (GPIO) 引脚。 这对于控制 LED、中继和其他有状态设备非常有用。 在本主题中,你将使用 .NET 和 Raspberry Pi 的 GPIO 引脚为 LED 供电并重复闪烁。
先决条件
- 基于 ARM 的单板计算机(ARMv7 或更高版本)(SBC)
- 5 毫米 LED
- 330欧姆电阻器
- 试验板
- 跳线
- Raspberry Pi GPIO 扩展板(可选/推荐)
- .NET SDK 8 或更高版本
注释
本教程编写为假设目标设备为 Raspberry Pi。 但是,本教程可用于支持 .NET 的任何基于 Linux 的 SBC,例如 Orange Pi、ODROID 等。
确保设备上启用了 SSH。 对于 Raspberry Pi,请参阅 Raspberry Pi 文档中的 SSH 服务器设置。
准备硬件
使用硬件组件生成线路,如下图所示:
上图描述了以下连接:
- GPIO 18 到 LED 阳极(较长、正极导线)
- LED 阴极(较短、负极导线)到 330 Ω 电阻器(任一端)
- 330 Ω 电阻器(另一端)到地面
根据需要,请参阅以下引脚分配关系图:
图片由 Raspberry Pi Foundation 提供。
小提示
建议将 GPIO 扩展板与面包板结合使用,以简化与 GPIO 标头的连接。
创建应用
在首选开发环境中完成以下步骤:
使用 .NET CLI 或 Visual Studio 创建新的 .NET 控制台应用。 将其命名为 BlinkTutorial。
dotnet new console -o BlinkTutorial cd BlinkTutorial
将 System.Device.Gpio 包添加到项目。 可以从项目目录使用 .NET CLI 或使用 Visual Studio。
dotnet add package System.Device.Gpio --version 3.2.0-*
将 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
循环无限期运行。 每次迭代:- 将值写入 GPIO 引脚 18。 如果
ledOn
为 true,则迭代写入PinValue.High
(开)。 否则,它将写入PinValue.Low
。 - 休眠 1000 毫秒。
- 切换
ledOn
的值。
- 将值写入 GPIO 引脚 18。 如果
- using 声明创建
构建应用程序。 如果使用 .NET CLI,请运行
dotnet build
。 若要在 Visual Studio 中生成,请按 Ctrl+Shift+B。将应用作为独立应用部署到 SBC。 有关说明,请参阅 将 .NET 应用部署到 Raspberry Pi。 请确保使用
chmod +x
指定可执行的 execute 权限。切换到部署目录并运行可执行文件,在 Raspberry Pi 上运行应用。
./BlinkTutorial
LED 每隔一秒闪烁一次。
按 Ctrl+C 终止程序。
祝贺! 你已经使用 GPIO 让 LED 闪烁。
获取源代码
本教程的源 在 GitHub 上提供。