ESP32-DevKit


ESP32-DevKitを使ってWiFiコントロール・カーを製作(1)



 トラ技にESP32の特集があったので、それを参考にしてWiFiコントロール・カーを製作してみました。 その忘備録です。
SimpleWiFiServerを利用して、WiFiコントロール・カーを製作しました。
 なお、今回使用したESP32は、アリババで購入したESP32-DEVKIT ESP-WROOM-32開発ボード($7で800円前後)を 使用しました。

次のように設定して、WiFiコントロール・カーを遠隔操作します。



 ・Arduino IDEを取得。
 ・Arduino IDEでESP-WROOM-32を使用するためのライブラリをインストール。
 ・サンプルスケッチ「SimpleWiFiServer」を書き換える。
 ・ESP32-DevKitとモーター駆動回路
 ・Webを通してWiFiコントロール・カーを前後左右に動かす。



  完成品




 以下のような手持ちの部品を使用して作りました。
・ESP32-DEVKIT ESP-WROOM-32開発ボード
・DCモータードライバーMP4212を2個
・ピンソケット2X19 PIN(ESP32-DEVKIT挿入用)
・ピンソケット2X10 PIN(MP4212用)
・基板1枚
・ちびモーターギア+プーリー、タイヤセット 2セット
  「ちっちゃいものくらぶ」 tiisai.dip.jp/?page_id=449 で
 販売されているもの。
・モバイルバッテリー
・USB電源ケーブル
・なんでもキャスター1個
・スペーサー4個
・台木




 左図は、WiFiコントロール・カーを遠隔操作するためのWeb画面です。
各ボタンをクリックすることにより、Wi-Fiを通してWiFiコントロール・カーを動かします。



以下にESP32-DEVKITの設定過程を順を追って記述します。



  Arduino IDEの取得

次のWebサイトから入手する。
Arduino IDEのサイト

1.次の画面が表示されます。


2.画面上のタブ「SOFTWARE」をクリックすると、次の「Download the Arduino IDE」画面が 表示されますので、右上の「Windows installer」をクリックします。


3.次の「Contribute to the Arduino Software」画面が表示されますので、画面下の 「JUST DOWNLOAD」をクリックしてダウンロードします。


4.2017/11月現在で、「arduino-1.8.5-windows.exe」がダウンロードされます。

5.この「arduino-1.8.5-windows.exe」をダブルクリックして、「Arduino IDE」を インストールします。

6.使用許諾の画面では、「I Agree」をクリック。

7.次のインストール・オプション画面では、「Next」をクリックします。

8.インストール先の画面では、インストール先を「C:\Arduino」に変更します。
  (Windowsのユーザ・アクセス制御機能の影響を受けないようにするため)

9.「Install」をクリックします。




  Arduino IDEでESP32を 使用するためのライブラリを取得

 Arduino IDEにはESP-WROOM-32を開発するためのライブラリは入っていないので、 自分でダウンロードしてArduino IDEに追加インストールします。


ESP-WROOM-32ライブラリ「Arduino core for the ESP32」をダウンロード

1.GitHub のWebページを開き、 画面右の「Clone or download」をクリックし、「Download ZIP」をクリックしてZIPファイルを ダウンロードします。


2.「Arduino core for the ESP32」は、Arduino IDEの機能に対応していないので手動で インストールします。

 (1) C:\Arduino\hardware フォルダにespressifフォルダを作成。

 (2) espressifフォルダの中に、esp32フォルダを作成。

 (3) esp32フォルダの中に、「Arduino core for the ESP32」のZIPファイルを解凍。

 (4) 解凍したファイルの中の「tools」フォルダを開き、その中の「get.exe」を管理者権限で実行。

 (5) コマンドプロンプトが表示されて実行されるので、終了するまで待ってコマンドプロンプトをEnd。

3.Arduino IDEを起動し、ボードを「ESP32 Dev Module」を選択します。

 (1)「ツール」、「ボード」、「ESP32 Dev Module」の順で選択。

4.シリアルポートを選択

 (1) ESP32-DevKitを接続していない状態で、「ツール」?「シリアルポート」で表示されている ポートを確認します

 (2) ESP32-DevKitを接続し、同様に「シリアルポート」を確認すると新たに増えた番号が ESP32-DevKitのシリアルポートなので選択します。




  スケッチ例「SimpleWiFiServer」 を書き換える。

WiFiコントロール・カーの起動プログラムとして「SimpleWiFiServer」を利用します。

1.「ファイル」⇒「スケッチ例」⇒「ESP32 Dev Module用のスケッチ例 WiFi」⇒「SimpleWiFiServer」 の順にクリックするとサンプルプログラム「SimpleWiFiServer」が開きます。

2.次のように「SimpleWiFiServer」を書き換えます。

 なお、const char* ssid = "yokohama";の" "の中には、使用しているWiFiルーターのSSIDを入れ、
 const char* password = "12345678";の" "の中には、使用しているWiFiルーターのパスワードを入れます。

/* WiFi-Control-Car */	

#include <WiFi.h>

