11

IoT 筆記 - 用 C# 寫 ESP32 開發板程式

 4 years ago
source link: https://blog.darkthread.net/blog/nanoframework-intro/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

陸續用 VSCode + PlatformIO 寫了幾個 ESP 開發板 C++ 程式,琢磨出有效率寫出 Web 控制介面的開發模式,尋找及安裝硬體元件程式庫已難不倒我,自己算是符合「拿到新東西能讓它動起來」的基本要求。

經過這段時間磨練,雖勉強能用 C++ 拼湊出會動的程式,但身為跨界的資深 .NET 開發人員,卻深陷老鳥魔咒,常有「想很多,能力卻沒跟上」的挫折感。想想,是時候體驗放飛自我,重回舒適圈的感覺,回頭用我最擅長的 C# 來寫 ESP32 程式吧!

微軟有個開源專案 .NET nanoFramework 是一套極精簡版 .NET Framework,小到可以放在 64K RAM + 256KB Flash 的嵌入式裝置(YES! 包含 200 元有找的窮人原子彈 - ESP32 開發板)上執行,成熟度跟生態圈完整性當然無法與 Arduino C++ 相提並論,但是,nanoFramework 對我有難以抗拒的強大魔力,原因是它讓我可以

開 Visual Studio IDE 用 C# 寫 ESP32 程式!

.NET 老鳥只需要這句,不需多費唇舌解釋,什麼都值了。

nanoFramework 目前支援 ARM Cortex-M 及 ESP32 晶片,能在多款平價開發板上執行,包含 STM 的 Discovery 及 Nucleo、Mikrobus 的 Quail、Wilderness Labs 的 Netduino 以及 ESP32 DevKit... 等等,而不用煩惱該選哪一塊,ESP32 是最方便取得的平價選擇! ESP32 開發板很有多版本,我目前試過 NodeMCU-32S、DevKit 都能跑 nanoFramework。關於 ESP32 開發板介紹,推薦夜市小霸王尤濬哲老師的這篇 - ESP32評比與教學推薦NodeMCU-32s的理由

前始前要先準備 nanoFramework 開發環境,官方文件 Getting Started Guide for managed code (C#) 寫得挺詳細,照方煎藥即可。大致步驟如下:

  1. 如果你還沒裝過地表最強大的開發工具,請先下載及安裝 Visual Stduio 2019 (自己玩的可用免費的 Community 版本),安裝時記得選取 .NET Desktop Development 及 .NET Core Corss-Platform Development
    註:nanoFramework 還很新,我一度因 VS2019 版本太舊出錯,若要用已安裝好的 VS2019 開發,記得先更新。
  2. 建議使用 Preview 版 nanoFramework NuGet 套件,故要新增 nanoFramework 最新版 NuGet 來源:
  3. 安裝 nanoFramework VS2019 Extension
  4. 燒錄 nanoFramework 環境到 ESP32 開發板
    ESP32 開發板必須換成 nanoFramework 環境,做法是使用 .NET Core 工具 nano Firmware Flasher (nanoff),使用 dotnet tool install -g nanof 下載,再下指令 nanoff --target ESP32_WROOM_32 --serialport 開發板COM --update,不到 30 秒即可更新完成:
  5. 更新成 nanoFramework 之後,應該可以在 Device Explorer 看到它(執行或偵錯前記得先選取部署對象):
  6. 之後新增專案時選擇 nanoFramework 專案,就可以幹活兒了:

就醬,我完成了我的 nanoFramework Helo World:

using System;
using System.Device.Gpio;
using System.Diagnostics;
using System.Threading;

namespace nanoFrameworkHelloWorld
{
    public class Program
    {
        private static GpioController s_GpioController;
        public static void Main()
        {
            s_GpioController = new GpioController();
            var led = s_GpioController.OpenPin(
                2,
                PinMode.Output);
            led.Write(PinValue.Low);

            while (true)
            {
                led.Toggle();
                Thread.Sleep(125);
                led.Toggle();
                Thread.Sleep(125);
                led.Toggle();
                Thread.Sleep(125);
                led.Toggle();
                Thread.Sleep(525);
            }
        }


    }
}

這段程式幾乎是所有人學 Arduino 的起手式,透過改變 GPIO 改變輸出電位讓 LED 閃爍,堪稱 Arduino 界的 Hello World。

接下來我們來看最美妙的部分,nanoFramwork 可以 Line-By-Line Debug,甚至在即時運算下指令控制硬體動作,跟平常寫 .NET 程式的體驗相同。

實際示範一下。以下的操作是透過按 F10 逐步執行跑 led.Toggle() 切換 LED 亮燈狀態,最酷的是還可以手動敲指令現場控制,這是每個開發者追求的夢幻開發環境呀!

最後,補上一個小訣竅,nanoFramework 還在發展初期,API 會頻繁調整,像我就遇到官方範例無法編譯的問題,記得勾選「Include prerelease」並下載最新版:

呼口號時間

C# 真棒,Visual Studio / nanoFramework 好威呀!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK