LoginSignup
1
0

More than 1 year has passed since last update.

Seeed Studio XIAO ESP32C3 で .NET nanoFramework を動かす

Posted at

2022年11月16日に .NET nanoFramework が ESP32C3 に対応したようなので試してみたいと思います。なお基本的には公式の Getting Started Guides 通りに進めれば動作しますが微妙に手直ししてあります。

必要なもの

部品 説明
XIAO ESP32C3 秋月電子スイッチサイエンスマルツパーツSTEAM Tokyo ストアなどで売ってます
USB Type-C ケーブル 電源供給とファームウェアを書き込むのに必要です
USB シリアル ファームウェア書き込み後はUART0で通信を行うため必要です
LED Lチカ用の LED、なお ESP32C3 には LED は搭載されいません
抵抗 LED に合わせて適当な150Ωくらいを用意

Visual Studio をインストール

まず Visual Studio の公式サイトから Visual Studio 2022 をダウンロードします。(コミュニティ版で大丈夫です)
2022-12-31.png
ワークロードは .NET デスクトップ開発を選択してインストールします。

Getting Started Guides の手順では .NET Core cross-platform development もインストールするように書いてありますが最新では存在しないのでインストールはしません。

2022-12-31 (3).png

nanoFramework 拡張機能をインストール

プロジェクトの作成は必要ないので「コードなしで続行」で Visual Studio を起動します。
2022-12-31 (4).png
メニューの「拡張機能」から「拡張機能の管理」を選択します。
2023-01-02 (4).png
左側のオンラインを選択して右上の検索ボックスに nanoFramework と入力すると検索結果に .NET nanoFramework Extension が表示されるのでダウンロードしてインストールします。
2022-12-31 (8).png
インストールしたら反映させるため Visual Studio を再起動します。(自分の場合はうまく反映されなかったので Windows も再起動しました)

nanoFirmwareFlasher を使用して ESP32C3 にファームウェアをアップロード

メニューの「表示」から「ターミナル」を起動して nanoff をインストールします。
2023-01-04.png

dotnet tool install -g nanoff

ESP32C3 とパソコンを USB Type-C ケーブルで接続して「コンピューターの管理」の「デバイスマネージャー」などから ESP32C3 のシリアルポートを探してファームウェアをアップロートします。(COM3 は自分の環境のシリアルポートなのでそれぞれのシリアルポートに読み替えてください)

nanoff --platform esp32 --serialport COM3 --update

フォームウェアをアップロード後は通信は UART0 になるので USB シリアルを接続してください。
接続方法については Seeed Wiki を参考にしてください。
ESP32C3-serial.png
なお Tera Term などでシリアル通信を見ると化けて見えますが問題ありません。

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:2
load:0x3fcd5810,len:0x1388
load:0x403cc710,len:0x8d4
load:0x403ce710,len:0x2b78
SHA-256 comparison failed:
Calculated: e35b720346760bc26f1d0a4548cae1b31d07d80b7cc998b440feb718edb617b1
Expected: b4fc3161e3bacb10d4c357f59eaae49c6c9f38957091749f41bb1bc88b287fdb
Attempting to boot anyway...
entry 0x403cc710
I (48) boot: .NET nanoFramework 2nd stage bootloader ESP-IDF 6407ecb
I (49) boot: build Dec 23 2022 01:14:04
I (49) boot: chip revision: 3
I (52) boot.esp32c3: SPI Speed      : 40MHz
I (57) boot.esp32c3: SPI Mode       : DIO
I (62) boot.esp32c3: SPI Flash Size : 4MB
I (67) boot: Enabling RNG early entropy source...
I (72) boot: Partition Table:
I (76) boot: ## Label            Usage          Type ST Offset   Length
I (83) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (90) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (98) boot:  2 factory          factory app      00 00 00010000 001a0000
I (105) boot:  3 deploy           Unknown data     01 84 001b0000 001f0000
I (113) boot:  4 config           Unknown data     01 82 003c0000 00040000
I (120) boot: End of partition table
I (125) esp_image: segment 0: paddr=00010020 vaddr=3c0c0020 size=28e78h (167544) map
I (169) esp_image: segment 1: paddr=00038ea0 vaddr=3fc90600 size=024dch (  9436) load
I (178) esp_image: segment 2: paddr=0003b384 vaddr=40380000 size=04c94h ( 19604) load
I (183) esp_image: segment 3: paddr=00040020 vaddr=42000020 size=bd074h (774260) map
I (352) esp_image: segment 4: paddr=000fd09c vaddr=40384c94 size=0b818h ( 47128) load
I (370) esp_image: segment 5: paddr=001088bc vaddr=50000000 size=00028h (    40) load
I (375) boot: Loaded app from partition at offset 0x10000
I (375) boot: Disabling RNG early entropy source...
I (390) cpu_start: Pro cpu up.
I (399) cpu_start: Pro cpu start user code
I (399) cpu_start: cpu freq: 160000000
I (400) cpu_start: Application information:
I (402) cpu_start: Project name:     nanoCLR
I (407) cpu_start: App version:      1.8.0.858
I (412) cpu_start: Compile time:     Dec 23 2022 01:13:36
I (418) cpu_start: ELF file SHA256:  6d7836f600db76c2...
I (424) cpu_start: ESP-IDF:          6407ecb
I (429) heap_init: Initializing. RAM available for dynamic allocation:
I (437) heap_init: At 3FC9B970 len 00040DA0 (259 KiB): DRAM
I (443) heap_init: At 3FCDC710 len 00002950 (10 KiB): STACK/DRAM
I (449) heap_init: At 50000028 len 00001FD8 (7 KiB): RTCRAM
I (457) spi_flash: detected chip: generic
I (461) spi_flash: flash io: dio
I (476) sleep: Configure to isolate all GPIO pins in sleep state・BB堆BB

Visual Studio で接続を確認するにはメニューの「表示」から「その他のウィンドウ」から「Device Explorer」を選択します。
2023-01-02 (5).png
接続が成功すれば Devices に表示されます。
2023-01-02 (3).png
表示されない場合は虫眼鏡アイコンの「Rescan nanoDevices」か ESP32C3 のリセットを試してください。
PXL_20230103_190959564.png

Lチカ

メニューの「ファイル」から「新規作成」から「プロジェクト」で新しいプロジェクトを作成します。
2023-01-02 (6).png
検索ボックスに nanoFramework と入力すると Blank Application (.NET nanoFramework) というテンプレートが表示されるはずなので選択します。
2023-01-02 (7).png
.NET nanoFramework サンプルに合わせて Blinky プロジェクトを作成します。
2023-01-02 (8).png
プログラムはピン番号を ESP32C3 に合わせて変更して Seeed Wiki に合わせました。

Program.cs
using System;
using System.Threading;
using System.Device.Gpio;

namespace Blinky
{
    public class Program
    {
        private static GpioController s_GpioController;

        public static void Main()
        {
            s_GpioController = new GpioController();

            // ESP32C3
            GpioPin led = s_GpioController.OpenPin(10, PinMode.Output);

            led.Write(PinValue.Low);

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

NuGet で Gpio のクラスライブラリを取得するためソリューションエクスプローラーの参照を右クリックして「NuGet パッケージの管理」を選択します。
2023-01-02 (9).png
検索ボックスに nanoFramework と入力して nanoFramework.System.Device.Gpio パッケージを探してインストールします。
2023-01-02 (10).png
ビルドできる準備が整ったのでメニューの「ビルド」から「Blinky のビルド」でビルドします。
2023-01-02 (11).png
ビルドができたらデバイスに配置(デプロイ)するためメニューの「ビルド」から「Blinky の配置」を選択します。なお配置した場合はデバイスをリセットしないとアプリが実行されません。(デバッグ実行の場合はリセットが不要です)
2023-01-02 (12).png

最後に

けっこう簡単にLチカができました。
暇があったら他のペリフェラルも試してみたいと思います。
以下に今回のサンプルプログラムを置いておきます。
https://github.com/k-mana/esp32c3-nanoframework

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0