開発環境の準備をしよう
次に、開発環境を準備しましょう。開発を行うには、Visual Studioでの環境準備と、デバイス側の準備が必要です。
拡張機能のインストール
Visual Studio 2022で開発を行うために、まずは、Visual Studioに、nanoFramework拡張機能を追加します。
Visual Studioを起動し、最初のスタートウィンドウで[コードなしで続行]を選択します。次に、メインメニューから[拡張機能]ー[拡張機能の管理]を選択し、[拡張機能の管理]ダイアログを開きます。左側の[オンラインフィード] カテゴリを選択して、検索ボックスに「nanoFramework」と入力します。
インストールボタンをクリックした後、Visual Studioをいったん終了して、再度起動します。起動時に、拡張機能がインストールされます。
.NET nanoFrameworkファームウェアの転送
次は、ESP32マイコンに、.NET nanoFramework環境(ファームウェア)を組み込みましょう。PCを使って、USB経由で使用するESP32開発ボードに.NET nanoFrameworkが含まれるファームウェアを転送します。すでにMicroPythonなどのファームウェアを転送されている場合、.NET nanoFrameworkの環境に置き換わります。ファームウェア(firmware)とは、一般に、デバイスに内蔵されたソフトのことで、ハードウェアに密接に結びつき、頻繁には書き換えることのない媒体(ROMやフラッシュROM)に書き込まれたものです。
COMポート
nanoFrameworkファームウェアの転送をするには、利用するESP32開発ボードを接続したPCのCOMポート(USBシリアルのもの)を確認しておく必要があります。開発用PCからは、USBシリアル通信でプログラムの書き込みなどを行います。
PCにESP32開発ボードをUSBで接続すると、Windowsの[デバイス マネージャ]の[ポート(COM と LPT)]に、接続されているデバイスのCOMポートが見つかるはずです。
Windows 10や11のPCでは、ESP32開発ボードをUSB接続すれば、多くの場合自動でドライバがインストールされます。開発ボードによっては、別途USBシリアルドライバーのインストールが必要になるかもしれませんが、その際は、開発ボードの説明書などに従ってドライバをインストールしてください。前述した開発ボードでは、自動でドライバがインストールされて、COMポートが認識されました。
ちなみに、ESP32開発ボードとPC側のUSB環境とは、やや相性があるようです。筆者の環境のPCでは、USBケーブルで直接PCに接続してもうまく認識されず、USBハブを経由すると認識されるものがありました。
nanoffツール
.NET nanoFrameworkのファームウェアを転送するには、nanoff(nano Firmware Flasher)というコマンドラインツールを使用します。
nanoffツールのインストールは、コマンドプロンプトやVisual Studioのターミナルから、次のようにdotnetコマンドを用います。
> dotnet tool install -g nanoff
コマンド実行後しばらくすると、「正常にインストールされました」と出力されるはずです。インストールが終わったら、開発ボードのデバイスにファームウェアの転送を行います。転送するファームウェアのイメージファイルは、自動でダウンロードされます。
> nanoff --platform esp32 --serialport COMXX --update
COMXXには、先ほど確認したCOM5などの実際のポート番号を指定してください。platformオプションではデバイス名を指定します。指定したデバイスに適した標準的なファームウェアが転送されます。platformオプションではなく、targetオプションを使うと、より個別にファームウェアを指定することもできます。
> nanoff --target esp32 --serialport COMXX --update
targetオプションで利用可能なファームウェアを表示するには、listtargetsオプションを用います。
> nanoff --listtargets
例えば、XIAO ESP32C3のファームウェアを転送する場合、次のように指定します。
> nanoff --target XIAO_ESP32C3 --serialport COM5 --update
また、ESP32-S3でBluetoothに対応したファームウェアなら、次のように指定します(BLEは、Bluetoothに対応するファームウェアの意味です)。
> nanoff --target ESP32_S3_BLE --serialport COM5 --update
ESP32の開発で利用するnanoffツールの主なオプションは、次のとおりです。
オプション | 概要 |
---|---|
--serialport | 書き込むシリアルポートの指定 |
--baud | シリアル通信の転送速度(デフォルト:1500000) |
--target | ターゲットの指定 |
--platform | プラットフォームの指定。esp32、stm32、cc13x2、gg11 |
--fwversion | ファームウェアのバージョンを指定して書き込む |
--update | アップデートの指定 |
--reset | デバイスのリセット |
--listtargets | 利用可能なターゲットの一覧表示 |
--listports | 利用可能なCOMポートの一覧表示 |
--devicedetails | 接続している.NET nanoFrameworkデバイスの詳細表示 |
--help | オプションの一覧表示 |
--version | コマンドのバージョン表示 |
ファームウェアが転送されると、ESP32はリセットされてnanoCLRが実行されます。すると、Visual StudioのDevice Exploorerで認識されるようになります。Device Exploorerを表示するには、Visual Studioの[表示]メニューから[その他のウィンドウ]ー[Device Explorer]を選択します。
デバイスが認識されると、Device Exploorerには、COMポート名とファームウェア名が表示されます。
ブートモードの切替
ESP32開発ボードでは、ファームウェアを転送する場合、ESP32のブートモードを、内蔵のフラッシュROMにプログラムを書き込むときのモードに切り替える必要があります。通常は、書き込み済みのプログラムを実行するモードです。書き込みモードになっていないと転送時にエラーとなり、次のようなメッセージが表示されます。
Can't connect to ESP32 bootloader. Try to put the board in bootloader manually. For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html. E4000
ただ開発ボードやPCによっては、ブートモードの切り替えが自動で行われ、特に意識する必要のない場合もあります。筆者の手元の、Freenove ESP32-WROVER Boardでは、自動で切り替わりました。一方のESP32-WROOM-32の開発ボードでは、自動で切り替わらず、ファームウェアを転送する際は、転送が完了するまで、開発ボードのブートスイッチをずっと押しておく必要がありました。
またXIAOシリーズのESP32S3では、ブートスイッチを押しながらリセットスイッチを押すと、ESP32が再起動してブートモードへ切り替わります。その際、COMポート番号も変わりますので、新しいCOMポート番号を指定して、ファームウェアを転送します。
ブートモード自動切替の改造
ブートスイッチを押しっぱなしにするのは、やや面倒ですので、筆者の開発ボードは、自動で切り替わる改造を行いました。改造といっても、コンデンサをひとつ追加するだけです。GNDとEN端子(リセットボタンの端子)間に、0.1~数㎌程度のコンデンサを追加します。これでモードが自動で切り替わります。
まとめ
今回は、ESP32に.NET nanoFrameworkのファームウェアを転送するところまでを解説しました。次回は、基本的なプログラムの作成を行う予定です。
参考文献
- カメラ/センサ/測定器 ESP&M5Stack電子工作プログラム集(CQ出版)
-
C#での開発を可能にする.NETnanoFrameworkの移植
Interface(インターフェース)2023年01月号、02月号(CQ出版)