張高興的 .NET Core IoT 入門指南:(一)環境配置、Blink、部署

如何在 Raspberry Pi 的 Raspbian 上構建使用 GPIO 引腳的 IoT 程序?你可能會回答使用 C++ 或 Python 去訪問 Raspberry Pi 的引腳。如今,C# 程序員可使用 .NET Core 在 Linux 上構建 IoT 應用程序。只須要引入 System.Device.Gpio NuGet 包便可。css

  提示linux

由於 .NET Core JIT 依賴於 ARMv7 指令集,所以處理器架構新於 ARMv7 的 Linux 開發板均可以使用此包進行硬件操做。固然,一些特殊的硬件操做除外,好比對 GPIO 引腳進行上拉,這須要對處理器的寄存器進行訪問,而 System.Device.Gpio 對不支持的硬件僅實現了通用操做。git

若要繼續閱讀下面的內容,你須要準備:程序員

  1. 安裝有 Linux 的 Raspberry Pi 2B/3B/3A+/3B+
  2. Visual Studio 2019
  3. 用於構建程序的 .NET Core SDK (版本大於 2.1)

環境配置

  1. 首先獲取 Raspberry Pi 的硬件接口的訪問權限。github

  提示docker

遠程訪問 Raspbian 可使用 putty 經過 SSH 進行訪問,也可使用 apt 安裝 xrdp ,經過 Windows 遠程桌面進行訪問。對於沒有桌面環境的 Raspbian Lite,能夠經過執行 sudo raspi-config 進行配置。c#

  1. 使用二進制文件安裝 .NET Core 運行時架構

    1. 下載
      wget https://download.visualstudio.microsoft.com/download/pr/4f9988da-8a62-4e01-9978-d9f1dd4fc386/3acb243f96e8e20b6774c64694d478ce/dotnet-runtime-2.1.13-linux-arm.tar.gz
    2. 解壓
      mkdir ~/dotnet21 && tar -xvf dotnet-runtime-2.1.13-linux-arm.tar.gz -C ~/dotnet21
    3. 建立連接
      sudo ln -s ~/dotnet21/dotnet /usr/bin/dotnet

熟悉 Arduino 的朋友都知道,Blink 是默認燒寫進 Arduino 的初始程序,控制板載鏈接 13 號引腳的 LED 閃爍,是一種相似於「Hello World」的存在。這裏咱們將 LED 小燈鏈接至 Raspberry Pi 的 GPIO 17 引腳。app

硬件需求

名稱 數量
LED 小燈 x1
220 Ω 電阻 x1
杜邦線 若干
  • LED 正極 - GPIO 17 (Pin 11)
  • LED 負極 - GND

電路

使用 Docker 運行示例

示例地址:https://github.com/ZhangGaoxing/dotnet-core-iot-demo/tree/master/src/Blink工具

docker build -t iot-blink -f Dockerfile .
docker run --rm -it --device /dev/gpiomem iot-blink

代碼

  1. 打開 Visual Studio ,新建一個 .NET Core 控制檯應用程序,項目名稱爲「Blink」。

  2. 打開 「工具」——「NuGet包管理器」——「程序包管理器控制檯」,運行以下命令,以獲取程序包。

    PM> Install-Package System.Device.Gpio
  3. 在 Program.cs 中,替換以下代碼:

    using System;
    using System.Device.Gpio;
    using System.Threading;
    
    namespace Blink
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 定義引腳
                int pinNumber = 17;
                // 定義延遲時間
                int delayTime = 1000;
    
                // 獲取 GPIO 控制器
                using (GpioController controller = new GpioController(PinNumberingScheme.Logical))
                {
                    // 打開引腳 17
                    controller.OpenPin(pinNumber, PinMode.Output);
    
                    // 循環
                    while (true)
                    {
                        Console.WriteLine($"Light for {delayTime}ms");
                        // 打開 LED
                        controller.Write(pinNumber, PinValue.High);
                        // 等待 1s
                        Thread.Sleep(delayTime);
    
                        Console.WriteLine($"Dim for {delayTime}ms");
                        // 關閉 LED
                        controller.Write(pinNumber, PinValue.Low);
                        // 等待 1s
                        Thread.Sleep(delayTime);
                    }
                }
            }
        }
    }

部署

  1. 在「程序包管理器控制檯」運行發佈命令:

    dotnet publish -c release -r linux-arm

  提示

默認的發佈路徑是在 「\Blink\bin\Release\netcoreappXXX\win10-arm\publish」。你也可使用 -o 來指定發佈路徑,如:-o D:\BlinkPublish ,這將會發布在 D 盤的 BlinkPublish 文件夾下。

  1. 使用 FTP 工具將生成的發佈文件夾複製到 Raspberry Pi 上,這裏使用的是 WinSCP 。

  提示

Raspbian 使用 FTP 服務,請使用 apt 安裝 vsftpd 。

  1. 更改程序權限。使用 cd 命令切換到發佈的文件夾,運行:

    chmod 755 ./Blink

    或使用 FTP 工具進行變動

  2. 執行 ./Blink 運行程序,此時 LED 小燈應該一閃一閃的了。

供參考

  1. dotnet/iot Documentation:https://github.com/dotnet/iot/blob/master/Documentation/README.md
  2. .NET Core on Raspberry Pi:https://github.com/dotnet/core/blob/master/samples/RaspberryPiInstructions.md
相關文章
相關標籤/搜索