Skip to content

Esp8266 (GIT8266O-885) #1307

@garaianiket896-blip

Description

@garaianiket896-blip

/******************* WiFi Robot Remote Control Mode ********************/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>

// connections for drive Motors
int PWM_A = D1;
int PWM_B = D2;
int DIR_A = D3;
int DIR_B = D4;

const int buzPin = D5; // set digital pin D5 as buzzer pin (use active buzzer)
const int ledPin = D8; // set digital pin D8 as LED pin (use super bright LED)
const int wifiLedPin = D0; // set digital pin D0 as indication, the LED turn on if NodeMCU connected to WiFi as STA mode

String command; // String to store app command state.
int SPEED = 1023; // 330 - 1023.
int speed_Coeff = 3;

ESP8266WebServer server(80); // Create a webserver object that listens for HTTP request on port 80

unsigned long previousMillis = 0;

String sta_ssid = ""; // set Wifi networks you want to connect to
String sta_password = ""; // set password for Wifi networks

void setup(){
Serial.begin(115200); // set up Serial library at 115200 bps
Serial.println();
Serial.println("WiFi Robot Remote Control Mode");
Serial.println("--------------------------------------");

pinMode(buzPin, OUTPUT); // sets the buzzer pin as an Output
pinMode(ledPin, OUTPUT); // sets the LED pin as an Output
pinMode(wifiLedPin, OUTPUT); // sets the Wifi LED pin as an Output
digitalWrite(buzPin, LOW);
digitalWrite(ledPin, LOW);
digitalWrite(wifiLedPin, HIGH);

// Set all the motor control pins to outputs
pinMode(PWM_A, OUTPUT);
pinMode(PWM_B, OUTPUT);
pinMode(DIR_A, OUTPUT);
pinMode(DIR_B, OUTPUT);

// Turn off motors - Initial state
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
analogWrite(PWM_A, 0);
analogWrite(PWM_B, 0);

// set NodeMCU Wifi hostname based on chip mac address
String chip_id = String(ESP.getChipId(), HEX);
int i = chip_id.length()-4;
chip_id = chip_id.substring(i);
chip_id = "wificar-" + chip_id;
String hostname(chip_id);

Serial.println();
Serial.println("Hostname: "+hostname);

// first, set NodeMCU as STA mode to connect with a Wifi network
WiFi.mode(WIFI_STA);
WiFi.begin(sta_ssid.c_str(), sta_password.c_str());
Serial.println("");
Serial.print("Connecting to: ");
Serial.println(sta_ssid);
Serial.print("Password: ");
Serial.println(sta_password);

// try to connect with Wifi network about 10 seconds
unsigned long currentMillis = millis();
previousMillis = currentMillis;
while (WiFi.status() != WL_CONNECTED && currentMillis - previousMillis <= 10000) {
delay(500);
Serial.print(".");
currentMillis = millis();
}

// if failed to connect with Wifi network set NodeMCU as AP mode
if (WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi-STA-Mode");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
digitalWrite(wifiLedPin, LOW); // Wifi LED on when connected to Wifi as STA mode
delay(3000);
} else {
WiFi.mode(WIFI_AP);
WiFi.softAP(hostname.c_str());
IPAddress myIP = WiFi.softAPIP();
Serial.println("");
Serial.println("WiFi failed connected to " + sta_ssid);
Serial.println("");
Serial.println("WiFi-AP-Mode");
Serial.print("AP IP address: ");
Serial.println(myIP);
digitalWrite(wifiLedPin, HIGH); // Wifi LED off when status as AP mode
delay(3000);
}

server.on ( "/", HTTP_handleRoot ); // call the 'handleRoot' function when a client requests URI "/"
server.onNotFound ( HTTP_handleRoot ); // when a client requests an unknown URI (i.e. something other than "/"), call function "handleNotFound"
server.begin(); // actually start the server

ArduinoOTA.begin(); // enable to receive update/uploade firmware via Wifi OTA
}

void loop() {
ArduinoOTA.handle(); // listen for update OTA request from clients
server.handleClient(); // listen for HTTP requests from clients

  command = server.arg("State");          // check HTPP request, if has arguments "State" then saved the value
  if (command == "F") Forward();          // check string then call a function or set a value
  else if (command == "B") Backward();
  else if (command == "R") TurnRight();
  else if (command == "L") TurnLeft();
  else if (command == "G") ForwardLeft();
  else if (command == "H") BackwardLeft();
  else if (command == "I") ForwardRight();
  else if (command == "J") BackwardRight();
  else if (command == "S") Stop();
  else if (command == "V") BeepHorn();
  else if (command == "W") TurnLightOn();
  else if (command == "w") TurnLightOff();
  else if (command == "0") SPEED = 330;
  else if (command == "1") SPEED = 400;
  else if (command == "2") SPEED = 470;
  else if (command == "3") SPEED = 540;
  else if (command == "4") SPEED = 610;
  else if (command == "5") SPEED = 680;
  else if (command == "6") SPEED = 750;
  else if (command == "7") SPEED = 820;
  else if (command == "8") SPEED = 890;
  else if (command == "9") SPEED = 960;
  else if (command == "q") SPEED = 1023;

}

// function prototypes for HTTP handlers
void HTTP_handleRoot(void){
server.send ( 200, "text/html", "" ); // Send HTTP status 200 (Ok) and send some text to the browser/client

if( server.hasArg("State") ){
Serial.println(server.arg("State"));
}
}

void handleNotFound(){
server.send(404, "text/plain", "404: Not found"); // Send HTTP status 404 (Not Found) when there's no handler for the URI in the request
}

// function to move forward
void Forward(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, HIGH);
analogWrite(PWM_A, SPEED);
analogWrite(PWM_B, SPEED);
}

// function to move backward
void Backward(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
analogWrite(PWM_A, SPEED);
analogWrite(PWM_B, SPEED);
}

// function to turn right
void TurnRight(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
analogWrite(PWM_A, SPEED);
analogWrite(PWM_B, SPEED);
}

// function to turn left
void TurnLeft(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
analogWrite(PWM_A, SPEED);
analogWrite(PWM_B, SPEED);
}

// function to move forward left
void ForwardLeft(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, HIGH);
analogWrite(PWM_A, SPEED);
analogWrite(PWM_B, SPEED/speed_Coeff);
}

// function to move backward left
void BackwardLeft(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
analogWrite(PWM_A, SPEED);
analogWrite(PWM_B, SPEED/speed_Coeff);
}

// function to move forward right
void ForwardRight(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, HIGH);
analogWrite(PWM_A, SPEED/speed_Coeff);
analogWrite(PWM_B, SPEED);
}

// function to move backward left
void BackwardRight(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
analogWrite(PWM_A, SPEED/speed_Coeff);
analogWrite(PWM_B, SPEED);
}

// function to stop motors
void Stop(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
analogWrite(PWM_A, 0);
analogWrite(PWM_B, 0);
}

// function to beep a buzzer
void BeepHorn(){
digitalWrite(buzPin, HIGH);
delay(150);
digitalWrite(buzPin, LOW);
delay(80);
}

// function to turn on LED
void TurnLightOn(){
digitalWrite(ledPin, HIGH);
}

// function to turn off LED
void TurnLightOff(){
digitalWrite(ledPin, LOW);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions