見出し画像

ESP32-S3 使ってみた

ESP32-S3は新型ArduinoのUNO4のWi-Fiモデルに搭載される予定のチップです。気になったので単品で使用してみることに。
まだまだ情報が少ないので本記事も参戦します。
ちなみに自分用メモ的な意味の記事でもあります。

こちらもチェック

当記事が先になってしまいましたが、本来私は動画メインなのでこちらでも解説を上げました。工作や実験などを今後動画で予定。

DIP化基盤作成についての記事も追加しました。
あわせてご確認ください

ESP32-S3仕様

特に大事な仕様だけメモ
電源電圧:3.0~3.6V
フラッシュ:16MB / RAM512KB
Wi-Fi:802.11b/g/n
Bluetooth: Bluetooth Low Energy(Bluetooth 5)
ネイティブUSB

データの書き込みについて

ESP32-C3と同じですので前の記事からのコピペ
C3の記事は以下

他のESPシリーズ(ESP32 / ESP32D / ESP32E等)との違い

ESP32-C3 / S3と他のESPシリーズとの最大の違いは、USBシリアル変換モジュール無しで書き込めることでしょう。
通常は"PC→USBシリアル変換モジュール→ESPシリーズ"という配線でスケッチの書き込みしますが、本品は"PC→ESP32-C3"という配線で書き込めます。

ESP32-S3書き込み&稼働配線

具体的な書き込み方法は?

データシートを見る限り、他のESPシリーズ同様に特定のピンをプルアップ/ダウンさせることで起動モードを変えて書き込みを行えるようになるようです。
以下のようにピン状態を設定することで起動モードを変えられます。

ブート関係のピン

検証結果から言うとブートモードを決定するのは0番ピンです。
LOWにしておくと書き込み待機状態になります。
また、GPIO0、GPIO45、GPIO46は内部のプルアップ/ダウン抵抗に接続されるので外部に抵抗器を設ける必要はなさそうです。
GPIO46:HIGH / GPIO0:LOWの組み合わせはNGなので注意。
※データシートを見ると起動モード以外にも設定ピンはありますので、気になる場合は確認してください。

以上の情報をまとめると
GPIO0: NC(書き込みモードだけLOW)
GPIO46: NC

ぶっちゃけ関係ない

さて、書き込みに関するピンを紹介して置いてなんですが、内蔵USBを使用して書き込む場合、ブートモードを切り替える必要はなさそうです。
詳しくはC3の記事を確認してください。
ブートモードの切り替え不要かどうか試してみました。
スケッチ実行中に突然書き込みを行ったところ正常に書き込みが開始されました。
このことから、ブートモードを変更する必要はなさそうです。

まずはドライバーを入れる

順番が前後しましたが、ESP32-S3のUSB機能を使用するには専用のドライバのインストールが必要です
以下の"USB ドライバーの構成"部分にあるコマンドをWindows Power Shellに貼り付ければインストール完了。
C3と同じなのでC3の記事の方でやっていればスキップ可能。

回路図

実験の結果、書き込みの回路図は以下になります。
ポイント
ENはプルアップでHIGHにしておく。
USBは5Vで、ESP32は3.3Vなのでレギュレーターで落とす。
USBのD+,D-はPCのD+,D-と直結。(調べたところレベル変換が必要等はなかった)

書き込み/稼働回路

テストスケッチ

ボード設定

ではスケッチの書き込みをしてみます。
まずはボードの設定です。
既にESP32シリーズを使用したことがあり、ボード定義をダウンロードしている前提です。その中に"ESP32S3"があるのでこれを選択します。
そして、ドライバのDL配線が正しく行われていれば以下のようにCOMポートの部分は括弧書きでESP32S3と表示されるポートがあるのでそれを選びます。
それ以外の設定はとりあえずデフォルトです。

ボード設定

適当スケッチ

テストで以下のスケッチを書き込んでみました。
連続している4-7。配線の都合上0もテストに追加。

byte pins[] = {0,4, 5, 6, 7};
void setup() {
  for (int i = 0; i < sizeof(pins); i++)
    pinMode(pins[i], OUTPUT);
}

void loop() {
  for (int i = 0; i < sizeof(pins); i++)
    digitalWrite(pins[i], !digitalRead(pins[i]));
    delay(100);
}

以下が実行時の様子です。
変換基盤が無いので色々と配線が長くワイヤーも長いので超見づらいです。
後から手でLEDを接触させて動作確認しました。
そして、起動中の状態で書き込みを実行することでスケッチの上書きが可能であることも確認できました。

テスト配線

まとめ

今回はESP32-S3の使いはじめ方についてみてきました。
まだまだこちらは情報が少なく、起動関係の情報を集めるだけでだいぶ苦労しました。
ESP32は4MBですが本品は16MBですので、より大きなスケッチ(Wi-Fi+BLE同時等)を使う場合に便利そうですね。
あとはBluetoothはバージョン5なのでさらなる省電力化が見込めます。今後はこちらが主流になっていくんでしょうかね。

USBデバイス化する場合

ESP32-S3のネイティブUSB機能を使用すると、Pro Micro / LeonardoのようにUSBデバイスを作成できるようです。
昔よりだいぶ値上がりしてしまったProMicroの代わりに使用できそうです。ピン数も多く、Wi-Fi/BTも使ったキーボードなんかも作れると思うので後継はこちらで決まり。
私も簡単に試しましたが確かにCTRL+Aなどができました。

USBデバイスにする場合はモード変更が必要そう

USBデバイス状態ではIOピンによるブートモードの変更とリセットを手動で行わないとスケッチを書き込めませんでした。

USBデバイス時の設定

USBデバイスとして使用する場合はUSBモードを"USB-OTG(TinyUSB)"にします。

USBデバイス向け設定

USBデバイスのサンプルコード
配線の都合上モード切替のIO0を入力ピンとして使用しています。
IO0をLOWにすると"CTRL+A(全選択)"が入力されます。
マウス分もメモ書き程度ですがコメントで入れてあります

#include "USB.h"
#include "USBHIDKeyboard.h"
#include "USBHIDMouse.h"
USBHIDMouse Mouse;
USBHIDKeyboard Keyboard;

byte Last = 1;

void setup() {
  pinMode(0, INPUT_PULLUP);
  Keyboard.begin();
  USB.begin();
}

void loop() {
  byte buttonState = digitalRead(0);
  if ((buttonState != Last) && (buttonState == LOW)) {
    //CTRL+A
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.write('a');
    Keyboard.releaseAll();
    /*
      //ダブルクリック
      Mouse.click(MOUSE_LEFT);
      delay(20);
      Mouse.click(MOUSE_LEFT);
    */
  }
  Last = buttonState;
  delay(1);
}



情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。