トラ技にESP32の特集があったので、それを参考にしてWiFiコントロール・カーを製作してみました。
その忘備録です。
SimpleWiFiServerを利用して、WiFiコントロール・カーを製作しました。
なお、今回使用したESP32は、アリババで購入したESP32-DEVKIT ESP-WROOM-32開発ボード($7で800円前後)を
使用しました。
・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コントロール・カーを動かします。
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にはESP-WROOM-32を開発するためのライブラリは入っていないので、 自分でダウンロードしてArduino IDEに追加インストールします。
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のシリアルポートなので選択します。
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.");
}
}
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

1.モーターは、ちびモーターを使用しました。
*ちびモーターの駆動には30mA程の電流が流れるようです。
2.モータードライバーは、MP4212を使用しました。(現在販売中止)
3.左右のモーターは、基台に逆に取り付けています。
1.WiFiコントロール・カーの電源を入れます。
2.ブラウザーに、記録したIPアドレスを入力します。

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

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