WeMos d1 miniはWebサーバとして動作する。
次のコードはAP接続と複数台をコントロールするため、SSID、IPは固定にした。
(WiFi Managerを利用した、どこのAPでも利用できるようにしたいが、IP表示する画面の実装が必要)
// include libraries
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
// for WeMos d1 mini
#define motor_lf D3
#define motor_lb D4
#define motor_rf D6
#define motor_rb D5
#define motor_speed 500 // 0 - 1023
// 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, motor_speed);
analogWrite(motor_lb, 0);
analogWrite(motor_rf, motor_speed);
analogWrite(motor_rb, 0);
}
void backward(void)
{
analogWrite(motor_lf, 0);
analogWrite(motor_lb, motor_speed);
analogWrite(motor_rf, 0);
analogWrite(motor_rb, motor_speed);
}
void left(void)
{
analogWrite(motor_lf, 0);
analogWrite(motor_lb, 0);
analogWrite(motor_rf, motor_speed);
analogWrite(motor_rb, 0);
}
void right(void)
{
analogWrite(motor_lf, motor_speed);
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", "nihao12345");
// static ip, gateway, netmask
WiFi.config(IPAddress(192,168,0,64), IPAddress(192,168,0,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();
}
次の二つ方法で、どちらも利用可能:
スマホWebブラウザでコントロール
MIT App Inventorで専用WifiBotコントローラーを作る