獲取最佳閱讀體驗(yàn)請?jiān)L問:https://zhangyue.xin
如何在 Raspberry Pi 的 Raspbian 上構(gòu)建使用 GPIO 引腳的 IoT 程序?你可能會回答使用 C++ 或 Python 去訪問 Raspberry Pi 的引腳∪髀伲現(xiàn)在豹绪,C# 程序員可以使用 .NET Core 在 Raspbian(Linux) 上構(gòu)建 IoT 應(yīng)用程序。只需要引入 System.Device.GPIO NuGet 包即可申眼。
注意:System.Device.GPIO 仍處于早期預(yù)覽狀態(tài)瞒津。并且目前僅支持部分 Raspberry Pi 、 Pine64 和 Hummingboard 的板子括尸。
若要繼續(xù)閱讀下面的內(nèi)容巷蚪,你需要準(zhǔn)備:
- 安裝有 Linux 的 Raspberry Pi 2B/3B/3B+
- Visual Studio 2017
- 用于構(gòu)建程序的 .NET Core SDK (版本大于 2.1)
環(huán)境配置
-
首先在 Raspbian 的 Terminal 上運(yùn)行如下命令,以安裝運(yùn)行程序所依賴的程序包濒翻。
sudo apt-get update sudo apt-get install curl libunwind8 gettext apt-transport-https
提示:
1. 遠(yuǎn)程訪問 Raspbian 可以使用 putty 通過 SSH 進(jìn)行訪問屁柏,也可以使用 apt 安裝 xrdp ,通過 Windows 遠(yuǎn)程桌面進(jìn)行訪問有送。
2. 運(yùn)行 ASP.NET Core 程序還需要安裝運(yùn)行時(shí)(Runtime)淌喻。安裝可以參考這個(gè)。(不管是 3B 還是 3B+ 雀摘,Raspbian 的內(nèi)核都為 32 位裸删,部分 ASP.NET Core 常用的 NuGet 包并不支持 arm32) -
打開菜單中的 Raspberry Pi 配置,獲取必要的硬件接口的訪問權(quán)限阵赠。
-
打開 Visual Studio 的設(shè)置涯塔,在 NuGet 包管理器設(shè)置下,添加 .NET Core Lab 的程序包源:https://dotnet.myget.org/F/dotnet-corefxlab/api/v3/index.json
Blink
熟悉 Arduino 的朋友都知道清蚀,Blink 是默認(rèn)燒寫進(jìn) Arduino 的初始程序匕荸,控制板載連接 13 號引腳的 LED 閃爍。是一種類似于“Hello World”的存在轧铁。這里我們將 LED 小燈連接至 Raspberry Pi 的 GPIO 17 引腳每聪。
硬件
- 一顆 LED 小燈
- 一個(gè) 220 Ω 電阻
- 若干杜邦線
電路
圖源:https://github.com/dotnet/iot/tree/master/samples/led-blink
代碼
-
打開 Visual Studio ,新建一個(gè) .NET Core 控制臺應(yīng)用程序齿风,項(xiàng)目名稱為“Blink”药薯。
-
打開 “工具”——“NuGet包管理器”——“程序包管理器控制臺”,運(yùn)行如下命令救斑,以獲取程序包童本。
Install-Package System.Devices.Gpio -Version 0.1.0-preview2-181222-2
-
在 Program.cs 中,替換如下代碼:
using System; using System.Devices.Gpio; using System.Threading; namespace Blink { class Program { static void Main(string[] args) { // get the GPIO controller // 獲取 GPIO 控制器 GpioController controller = new GpioController(PinNumberingScheme.Gpio); // open PIN 17 // 打開引腳 17 GpioPin ledPin = controller.OpenPin(17, PinMode.Output); // define delay time // 設(shè)置延遲時(shí)間 int time = 1000; // loop // 循環(huán) while (true) { Console.WriteLine($"Light for {time}ms"); // turn the LED on // 打開 LED ledPin.Write(PinValue.High); // wait for a second // 等待 1s Thread.Sleep(time); Console.WriteLine($"Dim for {time}ms"); // turn the LED off // 關(guān)閉 LED ledPin.Write(PinValue.Low); // wait for a second // 等待 1s Thread.Sleep(time); } } } }
部署
-
在“程序包管理器控制臺”運(yùn)行發(fā)布命令:
dotnet publish -c release -r linux-arm
提示:
默認(rèn)的發(fā)布路徑是在 “\Blink\bin\Release\netcoreappXXX\win10-arm\publish”脸候。你也可以使用 -o 來指定發(fā)布路徑穷娱,如:-o D:\BlinkPublish 绑蔫,這將會發(fā)布在 D 盤的 BlinkPublish 文件夾下。 -
使用 FTP 工具將生成的發(fā)布文件夾復(fù)制到 Raspberry Pi 上泵额,這里使用的是 WinSCP 配深。
提示:
Raspbian 使用 FTP 服務(wù),請使用 apt 安裝 vsftpd 嫁盲。 -
更改程序權(quán)限篓叶。使用 cd 命令切換到發(fā)布的文件夾,運(yùn)行:
chmod 755 ./Blink
或使用 FTP 工具進(jìn)行變更
-
執(zhí)行 ./Blink 運(yùn)行程序羞秤,此時(shí) LED 小燈應(yīng)該一閃一閃的了缸托。
備注:
下一篇文章將使用紅外傳感器進(jìn)一步熟悉 GPIO 的操作。