ESP32-C3 + CircuitPythonをwebブラウザだけでプログラミングする方法

現在開発中のCircuitPython 8(執筆時点でbeta 4)では、Web workflowという強力な機能が追加されました。
これは、ESP32などのWifi接続可能なマイコンなら、webブラウザ上でプログラムの書き込みやファイル管理が出来るようになるというものです。
これまでCircuitPythonのプログラミングにはMu EditorやThonnyなどのエディタをPCにインストールされていると思いますが、それらエディタのインストールすら不要になります。

2022年12月現在、Wifi接続が可能なCircuitPython対応ボードはまだまだ少ないです。しかも日本で技適が取れているボードとなると、恐らくSeeed Studio XIAO ESP32C3ぐらいです。(STEAM Tokyoストアでの取り扱いを開始いたしました。)
今回は、Seeed Studio XIAO ESP32C3にCircuitPythonをインストールして、webブラウザでプログラミングをする一連の流れをご紹介します。

ESP32-C3とCircuitPython 8の組み合わせでプログラミングする場合Thonnyを使う方法がありますが、Thonny自体が不安定で、繰り返しコードの書き換えが出来ない問題が発生するため、こちらの方法をお勧めします。

今回は、次のような流れで説明していきます。

  1. CircuitPythonのイメージをマイコンに書き込む
  2. Wifiに接続するための.envファイルをターミナルソフトから書き込む
  3. webブラウザのweb editorからマイコンにwifiで接続する

必要なもの

  • Python 3.xx + esptool
  • ターミナルソフト(TeraTermなど)
  • Webブラウザ(Chromeなど)

1. CircuitPythonのイメージをマイコンに書き込む

Pythonをインストールする

お持ちのPCにPythonが入っていない場合、python.jpの説明に従ってインストールしてください。

esptoolのインストール

esptoolはESP32のフラッシュメモリに対して、バイナリファイルを書き込むために使います。
コマンドプロンプトで以下のコマンドを入力してください。

pip install esptool

CircuitPython 8のダウンロード

CircuitPython.orgにアクセスして、Downloadsメニューで、「ESP32C3」と検索してください。(ESP32-C3だと検索結果に出てこないようです。)
右のような画像が表示されますので、クリックしてください。

右のような画面が表示されますので、DOWNLOAD.BIN NOWボタンを押して、CircuitPython 8のイメージファイルをダウンロードしてください。
ファイル名はadafruit-circuitpython-seeed_xiao_esp32c3-en_US-8.0.0-beta.4.binのような名前です。

一般的なCircuitPythonのイメージは.UF2ファイルなんですが、今回は.binという拡張子になっています。

ESP32やESP32-C2, C3がnative USBをサポートしていないため、PCと接続しても、USBドライブとして認識されず、CIRCUITPYドライブが表示されません。
今回はCOMポート経由でPCからESP32-C3に接続して、esptoolでCircuitPythonのイメージを書き込みます。

CircuitPythonイメージをESP32-C3に書き込む

ESP32-C3をブートローダーモードで起動します。

先にUSB Type-CケーブルをPCに接続しておき、Seeed XIAO ESP32-C3のBootボタン(Bボタン)を押しながらUSBケーブルと接続してください。

次に、このESP32-C3が何番のCOMポートと接続しているかをデバイスマネージャーで確認します。
コマンドプロンプトにmmc devmgmt.mscとタイプするとデバイスマネージャーが開きます。

右の画像の場合、COM10に接続されていることがわかります。

次に、コマンドプロンプトに以下を入力してください。
最後のC:\以降のパスは、先程ダウンロードしてきたCircuitPythonのイメージファイルの保存先のフルパスを入れてください。

esptool.py --chip esp32c3 --port COM10 --baud 115200 --before default_reset --after hard_reset --no-stub  write_flash --flash_mode dio 0x0 C:\Users\USERNAME\Downloads\adafruit-circuitpython-seeed_xiao_esp32c3-en_US-8.0.0-beta.4.bin