const char* ssid     = "yokohama";      //アクセスポイントのSSID
const char* password = "12345678";     //アクセスポイントのパスワード
const char html[] =
"<!DOCTYPE html><html lang='ja'><head><meta charset='UTF-8'>\
<style>input {margin:8px;width:80px;}\
div {font-size:16pt;color:red;text-align:center;width:400px;border:groove 40px orange;}</style>\
<title>WiFi_Car Controller</title></head>\
<body><div><p>Tank Controller</p>\
<form method='get'>\
<input type='submit' name='le' value='左' />\
<input type='submit' name='fo' value='前' />\
<input type='submit' name='ri' value='右' /><br>\
<input type='submit' name='st' value='停止' /><br>\
<input type='submit' name='bl' value='後左' />\
<input type='submit' name='ba' value='後ろ' />\
<input type='submit' name='br' value='後右' /><br><br>\
</form></div></body></html>";

void stop(){
   digitalWrite(0, LOW);
   digitalWrite(2, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
}

WiFiServer server(80);

void setup()
{
   Serial.begin(115200);
   pinMode(0, OUTPUT);
   pinMode(2, OUTPUT);
   pinMode(4, OUTPUT);
   pinMode(5, OUTPUT);

   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.print(html);
                     client.println();
                     break;
                  } else {
                     currentLine = "";
                  }
               } else if (c != '\r') {
                  currentLine += c;
               }

            if (currentLine.endsWith("GET /?fo")) {
               stop();
               digitalWrite(0, HIGH);
               digitalWrite(4, HIGH);
            }
            if (currentLine.endsWith("GET /?le")) {
               stop();
               digitalWrite(0, HIGH);
            }
            if (currentLine.endsWith("GET /?ri")) {
               stop();
               digitalWrite(4, HIGH);
            }
            if (currentLine.endsWith("GET /?ba")) {
               stop();
               digitalWrite(2, HIGH);
               digitalWrite(5, HIGH);
            }
            if (currentLine.endsWith("GET /?bl")) {
               stop();
               digitalWrite(2, HIGH);
            }
            if (currentLine.endsWith("GET /?br")) {
               stop();
               digitalWrite(5, HIGH);
            }
            if (currentLine.endsWith("GET /?st")) {
               stop();
            }
         }
      }
      client.stop();
      Serial.println("Client Disconnected.");
   }
}
						



  プログラムの書き込みと IPアドレスの確認


1.ESP32-DevKitをUSBでパソコンに接続します。
  *USBドライバーはパソコンに入っているものとします。
  *ESP32-DevKitをパソコンに接続する際、USBハブに接続しないで直接パソコンのUSBに接続した方が    無難だと思います。
   WiFiに接続する際に500~800mAの電流が流れるようなので、その方が良いかと思います。

2.上記プログラムをESP32に書き込みます。「ツール」をクリックして、
 (1)ボードは、「ESP32 Dev Module」を選択。
 (2)シリアルポートを選択。
 (3)ツールバーの「→」をクリックするとコンパイルと書き込みを一度に行います。

3.不具合について
 (1)コンパイラ中に、下段のメッセージ欄に「libraries/BLEに無効なライブラリ」と表示されると思います。
  その原因と対処法が次のWebサイトで丁寧に説明されていますので確認してください。

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

 (2)プログラムの書込み中に、「複数のライブラリがあります」とエラーが表示されます。
  原因は、メニューの「スケッチ」⇒「ライブラリーをインクルード」をクリックすると、ライブラリーの一覧  が表示され、その下の方に「WiFi」が2つ表示されています。
  Arduino IDEに初めから入っているWiFiライブラリーとESP32のメーカーEspressif社提供のWiFiライブラリーが  同じ名前「wifi」で表示されています。

 今回は、Espressif社提供のWiFiライブラリーを使いますので、Arduino IDEに初めから入っているWiFiライブラリーを 次の手順で削除しました。
 ①「C:\Arduino\libraries」にある「WiFi」ホルダーを他のディレクトリに移動しました。(後で使用するかも しれないので残しておく)
 ②「C:\Arduino\hardware\espressif\esp32\libraries」にある「WiFi」ホルダーはそのままです。
 ③ それぞれのライブラリーに入っているヘッダーファイル「WiFi.h」は互換性が無いようです。

4.画面右にあるツールバーの「虫眼鏡」をクリックするとシリアルモニターが開き、正しくWiFi 接続されていると、IPアドレスが次のように表示されます。記録しておきます。



シリアルモニターの表示内容

Connecting to <yokohama>
 ・・・・・・
 WiFi connected.
 IP address:
 192.168.0.5
						



  ESP32-DevKitとモーター駆動回路

下図がESP32-DevKitとモーター駆動回路の接続図です。



1.モーターは、ちびモーターを使用しました。
 *ちびモーターの駆動には30mA程の電流が流れるようです。

2.モータードライバーは、MP4212を使用しました。(現在販売中止)

3.左右のモーターは、基台に逆に取り付けています。




  WiFiコントロール・カーの起動

コントロール・カーの起動方法は以下のようにします。

1.WiFiコントロール・カーの電源を入れます。

2.ブラウザーに、記録したIPアドレスを入力します。


3.次のWebコントロール画面が表示されます。


4.各ボタンをクリックすると、その通りにWiFiコントロールカーが動きます。