学園祭のため、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(); }