ESP32-C3-WROOM-02を最小構成で動かす

ESP32-C3-WROOM-02とXIAO ESP32C3 マイコン/Arduino

SeeedのXIAO ESP32C3が思いの他使いやすかったため、より安いESP32-C3-WROOM-02でも遊んでみました。今回は、ESP32-C3-WROOM-02を最小限の構成で動かすための方法を紹介します。

追記:BOOTボタンの番号をGPIO8と記載していましたがGPIO9の間違いでした。申し訳ありません。

ESP32-C3-WROOM-02とは?

ESP32シリーズの中でも比較的新しく、機能は限られているものの消費電力が少ないESP32C3チップをモジュール化したものがESP32-C3-WROOM-02です。技適あり、秋月電子で入手可能、310円という低価格なマイコンモジュールです。USB機能も内蔵されていますので、書き込むためのプログラマ等は必要ありません。配線さえすればPCにUSBで直結できます。

秋月電子で購入したESP32-C3-WROOM-02
↑秋月電子ですので、おかしな販売ルートのものではないはずです。技適もついてます。

XIAO ESP32C3の1/3の価格なので気軽に使えます。ただし、XIAOにはUSB端子や電源レギュレーター、Li-ION電池の制御機能がありますので、全部盛り込むならXIAOを買った方が早いです。

Wi-Fiモジュール ESP32-C3-WROOM-02-N4: 半導体 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作Wi-Fiモジュール ESP32-C3-WROOM-02-N4秋月電子通商 電子部品通信販売

秋月電子の通販コード:117493

動作のための最小構成

真面目な人には怒られそうですが、動作させるための最小限回路は次のようになります。

ESP32C3最小構成

ポイントは以下の5点

1.ENはプルアップが必須です。とりあえず10kΩでOKです。リセットスイッチをつけるならプッシュスイッチを介してGNDに接続しておけばOKです。

2.データシートによるとGPIO8とGPIO2についてもプルアップしろとかいてありあますが、プルアップしなくてもとりあえず動きます。

3.USBのVBUSは5Vなので、ESP32C3の3.3V端子に接続するのはNGです。電源レギュレーターが必要ですので、NJU7223を使います。4個で180円なので1個50円以下です。本当は入出力とGNDの間にコンデンサを入れるべきですね。

4.USBの信号線(D+,D-)は3.3VなのでESP32C3のGPIO18/19に直結します。数十Ωのダンピング抵抗を入れるという話もあります。

5.大事なのはGPIO9をスイッチを介してGNDに接続します。GPIO9を0にして電源ONにするとDownloadBootモードで起動します。(これについては後述)

3.についての追記です。
NJU7223を使用する場合、積層セラミックコンデンサを使用すると発振する場合があります。データシート上も電解コンデンサの使用例が記載されています。WiFiを使用しないのであればこの辺りはいい加減でも動いてしまいますが、WiFi使用時に動作しなくなる(リセットが繰り返される)場合があります。

あるとよいもの

ピッチ変換基板

ESP32-C3-WROOM-02ピッチ変換基板

ESP32-C3-WROOM-02の端子のピッチは1.5mmで、ピン数は18です。

名前が似ていて非常にややこしいのですが、ESP-WROOM-02と全く同じ形状ですが、ピンアサインが微妙に違っています。実験用には2.54mmピッチへの変換基板があるとよいのですが、下手な変換基板を使うとESP-WROOM-02用に配線されていて必要なピンがGNDに接続されている場合があるので注意してください。aitendoで変換基板が処分特価(20円)になっていますので、ご覧の段階で在庫アリならこちらをお勧めします。すべてのピンが独立なのでESP-WROOM-02でもESP32-C3-WROOM-02どちらでも使えます。

ピッチ変換基板(A)
●概要●仕様・機能ピッチ変換基板、1.5mmピッチと2.54mmピッチのストレート変換、Wi-FiモジュールESP-WROOM-02などに適合、基板寸法:29x24x1.2mm、在庫限り販売終了へ、表…
WiFiモジュール変換基板(B)
●概要●仕様・機能表面実装モジュール用変換基板、Wi-FiモジュールESP-WROOM-02などに対応、1.5mmピッチ18P、変換先:2.54mm(2列)ピッチスルーホール、外形寸法:23.5x24…
2023.12.24追記
上記のaitendo2製品とも完売を確認しました。代わりとなる変換基板の情報等、コメント欄でお待ちしております。

