学園祭のため、IoTぼいのスマート車を作る。
しかし、注文したMotor Shield とは、違うもの(base only)が来たので、急遽自作する。
そのためのコントロールするAppも作りたいが、時間がなくって、ネットからWebページでコントロールするものを探して、沢山手直して、動くようになった。
車数台用意して、各車のIPは固定にしたいので、WiFiManager使わない方法をとった。
Webページでコントロールするから、遅延は目たつ。
時間があったら、ちゃんとアクセルペダルなど追加して、アプリの形にしたい。
// include libraries
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define motor_lf D3
#define motor_lb D4
#define motor_rf D6
#define motor_rb D5
// configure server
ESP8266WebServer server(80);
const char *form = "<!DOCTYPE HTML>"
"<meta name='viewport' content='width=device-width'>"
"<html>"
"<center><form action='/'>"
"<button name='dir' type='submit' value='4'>Forward</button><p>"
"<button name='dir' type='submit' value='1'>Left</button> "
"<button name='dir' type='submit' value='2'>Right</button><p>"
"<button name='dir' type='submit' value='3'>Reverse</button><p><p>"
"<button name='dir' type='submit' value='5'>Stop</button>"
"</form></center>"
"</html>";
void stop(void)
{
analogWrite(motor_lf, 0);
analogWrite(motor_lb, 0);
analogWrite(motor_rf, 0);
analogWrite(motor_rb, 0);
}
void forward(void)
{
analogWrite(motor_lf, 1023);
analogWrite(motor_lb, 0);
analogWrite(motor_rf, 1023);
analogWrite(motor_rb, 0);
}
void backward(void)
{
analogWrite(motor_lf, 0);
analogWrite(motor_lb, 1023);
analogWrite(motor_rf, 0);
analogWrite(motor_rb, 1023);
}
void left(void)
{
analogWrite(motor_lf, 0);
analogWrite(motor_lb, 0);
analogWrite(motor_rf, 1023);
analogWrite(motor_rb, 0);
}
void right(void)
{
analogWrite(motor_lf, 1023);
analogWrite(motor_lb, 0);
analogWrite(motor_rf, 0);
analogWrite(motor_rb, 0);
}
void handle_form()
{
// only move if we submitted the form
if (server.arg("dir"))
{
// get the value of request argument "dir"
int direction = server.arg("dir").toInt();
// chose direction
switch (direction)
{
case 1:
left();
break;
case 2:
right();
break;
case 3:
backward();
break;
case 4:
forward();
break;
case 5:
stop();
break;
}
// move for 300ms, gives chip time to update wifi also
delay(300);
}
// in all cases send the response
server.send(200, "text/html", form);
}
void setup()
{
// connect to wifi network
WiFi.begin("uislab003", "**password**");
// static ip, gateway, netmask
WiFi.config(IPAddress(192,168,11,10), IPAddress(192,168,11,1), IPAddress(255,255,255,0));
// connect
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
}
// set up the callback for http server
server.on("/", handle_form);
// start the webserver
server.begin();
pinMode(motor_lf, OUTPUT); //
pinMode(motor_lb, OUTPUT); //
pinMode(motor_rf, OUTPUT); //
pinMode(motor_rb, OUTPUT); //
}
void loop()
{
// check for client connections
server.handleClient();
}

