張高興的 .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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM