== ESP-WROOM-32のセットアップについて == ESP-WROOM-32は、Xtensa Dual-Core 32-bit LX6 マイクロプロセッサを搭載する、上海のESPRESSIF社が開発した無線モジュールです。WiFiとBluetooth v4.2に対応しています。 開発ボードはスイッチサイエンスでも販売されている[https://www.switch-science.com/catalog/3210/ ESPr® Developer 32]の他にも、ESPRESSIF社からESP32-DevKitCなどが発売さています。 本ページでは、このESP-WROOM-32をArduinoIDEで開発するためのセットアップとATコマンドモードのセットアップ手順を記述します。記述内容は2017/04/15現在のものであるため、最新版では内容は変更されている場合があります。必要に応じて下記の資料[https://github.com/espressif/arduino-esp32 Arduino Core for ESP32 - Github]などを参照してください。 また、セットアップが終わったあとの開発に関しては、[http://trac.switch-science.com/wiki/esp32_tips ESP-WROOM-32に関するTIPS]も御覧ください。 == ESP-WROOM-32 仕様 == ESP32製品サイトより抜粋。 > * KeyFeatures > * 240 MHz dual core Tensilica LX6 microcontroller with 600 DMIPS > * Integrated 520 KB SRAM > * Integrated 802.11BGN HT40 Wi-Fi transceiver, baseband, stack and LWIP > * Integrated dual mode Bluetooth (classic and BLE) > * 16 MByte flash > * 2.2V to 3.6V operating voltage > * -40°C to +125°C operating temperature > * On-board PCB antenna / IPEX connector for external antenna > * Sensors > * Ultra-low noise analog amplifier > * Hall sensor > * 10x capacitive touch interface > * 32 kHz crystal oscillator > * 32x GPIO > * 3 x UARTs, including hardware flow control > * 3 x SPI > * 2 x I2S > * 12 x ADC input channels > * 2 x DAC > * 2 x I2C > * PWM/timer input/output available on every GPIO pin > * OpenOCD debug interface with 32 kB TRAX buffer > * SDIO master/slave 50 MHz > * Supports external SPI flash up to 16 MB > * SD-card interface support > * Security Related > * WEP, WPA/WPA2 PSK/Enterprise > * Hardware accelerated encryption: AES / SHA2 / Elliptical Curve Cryptography / RSA-4096 > * Performance > * Supports sniffer, station, softAP and Wi-Fi direct modes > * Max data rate of 150 Mbps@11n HT40, 72 Mbps@11n HT20, 54 Mbps@11g, and 11 Mbps@11b > * Maximum transmit power of 19.5 dBm@11b, 16.5 dBm@11g, 15.5 dBm@11n > * Minimum receiver sensitivity of -98 dBm > * 135 Mbps UDP sustained throughput > * 2.5 μA deep sleep current == 資料 == * [https://espressif.com/en/products/hardware/esp32/overview ESP32製品サイト] * [https://espressif.com/en/products/hardware/esp32/resources ESP32リファレンスサイト] * [https://github.com/espressif/arduino-esp32 Arduino Core for ESP32 - Github] * [https://espressif.com/en/products/hardware/esp32-devkitc/resources ESP32-devkitCリファレンスサイト] * [https://github.com/espressif/esp32-at AT application for ESP32 ESP-IDF] * [https://www.esp32.com/index.php ESP32 FORUM] * [http://esp32.net/ 海外のESP32 ポータルサイト] == ArduinoIDEを用いた開発のセットアップ手順(Windows) (2018/8月から) == **2018年7月末にライブラリの[https://github.com/espressif/arduino-esp32/releases/tag/1.0.0 Stable版が公開]されました。これに合わせて、ライブラリの導入方法も変更されたので、こちらに記述します。** 0. 以前の方法でセットアップした人は、`C:\Users\%USERNAME%\Documents\Arduino\hardware\espressif` あたりのファイルを消しましょう。消さないと、IDEから選ぶボードの種類が重複してしまい、どちらが最新のものかわからなくなってしまいます。 1. Arduino IDEの ファイル->環境設定 を選び、設定画面を開きます。 2. 「追加のボードマネージャーのURL」に `https://dl.espressif.com/dl/package_esp32_index.json` を追加します。すでに何かアドレスがある場合は、 `;` で区切って入力してください。横のボタンを押すと、改行入力ができます。 [[Image(ide-pref3.png)]] 3. ボードマネージャーを開いて「ESP32」を検索し、インストールボタンを押します。 [[Image(ide-brd2.png)]] 4. ボードマネージャー上で「INSTALLED」になれば導入完了です。開発の際は、お手元の開発ボードに合わせてターゲットを変更してください。 **スイッチサイエンスで販売しているESP-WROOM-32搭載基板は基本的に「ESP32 Dev module」を選択して開発することを想定したピン配置になっています。** ちなみに、BLEライブラリもこの手順で導入される模様です。ESP32用ライブラリのインストール先は `C:\Users\%USERNAME%\AppData\Local\Arduino15\packages`です。 == ArduinoIDEを用いた開発のセットアップ手順(Windows) (~2018/7月まで) == **2018年7月頃に、導入方法がArduinoIDEのライブラリマネージャーベースのものになりました。以下は参考程度に残しておきます。** 参照元は[https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/windows.md Windowsでのセットアップ手順]です。基本的な流れは、coreライブラリをGithubからダウンロードし、ArduionoIDEのシステムに導入するというものです。 ArduinoIDEのインストールは済まされているものとします。また、ArduinoIDEの`スケッチブックの保存場所`はデフォルトの`C:\Users\%USERNAME%\Documents\Arduino`から変更されていないものとします。変更した場合、適宜読み替えてください。 1. [https://github.com/espressif/arduino-esp32 Github]からコアライブラリの開発リポジトリをクローンし、`C:\Users\%USERNAME%\Documents\Arduino\hardware\espressif\esp32`に展開する git環境を利用すると、アップデートに対応しやすくなります。ZIPでダウンロードし手動で展開しても動作に影響はありません。 gitは[https://git-scm.com/downloads Git - Fast Version Control System]や[https://desktop.github.com/ GitHub Desktop]などから利用できます。後者の場合、リポジトリのクローン時にディレクトリを作成できないため、予めエクスプローラー上でディレクトリを作成した後にクローン先を指定することになります。 ZIPでダウンロードする場合は以下の画像を参照してください。 [[Image(git-zip.png)]] ディレクトリが以下のようになっていれば次のステップへ進みましょう。 [[Image(folder.png)]] 2. `C:\Users\%USERNAME%\Documents\Arduino\hardware\espressif\esp32\tools\get.exe`を実行する `xtensa-esp32-elf`というディレクトリが作成されます。 3. 必要に応じてデバイスドライバを導入する スイッチサイエンスのものであれば[http://www.ftdichip.com/FTDrivers.htm FTDI社のデバイスドライバ]、ESP32-DevKitCであれば[https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers CP210x用のデバイスドライバ]を必要に応じて導入してください。 4. ArduinoIDEのツール->ボード設定が以下のようになれば導入成功です(導入時期によって内容が異なることがあります) [[Image(board.png)]] **スイッチサイエンスで販売しているESP-WROOM-32搭載基板は基本的に「ESP32 Dev module」を選択して開発することを想定したピン配置になっています。** === 動作確認 === 他のArduinoボードと同じように開発できます。非常に基本的なサンプルスケッチとしては以下のようなものがあります。 {{{ void setup() { Serial.begin(115200); } void loop() { Serial.println("Hello World."); delay(10000); } }}} これを書き込んで、シリアルモニターを開いたときの様子を以下に示します。スケッチのアップロードにはESP32を書き込みモードで起動する必要があります。スイッチサイエンスの開発ボードは自動でモードが切り替わるようになっていますが、切り替わらないボードの場合は手動でBOOTボタンを押しながらリセットボタンを押してESP32を書き込みモードで起動する必要があります。 [[Image(hello.png)]] == BLEのセットアップ == **2018年7月頃に、導入方法がArduinoIDEのライブラリマネージャーベースのものになりました。それと同時に、ライブラリの導入が自動化されました。以下は参考程度に残しておきます。** 2017年10月ごろ、BLEのライブラリに公式対応しました。ただし、上記のインストール手順では導入されないため、手動でBLEのライブラリだけインストールする必要があります。 1. BLEのライブラリは[https://github.com/nkolban/ESP32_BLE_Arduino/tree/master ここ]です。上記手順とおなじようにGithubからダウンロードします。 2. 先程導入したESP-WROOM-32のディレクトリ`C:\Users\%USERNAME%\Documents\Arduino\hardware\espressif\esp32`の更に下`esp32\libraries\BLE`に、ダウンロードした`ESP32_BLE_Arduino-master`の中身をコピーします。このようになればOKです。 [[Image(esp32ble.png)]] 3. 試しにArduinoIDEからファイル->スケッチ例->ESP32 BLE Arduino->BLE_server などを開いてコンパイルができることを確認してください。 == ATコマンドモードのセットアップ(2017/6対応) == デフォルトでは検査用のファームウェアが書き込まれています([https://www.esp32.com/viewtopic.php?t=484#p5200 参照])。ATコマンドとは別のコマンドをやり取りできます([https://www.esp32.com/viewtopic.php?t=484#p5423 参照、ただし公式にはサポート外])。通信速度115200bps、改行モードCR+LFでコマンドの送信がができます。下は、ArduinoIDEでシリアルモニタを開いたときの様子です。 [[Image(serial.png)]] ATコマンド用の資料は[https://espressif.com/en/products/hardware/esp32-devkitc/resources ESP32-devkitCリファレンスサイト]のGetting Started->ESP32 AT Instruction Set and Examplesにあります。 ESP32のファームウェアは、ArduinoIDEで開発をすると上書きされてしまうので、ArduinoIDEで開発を行ったあとにATコマンドモードに戻したくなった場合、別の手順を踏む必要があります。 ATコマンド用のファームウエアは[http://espressif.com/en/support/download/at?keys=&field_type_tid%5B%5D=13 ESPRESSIF社 ダウンロード]からダウンロードできます。~~2017/04/15現在できません。現在製作中の模様です。[https://esp32.com/viewtopic.php?f=2&t=1058 公式Topics参照]。~~2017/06/06付で公開されました。 ファームウエアの書き込みには、ESPRESIF社公式のFlash Download Toolsを使います。2017/07/08現在最新版はV3.4.8.4です。[http://espressif.com/en/support/download/other-tools ESPRESSIF社 ダウンロード-ツール]からダウンロードできます。 起動すると書き込み対象のボードの選択画面になります。今回は対象がESP32モジュールなので、`ESP32 DownloadTool`を選択します。 [[Image(espflash1.png)]] [[Image(espflash2.png)]] 特に何もせずに`START`を押すと、ESP32の情報が表示されます。 [[Image(espflash3.png)]] MACアドレスは隠してあります。 ダウンロードしたATコマンド用のファームウェアの設定は、 `esp32_at_bin_v0.10\ESP32_AT_BIN\download.config` に記載されています。執筆時点でのファームのバージョンは0.10です。 いかにその内容を示します。 * SPI SPEED: 40 MHz * SPI MODE: DIO * FLASH SIZE: Detected(ESP-WROOM-32の場合は32MBbitにしておきます) ||Path||Offset|| ||bootloader/bootloader.bin||0x1000|| ||phy_init_data.bim||0xf000|| ||esp-at.bin||0x100000|| ||partitions_at.bin||0x8000|| 以上のように設定をして、STARTを押します。正しく書き込めれば、FINISHとでるはずです。 [[Image(espflash-at.png)]] アドレスは隠してあります。 シリアルモニタなどで動作を確認してみます。下の画像は起動時にシリアルモニタに表示されたログです。 [[Image(espflash-atboot.png)]] ==== ATコマンドをやりとりする ==== 一般的に、ESP-WROOM-32の開発ボードは、基板上のUSB-Serial変換はESP-WROOM-32モジュールのUART0ピンと接続されています。これは、フラッシュへの書き込みを行うのが目的のためです。 一方で、ATコマンドはUART1ピンで送受信するようになっています。そのため、開発ボードの他にもう一台USB-Serial変換を用意して接続する必要があります。(ESP32 AT Instruction Set and Examples の `1.2 Downloading AT Firmware into Flash` 参照)(余談ですが、UART1とESP32内部回路のU1は別のようです)。 必要最低限の接続は次のようになっています。 ||USB/Serial||ESP-WROOM-32|| ||TX||GPIO16|| ||RX||GPIO17|| ||GND||GND|| 通信には3.3V対応のものをつかってください。スイッチサイエンスの[https://www.switch-science.com/catalog/2782/ FTDI USBシリアル変換アダプター Rev.2]など使う場合は3.3Vに変更するのを忘れないようにしてください。 [[Image(esp32-ateg.png)]] 画像は`AT+RST`および`AT`と送信したときの応答です。`AT+RST`と送ったときは、開発ボードのシリアルにブートログが流れていることが確認できます。 ここまで動作すれば、ATコマンド用のファームウェアの書き込みは完了です。バージョン0.10ではまだWiFiのコマンドしか用意されていないようです。 ==== ota data partition invalid と表示される==== ESP32 AT Instruction Set and Examples の `1.2 Downloading AT Firmware into Flash` によると、`ota data partition invalid`と表示されるときは`ota data`とラベルされているアドレス([https://github.com/espressif/esp32-at/blob/master/partitions_at.csv 参照])に`blank.bin`を書き込むように、とあります。 つまり、`blank.bin`をオフセット`0x10000`に書き込みます。実際に書き込んでみたところ、正常に動作するようになりました。