§  ESP32による近距離無線通信の実験① 準備作業編

 前回のESP32のレポートからかなり空白をつくってしまいましたが、今年の初めにESP32開発ボードをいくつか入手したのがきっかけで、通信関連のテストをあれこれやっています。
 IoTの基盤となるネットワークを構築するには、センサーなどのIoTデバイスとIoTゲートウェイ間の通信、つまりIoTデバイスとインターネットの手前までの通信をどうするかが重要になります。
 まだ十分に構想は固まっていませんが、この「ESP32による近距離無線通信の実験」では、
   ・Bluetooth Low Energy(BLE)による単方向通信と双方向通信
   ・MQTT(Message Queuing Telemetry Transport)による双方向通信
   ・Wi-Fiサーバーに接続したデバイスの通信制御
   ・これらに関連したESP32の省電力モードの検討
   ・スマートフォンやPCからインターネットを使っての遠隔制御
などに取り組んでみたいと考えています。
 最も手軽に取り組める「Arduino IDE」を使って、いかに実用的なソフトウェアのプロトタイプを作成できるかがすべての実験を通しての課題です。
 そして初回は、これからの実験に備えてハードや開発環境の準備を行います。
 その後は長期連載になると思いますが、気長にお付き合いご支援いただければ嬉しいです。



 <訂正>
    2021/01/19 「2.計測用デバイスの作成」において、計測用デバイスの配線についての記述と配線図に誤りがあり
           訂正しました。

1.実験用デバイスの作成

 実験で使用する2つのデバイス、「計測用デバイス」と「監視用デバイス」をブレッドボード上に組み立てます。どちらも今後の実験を通して使用します。
 ESP32は、実験を手早く行うために開発ボードを使います。ここでは格安で入手できた開発ボード、DOIT ESP32 DEVKIT V1 Board (Wi-Fi and Bluetooth)を使っています。ピン配置は図のとおりで30ピンです。ちなみに、購入先はネット通販のeBayで、1つ$5.50で送料は無料です。ただし、納期は1カ月近くかかります。
 配線は図面とピン名称で解説しているので、他の開発ボードでもまったく問題ないと思います。40ピンの場合は縦サイズが少し大きくなるので、ブレッドボード上での配置に気をつけてください。



 ESP32開発ボードはいくつも種類があるので、ボタンの名前を統一しておきましょう。ESP32チップが上、MicroUSBが下になった状態で、左下のボタンはRST,RESET,ENなどと印刷されています。このボタンを押すと、すでにプログラムが書き込まれている場合は実行を開始します。以降ではENボタンと呼ぶことにします(ENはEnableの略)。右下にはFLASHまたはBOOTと印刷されていますが、これはBOOTと呼ぶことにしましょう。
 通常はBOOTボタンを押したままENボタンを押すことでプログラム書き込みモードになり、Arduino IDEの「マイコンボードに書き込む」アイコンをクリックするとプログラムをコンパイルして書き込みます。開発ボードによっては、この時に自動書き込みが働かず「Failed to connect to ESP32: Time out waiting for packet header」というエラーが表示されることがあります。この場合は、書き込み開始時にBOOTボタンを長押しすれば問題なく書き込めます。


 実は今回入手した開発ボードでこの問題が発生して、しばらくはコンパイル・書き込みの都度BOOTを長押ししていました。この面倒な作業は電気的に解決することができます。端子名[EN]と[GND]の間に10μFの電解コンデンサーを接続すると、コンパイル後に自動で書き込み動作が始まります。

2.計測用デバイスの作成

 6穴ブレッドボード上にESP32開発ボード、温湿度センサー、赤色プッシュボタン、黄色LEDを設置します。
 計測デバイスの基本機能は、設定された時間間隔で温湿度センサーの計測値を送信することです。赤色プッシュボタンを押すと、監視用ボード上の赤色LEDへのキック信号を送出します。黄色LEDは、双方向通信ができる状況でキック信号を受信したら点滅します。

①使用部品

 ・ESP32開発ボード(ここではDOIT ESP32 DEVKIT V1)ここでは30pin1台Ebay.com $5.50
 ・温湿度センサーモジュールDHT111個秋月電子通商 550円
 ・赤色プッシュボタン赤色タクトスイッチ1個秋月電子通商 10円
 ・黄色LED5mm秋月電子通商 20円
 ・カーボン抵抗器1/4W 300Ω1本
 ・カーボン抵抗器1/4W 4.7KΩ1本
 ・カーボン抵抗器1/4W 10KΩ1本
 ・電解コンデンサー10μF 50V1本必要に応じて
 ・ブレッドボード6穴版 EIC-39011枚秋月電子通商 280円
 ・配線類少々


