Created
April 1, 2017 07:20
-
-
Save pinglunliao/fa4ed07207029de117203652df134328 to your computer and use it in GitHub Desktop.
Controlling a Wifi Car via web page
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* WifiCar.ino | |
* | |
*/ | |
#include <Arduino.h> | |
#include <ESP8266WiFi.h> | |
#include <ESP8266WiFiMulti.h> | |
#include <WebSocketsServer.h> | |
#include <ESP8266WebServer.h> | |
#include <ESP8266mDNS.h> | |
#include <Hash.h> | |
#define MOTORA_E D1 // Motor A Forward pin | |
#define MOTORA_P D2 // Motor A PWM | |
#define MOTORB_E D3 // Motor B Forward pin | |
#define MOTORB_P D4 // Motor B PWM | |
#define USE_SERIAL Serial | |
void stopIt() { | |
delay(500); | |
digitalWrite(MOTORA_E, LOW); | |
digitalWrite(MOTORA_P, LOW); | |
digitalWrite(MOTORB_E, LOW); | |
digitalWrite(MOTORB_P, LOW); | |
} | |
ESP8266WiFiMulti WiFiMulti; | |
ESP8266WebServer server = ESP8266WebServer(80); | |
WebSocketsServer webSocket = WebSocketsServer(81); | |
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght) { | |
switch(type) { | |
case WStype_DISCONNECTED: | |
USE_SERIAL.printf("[%u] Disconnected!\n", num); | |
break; | |
case WStype_CONNECTED: { | |
IPAddress ip = webSocket.remoteIP(num); | |
USE_SERIAL.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload); | |
// send message to client | |
webSocket.sendTXT(num, "Connected"); | |
} | |
break; | |
case WStype_TEXT: | |
USE_SERIAL.printf("[%u] get Text: %s\n", num, payload); | |
if(payload[0] == 'f') { | |
digitalWrite(MOTORA_E, LOW); | |
digitalWrite(MOTORA_P, HIGH); | |
digitalWrite(MOTORB_E, LOW); | |
digitalWrite(MOTORB_P, HIGH); | |
stopIt(); | |
} | |
if(payload[0] == 'b') { | |
digitalWrite(MOTORA_E, HIGH); | |
digitalWrite(MOTORA_P, LOW); | |
digitalWrite(MOTORB_E, HIGH); | |
digitalWrite(MOTORB_P, LOW); | |
stopIt(); | |
} | |
if(payload[0] == 'l') { | |
digitalWrite(MOTORA_E, LOW); | |
digitalWrite(MOTORA_P, LOW); | |
digitalWrite(MOTORB_E, LOW); | |
digitalWrite(MOTORB_P, HIGH); | |
stopIt(); | |
} | |
if(payload[0] == 'r') { | |
digitalWrite(MOTORA_E, LOW); | |
digitalWrite(MOTORA_P, HIGH); | |
digitalWrite(MOTORB_E, LOW); | |
digitalWrite(MOTORB_P, LOW); | |
stopIt(); | |
} | |
break; | |
} | |
} | |
void setup() { | |
USE_SERIAL.begin(115200); | |
USE_SERIAL.println(); | |
USE_SERIAL.println(); | |
USE_SERIAL.println(); | |
pinMode(MOTORA_E, OUTPUT); | |
pinMode(MOTORA_P, OUTPUT); | |
pinMode(MOTORB_E, OUTPUT); | |
pinMode(MOTORB_P, OUTPUT); | |
stopIt(); | |
for(uint8_t t = 4; t > 0; t--) { | |
USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t); | |
USE_SERIAL.flush(); | |
delay(1000); | |
} | |
WiFi.softAP("holan", "12345678"); | |
IPAddress myIP = WiFi.softAPIP(); | |
USE_SERIAL.print("AP IP address: "); | |
USE_SERIAL.println(myIP); | |
// start webSocket server | |
webSocket.begin(); | |
webSocket.onEvent(webSocketEvent); | |
if(MDNS.begin("esp8266")) { | |
USE_SERIAL.println("MDNS responder started"); | |
} | |
// handle index | |
server.on("/", []() { | |
// send index.html | |
server.send(200, "text/html", | |
"<html><head><script>" | |
"var connection = new WebSocket('ws://'+location.hostname+':81/', ['arduino']);" | |
"connection.onopen = function(){connection.send('Connect ' + new Date());};" | |
"connection.onerror = function(error){console.log('WebSocket Error ', error);};" | |
"connection.onmessage = function(e){console.log('Server: ', e.data);};" | |
"function forward(){connection.send('f');}" | |
"function backward(){connection.send('b');}" | |
"function right(){connection.send('r');}" | |
"function left(){connection.send('l');}" | |
"</script></head><body>" | |
"<b>Wifi Car</b><br/><br/>" | |
"<button type=\"button\" onclick=\"forward()\">Forward</button>" | |
"<button type=\"button\" onclick=\"backward()\">Backward</button>" | |
"<button type=\"button\" onclick=\"right()\">Right</button>" | |
"<button type=\"button\" onclick=\"left()\">Left</button>" | |
"<br/></body></html>"); | |
}); | |
server.begin(); | |
// Add service to MDNS | |
MDNS.addService("http", "tcp", 80); | |
MDNS.addService("ws", "tcp", 81); | |
} | |
void loop() { | |
webSocket.loop(); | |
server.handleClient(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment