.NET nanoFrameworkでマイコンプログラミング（準備編）

.NET nanoFrameworkはC#を用いて組み込みシステムを開発することができるプラットフォームです。

今回は開発に必要な環境を準備していきます。

#必要なもの
###ハードウェア
・PC（Windows、Mac、Linuxどれでも大丈夫だと思いますが今回はWindowsマシンです）
・ESP32デバイス（入手しやすいです。Devkitでもいいし、M5シリーズでも可。おすすめは M5StickC or M5ATOM）

###ソフトウェア
・Visual Studio 2019 or VS Code （VS2019の方が簡単かな・・・）
・.NET SDK or .NET Runtime （5.0以上）

#環境の構築
・VisualStudio2019 と .NET SDK のインストールは済ませてください。

・デバイスをPCに接続してデバイスマネージャーを起動し、COMポートの番号を確認しておきます。
![001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/3ded54f3-b5b7-5857-a8de-c316ec6d543e.png)

・ターミナルを起動しファームウェア書き込みツールをインストールします。

``` console
> dotnet tool install -g nanoff
```

・デバイスにあったファームウェアを検索します。

```console
> nanoff --listtargets --preview

.NET nanoFramework Firmware Flasher v2.0.9+947a088d7c
Copyright (C) 2019 .NET Foundation and nanoFramework project contributors


Listing  targets from 'nanoframework-images-dev' repository [PREVIEW]...
Listing  targets from 'nanoframework-images-community-targets' repository...
Available targets:
  ESP32_PSRAM_XTAL26_REV0
    1.7.3-preview.106
    1.7.3-preview.105
  ESP32_PICO
    1.7.3-preview.106
    1.7.3-preview.105
  M5Core2
    1.7.3-preview.105
  ESP32_PSRAM_REV3
    1.7.3-preview.106
    1.7.3-preview.105
  ESP32_OLIMEX
    1.7.3-preview.106
    1.7.3-preview.105
  M5StickCPlus
    1.7.3-preview.105
  ORGPAL_PALTHREE
    1.7.3-preview.106
  ST_NUCLEO64_F091RC
    1.7.3-preview.106
  TI_CC1352R1_LAUNCHXL_868
    1.7.3-preview.106
    1.7.3-preview.105
  M5StickC
    1.7.3-preview.105
    1.7.3-preview.91
  ESP32_REV0
    1.7.3-preview.105
  M5Core
    1.7.3-preview.105
  KALUGA_1
    1.7.3-preview.105
  ESP32_REV3
    1.7.3-preview.105
  ESP_WROVER_KIT
    1.7.3-preview.156
  FEATHER_S2
    1.7.3-preview.156
  ESP32_LILYGO
    1.7.3-preview.156
  ESP32_BLE_REV0
    1.7.3-preview.156
  ESP32_PSRAM_REV0
    1.7.3-preview.156
  ST_STM32F769I_DISCOVERY
    1.7.3-preview.156
  TI_CC1352R1_LAUNCHXL_915
    1.7.3-preview.156
  ST_STM32F429I_DISCOVERY
    1.7.3-preview.156
  NXP_MIMXRT1060_EVK
    1.7.3-preview.156
  WIN32_nanoCLR
    1.7.3-preview.42
  ST_NUCLEO144_F439ZI
    1.7.0.62
    1.7.0.60
  ST_NUCLEO144_F746ZG
    1.7.0.62
    1.7.0.60
  NETDUINO3_WIFI
    1.7.0.45
    1.7.0.43
  ST_STM32F4_DISCOVERY
    1.7.0.62
    1.7.0.60
  TI_CC1352P1_LAUNCHXL_915
    1.7.0.62
    1.7.0.60
  TI_CC1352P1_LAUNCHXL_868
    1.7.0.62
    1.7.0.60
  PybStick2x
    1.7.0.62
    1.7.0.60
  ST_STM32F411_DISCOVERY
    1.7.0.62
    1.7.0.60
  WEACT_F411CE
    1.7.0.62
  ST_NUCLEO144_F412ZG_NF
    1.7.0.62
    1.7.0.60
  ST_NUCLEO64_F401RE_NF
    1.7.0.62
    1.7.0.60
  MBN_QUAIL
    1.7.0.62
    1.7.0.60
  GHI_FEZ_CERB40_NF
    1.7.0.62
  ST_NUCLEO64_F411RE_NF
    1.7.0.62
  I2M_OXYGEN_NF
    1.7.0.62
    1.7.0.60
  I2M_ELECTRON_NF
    1.7.0.62
  BrainPad2
    1.7.0.33
    1.7.0.31
```

・デバイス用のファームウェアを書き込みます。例としてM5 ATOM Matrixに書き込んでみました。M5 ATOM Matrixはリストには載っていませんが、チップはESP32 PICOですのでtargetをESP32_PICOとしています。書き込みに失敗する場合は --baud 115200 を指定して転送速度を落としてみてください。

```console
>  nanoff --target ESP32_PICO --serialport COM8 --preview --update
.NET nanoFramework Firmware Flasher v2.0.9+947a088d7c
Copyright (C) 2019 .NET Foundation and nanoFramework project contributors


Using COM8 @ 1500000 baud to connect to ESP32.
Reading details from chip...
OK

Connected to:
ESP32 (ESP32-PICO-D4 (revision 1))
Features WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Flash size 4MB GD25Q32 from GIGADEVICE (manufacturer 0x200 device 0x16406)
PSRAM: not available
Crystal 40MHz
MAC 50:02:91:xx:xx:xx

Trying to find ESP32_PICO in development repository...OK
Downloading firmware package...OK
Extracting ESP32_PICO-1.7.3-preview.106.zip...OK

Updating to 1.7.3-preview.106

Erasing flash...
OK
Flashing firmware...
Wrote 24192 bytes (15088 compressed) at 0x00001000 in 0.4 seconds (effective 495.3 kbit/s)...
Hash of data verified.
Wrote 1013872 bytes (664299 compressed) at 0x00010000 in 9.6 seconds (effective 848.3 kbit/s)...
Hash of data verified.
Wrote 3072 bytes (136 compressed) at 0x00008000 in 0.0 seconds (effective 524.3 kbit/s)...
Hash of data verified.
OK
```

・ファームウェアの書き込みが終了したら一度デバイスはPCから外しておきます。

・VisualStudio2019を起動し「コードなしで実行」をクリックします。
![01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/16d71434-42f0-56a8-1962-85ce48d58cbe.png)

・メニューの「拡張機能」>「拡張機能の管理」を選択します。
![02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/745427c8-60d3-bc0a-9a6e-787b6fe6509c.png)

・右上の検索ボックスに「nanoframework」と入力すると「.NET nanoFramework Extension」が見つかるのでダウンロードをクリックします。
![03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/27a24386-1455-da85-399e-5a35fa10b9f8.png)
・ダウンロード後一度VisualStudioを終了すると拡張機能のインストールが行われます。

・VisualStudioを再び起動します。プロジェクトテンプレートに「Blank Application（nanoFrmework）」が追加されているので選択して、「次へ」をクリックします。
![05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/f961fb5f-84ee-69b8-c6e1-01ec1bdce605.png)

・プロジェクト名を入力し、作成ボタンをクリックします。
![06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/4f4f5033-47e6-d650-d33a-f1e1c0b44cbb.png)

・表示＞その他のウィンドウ＞Device Explorerを選択します。
![07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/6d8ccc14-b72d-1f55-2565-dd44df58d741.png)

・ここでデバイスを接続すると画面右側 Device ExplorerのDevicesに認識したデバイスが表示されます。
![08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/28d82dd5-0d50-714f-8ff4-a5c5f2d56c9c.png)

・デバイスが認識されているのを確認できたら、画面上部中央の.NET nanoFramwork Deviceボタンをクリックしてプログラムを実行します。
![085.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/d9441eb2-ce2a-ba65-3a42-68d5efde168e.png)

・画面下部の出力ウィンドウに「Hello from nanoFramework!」と表示されたらプログラムは問題なく実行されました。
![09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/7a496c98-48b9-41ee-8dff-681efa50c823.png)


以上　ここまでできればC#でマイコンプログラミングを行うための環境が整いました。

次は温度センサーを使ったプログラムを作ってみたいと思います。