ESP32をArduino IDEで開発する

 無線機能を搭載したESP32ことESP-WROOM-32搭載ボードを入手しました。
 コスト的にはESP8266(ESP-WROOM-02)の方が安価ですが、今回はBluetooth LEを使った開発を行いたかったため、WiFiだけではなくBluetooth(とBluetooth LE)にも対応したESP32を利用することにしました。

 購入した物と、備忘のためArduino IDEで開発できるようになるまでの記録を記載します。
 

ESP-32開発ボード

 Amazon.co.jpで以下のボードを購入しました。HiLetgoでは電子パーツ類を何度も購入していますが、いつの間にか到着まで1週間以上かかる中国発送ではなく、日本のAmazonの倉庫から発送されるようになっており、入手性が良くなっています。ただ、このESP-32開発ボードはそれなりに売れているようで在庫が無いことも多いようですし、最近は販売価格が上昇傾向にあるようです。

 

梱包形態

 過去にHiLetgoで購入したボード類と同様に、以下のように静電気防止袋に封入された状態となっています。また、ピンは(恐らく単なるウレタン)スポンジに刺さった状態で保護されているため、曲がってしまうようなことは無いように配慮されています。これがそのままAmazonのクッション封筒に入って送られてきました。
ESP-WROOM-32開発ボードの梱包
 

技適マーク

 国内業者から購入したわけではないので技適マークの有無が気になるところですが、しっかりと技適マーク有(工事設計認証番号: 211-161007)バージョンのESP32-WROOM-32が搭載されています*1
ESP32-WROOM-32開発ボード表面
総務省 電波利用ホームページ | 技術基準適合証明等を受けた機器の検索
 

開発環境構築

 以下はWindows 10にArduino IDEが既にインストール済みである前提として記載します。

 いくつかの非純正Arduino互換ボードの場合は、ボードマネージャにURLを追加するだけでArduino IDEから開発可能になりますが、ESP32は現時点(2017/11)ではこの手段には対応していません。

(2019/2/14追記ここから)
現在ではstable版のArduino core for ESP32 WiFi chipがリリースされており、ボードマネージャからESP32を追加可能です。
wave.hatenablog.com
本投稿の「手動ファイル配置手順」の項は無視して、上記投稿の手順でArduino IDEにESP32を追加可能です。ドライバ等については本投稿に記載の通りです。
(2019/2/14追記ここまで)

 以下のGitHubからArduino core for ESP32 WiFi chipを入手し、そのファイル群を指定のディレクトリに配置する必要があります。
GitHub - espressif/arduino-esp32: Arduino core for the ESP32

 具体的な手順は上記のGitHubにInstallation Instructionsとして各環境向けに記載された手順へのリンクが掲載されていますので、その通り作業すれば問題ありません。
 ただしその手順ではGitクライアントをPCに導入して作業する前提となっています。今回はGitクライアントを導入せずに環境構築したかったため、上記GitHubの[Clone or download]ボタンから[Download ZIP]を選択してダウンロードしたZIPファイルを基に、以下のように手動でファイル群を配置しています(現状では毎日のように何らかのリソースが更新されているため、公式手順通りGitクライアントを導入した方が簡単にリソースを最新化できるので、特殊な事情が無ければ手動でファイルを配置するのはお勧めしません)。
 

手動ファイル配置手順

1. %USERPROFILE%\Documents\Arduino\hardware にディレクトリ espressif を作成

cd %USERPROFILE%\Documents\Arduino\hardware
md espressif

2. %USERPROFILE%\Documents\Arduino\hardware\espressif にディレクトリ esp32 を作成

md esp32

3. ダウンロードしたZIP(arduino-esp32-master.zip)のarduino-esp32-master階層下を %USERPROFILE%\Documents\Arduino\hardware\espressif\esp32 に展開(直下のディレクトリ構造は以下のようになる)

%USERPROFILE%\Documents\Arduino\hardware\espressif\esp32
+---cores
+---docs
+---libraries
+---package
+---tools
+---variants

4. %USERPROFILE%\Documents\Arduino\hardware\espressif\esp32\tools\get.exe を実行
5. ESP-32用BLEライブラリを以下のGitHubの[Clone or download]ボタンから[Download ZIP]を選択してダウンロード
GitHub - nkolban/ESP32_BLE_Arduino: The library source for the ESP32 BLE support for Arduino.
6. ダウンロードしたZIP(ESP32_BLE_Arduino-master.zip)のESP32_BLE_Arduino-master階層下を %USERPROFILE%\Documents\\Arduino\hardware\espressif\esp32\libraries\BLE に展開(直下のディレクトリ構造は以下のようになる)

%USERPROFILE%\Documents\Arduino\hardware\espressif\esp32\libraries\BLE
+---examples
+---src

 

ドライバ導入

 ESP-32開発ボードに搭載されているUSB-シリアル通信用ICは開発ボードによって恐らく異なります。冒頭に記載したボードの場合はSILICON LABSのCP2102が搭載されているようですので、ここではそれを前提に記載します。

1. PCのUSBと開発ボード側のmicroUSBを普通*2のUSB-microUSBケーブルで接続
2. 以下の表示が現れ、Windowsが自動でセットアップを始める
CP2102 automatic setup started by Windows10
3. 以下の表示が現れ、Windowsが自動でセットアップを終える
CP2102 automatic setup finished by Windows10
※何もエラーメッセージを吐かないが、実はドライバは導入されていない(この状態ではArduino IDEを立ち上げてもESP-32に繋がったシリアルポートが見えない)。これに気付かずに少し嵌った。
Device Manager shows CP2102 is unknown device
CP2102 driver is not installed
CP2102 driver is not found via Windows Update
↑WindowsUpdateではCP2102のドライバは当たらない。
4. Silicon Labsの以下のURLから「Windows 7/8/8.1/10用」ドライバをダウンロード(本投稿記載時v6.7.5)
USB - UART ブリッジ VCP ドライバ - Silicon Labs
5. ダウンロードしたZIP(CP210x_Windows_Drivers.zip)を展開し、CP210xVCPInstaller_x64.exe*3を実行し、ドライバインストールを開始する。
5-1. [次へ]を押下
CP2102 driver install step 1 of 3
5-2. 使用許諾契約を読み、同意できればラジオボタンの[同意します]を選択後、[次へ]を押下
CP2102 driver install step 2 of 3
5-3. 正常にインストールされた旨の表示を確認し、[完了]を押下
CP2102 driver install step 3 of 3
6. デバイスマネージャでCP2102が正しく認識されたことと、COMポート番号を確認(以下の画像の場合COM3として認識された)
CP2102 was installed and assigned to COM3
 

Arduino IDE設定

1. [ツール]-[ボード]から"ESP32 Dev Module"を選択
2. [ツール]-[シリアルポート]から上記手順で確認したCOMポート番号を選択(上記例ではCOM3)
 

補足など

 上記手順でArduino IDEからESP32の開発が可能になります。
 スケッチ例に追加されているESP32及びESP32 BLE Arduino階層下のサンプルを実行してみれば、正常に環境構築できたかの確認になるでしょう。
 

蛇足

 個人的にはBLE MIDI機器を作りたいと思い、ESP32で実践している方の以下のコードを見つけたため、見た感じ簡単そうなこととESP8266が優秀だったこともあってESP32にも手を出しました。
arduino-esp32-BLE-MIDI/BLE_MIDI.ino at master · neilbags/arduino-esp32-BLE-MIDI · GitHub
 が、上記コードは最新のArduino core for ESP32とBLE libraryの組み合わせでは動作しないようです。というか、privateメソッドを呼び出そうとしていて、そもそもビルド通らないんですが…その点を最新のBLE libraryに合うように修正すればビルドは通るものの、他のBluetooth機器からBLE MIDIバイスとして見えないため、正しく機能しません。
 BLE MIDI仕様を読んでみたものの、取り立ててコードに齟齬は無さそうに見えます。Android向けBLE MIDIのサンプルコードを読んで、それと同様にMIDIサービスだけではなくデバイスインフォメーションサービスも追加実装してみたりしても、機能せず…ここしばらく嵌ったままです。Arduino core for ESP32もBLE libraryも日々激しく更新されているので、自分のコードのせいなのかも切り分けずらいですし。
 Android端末からはBLEデバイスとして見えるけれど、iOS端末からは発見できないという事象にも遭遇しており。Bluetoothを使った開発が初めてなこともあり、問題の切り分け方も怪しく前途多難感も強いですが、可能性の広がるデバイスなため気長に取り組もうと思います。
 



以上。

*1:購入タイミングや製造ロットによっては無いかもしれません。

*2:microUSB端子を搭載したAndroidスマートフォンを繋ぐようなごく一般的なケーブル。

*3:64bit版Windowsではなく32bit版Windowsを使用しているならCP210xVCPInstaller_x86.exe