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

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

  提示

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

若要繼續閱讀下面的內容,你需要準備:

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

環境配置

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

  提示

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

  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 引腳。

硬件需求

名稱 數量
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章