②配線

 主な部品の接続要領と配線図は次の通りです。
 ○ 温湿度センサー DHT11
   ・VDD/VCC/+ : 3V3へ
   ・DATA/OUT: 4.7KΩでプルアップしてGPIO14へ
   ・GND/- : GNDへ
 ○ 赤色プッシュボタン
   ・ - : GPIO32と、10KΩで GNDへ
   ・ - : 3V3へ
 ○ 黄色 LED
   ・Anode : GPIO25へ
   ・(-) : 300ΩでGNDへ


3.監視用デバイスの作成

 6穴ブレッドボード上にESP32開発ボード、OLEDディスプレイ、黄色プッシュボタン、赤色LEDを設置します。
 監視用デバイスの役割は、計測用デバイスからの温湿度計測値を受信してディスプレイに表示することです。赤色LEDは、計測用デバイスの赤ボタンが押されてキック信号が届いたら点滅します。黄色プッシュボタンを押すと、双方向通信が可能な状態なら計測用デバイスに黄色LEDへのキック信号を送出します。


①使用部品

 ・ESP32開発ボード(ここではDOIT ESP32 DEVKIT V1)ここでは30pin1台Ebay.com $5.50
 ・OLEDディスプレイ0.96inch 128x64dot1個秋月電子通商 580円
 ・黄色プッシュボタン黄色タクトスイッチ1個秋月電子通商 10円
 ・赤色LED5mm秋月電子通商 20円
 ・カーボン抵抗器1/4W 300Ω1本
 ・カーボン抵抗器1/4W 10KΩ1本
 ・電解コンデンサー10μF 50V1本必要に応じて
 ・ブレッドボード6穴版 EIC-39011枚秋月電子通商 280円
 ・配線類少々


②配線

 主な部品の接続要領と配線図は次の通りです。
 ○ OLEDディスプレイ(ESP32とI2Cで接続します)
   ・GND : GNDへ
   ・VIN : 3V3へ
   ・SCL : GPIO22へ
   ・SDA : GPIO21へ
 ○ 黄色プッシュボタン
   ・ - : GPIO32と、10KΩでGNDへ
   ・ - : 3V3へ
 ○ 赤色 LED
   ・Anode : GPIO25へ
   ・(-) : 300ΩでGNDへ

4.開発環境の準備

(1)Arduino core for the ESP32のインストール

 Arduino IDEでESP32の開発ができるようにするためには、Arduino core for the ESP32をインストールする必要があります。2018年7月に大幅な改変結果を反映した安定版(Stable版)が公開され、これに合わせてライブラリーの導入方法も、ボードマネージャからインストールように変更されています。実験で使用するBLE関連のライブラリー等もこれによって導入されるので、以下の手順に従って必ずStable版をインストールしてください。
 実験で使用するArduino IDEは Version1.8.8です。バージョンが古い場合は、Arduino IDE Downloadサイトから最新のものをインストールすることをお勧めします。Windows環境なら、インストーラーを使わずに、ZIPファイルをダウンロードしてインストールするのがいいと思います。ZIPファイルなら、複数バージョンを使い分けることができるので便利です。

 ダウンロードしたファイルarduino-1.8.8-windows.zipを適当なフォルダーに移動して解凍します。arduino-1.8.8というフォルダーが現れるので、それを開いてarduino.exeのショートカットを作成します。分かりやすいようにショートカットの名前をArduino1.8.8のように変更して、デスクトップに配置します。
 続いてArduino core for the ESP32をインストールします。
 それに先だって、すでにESP32で開発をしていた場合は、C:\Users\%USERNAME%\Documents\Arduino
\hardware\espressifあたりのファイルをバックアップしてから削除してください。これを消さないと、IDEからボードを選択するときにボードの種類が重複して、新旧の区別がつかなくなってしまいます。
 次に、Arduino IDEを起動して「ファイル」-[環境設定]を選んで「環境設定」画面を開きます。「追加のボードマネージャのURL:」の右端のボタンをクリックします。


「追加のボードマネージャのURL」が開くので、次のURLをコピーして追加します。
        https://dl.espressif.com/dl/package_esp32_index.json


 次に「ツール」-「ボード:」を選択して、リストボックス最上段の「ボードマネージャ」を開いて「ESP32」を検索し、インストールボタンを押します。

 ボードマネージャー上で「INSTALLED」になれば完了です。もう一度「ツール」-「ボード:」と選択すると、たくさんのESP32関連ボードが追加されていることが分かります。使用している開発ボードに該当するものを選びます。多くは、[ESP32 Dev Module]を選択すればいいでしょう。DOIT ESP32 DEVKIT V1 Boardで開発する場合は、ご覧のように[DOIT ESP32 DEVKIT V1]を選択します。



 以上の一連の作業で、手元の環境では、ESP32用ライブラリーは下記の場所にインストールされています。
    C:\Users\User-Name\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries

※これを「Arduino IDEのインストールライブラリフォルダ」と呼びます。次項をはじめとして、以降のライブラリー
 インストール時にはこの位置にライブラリーのフォルダーを配置することになるので、記憶に留めておいてください。


(2)必要なライブラリーのインストール

 計測用デバイスのセンサーや監視用デバイスのOLEDディスプレイを制御するには、専用のライブラリーをインストールする必要があります。これらを、ここで一括してインストールしておきましょう。以下の①と②は計測用デバイスの温湿度センサー用、③と④は監視用デバイスのOLEDディスプレイ用のライブラリーです。
①DHTセンサーライブラリーのインストール
 ・ここをクリックしてDHTセンサーライブラリーをダウンロードしてください。
 ・zipフォルダを解凍すると、DHT-sensor-library-masterフォルダが表示されます。
 ・フォルダー名をDHT-sensor-libraryに変更して、Arduino IDEのインストールライブラリフォルダに移動します。
②Adafruit Unified Sensor Driverのインストール
 ・ここをクリックしてAdafruit Unified Sensor Driverをダウンロードしてください。
 ・zipフォルダを解凍すると、Adafruit_Sensor-masterフォルダが表示されます。
 ・フォルダー名をAdafruit_Sensorに変更して、Arduino IDEのインストールライブラリフォルダに移動します。
③Adafruit SSD1306ライブラリーのインストール
 ・ここをクリックしてAdafruit SSD1306ライブラリーをダウンロードしてください。
 ・zipフォルダを解凍すると、Adafruit_SSD1306-masterフォルダが表示されます。
 ・フォルダー名をAdafruit_SSD1306に変更して、Arduino IDEのインストールライブラリフォルダに移動します。
④Adafruit GFXライブラリーのインストール
 ・ここをクリックしてAdafruit GFXライブラリーをダウンロードしてください。
 ・zipフォルダを解凍すると、Adafruit-GFX-Library-masterフォルダが表示されます。
 ・フォルダー名をAdafruit-GFX-Libraryに変更して、Arduino IDEのインストールライブラリフォルダに移動します。

 以上でソフトウェア開発環境の準備は完了です。もしArduino IDEが開いている状態なら、いったん閉じて開き直してください。「スケッチ」-[ライブラリをインクルード]をポイントすると、上記のライブラリーが組み込まれていることが確認できます。



(3)デバイスの接続とシリアルポートの設定

 各デバイスはUSB2.0 4Port HubでPCと接続しています。当面の実験では2ポートを使いますが、必要に応じて複数の計測デバイスを接続できます。



 最後に、PCへ接続してArduino IDEを立ち上げてシリアルポートの設定を行います。「ツール」を開いて[シリアルポート]をポイントすると、2つのデバイスが接続されているので、図のように2つのCOMポートが表示されます(ポート番号は環境によって変わります)。それぞれのデバイスにどちらかのポートを割り当てて、切り替えながら使用します。



 まずどちらかを選んで、もう一度「ツール」を開いて「シリアルモニタ」を選択してください。シリアルモニターが表示されたら、どちらかのボードでBOOTスイッチを押さえたままENスイッチを押してください。何も表示されなければ、もう一方のボードで試してください。「waiting for download」と表示されたデバイスが、先に選択したCOMポートに対応しています。
 IDEの「マイコンボードに書き込む」アイコンをクリックする前には、そのデバイスに対応したCOMポートを選択して[BOOT + EN]をやっておく必要があります。またシリアルモニタで動作確認のメッセージを表示させる場合にも、そのデバイスに対応したCOMポートを選んでください。

 さて、これですべての準備が整いました。次回からBluetooth Low Energy(BLE)の通信実験を行います。
 お楽しみに!