気の向くままに辿るIT/ICT/IoT
webzoit.net
IoT・電子工作

ESP8266/ESP-WROOM-02/ESP32あれこれ

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
ESP8266って?

ESP8266/ESP-WROOM-02/ESP32あれこれ

ESP8266/ESP-WROOM-02/ESP32あれこれ

2018/07/26

 電子工作・IoTを始めてみようと思い立ってから約1年5ヶ月、ESP-01は結構前から、ESP-12Fは買うのこそ比較的早かったものの、ピッチ変換基板を買ってはんだ付け...が、ついこの間、ESP-32開発ボードは極最近、動作確認したばかり。

 いまのところ、ページを起こすほどでもなさ気ですが、書き留めておいた方がよいよねということを書いておくページ。

 そこそこまとまれば、それらやここに書いたものを個別ページとして起こすこともあるかも。

Arduino-IRremoteとIRremoteESP8266の併用は回避が賢明

2019/05/04

 何気なく、z3t0/Arduino-IRremoteライブラリを試してみたところ、markszabo/IRremoteESP8266ライブラリとは認識結果が微妙に異なりました。

 ちなみに回路に向け、リモコンボタンを押してシリアルモニタで確認すると定義されたバッファサイズが小さく、IRremoteInt.hのRAWBUFの値の変更を促されました。

 また、同ライブラリは、トップからダウンロードするとVersion - 2.2.3のようですが、2.4.0 beta releaseでベータ版ながら、2.4.0をダウンロードでき、これだと更に若干認識されるエンコード方式が異なりました。

 自身が、今日までに検証したリモコン家電は、シャープAQUOSテレビ、某社製空気清浄機、某社製扇風機、シャープと東芝のエアコン2機種でIRremoteESP8266のIRrecvDump/IRrecvDumpV2では、リモコンエンコード方式としてAQUOSテレビがPANASONIC、空気清浄機がNECで他は全てUNKNOWNと判定されました。

 一方、Arduino-IRremote Version - 2.2.3では、AQUOSテレビのみ結果が異なり、UNKNOWNとなりました。

 また、Arduino-IRremote Version - 2.4.0では、AQUOSテレビが同じくUNKNOWN、東芝エアコンはSANYOと判定されましたが、後者に至っては、CodeがFFFFFFFF (0 bits)となっているので実質、UNKNOWNであり、rawDataを使う必要がありそうです。

 ちなみに、この東芝エアコンは、Arduino-IRremote Version - 2.2.3では、UNKNOWNになったり、SANYOになったりと判定結果が不安定でした。

 結果、自身の検証家電においては、AQUOSテレビの分、IRremoteESP8266ライブラリの結果が好ましい(rawDataでない分、データ量が減る?)ので送受信回路共にESP8266で組むのが妥当という結論に至りました。

 というか、そもそも、これまでArduino-IRremoteで送信、IRremoteESP8266で受信回路などという併用は考えたこともなかったわけで当然と言えば、当然です。

 仮に今回受信をArduino、送信をESP8266にしていたとしてもArduino-IRremote側での結果は、全てUNKNOWNと認識されたも同様なので事なきを得た可能性もありますが、それぞれ操作はできるかと思うものの、なにぶん、Arduino-IRremoteのデータでは実際に試したわけではないため、何とも言えません。

 ただ、この結果から、リモコン信号解析をArduino-IRremoteライブラリを元にしたArduinoによる回路、信号送信回路をIRremoteESP8266ライブラリを元にしたESP8266にする...というのは回避するのが賢明でしょう。

 実は、作った回路を整理している際に自身は、余ってるNanoを使い、そうしようと思って今回試してみるに至ったのですが、検証してみてよかったです。

 尤も既存のリモコンは、全てIRremoteESP8266ライブラリで解析済みだったのですが、検証もせずに回路だけArduinoで作っていたとしたら、新たなリモコン(家電)を入手したときにドハマりしていたかもしれません。

 ちなみにz3t0/Arduino-IRremoteについては、ArduinoだけでなくESP8266にも受信だけならESP32にも対応しているのですが、ESP32 Support #540のYouTube動画を見ると、どうも「MQTTを介せば」という条件付きで???ESP32による赤外線信号発信にも対応できる...とのこと。

2019/06/14

 と思ったら、よく見るとz3t0/Arduino-IRremoteライブラリには、パッチESP32 Support #540があり、リンク先の通り、各種ファイルを修正しただけでESP32でも少なくともUNKNOWNとなったSHARP AQUOS TVのON/OFFをirsend.sendRaw(...)することで赤外線操作できました。

 もし、赤外線LEDが光らない場合、複数のGPIOピンを試すべきです(自身は、26でダメで12にしたところいけました、ちなみに受信には14を使用、ピンアサイン詳細はESP32 Pinout Reference等参照)。

 ちなみにライブラリ格納場所にコピーを作るとIRsend irsend()にピン番号を渡せなかったり、思わぬエラー(undefined reference to...、collect2: error: ld returned 1 exit status)でハマりますから、必要なら別の場所に元のライブラリを退避しておかなければなりません。

ESP8266とリモコン

2019/02/05

 今のところ、日本の技適を通っていて何を考えることなく自由に使えるのは、(技適マーク付きの)ESP-WROOM-02/ESP-WROOM-32か、これらが載った開発ボードのみです。

 リモコンを考えた場合、ESP-WROOM-02は対応している模様もESP-WROOM-32は受信のみで送信は未対応なようです。

 ただ、ESP32でもMQTTやIFFFT、Blynkなどを使うか、若干無駄で嵩張りますが、ローカル環境で済ませるならESP32を無線モジュールとしたArduinoに赤外線LEDをつなげば、いけるでしょう。

 自身は、ESP-WROOM-32開発ボードは複数持っていますが、ESP-WROOM-02は持っていないのでESP8266 NodeMCUボードで検証しました。

[2019/06/14:追記・訂正] ESP32でも赤外線送信できることを確認しました。

 ちなみにESP8266にも載っていることがあるESP-12E/12Fなど単体チップ、ピッチ変換基板併用などでもできますが、これらは電源周りの工夫ができない場合、かえって大掛かりになるのに対し、NodeMCUなどの開発ボードは、あっさりできて激楽です。

 ESP8266の単体チップを使うとわかるのですが、GPIO00/GPIO02/GPIO15(NodeMCUではD3/D4/D8)などは、特殊なピンなので回路で入出力に使うピンは、別のものにするのが無難です。

 そうでない場合、スケッチをアップロードする前、ガジェットに電源を投入、WiFi接続する前には、一度、それらのピンを外してから等、配慮しないとアップロードやESPによるアクセスポイント、ステーションモードの確立など無線接続に失敗することになるでしょう。

 また、自身は、試しておらず、真偽の程も、仮にそうだったとして、今尚そうなのか、わかりませんが、WiFi機能に関しては、一時的に電流量が多くなり、ESP8266開発ボードの5V/G(ND)のみでは起動できず、USB電源と併用、WiFi機能が有効になった後は、USBを抜いても運用可能といった情報を目にしました。 => 後日試してみたところ、その必要はありませんでした。

 尚、WiFiチップは、結構熱をもつのでケースに入れる場合には、誤動作回避の為にも適度な通気口は必要、できることなら冷却手段があれば尚良いでしょう。

2019/05/04

 Arduino-IRremoteとIRremoteESP8266の併用は回避が賢明

easy_installとpip

2018/11/27

 久々にESP32を使おうと思ったら、Arduino IDEにおけるコンパイルで[ImportError: No module named serial]というエラーでハマりました。

 エラー表示の他の部分からpyserialのエラーであることがわかり、ちょっと調べてpip3 install pyserialやアップデート、sudo apt install python3-serialなどをインストールしてみるが、一向に解決しない...。

 更に検索してみるとpythonには、pipが置き換えを図り、それ以前からあったeasy_installなるコマンドがあることを知り、sudo easy_install pyserialとしてみたら、なんと先のArduino IDEでのエラーが解消しました。

 最後にいじったのは、32bit Debian Stretch上ですが、Juliusを使いたくて64bit Debianを追加インストール・常用後、初めてだったから環境が整っていなかったからでした。

ESP8266/ESP32+Arduino IDEでSPIFFSを使う方法

2018/09/04

 ESP8266とSPIFFSについては既に記事中で触れたので本末転倒な気もしますが、ESP32とまとめて書いておきます。

 ESP8266については、esp8266/arduino-esp8266fs-pluginの通りにesp8266fs.jarを、ESP32については、me-no-dev/arduino-esp32fs-pluginの通りにesp32fs.jarをダウンロード・展開します。

 最終的には、Arduino IDE展開ディレクトリ内のlibrariesディレクトリと同列の[tools]ディレクトリ(なれけば作成)内の、それぞれ、[ESP8266FS]、もしくは、[ESP32FS]以下の[tool]ディレクトリに、これら.jarファイルを配置した恰好となります。

 その後、Arduino IDEを起動(既に起動していた場合は再起動)すると[ツール]メニュー内に[ESP8266 Sketch Data Upload]、[ESP32 Sketch Data Upload]メニューが追加され、表示されます。

 ESP32については、スケッチごとにSPIFFS.hをインクルードする必要があります(ESP8266では不要)。

 保存したい任意の各種ファイルは、Arduino IDE用ESP8266/ESP32のスケッチごとのディレクトリ内に[data]ディレクトリを作成の上、そこに置き、先のメニューを選択することでアップロード(上書き・書き換え)できます。

 SPIFFS/SPI Flash File Systemは、モジュール上のフラッシュメモリ内のファイルシステムに対してSPI経由で読み書きできるようになる仕組み(書き込み上限・寿命があるので頻繁な書き換えには不向き)。

Arduino IDE 1.8.6ではDevKit V1に優しくなりました

2018/08/26

 前段の理由でArduino IDEにESP8266/ESP32ボード再追加することになりましたおかげもあって良い発見もありました。

 従前、Arduino IDEでスケッチを書き込む際、ボード上のBOOTボタンを押す必要があったDevKit V1(互換)ボードにおいてArduino IDE 1.8.6では、その必要がなくなっていることに気づいた。

 [追記] 極々稀だと思われるが1度アップに失敗、BOOT押下が必要になることもあった...と思いきや、それ以後、たまに、BOOTボタン押下を要することが...。

 何れにしてもDevKit V1ボードのバグという情報もありましたが、ESP-IDFでは、そもそも、その必要はなかったことを確認済みなので、何れにしてもバグというわけではなく、Arduino IDE側の仕様によるものと思われ、今回のバージョンアップで、その点がArduino側で改善されたということなのでしょう。

Arduino IDEのバージョンアップに伴うESP8266/ESP32ボード再追加

2018/08/26

 Arduino IDE 1.8.6からユーザー設定がまっさらになってしまった為、ESP8266/ESP32ボードを再追加する羽目になりました。

http://arduino.esp8266.com/versions/2.4.2/package_esp8266com_index.json
https://dl.espressif.com/dl/package_esp32_index.json

 前回は、ESP8266をArduino IDEの環境設定から、ESP32をgitから展開したが、今回は、これら2つのURL(ESP8266の方は、httpである点に注意)をArduino IDEの[ファイル] => [環境設定]の[追加のボードマネージャのURL:]欄にカンマ区切りで指定、Arduino IDEの[ツール] => [ボード]から[ボードマネージャ]から選択、インストールすることにしました。

 以下は、リンク先と全く同じですが、本来こっちの話なので、そのまま書いておきます。

 ESP32の方は、以前追加したディレクトリをそのままにしておくと[...xtensa-esp32-elf]が既に存在する旨、表示されたりしますが、警告であって別にインストールに支障はない模様(一度、削除、再インストールしてみましたが、今度は警告は出なかった)。

 これでESP8266/ESP32何れかのボードを選ぶとスケッチ例にも対象標準スケッチが表示されるようになることは確認済み。

 念の為、ESP32の方は、以前追加した内の[...xtensa-esp32-elf]をのみ削除(ゴミ箱送りに)しても、削除せず、そのままにしておいてもArduino IDE 1.8.6からサンプルスケッチGetChipIDやStartCounterをアップロードでき、DevKit V1互換ボードで機能することも確認済み。

ESP8266でエアコン自動制御

2018/08/15

 以前、ArduinoでエアコンON動作自動制御を思いつきで構想してみたものの、Arduinoより、ESP8266の方が...と思い直し、ここにきて構想を練り直してみたのですが、結果、構想に留めおくことにしました。

 というのは、検証もでき、温度センサによるエアコン(冷房・暖房・除湿)の自動ONの他、無線LAN経由でのブラウザからの遠隔操作、家人が長期不在など自動制御不要の際に電源OFFすべく、人が直接スイッチ付きコンセントをON/OFF、併せてサーボモータで無線LAN経由でブラウザからのスイッチ付きコンセントのON/OFF(少なくとも100Vエアコンでかつ集中スイッチ付き2口コンセントならエアコンだけでなくESP回路の電源も簡単に連動できる)など、機能的には、一通り、実現できること、Arduinoよりも無線搭載でArduino感覚で使えるマイコンがあるESP8266の方が適していることもわかったのですが...

 よくよく考えてみると、特に夏は、窓やカーテンの開閉も併せて自動化・連動でもしない限り、運用上、イマイチとの判断から。

 ちなみに仮に窓やカーテンの開閉を自動化し、連動させることができるにしても手動でも開閉できないと不便極まりないし、安全性の観点からもよろしくない為、そうした配慮も必要だろうと考えると自作にしても市販品を買うにしてもコスト面含め、今のところ、そこまでする必要性はないと思うに至りました。

ESP32とESPNow

2018/07/26

 日本の技適済みESP32については、ちょっと前に買ったESP32 DevKitC V4系でありつつ、ボードがDOIT製DevKit風のESP32開発ボードと今日届いたDOIT DevKit V1互換機と2つのESP32開発ボードを持っています。

 これらでESP32同士の通信用サンプルスケッチ[ESPNow]の[Master]/[Slave](わかりやすさ優先の便宜的な区分であり、ESPNOWに存在するコンセプトではないとのこと)を試してみたところ、後者をMaster、前者をSlaveとした際には、正常に機能しました。

Found -2 devices
Slave Not Found, trying again.
E (xxxxx) wifi: esp_wifi_scan_start yyy wifi not start

 ところが、これらを逆(前者をMaster、後者をSlave)にするとProblems with ESP NOW connectionと全く同じ症状でMaster(前者V4系ボード)側のシリアルモニタ上では、こんな表示が繰り返される...。

 [espnow "slave not found"]でググっても5件しかヒットせず、プログラム内のエラー出力(Serial.print)以外となるとリンク先の1件しかない為、超レアケースっぽい...と思ったら、"Found -2 devices"でぐぐったら4200件あり、[No Slave Found]らしい...以前のメッセージはこれだったのか?

 実際には、最初に当該事象に直面し、Master/Slaveにするボードを逆にしてみたら、正常に機能した次第。

 blink、hello world、scan、GetChipID、bt_discovery...など、いくつか試してみましたが、いまのところ、他のプログラムでは何ら問題はない、リンク先では、プログラム中の%cに着目しているものの、(前者の)ボードに起因するのか...?

 あ、パソコン再起動して、再度試してみたら、ボードが逆でも[Slave Not Found, trying again.]になりました...。

 そこで先の検索結果の内、ESPNow example can't work on latest commit #1425の回答後段に[you need to add WiFi.disconnect(); in the first line into the void InitESPNow() { then it will work.]とあり、Master/Slave共にInitESPNow()関数の最初の行にWiFi.disconnect();を追記してみたら、Master/Slaveにするボードに関わらず、ENボタンでリセットをかけるまでもなく、常時、正常に機能するようになりました。

ESP-01/ESP-12Fで通信

2018/07/26

 先日、ESP-01単体とピッチ変換基板にはんだ付けしたESP-12F間(ESP8266同士)の通信テストとして同じ方がアップしている2組のみで完結するAccesspoint - Station Communication Between Two ESP8266 MCUsと別途WiFi環境を要するWiFi Communication Between Two ESP8266 Based MCU Through the Home Routerのプロジェクトを試させて頂きました。

 何れも最初は、うまく機能したのですが、その後は、シリアルモニタ上で文字化けが発生...機能しているのか、否か判断できない状態になりました。

 何をどうすればよいのか、今の自身にはわからない。

 Mosquitto(MQTT broker)を使う手もありますが、これをインストールしたラズパイやパソコンを別途要するので、ESPだけで完結できないかと思っています。

 というか、電力消費量を抑えて電池駆動...を考えれば、BLE(Bluetooth Low Energy)でGATT Server/GATT Clientなどを使うのが妥当なんでしょうね。

ESP8266/ESP32の入力電圧

2018/07/26

 ESP8266の操作電圧は、概ね3.0〜3.6V、定格3.3V。

 ESP-WROOM-02/ESP-WROOM-32の操作電圧は、2.7〜3.6V、定格3.3V。

 よって何れのチップやボードもArduinoなどの5V版と通信する場合には、5V側からの通信については、降圧が必要。

 というか、V5なるGPIOピンがあるESP-32開発ボードがあるんですが、これって5V?

 => もう1つのボードはVINとなっているし、入力用端子で5Vに降圧?しているらしいので5V強の単3電池x4をV5とGNDにつないでみたらESP32の電源が入ったため、外部電源入力用のようです。

ESP32 DevKitC/DevKit V1のバグ?

2018/07/26

 ESP32の開発ボードEspressif製ESP32 DevKitCやDOIT製DevKit V1、これら互換機においては、Arduino IDEからスケッチを書き込む際、開発ボード上の[BOOT]ボタンを押したまま、[RST/EN]ボタンを押す、または、[BOOT]ボタンだけを押す必要があるとのこと。([2018/08/26] Arduino IDE 1.8.6ではその必要がなくなりました。)

 手持ちのV1互換機では、ESP-IDFにおけるmake flashやCLIにおけるesptool(.py/.exe)では、その必要はなかったのですが、中には、これも先のボタン押下が必要という情報もあるので、もし、書き込めない場合には、試してみる価値はあるでしょう。

ESP8266/ESP32開発ボードにはいろいろある

2018/07/26

 ESP8266の開発ボードについては、ESP-12Fなどが載ったNodeMCU、WeMos D1などが、ESP-WROOM-02については、ESPduino、ESP-WROOM-32については、Espressif社製ESP32 DevKitC、DOIT製ESP32 DevKit等々の他、やNodeMCU ESP32Sなどもある模様。

 共に動作確認済みですが、自身2台めとなるESP32開発ボードが届いて気づいてみれば、これら2つだけでもGPIOピン数など結構異なる部分があって驚きました。

 詳細は別としてESP32開発ボードにたくさん種類があるのは知っていましたが、これらの互換機に至っては、Espressif製DevKitCとDOIT製DevKitの間の子みたいなものなどArduinoボードと違ってある程度の統一感もないようで、その分、種類も多いっぽい...。

ESP8266/ESP-WROOM-02/ESP-WROOM-32のピッチ

2018/07/26

 転載ついでにESP8266/ESP-WROOM-02/ESP-WROOM-32のピンホールのピッチは、ブレッドボードやユニバーサル基板などの2.54mmとは異なったり、ピンレイアウト上、使えなかったりします。

 よってこれらと共に使うには、空中配線するか、2.54mmのピッチ変換基板(ブレイクアウトボード)付き、または、これを別途用意してハンダ付け、もしくは、これらチップ搭載の上、USBポートなど一通り備えた開発ボードが必要となります。

 尚、ESP-01/ESP-WROOM-02/ESP-WROOM-32に専用のピッチ変換基板、ESP-07/ESP-08/ESP-12に兼用ピッチ変換基板をよく見かける、また、ESP-12やESP-WROOM-32には、各種開発ボードがあります。

ESP8266/ESP-WROOM-02/ESP-WROOM-32の種類

2018/07/26

 転載ついでにESP8266/ESP-WROOM-02/ESP-WROOM-32は、Espressif社が開発。

 この内、ESP8266には、AI-Thinker社製造のESP-01、ESP-02、ESP-03、ESP-04、ESP-05、ESP-06、ESP-07、ESP-08、ESP-09、ESP-10、ESP-11、ESP-12、ESP-13、ESP-14があります。

 また、ESP-01には、ESP-01/ESP-01S、ESP-12には、ESP-12/ESP-12E/ESP-12Fなどがあります。

 ESP-WROOM-02/ESP-WROOM-32については、製造もEspressif社。

 他にも多々種類があるようですが、把握しきれていません。

 尚、日本国内での販売については、例えばAmazon Japanを見ると次第にESP-01、ESP-12、ESP-WROOM-32あたりに絞られている感がありますが、Aliexpressなどでは、今尚、いろんなバージョンが販売されています。

 ただし、日本の技適の話になると現時点で通っているのは、ESP-WROOM-02/ESP-WROOM-32のみ。

ESP8266/ESP-WROOM-32の機能概要

2018/07/26

 転載ついでにESP8266、ESP-WROOM-02、ESP-WROOM-32は、WiFiモジュールである一方で例えばWiFiと無縁なプログラムを書くことすらでき、Arduinoボードのように使うこともできます。

 ESP-WROOM-32に至っては、WiFiのみならず、Bluetooth、BLE/Bluetooth Low Energy機能もあり、温度センサ、ホールセンサ、タッチセンサなどもワンボードに収まりつつ、メモリも増量、GPIOピンも多かったりと多機能、高性能ですが、国内でも単体で数百円、開発ボードも1500円程度で買えるという驚きのコスパ。

ESP8266/ESP-WROOM-32にスケッチを無線アップロード

2018/07/26

 Arduino IDEにおいてArduinoOTA(On The Air)を使うとESP8266やESP-WROOM-02、ESP-32などで無線でスケッチをアップロードすることが可能となります。

 ただし、ESP8266用Arduino Coreライブラリを導入、サンプルスケッチBasicOTAを書き込むのに加え、アップロードしたいスケッチごとにOTA用のプログラムを数行書き込んでおく必要があります。

ESP8266/ESP-WROOM-32の開発環境

2018/07/26

 転載ついでにESP8266に限らず、ESP-32もArduino IDEで開発可、他にesptool/esptool.py/esptool.exe、PlatformIOやESP-IDF(make)などによるCLI、Cloud & Desktop IDEにあるようにPlatformIOプラグインを導入できるAtomやVSCode/Visual Studio、NetBeans、Eclipse等々のようなGUIエディタ・IDEなどでも開発可。

ESP8266にはArduino IDEからスケッチを書き込むことも可

2017/07/10[2018/07/26 Arduinoあれこれより転載]

 WifiモジュールESP8266は、ICチップとGPIO(General-purpose input/output・汎用入出力)ピンもあってArduino IDEから任意のスケッチを書き込むことができます。

 用途にもよりますが、たいていの場合、ESP8266があれば、これだけで事足り、Arduinoボードを使う必要がないことは多々あります。

 ただ、WifiモジュールESP8266には、多くの種類があってジャンパワイヤで接続できるものもあれば、変換基板がないとブレッドボードなどで気軽に試すことができないもの、技適の有るものや無いもの、リセットボタンがついているもの、ないものなどもありますが、リセットボタンがないものの内、USB-TTLシリアルコンバータモジュールを使う場合、これにRTSピンがないものは、スケッチを書き込むにも、ひと工夫必要らしいことがわかりました。

 そのひと工夫とは、2つのスイッチ付きの簡易回路を作ること。

 FTDIモジュールのDTR、CTS、RTSなどの端子が存在すれば、RTSにRST、DTRにGPIO0を接続すれば、このひと工夫をする必要がないとの情報もありますが、未確認。

[2018/06/30]

 今更ながら...、ESP-01のGPIO0/RSTと手持ちのFTDI232系のシリアルUSB変換モジュールのDTR/RTSのピンホールを接続すれば、自動アップロード可能であることを確認...。

 ちなみにESP8266に限ったことではありませんが、通電した状態でVCCとGNDの接続を間違えたりすると壊れる可能性が高いので接続を確認してから通電した方がよいでしょう。(自身は、たぶん、これが原因で買って間もないESP8266を1個壊しました。)

ウェブ造ホーム前へ次へ