Skip to content

Instantly share code, notes, and snippets.

@download13
Created December 15, 2016 21:29
Show Gist options
  • Save download13/c99a61010849c0fd18bab03b163e6915 to your computer and use it in GitHub Desktop.
Save download13/c99a61010849c0fd18bab03b163e6915 to your computer and use it in GitHub Desktop.
#define LEFT_ENABLE D5
#define L_POS D1
#define L_NEG D2
#define RIGHT_ENABLE D6
#define R_POS D4
#define R_NEG D3
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <WebSocketsServer.h>
#include <ESP8266mDNS.h>
#include <FS.h>
ESP8266WiFiMulti WiFiMulti;
ESP8266WebServer server(80);
WebSocketsServer wss(81);
void leftMotor(int direction) {
Serial.print("Left Motor: ");
switch (direction) {
case 0:
Serial.println("Stopped");
digitalWrite(L_POS, 0);
digitalWrite(L_NEG, 0);
break;
case 1:
Serial.println("Forward");
digitalWrite(L_POS, 1);
digitalWrite(L_NEG, 0);
break;
case -1:
Serial.println("Backward");
digitalWrite(L_POS, 0);
digitalWrite(L_NEG, 1);
break;
}
}
void rightMotor(int direction) {
Serial.print("Right Motor: ");
switch (direction) {
case 0:
Serial.println("Stopped");
digitalWrite(R_POS, 0);
digitalWrite(R_NEG, 0);
break;
case 1:
Serial.println("Forward");
digitalWrite(R_POS, 1);
digitalWrite(R_NEG, 0);
break;
case -1:
Serial.println("Backward");
digitalWrite(R_POS, 0);
digitalWrite(R_NEG, 1);
break;
}
}
void turnLeft() {
leftMotor(-1);
rightMotor(1);
Serial.println("Turning Left");
}
void turnRight() {
leftMotor(1);
rightMotor(-1);
Serial.println("Turning Right");
}
void moveForward() {
leftMotor(1);
rightMotor(1);
Serial.println("Moving Forward");
}
void moveBackward() {
leftMotor(-1);
rightMotor(-1);
Serial.println("Moving Backward");
}
void stop() {
leftMotor(0);
rightMotor(0);
Serial.println("Stopped");
}
void webSocketEvent(uint8_t client, WStype_t type, uint8_t * payload, size_t length) {
switch (type) {
case WStype_DISCONNECTED:
break;
case WStype_CONNECTED:
wss.sendTXT(client, "ready");
break;
case WStype_TEXT:
char instr = payload[0];
switch (instr) {
case 'f':
moveForward();
break;
case 'l':
turnLeft();
break;
case 'r':
turnRight();
break;
case 'b':
moveBackward();
break;
case 's':
stop();
break;
}
break;
}
}
void serveFileContents(String path) {
File file = SPIFFS.open(path, "r");
server.streamFile(file, "");
}
void setup() {
Serial.begin(115200);
Serial.println("");
pinMode(L_POS, OUTPUT);
pinMode(L_NEG, OUTPUT);
pinMode(R_POS, OUTPUT);
pinMode(R_NEG, OUTPUT);
pinMode(LEFT_ENABLE, OUTPUT);
pinMode(RIGHT_ENABLE, OUTPUT);
digitalWrite(LEFT_ENABLE, HIGH);
digitalWrite(RIGHT_ENABLE, HIGH);
stop();
SPIFFS.begin();
WiFiMulti.addAP("yourap", "yourpass");
Serial.println("Connecting to wifi...");
while (WiFiMulti.run() != WL_CONNECTED) {
delay(100);
}
Serial.print("Connected to wifi as ");
Serial.println(WiFi.localIP());
wss.begin();
Serial.println("Web server listening");
wss.onEvent(webSocketEvent);
Serial.println("Websocket server listening");
server.on("/", []() {
if (!SPIFFS.exists("/index.html")) {
Serial.println("index.html does not exist");
server.send(404, "text/plain", "File not found");
return;
}
File file = SPIFFS.open("/index.html", "r");
server.streamFile(file, "text/html");
file.close();
});
server.on("/main.js", []() {
if (!SPIFFS.exists("/main.js")) {
Serial.println("main.js does not exist");
server.send(404, "text/plain", "File not found");
return;
}
File file = SPIFFS.open("/main.js", "r");
server.streamFile(file, "text/javascript");
file.close();
});
server.begin();
MDNS.begin("robot");
MDNS.addService("http", "tcp", 80);
MDNS.addService("ws", "tcp", 81);
Serial.println("Listing SPIFFS files:");
Dir dir = SPIFFS.openDir("/");
while (dir.next()) {
File entry = dir.openFile("r");
Serial.println(entry.name());
entry.close();
}
Serial.println("Initialization done");
}
void loop() {
wss.loop();
server.handleClient();
delay(10);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment