ESP32-DevKit



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



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

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

  完成品




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




 WiFiコントロール・カーを遠隔操作するためのWeb画面は、忘備録(1)と同じです。


  softAPを使ったスケッチ

忘備録(1)のスケッチに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コントロールカーが動きます。