ESP-WROOM-32 ( ESP32 ) で Wi-Fi スマホ LED スイッチ作り

記事公開日:2017年2月14日
最終修正日:2017年5月24日

スポンサーリンク

最新記事では、ESP32-DevKitC ( ESP-WROOM-32 開発ボード )とスマホで Wi-Fi リアルタイム双方向通信をやったりしています。
LEDを調光コントロールして、CdS光センサー値をスマホにリアルタイム表示させています。
以下の記事も合わせてご覧ください。
ESP32_EWS_CdS_00
ESP32 -DevKitC ( ESP-WROOM-32 )でスマホとWi-Fi リアルタイム双方向同時通信

こんばんは。

ついに私も衝動に駆られて、待ちに待った日本で販売されたばかりの技適取得済み、2.4GHz Wi-Fi & Bluetooth マイコンモジュール、ESP-WROOM-32 ( ESP32 )を検証してみました。
なんと、これは秋月電子通商さんから税込 700 円で発売されています。
ESP-WROOM-02 が初めて発売されたときの値段とあまり変わらないじゃぁないですか!
しかし、日本製でこういう物が何で出てこないんでしょうかね・・・?。
この分野ではもう他社が入る余地が無くなってきているのでしょうか・・・。

さて。ESPRESSIF社のデータシートを見てみると、電子工作用途としてはスペックがバケモノですね。

いずれ開発ボードが発売されて、安定して電子工作ができるようになってくれることと思いますが、ESP-WROOM-02 でもそうだったように、まずは自分自身で電源周りとUSBシリアルモジュール接続を行ってみないと、トラブルが起こった時の対処方法が分からなくなってきます。

Wi-Fiモジュールは多量の電力を食うことが前提なので、そのせいでマイコンの動作が不安定になってしまうことがよくあります。
そこは自分自身で押さえておきたいですね。

ところで、私がIoT実現用マイコンで重要視しているのは、CPUクロック速度と、SRAMサイズです。

 ESP-WROOM-02
( ESP8266 )
ESP-WROOM-32
( ESP32 )
CPU Clock
最大 160MHzデュアルコア 最大 240 MHz
SRAM
(ユーザーメモリ)
(Arduino IDE 使用時)
約 50 KB約 273 KB

どうですか? ESP-WROOM-02 よりも形が少し大きいだけなのにバケモンですね。

Arduino IDE を使った時に、ESP32 のCPUクロックを240MHzにする方法は今のところ分かりませんでした。
今後恐らく変えられるようになると思います。

SRAMサイズは、Arduino IDE で空のスケッチをコンパイルしたときに、IDE 上で表示されているユーザーSRAMメモリサイズを調べたものです。
データシートによると、On-Chip (チップ内蔵)SRAMサイズは520KB とありますが、実際は273KBしか使えません。
恐らく、Wi-FiやBluetooth 動作等、その他インターフェースの動作でメモリが取られてしまっているのでしょう。
それでも、ESP-WROOM-02 の5倍以上あります。
最近、私の場合は、ESP-WROOM-02 のSRAMサイズが足りなくて悩んでいたので、これはとても有難いです。
しかも、データシートによれば、オンチップ以外に8MB (8000KB)の外部SRAM が付いているようです。
ただ、これはまだ使ったことないので、ホントかどうか定かではありませんが、そうだとしたら、これ、スゴイですねぇ~!!!
これだけあれば、WEBからの多量の文字列を処理しても、問題なく動きそうです。

では、このバケモノのESP-WROOM-32 ( ESP32 )を私なりの方法で動作させてみましたので、紹介してみます。

※ESP-WROOM-32 は1Aを超える電流が流れる場合があります。
その場合、デバイスやパソコンのUSBポートにダメージを与える可能性があることを十分に認識しておいてください。
以下で紹介する工作やプログラムは全て無保証です。
私は回路やプログラミングについては専門家ではありませんので、何か間違い等がありましたら、コメント等でご連絡いただけると助かります。

1.ESP-WROOM-32 の外観

これが今話題の技適取得済み 2.4GHz Wi-Fi Bluetooth マイコンモジュールです。
意外と小さいです。
技術適合認証マークが刻印されてますね。
これがあれば、日本で存分に使用できます。

WROOM-32_01_wroom1

裏面はこんな感じです。

WROOM-32_01_wroom2

ESP-WROOM-02 と比べても、ちょっと大きいだけです。

