ESP32-DevKit


ESP-WROOM-32のsoftAPモードを使ってWiFiコントロール・カーを製作(2)


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



 忘備録(1)は、SimpleWiFiServerを利用してWiFiコントロール・カーを製作しましたが、WiFiルーターが変われば ルーターのSSIDとパスワードが変わるので、スケッチをコンパイルし直さなければなりません。そこで、 ESP32とArduinoのコアを使用してsoft-APを設定すれば、従来のルーターの接続を必要としません。
 これを使えば、ESP-WROOM-32がWiFiルーターとなるので、外部のWiFiルーターは必要ありません。
 プログラムでアクセスポイントのSSIDとPasswordを設定すれば、使っているコンピュータで利用可能な ネットワークを確認し、設定したアクセスポイントに接続すればよいことになります。



  soft-APモードの概略


1.ヘッダーファイルは、そのまま「WiFi.h」を使用します。

2.soft-APを設定するので、それに接続することができるネットワーク名(SSID)とパスワード、 及びIPアドレスを次の例のように
  グローバル定数で指定します。
    const char*ssid = "ESP32AP-WiFi"
    const char*password = "esp32apwifi"
    const IPAddress ip(192,168,30,3);
  と適宜自分で設定します。

3.その後soft-APモード WiFi.softAP(ssid, password) を使って、WiFi.softAP(ESP32AP-WiFi, esp32apwifi)とします。




  完成した1号機




 1号機は、出来るだけ廉価にできるよう以下の部品を使用して作りました。
・ESP32-DEVKIT ESP-WROOM-32開発ボード
・DCモータードライバーは、フルブリッジドライバーBD6211F-E2を2個使用
・ピンソケット2X19 PIN(ESP32-DEVKIT挿入用)
・基板1枚
・ちびモーターギア+プーリー、タイヤセット 2セット
  基板の両側に1cmx1cmの角材を付けて、それにちびモーターを設置。
・モバイルバッテリー(100均の電池式モバイルバッテリー)
・USB電源ケーブル
・なんでもキャスター1個



 WiFiコントロール・カーを遠隔操作するためのWeb画面は、1号機と2号機ともに同じです。




  完成した2号機



・1号機では電源を100均の電池式モバイルバッテリーを使いましたが、容量が少ないので モバイルバッテリーを¥300の物に変更しました。

・ DCモータードライバーは、AlliExpressで¥65で購入したMCGICMのNL91105モジュール (デュアルDCモータードライバー)に変更しました。



 次のビデオは、soft-APモードを利用した2号機を稼働させています。




  softAPを使ったスケッチ


スケッチにsoftAPを追加します。

例として、ネットワーク名(SSID)、パスワード、IPアドレスを次のように設定しました。

  SSID:ESP32AP-WiFi
  Password:esp32apwifi
  IP-Address:192,168,30,3

以下のスケッチをESP32-DevKitに書き込みます。

/* WiFi-Control-Car(softAP) */
								
#include <WiFi.h>

const char ssid[] = "ESP32AP-WiFi";
const char pass[] = "esp32apwifi";
const IPAddress ip(192,168,30,3);
const IPAddress subnet(255,255,255,0);

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);

    WiFi.softAP(ssid,pass);
    delay(100);
    WiFi.softAPConfig(ip,ip,subnet);

    IPAddress myIP = WiFi.softAPIP();

    pinMode(0, OUTPUT);
    pinMode(2, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    delay(10);

    server.begin();

    Serial.print("SSID: ");
    Serial.println(ssid);
    Serial.print("AP IP address: ");
    Serial.println(myIP);
    Serial.println("Server start!");

}

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

    if (client) {
        String currentLine = "";
        Serial.println("New Client.");

        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.");
    }
}
						



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


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


1.100均の電池式モバイルバッテリーを使用したので、電源部に100μ、10μのコンデンサを 入れておきました。

2.図の緑の線は、ピンコードの部分です。




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


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

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

2.パソコンのネットワーク接続設定をクリックすると図のようにWiFi一覧リストに、設定した 新しいリスト「ESP32AP-WiFi」が表示されます。


3.このSSIDで設定したパスワード「esp32apwifi」を入力し、ネットワークに接続します。

4.ネットワークへの接続が完了したらブラウザーで図のように、設定したIPアドレスを入力します。


5.図のようなコントロールカーの操作画面がWeb画面に表示されますので、各ボタンをクリックすると、 その通りにWiFiコントロールカーが動きます。