右のようなメッセージが表示されれば、書き込み成功です!

もし、エラーが表示される場合は、ブートローダーモードに入れていない可能性がありますので、一度USBケーブルを外して、Bボタンを押しながらUSBケーブルを挿して、コマンドプロンプトにesptool の書き込みコマンドを再度入れてみてください。

2. Wifiに接続するための.envファイルをターミナルソフトから書き込む

ターミナルソフト(TeraTerm)をインストールする

TeraTerm公式サイトからTeraTermをダウンロードしてインストールしてください。
バージョンは最新の4.106をおすすめします。

TeraTermからSeeed XIAO ESP32-C3上のCircuitPythonにアクセスする

念のため、Seeed XIAO ESP32-C3のリセットボタン(Rボタン)を押してください。

次に、TeraTermを起動すると、右のような画面が表示されます。Serialを選択して、先程デバイスマネージャで確認したCOMポートを選択してOKを押します。

右のメッセージが表示されたら、CircuitPythonが正常にインストールされています。

ここで、enterキーなどの何かのキーを押して対話実行モード(REPL)に入ります。

右のように、入力を受け付ける>>>とカーソルが表示されればOKです。

.envファイルを作成する

.envファイルは、ファイル名のない拡張子だけのファイルで、CircuitPythonの環境変数を定義するためのものです。この.envファイルの中にESP32-C3を接続させたいWifiのSSID、パスワードなどを設定します。

以下のコードの内容をテキストエディタなどの上で書き換えてからコピーし、TeraTermのREPL画面にペーストしてください。TeraTermの画面上で右クリックするだけでペースト出来て便利です。ペーストしたらenterキーを押してください。

f = open('.env', 'w')
f.write("CIRCUITPY_WIFI_SSID='自分のWifiのSSID'\n")
f.write("CIRCUITPY_WIFI_PASSWORD='自分のWifiのパスワード'\n")
f.write("CIRCUITPY_WEB_API_PASSWORD='webpassword'\n")  # 後で使用しますので覚えておいてください
f.close()

以上でTeraTermでの作業は終了です。

webブラウザのweb code editorからマイコンにwifiで接続する

webブラウザを開いてhttp://circuitpython.local/にアクセスすると、右のような画面が表示されます。

welcomeメッセージの中のfull code editorのリンクをクリックしてみてください。

ユーザー名とパスワードの入力を求められますので、以下のように入力してください。

ユーザー名 = 空欄

パスワード = .envファイルのCIRCUITPY_WEB_API_PASSWORDで設定したパスワード

次に、現在web code editorが接続しているマイコンの詳細が表示されます。これで問題なければCloseを押してください。

これでプログラミングがスタート出来ますので、例えばこのようなコードを書いてみます。

Save Asボタンを押して、Code.pyというファイル名で保存してください。

本記事執筆時点での私の環境では、初回にCode.pyを保存した後にSave + Runボタンを押してもファイルが上書きされず、毎回保存するファイル名の入力を求められました。
一度Code.pyとして保存した後、OpenボタンでCode.pyを開き直すと、それ以降はSave + Runボタンで上書き保存から実行まで連続してできるようになりました。

Save + Runボタンを押すとシリアル画面に切り替わり、実行結果が表示されます。

ファイルやライブラリの管理

ライブラリをlibファイルにコピーしたり、wavファイルなどを保存したい時には、http://circuitpython.local/にアクセスして、welcomeメッセージの中のfile browserのリンクをクリックしてください。

右のような画面が出てきますので、libフォルダにライブラリをアップロードしたり、新たにフォルダを作ってファイルを保存したりすることができます。

いかがだったでしょうか?
このweb workflowの凄いところは、マイコンに電源さえ入っていれば、PCと直接接続していなくてもプログラムの書き換えが出来る(いわゆるOver-The-Air(OTA)での書き換えが可能)な点です。CircuitPython 8 beta 4の時点でかなり安定して使えていますので、ぜひお試しください。

Follow me on Twitter