WROOM-32_01_wroom3

1.準備するもの

ESP-WROOM-32 ( ESPRESSIF )

技適取得済み 2.4GHz帯Wi-Fi & Bluetoothマイコンモジュール
秋月電子通商で税込700円でした。

ADP3338 AKCZ-3.3RL7 ( ANALOG DEVICES )

WROOM-32_02

LDO ( ロー・ドロップ・アウト)電圧レギュレーターです。
これを選んだ理由は ねむいさんのぶろぐ の以下の記事を参考にさせていただきました。

ESP-WROOM-32を使ってみる2 -そんな電源で本当に大丈夫か-

私はこれをRSコンポーネンツの RSオンライン で入手しました。
Amazonや秋月電子通商さんでは売ってなかったです。

入力電圧範囲 2.7~8V
出力電圧 3.3V
最大ピーク出力電流 1.6A

これの最大の特徴は1A出力で、0.19V しか電圧降下が起こらないことです。
それと、これには出力側に電解コンデンサではなく、セラミックコンデンサを使わねばなりません。
ただし!、B特性の 2uF 以上のセラミックコンデンサを推奨します
データシートには1uFのセラミックコンデンサで回路図が表記されていますが、これは、ねむいさんのぶろぐ記事でも紹介されているように、F特性のセラミックコンデンサの場合、温度によっては 1uF を下回ってしまう可能性があります。
データシートの最後の方に1uF以上と記述されていますので、実測値がそれ以下だと安定動作しない可能性があります。
ここはちょっと分かりにくいですね。
10uFのセラミックコンデンサを使うと安定すると思います。

FT231XS USB-シリアル変換ボード(スイッチサイエンス)

WROOM-32_01

Amazon.co.jp

いろいろあるUSB-シリアル変換ボードでこれを選んだ理由は、USB の5Vラインを5V端子に直接出力していることです。
つまり、USBポートの最大定格電流を取り出すことができるわけです。
USB2.0端子では、最大500mA までしか取り出せません。
USB3.0端子では、最大900mA まで取り出せます。
他のUSB-シリアル変換モジュールでは、小容量の電源レギュレーターで5V出力されている場合があり、それではこのESP-WROOM-32 の大電流は耐えられない場合があります。
ですから、このデバイスの出力最大電流はよく考慮して選ばなければなりませんね。
3.3V電圧出力端子がついていて、出力が1.6Aくらいあれば問題ないのですが、そういうものは見当たりませんでした。

表面実装 チップ積層セラミックコンデンサ 2uF以上 2個

WROOM-32_03_1uF

LDO 電圧レギュレーターに使用します。
ADP3338のデータシートによると、セラミックコンデンサが良いそうです。
私は16Vのものを使いました。

※F特性の1uFコンデンサは発信する可能性があるらしいです。温度によって、1uFを下回ってしまう可能性があるからです。よって、B特性 2uF以上のコンデンサが良いと思われます。

表面実装 チップ積層セラミックコンデンサ 0.1uF 1個

WROOM-32_04_0.1uF

ESP-WROOM-32 ( ESP32 ) のパスコン用です。

チップインダクター BLM21P G331SN (村田製作所) 2個

WROOM-32_05_BLM21

フェライトビーズと同様の効果のあるチップタイプのインダクターです。
これは秋月電子通商さんで購入しました。
こんな小さいチップにコイル状に回路ができているようです。
ノイズ対策用で、LDO 電圧レギュレーターの入力側5Vラインに使います。
パソコン等のUSB からくるスパイクノイズを抑制する効果があります。
1500mA まで耐えられる優れものです。
これを選んだ理由は以下のページのADP3338 の参考回路図で使われていた為です。

アナログデバイセズ ADP3338 概要

0.1uF セラミックコンデンサ 2個

WROOM-32_14_0.1uFdip

GPIO #0, #2 に使うものです。
電源電圧以上の物であれば何でも良いと思います。

10uF 16V電解コンデンサ

WROOM-32_15_10uF

電圧レギュレーター LDO の後、ESP-WROOM-32 の前に入れるものです。

固定抵抗 10kΩ 3個

WROOM-32_16_10k

GPIO や ENピンのプルアップ用です。

砲弾型LED 5V用

WROOM-32_19_LED

5V用であれば何でもよいですが、高輝度のものは電流が多すぎるので避けた方が良いです。

定電流ダイオード E-103

WROOM-32_18_CRD

最大30Vまでで、10mA の定電流ダイオードです。
ESP-WROOM-32 のデータシートによると、GPIO 端子の最大電流は 12mA のようです(どこに明記してあるか微妙で分かりにくいです)。
LED を点灯させる時に使います。
古いLEDで型番が不明のものは、何A流れるか分からないものがありますので、これを入れていると安心ですね。
固定抵抗で電流制限しても良いです。

タクトスイッチ 2個

WROOM-32_17_tactsw

ごく普通の6mm角のもので良いです。
実はこれ、正確にはブレッドボードに合わないんですよね。
でも、手軽なので使っています。

2.54mm ユニバーサル基板

WROOM-32_12_2.54kiban

カッターでカットして、ほんの少ししか使いません。
電圧レギュレーターLDO部分に使うだけです。

1.27mm ピッチ ピンソケット 3本

WROOM-32_06_1.27socket

このピン数の場合、とりあえず3本あれば良いのですが、失敗したときを考えてもっとあった方が良いです。

1.27mm ピッチ ピンヘッダ 少々

WROOM-32_07_1.27head

Amazonではマルツさん販売では40ピンしかないようです。

この写真では3本ありますが、1本あれば十分です。

2.54mm L型 ピンヘッダ 1本

WROOM-32_08_2.54L

2.54mmピッチであれば別にL型でなくても良いです。
電圧レギュレーター LDO の自作モジュールを作るために使います。

ブレッドボード SAD-101 (サンハヤト)

WROOM-32_20_bred

サンハヤトさんのこのブレッドボードは電源を5V と3.3V 部分に分けられるので便利です。

ヒートクリップ(goot)

WROOM-32_13_clip

電圧レギュレーターLDO モジュールを自作するときに、すずメッキ線のハンダ付けで熱を逃すために重宝します。

0.65mm 単線 電線

ブレッドボードに直接挿せる、軟銅線です。
撚り線よりは取り回しにくいのですが、今回はこれを使います。

熱収縮チューブ

外径が2.5mm程度のものがあれば良いと思います。

先の細いハンダこて、細目の糸ハンダ等

1.27mm ピッチのピンソケットやピンヘッダをハンダ付けしますので、先が細く、温度調節が出来るハンダコテや、細い糸ハンダが良いと思います。

USB3.0以上のポートのあるパソコン

USB2.0ポートの規格では、電源の最大供給電流が500mA です。
USB3.0ポートは900mAまで供給できますので、できるだけ大きな電流対応のポートを使わないと正常に動作しない場合があります。

その他、精密ピンセット、拡大鏡など

2.ESP-WROOM-32 ボードの作成

では、ESP-WROOM-32 の自作ボードを組み立てていきます。

まず、最初は下図のように1.27mmユニバーサル基板に組み立てたのです。

WROOM-32_27

しかし、これはお薦めできません!!

裏側はとんでもなく細かくて面倒です!!

何度も挫折しそうになりました。
ハンダ不良や接触不良を起こしやすいですしね。
ちゃんと動作はしましたが、これは失敗作です。

それで良い方法を思いついたのですが、ほぼ同時期にTwitter の とら さんが同じようなことをやっておられました。
それは、1.27mmピンソケットをESP-WROOM-32 に直接ハンダ付けする方法です。
いろいろ考えた結果これが一番簡単な方法ということに落ち着きました。
では、その方法を紹介していきます。

まず、1.27mm ピンソケット(ピンフレーム)を下図の様にニッパでカットしていきます。
1.27mmピッチはあまりに小さいので、1ピンを犠牲にするようにカットしていくしかありません。

WROOM-32_20

次に、ハンダ付けする方向ですが、下図の方向だとESP-WROOM-32 側のピンとピンソケットのピンとの隙間がどうしてもできてしまい、ピンソケットが斜めになって、安定しないのです。
ハンダ付けはこちらの方がやりやすいのですが、残念ながら却下です。
WROOM-32_21

それで、以下の方向だと端子が密着していて、ピンソケットが垂直に板に着地しますので、私はこちらの方が無難だと思いました。
ということで、こちらを採用です。
WROOM-32_22

まず、下図の様に一カ所だけ仮にハンダ付けして、もう一度コテを当てて位置を微調整します。
WROOM-32_23

位置が決まったら、外側からハンダコテを当て、細目の糸ハンダを流し込みます。
コテ先と糸ハンダが十分細くないと辛い作業になります。
拡大鏡は必須です。

WROOM-32_24

あまり上手くないのですが、こんな感じにできました。
かなり細かい作業ですので、覚悟して取り掛かってください。WROOM-32_25

裏側から見た様子です。
ピンソケットはどうしても少々斜めになってしまいましたが、ヨシとします。

WROOM-32_26

次に、GND端子と3V3端子に0.1uFチップセラミックコンデンサをハンダ付けします。
要するにパスコン(バイパスコンデンサ)ですね。
これは、データシートの回路例でそのように接続するように明記されていたのです。
これもかなり細かい作業になりますが、ピンセットで押さえながらハンダ付けします。
こんな感じです。

WROOM-32_29

以上、ESP-WROOM-32側の工作はここまでです。

3.LDO(ロー・ドロップ・アウト電圧レギュレーター)モジュール作成

次に、大電流対応のLDO 電圧レギュレーター部分を作っていきます。

先にも述べたように、ねむいさんのぶろぐを参照して、アナログデバイセズ社の ADP3338 を選びました。
このブログはいつも参考にしておりますが、検証方法とパーツ選定が素晴らしいです。
ESP-WROOM-32 を使う前に必ず見ておいた方が良いですよ。

ねむいさんのぶろぐによれば、電源立ち上げ突入電流が1.6Aも叩き出しているそうです。
更にリセット時の大電流で3.3Vや5Vラインの電圧降下が尋常じゃないそうです。

そこで、このADP3338 を使うと、1A出力時に電圧降下が0.19V以下だそうです。
驚きのレギュレーターですね。

では、これのデータシートを参考にしながら、モジュールを自作していこうと思います。
今は日本語のデータシートがあるので助かりますね。

まず、下図の様に2.54mmユニバーサル基板をカッターとペンチでカットし、L型ピンヘッダもカットします。
そして、B特性 2uF以上のチップ積層セラミックコンデンサ2個とチップインダクタ2個を用意します。
あと、ここの写真にはありませんが、すずメッキ線か、抵抗の足をカットした余りを用意しておきます。

WROOM-32_LDO_B_2uF_01

次に、データシートを参照しながら、以下のように接続します。

WROOM-32_LDO_B_2uF_02
チップインダクタはUSBの5Vからのノイズを吸収するためのフェライトビーズです。
データシートにはチップインダクタを使う回路は紹介されていませんが、以下のサイトで回路例として紹介されていました。

アナログデバイセズ ADP3338 概要

では、まず基板上で配置を決め、LDO ADP3338 を下図の様に基板にハンダ付けして、GND部分をすずメッキ線でハンダ付けしていきます。
その際、下図のようにヒートクリップを使うとその先の熱を逃してくれるので、ハンダ付けしやすいです。

WROOM-32_31

次に、2uF以上チップコンデンサやチップインダクタをハンダ付けします。
精密ピンセットを駆使しながら粘り強くハンダ付けしていってください。
L型ピンヘッダは最後にハンダ付けすると個人的には良いと思います。
結果、下図の様になります。
あまりハンダ付け上手くなくてスイマセン。

WROOM-32_LDO_B_2uF_03
ADP3338 はデータシートによると上部の3.3V出力端子の接触面積を増やすと放熱が良くなるそうです。必要によって放熱面積を大きくすると良いと思います。

ハンダ付けし終わったら、必ずテスターで導通しているか、ショートしていないか確認してください。
倍率の高い拡大鏡でハンダの確認もした方が良いと思います。

4.ジャンパー線用1.27mmピッチピンヘッダコネクタ作成

次に、ESP-WROOM-32 の1.27mmピッチのピンソケットに挿し込むジャンパー線のコネクタを作成します。

ブレッドボード用ジャンパーワイヤーは、芯線の直径がφ0.6mmくらいあるので、これでは1.27mmピッチのソケットに入りません。
ですが、試しにIC用丸ピンソケットを入れてみたら、入ったのです。

2.54mmピッチ IC丸ピンソケット
WROOM-32_34

こんな感じです。
WROOM-32_35

正直、これはお薦めできません!!
これだと、ブレッドボード用ジャンパーワイヤーをそのまま挿し込めるので便利なんですが、実は大きな欠点があります。
ピンの径が若干大きくて、無理やり挿入しているので、一旦挿してしまうと、普通の1.27mmピンヘッダに差し替える時にユルユルになって接触不良を起こします。
WROOM-32_44

ですから、丸ピンソケットを挿し込むならば、以後全て丸ピンソケットのみで運用することになってしまいます。
しかも、隣のピンには挿せなくなります。

丸ピンソケットの特別仕様として、どこで購入したのか忘れてしまったのですが、以下のようなダブルのL型があります。

WROOM-32_36

これは隣のソケットにも挿入できる優れものです。
これをニッパで一つずつカットして、以下のようにできます。
WROOM-32_37

でも、やっぱり1.27mmソケットに無理やり挿入していることには変わりないので、その後に普通の1.27mmピンヘッダは使えなくなってしまいます。

結局、最終的に一番簡単な方法は、1.27mmピンヘッダをカットして、ジャンパーワイヤーにハンダ付けする方法に落ち着きました。

では、その作り方を説明していきます。

ESP-WROOM-32のソケット周りで一番混雑しているのは
GNDピン 3V3ピン ENピン
のところです。
ここの3本ジャンパーコネクターをつくります。
まず、0.65mm単線ジャンパーワイヤーを下図の様に被覆を剥いて、ちょっと折り曲げます。

WROOM-32_39

3本作ったら、1.27mmピンヘッダに以下のようにハンダ付けします。
(下手くそなハンダ付けですが・・・)WROOM-32_40

ショートを防ぐため、念のため熱収縮チューブで保護しておきます。WROOM-32_41

これと、シリアルのTX, RXも隣り合っているので、2ピン用も作っておきます。

その他、普通のブレッドボード用ジャンパーワイヤーに1.27mmピンヘッダをハンダ付けしていきます。
1本の場合、ピンヘッダが1ピンだと安定しないので、2ピンにハンダ付けします。
これを3本作ります。WROOM-32_42

結果、下図の様にできていればOKです。WROOM-32_43

やはり、撚り線のジャンパーワイヤーは取り回しやすく、単線ワイヤーは取り回し辛いので、この際に1.27mm専用撚り線ジャンパーを作ってしまった方が良いかも知れません。

5.接続する

では、下図を参照して、ブレッドボードに接続してみてください。

WROOM-32_LDO_B_2uF_04

ここでの注意事項は、パソコンのUSBポートはUSB 3.0 を使ってください
前にも述べましたが、USB 2.0 の電源供給は最大500mA です。
USB 3.0 は最大900mA です。

WROOM-32_58

ESP-WROOM-32 は突入電流が3.3Vラインで1A以上になるらしいので、少しでも大きい電流を確保できるポートを使った方が良いわけです。
USB2.0ポートを使ってしまった場合、万が一パソコン側のポートにダメージを与える可能性があります。
USB3.0でも安全ではないことを十分に認識しつつ使用してください。
(本当は2A程度の別電源から取った方が良いのかも知れませんが・・・)
ここは自己責任ということでよろしくお願いします。当方では一切責任を負いません。

また、USB-シリアル変換ボードは、ボード内のレギュレーターを介さず、直接続している5V端子があるものを選びました。
すると、スイッチサイエンスさんのこのボードがベターだったわけです。
900mA以上対応のレギュレーターを備えているUSB-シリアル変換はなかなか販売されていないようです。
これはよく吟味して選びたいデバイスですね。

ブレッドボードにマウントについて、上記で紹介したサンハヤト製のSAD-101を使う場合、中央のジャンパー線を引き抜くと、5Vと3.3Vラインを分けられるので便利です。
別に分けなくても良いのですが、電流測定ではとても重宝します。
実際の接続の様子はこんな感じです。
オシロスコープ測定用にグランドにピンヘッダを挿してあります。

WROOM-32_46

以上、接続方法でした。

6.Arduino IDE に ESP32 ボードをインストール

ESP-WROOM-32 ( ESP32 )を Arduino IDE で開発するために、Arduino core for the ESP32 をインストールする必要があります。
Arduino IDE は現在 1.8.1 で動作確認しております。
この方法は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

7.動作確認

まず、テスターで導通やショートが無いか事前確認してください。
特に、電源ラインがグランドとショートしてないか、また、誤って5Vを3.3V入力に接続してないかなどを入念にチェックしてください。

それが確認できたら、パソコンのUSB 3.0ポートに接続してみてください。
以前、以下の記事で紹介したUSBテスターを使うと、5Vラインのおおよその電流の目安が分かって便利です。

