ESP32 -DevKitC ( ESP-WROOM-32 )でスマホとWi-Fi リアルタイム双方向同時通信

記事公開日:2017年3月29日
最終修正日:2017年10月6日

スポンサーリンク

コメント欄でご指摘いただき、サンプルスケッチの 160行目の "■" を "*" へ変更しました。
"■" が表示されない環境があるようなので、修正しました。
(2017/6/19)

こんばんは。

ESP-WROOM-32 電子工作は今まで単体でLDOモジュールを作って動作させていましたが、ESP32 -DevKitC ( ESP-WROOM-32 開発ボード )が秋月電子通商さんで発売されたので、私も早速試してみました。

私の場合は以前、WebSocket を使って、ESP-WROOM-02 ( ESP8266 ) とスマホでWi-Fi リアルタイム双方向通信をしていましたが、多量の文字列を扱うために SRAM の少なさがネックになっていて、フリーズ等に悩まされていました。
ESP32 を使うにあたって、ESP8266 よりも性能がどれくらい優っていて、エラーがどれだけ解消されるかが私にとって重要でした。

そこで、今回は ESP8266 用の自作ライブラリを ESP32 用に移植して、WebSocket 通信を試してみました。
移植するにあたって、Hashライブラリが ESP32 には無かったので、ライセンスが100% Public Domain の sha1.c ソースを使わせていただきました。
Steve Reid さん作です。
Steve Reidさん、ありがとうございます。
m(_ _)m

動作状況は、結論からいうと、Arduino IDE 開発の場合、CPU が80MHz までのため、処理が速くなったという印象はありません。
ただ、ユーザーSRAM領域が5倍大きくなったおかげで、WebSocket 通信がフリーズしても裏でプログラムが動作していて、ESP32 自力でタイムアウトしてWebSocket切断してくれます。
これはESP8266 ではできなかったので、自作ライブラリがSRAMメモリをメチャクチャ食っていたようですね。

そして、ESP-WROOM-32 ( ESP32 ) の ESP8266 より優れている点は、12bit ADコンバーターが3.3V対応になったことで、外付けADコンバーターを使わなくても、CdS ( 硫化カドミウム )セルを使った光センサー値を取得できるようになりました。
今回はそれを使って、スマホからWi-FiでLEDを調光コントロールして、光センサーの値をリアルタイムでスマホに表示させることに挑戦してみました。

リアルタイム双方向通信を売りにしている WebSocket でも、ゲームコントローラーのように怒涛のデータ送受信するとフリーズしますので、データ送信時間間隔をスマホ側で調整できるようにしました。

まずは以下の動画をご覧ください。

いかがでしょうか。

データ転送レートが低いと通信トラフィックが一杯になって、フリーズしていますね。
ブラウザ側と ESP32 側両方の転送レートを変えることによって、フリーズが殆ど無くなりました。
ただ、光センサーの追従は若干遅くなります。
でも、ここまで追従してくれれば十分ですよね。
これを使えば、遠くの場所でコントロールしていても、LEDが点灯したかどうかをスマホ側で確認できます。

ただ、sigmaDelta関数を使っているせいか、全点灯ボタンを押したときに一つだけ点灯しないということがありました。
これの原因は今は全く分かりません。
それ以外は特に問題無く動作してくれるのではないかなと思っています。

因みに、これはWi-Fi のローカルエリアネットワーク内でしか動作確認していません。
WAN を通して、全く別の場所で動作させることはいつか試してみたいと思います。

では、この使い方を説明しようと思いますが、独学の自作ライブラリですので、動作保証は一切しません。
これを使った、いかなるトラブルも当方では責任を負いませんので、予めご了承ください。

ただ、何かありましたらコメント欄等でご連絡いただけると、出来る限りお答えしたいと思っております。

準備するもの

ESP32-DevKitC ( ESP-WROOM-32 開発ボード )
ESPRESSIF社製

ESP32_EWS_CdS_01

これは秋月電子通商さんで販売しております。
ESP32 チップ をモジュール化して、日本で安心して使えるように技適認証取得した ESP-WROOM-32 を使った開発ボードです。

これは LDO ( 低ドロップアウトレギュレーター )が弱いところがありますが、通常使用では今のところ特に問題無く使えています。
また、USBシリアルでスケッチアップロードする場合、スイッチサイエンスさんの ESPr Developer のように自動リセット遷移せず、書き込み失敗することがよくあります。
その辺の回路がまだ甘いように思われます。

SparkFun マイクロSDカードスロット・ピッチ変換基板

Amazon.co.jp

とても単純な micro SD カードスロット基板です。

micro SDHC カード

後で述べますが、miso端子にプルアップ抵抗を入れれば、UHSスピードクラス対応のmicro SDHCカードでも読み込み可能でした。
以下の3種類は動作確認済みです。

Amazon.co.jp

CdSセル 1MΩ GL5528

ESP32_EWS_CdS_02

とりあえず、手元にあった1MΩのものを使いました。

固定抵抗100kΩ 1/2W  1個

ESP32_EWS_CdS_03

1MΩのCdSセルとの分圧抵抗用です。

固定抵抗10kΩ 1/4W 1個

ESP32_EWS_CdS_04

micro SDカード miso端子のプルアップ用です。
これ、重要です。

砲弾型LED 青、赤、緑

ESP32_EWS_CdS_05

5V用くらいのごく普通のLEDで良いです。
ただ、高輝度のものは、電流量が多いので要注意です。
ESP32 のGPIO の最大電流は12mA なので、それ以下で光るものです。

定電流ダイオード E-103 3個

ESP32_EWS_CdS_06

LEDの電流制限用です。
一般にLEDは固定抵抗を使う方が多いのですが、私の場合はちょっと高価でもCRD(定電流ダイオード)をよく使います。
電流が10mA以上流れないので、抵抗値を選ぶ手間が省けて、安全にLEDを点灯できて便利です。
Amazon.co.jp

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

このブレッドボードは ESP32-DevKitC を載せても、片側1列、もう片側2列空くのでとても重宝しています。
しかも、2つのブレッドボードを連結できるので、お勧めです。

今回は余裕を持たせて、2つ連結します。

日東 自己融着粘着テープ

電気工事でよく使うブチルゴムテープです。
LEDとCdSセルをくっつける時に使います。
ビニールテープみたいに粘着剤でくっつけるのではなく、粘土みたいに融着できるので便利です。

ジャンパーワイヤー

φ0.65mm の単線ワイヤーならば、ブレッドボードに直挿しできて便利です。

その他、USBケーブル、パソコン等

 

LEDとCdSセルをくっつける

LEDが光ったかどうかを読み取るために、CdS ( 硫化カドミウム )セルという光センサーをLEDにくっつけます。

まず、下図の様に自己融着テープ ( ブチルゴムテープ )をハサミでカットします。
CdSセルの大きさに合わせて、これくらいのものを2つカットします。

ESP32_EWS_CdS_10

1枚を下図の様にリード線の片側にくっつけて、指で押しつぶします。
粘土みたいに潰せばくっつけられます。

ESP32_EWS_CdS_11

そして、下図の様にLEDを巻き込んでくっつけます。
今回は同じ10mAの電流でも一番明るい青色LEDにくっつけました。

ESP32_EWS_CdS_12

もう一枚の自己融着テープを下図の様に巻いていきます。

ESP32_EWS_CdS_13

そして、こんな風に粘土のように潰してくっつけます。

ESP32_EWS_CdS_14

スポンサーリンク


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

投稿者:

mgo-tec

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

「ESP32 -DevKitC ( ESP-WROOM-32 )でスマホとWi-Fi リアルタイム双方向同時通信」への2件のフィードバック

  1. ブログ ソースコード 160行 graph_str += “■”; をコピーペーストして実行すると
    10011101
    Invalid UTF-8 in text frame—-Closing Message
    ——————Close Command Send

    ——————Client.STOP
    _close
    となります。
    ブログの実行画面では”*******”が表示されてますね。
    graph_str += “*”;で正常に動作出来ました。

    1. 太田さん

      ご指摘ありがとうございます。
      ■の方が見た目が良いかなと思って “*” から “■” に変えていました。
      やっぱりこういう全角記号は正常に動作しない端末があることをあまり考えてませんでした。
      早速修正させていただきました。
      ご報告、たいへん感謝感謝です。
      m(_ _)m

コメントを残す

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

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