USB端子

書き込みのためにUSB端子があるとよいです。いらないUSBケーブルをばらしてもよいのですが、下記に紹介する基板であればピンアサインもシルク印刷されているので間違いにくいです。2023.11現在で10個入り429円なので1個あたり43円ですね。

本当はUSB-Cのほうが好きなのですが、まじめなUSB充電器だと通信線まわりの処理をきちんとしないと電源供給すらしてくれなかったりするので、とりあえずMicroUSBのほうが楽でわかりやすいです。

書き込み方法

ArduinoIDEを使用する前提です。

環境設定

ArduinoIDEの[ファイル]-[環境設定]の[設定]タブの追加ボードマネージャーのURLに以下を追加しておいてください。

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

書き込み設定

ボードは”ESP32C3 Dev Module”を選択してください。ほかはデフォルトのままでよいと思います。

書き込み先のポートはCOMx(ESP32S3 Dev Module)です。環境によるのかもしれませんが、私の環境ではESP32S3と表示されます。XIAOのESP3C3でもESP3S3との表記になっていますが問題なく動いていますので気にしなくてもよいです。

書き込み時の注意事項 *ここ大事

一番最初の書き込みの際には、ポートの出現と消失を繰り返す状態になると思います。USBを抜き差ししているような状態ですね。

この場合は、DownloadBootモードで起動する必要があります。先に述べたように、GPIO9をGNDに接続してUSBを接続する(もしくは電源ON,リセットでもOKです)ことでDownloadBootモードでESP32C3が立ち上がり、プログラムを書き込めるようになります。

DownloadBootモードというのは、EPS32C3内にプログラムを書き込むための専用のモードです。通常のプログラムは走りません。

1度書き込んでしまえば、2度目以降はArduinoIDEからの”マイコンへの書き込み”で自動的に書き込みモードになりますのでGPIO9の操作は不要です。データシートによれば”GPIO9は弱くプルアップされている”らしいので外部プルアップも不要です。

また、DeepSleep中もUSB経由の書き込みができなくなりますので、プログラムを書き込むためにはGPIO9をGNDに落とす必要があることも覚えておいてください。(DeepSleepから復帰している間しか書き込みができません)

おまけ1:動作確認用スケッチ

GPIO4に接続したLEDを点滅させるだけです。

void setup()
{
 //Pin設定
 pinMode(4, OUTPUT);
}

void loop()
{
 digitalWrite(4, HIGH);
 delay(50);
 digitalWrite(4, LOW);
 delay(50);
}

おまけ2:DeepSleep動作確認用スケッチ

GPIO4に接続したLEDを点滅させた後DeepSleepに入り、30秒後に復帰してLEDを点滅させる、という動作を繰り返します。

int LEDOUT = 4;
unsigned long interval = 30; // unit:sec

void setup()
{
 //Pin設定
 pinMode(LEDOUT, OUTPUT);

 // ディープスリープ時間の設定
 esp_sleep_enable_timer_wakeup(interval * 1000000ULL);

 digitalWrite(LEDOUT, HIGH);
 delay(1000);
 digitalWrite(LEDOUT, LOW);
 delay(1000);
 digitalWrite(LEDOUT, HIGH);
 delay(1000);

 esp_deep_sleep_start();
}

void loop()
{
}

まとめ

いかがだったでしょうか?このようなモジュールは周辺部品などを自分で用意しなければならないため、敷居が高いですがポイントを絞れば案外簡単に動きます。

Amazonで売られているような開発ボードなどと比べて安価ですし、必要最低限の部品構成にすれば実装面積を削減して小さな基板を作ることもでき、不要な機能に貴重な電力を取られなくても済みます。

他のESP32シリーズと比べて機能が削減されていたりしますので、使いどころは考えないといけませんが、その低消費電力を生かしてIOTセンサー的な使い方が一番あっているのかなと思います。

コメント