ESP32調査

最終修正日:2020/9/3

  1. 概要
  2. シリーズ
  3. モジュール一覧
  4. アクセスモード
  5. ビルドに関して
  6. OTA(Over The Air)
  7. SPIFFS


ESP32は上海に拠点を置くEspressif Systems社が開発・製造している、低コスト、低消費電力なSoCのマイクロコントローラです。
開発環境としてArduino IDEが使用できます。※Arduino core for the ESP32
※純正の開発環境はESP-IDF(Espressif IoT Development Framework)だそうです。ここでは扱いません。ここではArduino IDEのみ対象としています。

WIFIやBlueToothモジュールとして扱う場合、メインMPUとシリアル通信で接続して利用することになるかと思います。しかし、このESP32はCPUコアを搭載しているので、このモジュール単体で殆どのことが実現出来ます。
チップモジュールのPinPitchが1.5mmとmil単位で無いこともあり、独自の戦力で市場開拓されている印象があります。
CPUコアはTensilicaのXtensa LX6マイクロプロセッサとのことです。
このコアはArduinoに該当するモノが無かったことからEspressif Systems社が戦略的に対応したのでしょうか?雰囲気としてはSTM32duinoと同じようにコアライブラリを組み込むことを要求しています。
https://github.com/espressif/arduino-esp32
※このライブラリにはm5stack_atom用の情報も追加されているようです。

Espressif Systems社のサイトには技術情報等がそれなりに掲載されているのですが、ダウンロードできないモノとかもあります。.cnサイトには何らかの制限が掛かるようで、.com/enに掲載されている情報を落とした方がよいようです。
フォーラムも用意されているのです。中国語フォーラムが主かと思いきや英語の方がスレッドが延びています。20倍以上ですね。
実際に手元に置いてWebServerぐらい構築してみないと ESP32の実力がどんなもんか 判りません。STM32も安価だと思いましたがESP32は更に安価ですね。特にchipに含まれているSRAMのサイズが10倍以上大きいのが興味深いですし、16MB搭載のモジュールがあることからカメラフレームも扱えます。
まずは適当なモジュールを入手し、WebServerとかWIFIの強度計測なんかを構築してみたいところです。
⇒スイッチサイエンス社のESP-WROOM-02ピッチ変換済みモジュール《シンプル版》が、購入履歴から手元にあることが判り、探したところ、見つかりました。
そこで、このモジュールとSTM32MINIShieldをシリアル接続して強度計測にトライしてみます。

スイッチサイエンス社の“ESP-WROOM-32に関するTIPS”はESP32の全体像を把握する上で需要です。

ESP32シリーズ

chip

ESP32-D0WD-V3

ESP32-D0WDQ6-V3

ESP32-D0WD

ESP32-D0WDQ6

ESP32-D2WD
Wi-Fi
  • 802.11 b / g / n
  • 802.11 n(2.4 GHz)、最大150 Mbps
  • 4×仮想Wi-Fiインターフェイス
  • ダイバーシティアンテナ
Bluetooth
  • Bluetooth v4.2 BR / EDRおよびBLE仕様に準拠
  • 適応周波数ホッピング(AFH)
  • 最大4 Mbpsの高速UART HCI
CPU
  • シングル/デュアルコア32ビットLX6マイクロプロセッサ 最大600 MIPS 48pin
  • ROM 448 KB
  • SRAM 520 KB
  • 16 KB RTC SRAM
GPIO
  • 34
ADC
  • 12bit 18chmax
DAC
  • 8bit 2ch
タッチセンサー
  • 10ch
  4×SPI / 2×I2S / 2×I2C / UART×3 / IR
CORE Dual Dual Dual Dual Dual
Package QFN 5x5 QFN 6x6 QFN 5x5 QFN 6x6 QFN 5x5
フラッシュ なし なし なし なし 2MB

ESP32シリーズ

chip

ESP32-S0WD

ESP32-U4WDH
ESP32-PICO-V3 ESP32-PICO-D4
Wi-Fi
  • 802.11 b / g / n
  • 802.11 n(2.4 GHz)、最大150 Mbps
  • 4×仮想Wi-Fiインターフェイス
  • ダイバーシティアンテナ
Bluetooth
  • Bluetooth v4.2 BR / EDRおよびBLE仕様に準拠
  • 適応周波数ホッピング(AFH)
  • 最大4 Mbpsの高速UART HCI
CPU
  • シングル/デュアルコア32ビットLX6マイクロプロセッサ 最大600 MIPS 48pin
  • ROM 448 KB
  • SRAM 520 KB
  • 16 KB RTC SRAM
GPIO
  • 34
ADC
  • 12bit 18chmax
DAC
  • 8bit 2ch
タッチセンサー
  • 10ch
  4×SPI / 2×I2S / 2×I2C / UART×3 / IR
CORE Single Single Dual Dual
Package QFN 5x5 QFN 5x5 LGA 7x7 LGA 7x7
フラッシュ なし 4MB 4MB 4MB

chipの特徴に応じたモジュールが提供されています。モジュールはピッチが特殊だったり、電源やシリアル変換ボードを接続しないとPCと接続して開発が行えません。その意味ではじめからUSBケーブルだけでPCと接続して開発が始められる開発ボードは手軽でいいです。
調べたところ結構な種類がありました。
espressif 社製の開発モジュールはボードに取付穴がありません。その意味からサードパーティ製が使いやすいと思っています。

外観 商品名等 搭載CPU/Module

M5stack

日本国内の代理店はスイッチサイエンス

ストアを見るとhttps://m5stack.com/collections/all
にはいろいろな商品があることが判りました。

表示器付きで\3000程度と安価です。

TypeCのコネクタです。

ESP32-D0WDQ6

waves ESP32 ESPDuino-32

UNOとpin配置を合わせたモジュールです。

ESP-WROOM-32(ESP32-D0WDQ6)
ESP32-PICO-KIT(F) ESP32-PICO-D4
CP2102N
ESP32-DEVKITC-32D ESP-WROOM-32(ESP32-D0WDQ6)

ESP32-AZURE IOT KIT


このボードにはMPU6050/MAG3110/FBM320
HTS221/BH1750FVI/SSD1306というI2Cデバイスが搭載されています。

ESP32-WROVER-B()

ESP32-VAQUITA-DSPG

Alexa組み込みIoTデバイスを簡単に作成するための開発キットという位置づけです。

ESP32-WROVER-E
ESP32-LYRAT-MINI
このボードはオーディオ開発ボードと云う位置づけです。
ESP32-D0WD

Adafruit Industries LLC  3591

2×19のDIPです。

\2500程度です。
きちんとした資料が提供されていることにとても意味があります。

ESP32

ESP-EYE
https://www.espressif.com/en/products/
devkits/esp-eye/overview

8 MバイトのPSRAM
4 Mバイトのフラッシュ

ESP-WHOという顔検出および認識プラットフォームが利用できます。

ESP32
CP2102N

GeekcreitESP32CAM

カメラモジュールOV264がセットされた開発キットです。
DIP-16
外部に4MBのSRAMがありフレームメモリとして使う事が出来ます。

1000円程度で購入できます。

ESP32-SIP
CP2102N

Maixduino AI開発ボード

UNOとpin配置を合わせたモジュールです。
\4000でスイッチサイエンスから購入できます。

このボードの開発はArduinoで出来るのですが、ESPDuinoではなくMaixduinoです。

RISC-V(k210)
ESP32

Arduino core for the ESP32を使ったサンプルスケッチは殆どBUILDに成功します。期待通りに実行できるかどうかは別にして。Arduino STM32を使ったSTM32duinoでのBUILDよりも明らかに成功率が高いです。

ESP32には3つのモードがあります。WiFI.begin()の引数となります。

  1. ステーションモード
    既存のSSIDに接続して子機として稼働する
    ESPでWebServerを立ち上げた場合、PCからアクセスするにはWiFiルータを介してアクセスする事になります。
    無線LANルーターを経由して接続するので、各端末でインターネットを楽しみながらワイヤレス再生が可能です。
  2. アクセスポイントモード
    SSIDを公開して、親機として稼働する
    無線LANルーターが無い場合に、iPhone/iPadと直接接続してワイヤレス再生を行います。
  3. ステーションモード+アクセスポイントモード
    一種のブリッジのような事が可能となります。


ESP32のスケッチをbuildするのですが、本当にスムーズにbuildが通ります。実行時エラーはpinアサインの記述ミスで結構発生しますが。

とはいうもののbuildに失敗するケースがあります。この点は記録に残すべきだと思いました。

  1. 有線LANとESP32を同時に使うコードを書いたときにbuild出来ないというエラーを経験しました。
    EthernetServer WS(80);
    という記述が通りませんでした。
    先人の書込を検索したところ、
    C:\Program Files (x86)\Arduino\portable\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Server.h

    virtual void begin(uint16_t port=0) =0;
    に問題があるとのことでした。修正方法も提示されており、
    virtual void begin() =0;
    という修正方法が提示されています。
    ただ、この修正はESP32 WiFiライブラリのWebServerクラスを使用するすべてのものを破壊します。
    そして修正後にBuildは通るモノの実行できないことも確認しました。
    原因は判っていません。
  2. LED&KEY(TM1638)が動きません。
    STM32duinoで使用しているTM1638ライブラリはBuildが通りません。
    先人が紹介しているライブラリに変更してみるとBuildは通るのですが動きません。
    接続pinに問題があるのかもしれませんが、
    uint8_t dataPin = 23;
    uint8_t clockPin = 18;
    uint8_t strobePin = 5;
    ではうまくゆかないようです。判りません。

実行中の問題点にも注目しています。


ESP32は無線LAN経由でプログラムをダウンロードすることが出来ます。OTA(Over The Air)と云うそうです。
ESP32を無線CARに搭載しておくと、プログラムのUpdateをWeb経由で出来てしまいます。予めコンパイル済みのbinデータを作成しておく必要がありますが、OTA用に作成したブートプログラムの仕上がり次第でリーズナブルなモノに出来る事を確認しました。 ->

OTAの実現にはESP32独自のメモリマップが関与しています。開発環境毎にマッピングが異なります。ここではArduinoIDEに書かれている情報を示しておきます。
※メモリマップについてメーカの資料がありました。https://docs.espressif.com/projects/esp-jumpstart/en/latest/firmwareupgrade.html

パーティションファイルが入っているディレクトリ(自分の場合 ESP32のバージョンによって大きく異なる情報です)
C:\Program Files (x86)\Arduino\portable\packages\esp32\hardware\esp32\1.0.4\tools\partitions

この中に幾つかのcsvファイルが書かれており、どのファイルを選択するかがplatformio.iniに登録され使用されるようです。

2020/09/01  10:30    <DIR>          .
2020/09/01  10:30    <DIR>          ..
2019/10/02  21:52               335 app3M_fat9M_16MB.csv
2019/10/02  21:52             8,192 boot_app0.bin
2019/10/02  21:52             3,072 default.bin
2019/10/02  21:52               262 default.csv
2019/10/02  21:52               262 default_16MB.csv
2019/10/02  21:52               262 default_8MB.csv
2019/10/02  21:52               262 default_ffat.csv
2019/10/02  21:52               335 ffat.csv
2019/10/02  21:52               217 huge_app.csv
2019/10/02  21:52               262 large_spiffs_16MB.csv
2019/10/02  21:52               222 minimal.csv
2019/10/02  21:52               261 min_spiffs.csv
2019/10/02  21:52               218 noota_3g.csv
2019/10/02  21:52               291 noota_3gffat.csv
2019/10/02  21:52               291 noota_ffat.csv
2019/10/02  21:52               218 no_ota.csv

default.csvの値を確認してみました。


SPIFFSの領域の使用方法ですが、先人の情報を参考にします。ただ、バージョンによって可成り異なるので、自身の環境に合致するかどうかの確認を忘れずに行う必要がありそうです。
まず使用する為には“\ESP32FS\tool\esp32fs.jar”が正しくインストールされている必要があります。

ファイルアップロードの仕方

  1. スケッチと同じ階層に“data”というサブフォルダを作成する
  2. “data”フォルダにUploadするファイルを格納する
    ファイルパスに注意が必要です。31文字までの制限あり
    画像を“data\img”フォルダに納めることも出来ますが、その場合のファイルパス長は\imgも含めておく必要があります。
  3. [ツール | ESP32 Sketch Data Upload] でファイルをアップロードする。※このときシリアルモニタは閉じておきます

実際にサンプルコードを作成してみたのですが、幾つか注意すべき点があるということが判りました。別途紹介します。->



戯言(nonsense)に戻る


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。