USB Safety Tester ( 電圧 電流 チェッカー ) をレビューしてみました

このテスターを使ってUSBポートに挿した瞬間の電流がいきなり常時1Aを超えていたり、またはゼロ値だったりしたら接続が誤っている可能性があります。

また、Windows10の場合、USBポートに挿すとドライバが自動インストールされますので、しばらく待ちます。
終ったら、Arduino IDE を起動します。

次にArduino IDE のシリアルモニターを115200bps で起動してください。
ENピンと接続したスイッチがリセットスイッチとなりますので、それを押してすぐ離してください。

すると、シリアルモニターには以下のように表示されると思います。

WROOM-32_50

ESP-WROOM-02 のように、最初の文字化けが無いのが良いですね。
そして、このメッセージの最後はこんな感じになります。

WROOM-32_52

ここまで表示されれば起動成功です。
上記にあるように、ここで表示されるMACアドレスは softAPモードのアドレスです。
つまり、ESP-WROOM-32自身をアクセスポイントとして機能させる場合のモードアドレスです。
ということは、初期状態ではsoftAPモードで起動されているということです。
これでは、自分のルーターでMACアドレスフィルタリングをかけている場合は通過しません。
では、Stationモードの場合の MACアドレスはどこで調べれば良いのでしょうか?

私の場合はスマホアプリの以下のような Net Analyzer というもの使って調べています。

Network Analyzer
Network Analyzer
Developer: Jiri Techet
Price: Free

これの使い方はいつか別記事に上げたいと思っています。

では、先に進みまして、この起動モードはフラッシュブートモードです。
つまり、プログラムの書き込みはできません。

書込みする場合は、GPIO #2 と接続したスイッチを押しながらリセットを押します。

【手順】
① GPIO #2 スイッチ 押したままにする
② リセットスイッチ(EN SW)を押す
③ リセットスイッチ(EN SW)を離す
④ GPIO #2 スイッチ を離す

すると、シリアルモニターに下図のように表示されます。

WROOM-32_53

こうなれば、Arduino IDEからコンパイルして流し込める状態になります。
この状態の時には電流はあまり流れていません。
USBからは10A程度でした。

8.Lチカスケッチを書き込む

まずは以下のようなLチカスケッチをArduino IDE に書き込んでください。

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println("TEST");
  
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(250);
  digitalWrite(13, LOW);
  delay(250);
}

次に、上記のようにフラッシュダウンロードモードにして、コンパイル書き込みしてください。
以下のように表示されてしまったら、フラッシュブートモードになっていますので、もう一度ダウンロードモードにしてください。

WROOM-32_54

正常にコンパイルされるとこうなります。
WROOM-32_55

そうしたら、リセットボタンを押してください。
すると、LEDが点滅すれば成功です。
この場合、USBには平均50mA程度の電流が流れているようです。

9.スマホ Wi-Fi LED スイッチを作ってみる

では、ご自分のルーター(アクセスポイント)と2.4GHz帯Wi-Fi接続して、スマートフォンからLEDのオンオフをしてみたいと思います。

ESP32のサンプルスケッチ、SimpleWiFiServer を私なりに少し改良してみました。

#include <WiFi.h>

const char* ssid = "xxxx"; //ご自分のルーターのSSIDに書き換えてください。
const char* password = "xxxx"; //ご自分のルーターのパスワードに書き換えてください。

WiFiServer server(80);

void setup()
{
    delay(1000);
    Serial.begin(115200);
    pinMode(13, OUTPUT);      // set the LED pin mode

    delay(10);

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    
    server.begin();

}

void loop(){
 WiFiClient client = server.available();

  if (client) {
    Serial.println("new client");
    String currentLine = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            client.println("<!DOCTYPE html>");
            client.println("<html>");
            client.println("<head>");
            client.println("<meta name='viewport' content='initial-scale=1.5'>");
            client.println("</head>");
            client.println("<body>");
            client.println("<form method='get'>");
            client.println("<font size='4'>ESP-WROOM-32<br>");
            client.println("Wi-Fi  LED  Switch</font><br>");
            client.println("<br>");
            client.println("<input type='submit' name=0 value='ON' style='background-color:#88ff88; color:red;'>");
            client.println("<input type='submit' name=1 value='OFF' style='background-color:black; color:white;'>");
            client.println("</form>");
            client.println("</body>");
            client.println("</html>");

            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }

        if (currentLine.endsWith("GET /?0=ON")) {
          digitalWrite(13, HIGH);
        }
        if (currentLine.endsWith("GET /?1=OFF")) {
          digitalWrite(13, LOW);
        }
      }
    }
    
    client.stop();
    Serial.println("client disonnected");
  }
}

入力が済んだらまずコンパイルする前にご自分のルーター(アクセスポイント)を事前に起動して、通信可能な状態にしておいてください。

それから上記で述べたようにダウンロードモードにして、コンパイル書き込みしてください。

書込み完了したら、リセットボタンを押してください。

すると、シリアルモニターにはこう表示されます。

WROOM-32_56

では、スマホとルーターをWi-Fi接続して、シリアルモニターに表示されているIPアドレスをスマホのブラウザのURL入力欄に入力してください。
WROOM-32_57

動作状況は以下の動画のようになります。

00:58 くらいのところのUSBテスターの電流値も注意して見て下さい。

いかがでしょうか。
結構リアルタイムで追従してくれています。

使っているスマホは

SONY Xperia X Performance SO-04H
Android 7.0
Google Chrome

USBテスターの電流値を見ていただけると分かると思うのですが、ダウンロードモード中は20mAほどの電流しかながれていませんが、フラッシュモードにすると常時160mAになります。
Lチカのスケッチでは50mAでしたので、Wi-Fi通信になると途端に多量の電力を消費します。
(これは3.3Vラインではなく、USB電源の電流ですので勘違いしないようにしてください)
00:58 のところでは、USB電流が 480mA 流れたようです。
このUSBテスターは1秒毎しか更新しないので、瞬間電流は分かりません。
瞬間電流はもっと多く流れている可能性があります。

10.電流値について

この記事以降、ESP32 ( ESP-WROOM-32 )の電流値をいろいろと測定してみました。
Arduino IDE で開発して、CPU 240MHz の場合の最大瞬間電流値が大体つかめました。
そして、電源強化対策も私的にほぼ解決しました。
いかの記事を参照してみてください。

ESP-WROOM-32 の電流値を測定してみました。以下の記事をご覧ください
●ESP-WROOM-32 ( ESP32 )の消費電流を電流プローブ無しで測定してみました
●ESP-WROOM-32 (ESP32) の 電流 測定 その2
●ESP-WROOM-32 ( ESP32 ) のUSB電源突入電流(インラッシュカレント)を考える
●ESP-WROOM-32 ( ESP32 ) の保護機能付き電源強化対策の実験

11.まとめ

ESP-WROOM-32はいかがでしたでしょうか。

1.27mm ピッチのハンダ付けはかなり難しいですが、ピンソケットを直付けすることによって、思っていたよりもトラブルが少なく動かすことができました。
しかし、電源のLDOやUSBポート、USBシリアルの定格電流については十分気を付けて回路を組まなければいけないですね。
ここで紹介した ADP3338 はとても素晴らしいデバイスですね。
これも ねむいさんが紹介して下さったおかげです。
ありがとうございました。
m(_ _)m

では、今回はここまでです。
ESP-WROOM-32 というデバイスが発売されてしまったせいで、いろいろな件が後回しになってしまいました。
お待ちの方はスミマセン・・・
m(_ _)m

最新記事では、ESP32-DevKitC ( ESP-WROOM-32 開発ボード )とスマホで Wi-Fi リアルタイム双方向通信をやったりしています。
LEDを調光コントロールして、CdS光センサー値をスマホにリアルタイム表示させています。
以下の記事も合わせてご覧ください。
ESP32_EWS_CdS_00
ESP32 -DevKitC ( ESP-WROOM-32 )でスマホとWi-Fi リアルタイム双方向同時通信

mgo-tec電子工作 関連コンテンツ ( 広告含む )

スポンサーリンク

Amazon.co.jp 当ブログのおすすめ









投稿者:

mgo-tec

Arduino, ESP8266, ESP-WROOM-02 等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしてます。 でも、少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持ってます。

「ESP-WROOM-32 ( ESP32 ) で Wi-Fi スマホ LED スイッチ作り」への4件のフィードバック

        1. スバラシイ!!
          これはUDP通信ですか?
          スライダーの縦表示もできるんですね。

          client.write でjavascript を吐き出していると辛いと思いますので、私の場合はSDカードから吐き出したりしています。
          いずれ、SPIFFSもArduino IDE で出来るようになると思うので、そうするとSDカード要らずになるかも知れません。

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)