ESP32開発環境/Arduino IDE (Debian11.3.0)
2022/7/8
はじめに
最初に断っておくが、ここであつかうArduino IDEはESP32の公式な開発環境ではない。
Espressif社(ESP32製造元)が提供している開発環境は ESP-IDF (https://github.com/espressif/esp-idf)らしい。
と思っていたが、
Welcome to Espressif’s site on GitHub (https://github.com/espressif)もEspressif社の公式サイトらしい。このなかにarduino-esp32の記載があることから、公式なものと思ってよさそうだ。
成り行き上、似非開発環境ArduinoIDEを使いESP32をターゲットとして開発をする。
素のESP32-WROOM-32EはATコマンドでアレコレ制御できるが、ArduinoIDEで書き込みをするとファームウェアを上書きするのでATコマンドによる制御ができなくなる。最悪の場合は、「デバイスの破壊」が待っている。
- Arduino IDE 1.8がインストールされている
非公式なプラグインをArduino IDEに導入してESPの開発環境にする。
Espressif社的にはESP-IDFが公式な開発環境らしい。開発言語はC/C++みたいだが・・・
- ESP32-WROOM-32E書き込み回路がある
ESP32-DevKitC互換ボードとESP32S NodeMCU互換ボードがあるらしい。
購入してもよいが、中身的にどうだろう?
- ESP32-WROOM-32Eに書き込まれているファームウェアは破壊する。
ATコマンドによるESP32の制御ができなくなる。公式な開発環境にも適応できなくなる。
に同意できるなら非公式な開発環境を試してもいいかもしれない。


写真は左からESP-WROOM-02, ESP32-WROOM-32E, ESP32-WROOM-SOLO-1, ESP32-WROVER-E
製品の違いはEspressif Systems社(https://www.espressif.com/en)で調べてほしい。
ESP32-WROOM-32E書き込み回路
開発時にESP32-DevKitC互換ボードはリセットボタン・プログラムボタンを操作必要とするので、アレらしい。
互換ボードは書き込み回路とESP32が一体化している。
ESP32-WROOM-32E単体しか用意していないので、USBポート/シリアルポート変換器(+リセットボタン+プログラムボタン+NodeMCU回路)を作る。
- 書き込み回路はきっと手直しがあるだろう。
- 書き込みが終わったEPS32-WROOM-32Eは独立した電源で使いたい。
- EPS32-WROOM-32EだけでなくESP-WROOM-02,ESP32-WROOM-SOLO-1,ESP32-WROVER-Eも使いたい。
などを考慮して、書き込み回路とESP32-WROOM-32Eは分離できるようにする。
パッケージをインストール
ESP32-WROOM-32Eの開発で必要になる。これがないとコンパイルに失敗する。
#管理者権限で実行
apt install -y python3-serial esptool
 |
なにもしないプログラムでもコンパイルするとエラーになる。
void setup() {}
void loop() {}
このような感じでエラーになるときは、python3-serialが疑わしい。
Traceback (most recent call last):
File "esptool.py", line 27, in
import serial
ModuleNotFoundError: No module named 'serial'
exit status 1
ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました。
|
Arduino IDEにライブラリを追加
- 環境設定を開く。

- 追加のマザーボードマネージャのURLへESP,ESP32を追加する。ここに直接記入してよい。

- 追加のURLを一行ずつ入力する。
http://arduino.esp8266.com/stable/package_esp8266com_index.json
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
ESP-WROOM-02の開発には
http://arduino.esp8266.com/stable/package_esp8266com_index.json
ESP32-WROOM-32Eの開発には
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
ESP32-WROOMの開発にhttps://dl.espressif.com/dl/package_esp32_index.jsonを使用しているサイトがある。
ヘッダファイルにエラーがあると言われる。ソースを見たが、文法的におかしいわけではないので解決できなかった。
adc_types.h:90:27: error: expected ',' or '}' before '__attribute__'
ADC_DIGI_FORMAT_12BIT __attribute__((deprecated)), /*!<ADC to DMA data format, [15:12]-channel, [11: 0]-12 bits ADC data (`adc_digi_output_data_t`). Note: For single convert mode. */
^
このあたりに,か}が必要と言っているが・・・

- ボードマネージャでESP8266,ESP32を追加する。

- ボードマネージャでESPを検索し、esp32をインストールする。

- 同様にesp8266(ESP-WROOM-02)をインストールする。

- ESP32-WROOM-32E,ESP32-WROOM-SOLO-1,ESP32-WROVER-Eの開発にはESP32 Dev Moduleを選択する。

ESP-WROOM-02の開発にはGeneric ESP8266 Moduleを選択する。

- ボードにESP32 Dev Moduleを選択すると、詳細な設定項目が表示される。
通信速度(Upload Speed)やFlash Freq,Flash Mode,Flash Size他はデータシートを見て適宜修正する。

スケッチ
Arduino IDEではプログラムを「スケッチ」というらしい。
Arduino IDEで使用したmyBlinkを使用する。
信号を確認
いきなりESP32-WROOM-32Eをつなぐのはコワイ。プログラム時の信号を確認した。
 | CH1:EN(RESET) CH2:IO0(PGM) ESP32は接続していない。 10秒間に7回トライしている。 |
 | CH1:EN(RESET) CH2:IO0(PGM) IO0のL時間に2パターンあるらしい。 |
 | CH1:EN(RESET) CH2:IO0(PGM) RESET=L→Hの後IO0をH→L→Hにしている。 1回目のL時間は40mS,2回目のL時間は500mSになっている。 IO0にコンデンサを追加したが、不要かもしれない。 追加したコンデンサの影響で信号の立ち上がりが丸くなっている。 つぎのESPライタではコンデンサなしにしてみよう。 |
ESP32に書き込み
あー。とうとう書き込みをしてしまった。もう戻れない。
通信エラーを心配してUpload Speedを115kbpsまで落としていたが、Upload Speedはデフォルトのまま(921.6kbps)で問題なかった。ほぼ1MHzだよ。電波だよ。いいのか?
そのような心配は取越苦労だった。LEDチカチカで動作を確認。
念の為LEDの電圧を波形観測する。
 | CH1:LED電圧(IO13) H(100mS),L(100mS) |
 | CH1:LED電圧(IO13) H(100mS),L(100mS) もうすこしずれるかと思っていたが、duty比50%になっている。 |
 | CH1:LED電圧(IO13) H(100mS),L(100mS) クロック240MHz(周期4.1667μS)だからミリ秒単位で誤差が出たらおおごとになるかもしれない |
MACアドレスを取得
githubにサンプルがあるそうです。そのまま使う。
MACアドレスはシリアルモニタに表示される。
MACアドレスがわかったので、DHCPサーバに登録した。
/*
* https://github.com/espressif/arduino-esp32/issues/932
*/
#include "esp_system.h"
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// Get MAC address for WiFi station
uint8_t baseMac[6];
esp_read_mac(baseMac, ESP_MAC_WIFI_STA);
char baseMacChr[18] = {0};
sprintf(baseMacChr, "%02X:%02X:%02X:%02X:%02X:%02X", baseMac[0], baseMac[1], baseMac[2], baseMac[3], baseMac[4], baseMac[5]);
Serial.print("MAC: ");
Serial.println(baseMacChr);
}
void loop() {
// put your main code here, to run repeatedly:
}
[ESP32]
ESPRESSIF (https://www.espressif.com/en)
Lang-ship ESP32シリーズ(無印,S2,S3,C3,...)比較2022年1月(https://lang-ship.com/blog/work/esp32-2022-01/)
[No module named serial]
Stack Exchange arduino IDE import serial ImportError: No module named serial (https://askubuntu.com/questions/1362572/arduino-ide-import-serial-importerror-no-module-named-serial)
Tech控え帳 [Arduino] No module named serial (https://www.chihayafuru.jp/tech/index.php/archives/3827)
[開発環境]
ESP-IDF (https://github.com/espressif/esp-idf)
ESP-IDE Programming Guide
(https://docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/index.html)
TECHMAGIC ESP32をEclipse + ESP-IDFで動かしてみた (https://techmagic.co.jp/blog220322/)
[Arduino IDE]
マイコン技術Navi ESP32の初期設定(Arduino IDEの導入からLチカまでの手順)(https://www.ekit-tech.com/?p=3234)
Indoor Corgi ESP32、ESP-WROOM-32搭載製品の設定とプログラム書き込み方法
(https://www.indoorcorgielec.com/resources/arduinoide%E8%A8%AD%E5%AE%9A/esp-wroom-32%E6%90%AD%E8%BC%89%E8%A3%BD%E5%93%81/)
スマートライフを目指すエンジニア ESP32-WROOM-32Eの開発環境(Arduino IDE)を作り方
(https://smtengkapi.com/engineer-esp32-wroom32-dev)
Leafony ESP32 MCUのArduino IDEの設定
(https://docs.leafony.com/docs/environment/esp32/arduino/)
パーソナルブログメモリ ESP32書き込み ImportError: No module named serial.tools.list_ports (https://blog.goo.ne.jp/field_light/e/b5f54680844c832b437d114decb8603f)
お部屋でモバイル 【ESP32】MACアドレスを取得する方法 (https://mobile.k05.biz/e/2018/12/esp32-mac-addr.html)