Skip to content

Robot WiFi

javierre edited this page Jun 9, 2019 · 6 revisions

TBD

Versión con motores DC

Motor DC


/*
 NodeMCU Access Point - Servidor Web por Dani No www.esploradores.com
 Crea un servidor Web en modo Access Point que permite encender y apagar un LED conectado a la salida D4 (GPIO02) del módulo NodeMCU.
 Este código de ejemplo es de público dominio.

 http://www.esploradores.com/access-point-servidor-web-nodemcu/
 
 */
 
#include <ESP8266WiFi.h>                  //Incluye la librería ESP8266WiFi


#define RightMotorSpeed 4 // POWERB
#define RightMotorDir 2   // DIRB
#define LeftMotorSpeed 5  // POWERA
#define LeftMotorDir 0    // DIRA

#define turnspeed  1000 //0--> 1024
#define forwardspeed 1000 //0 --> 1024


const char ssid[] = "NodeMCU-ESP8266";    //Definimos la SSDI de nuestro servidor WiFi -nombre de red- 
const char password[] = "12345678";       //Definimos la contraseña de nuestro servidor 
WiFiServer server(80);                    //Definimos el puerto de comunicaciones
 

int estado = 0;                         //Definimos la variable que va a recoger el estado del motor


void halt() //0
{
 digitalWrite(RightMotorSpeed, LOW);
 digitalWrite(LeftMotorSpeed, LOW);
 analogWrite(RightMotorSpeed, 0);
 analogWrite(LeftMotorSpeed, 0);
}

void forward()//1
{
 Serial.println("forward");
 digitalWrite(RightMotorDir, LOW);
 digitalWrite(LeftMotorDir, HIGH);
 analogWrite(RightMotorSpeed, forwardspeed);
 analogWrite(LeftMotorSpeed, forwardspeed);
}

void reverse()//2
{
 Serial.println("reverse");
 digitalWrite(RightMotorDir, HIGH);
 digitalWrite(LeftMotorDir, LOW);
 analogWrite(RightMotorSpeed, forwardspeed);
 analogWrite(LeftMotorSpeed, forwardspeed);
}

void right()//3
{
 Serial.println("right");
 digitalWrite(RightMotorDir, HIGH);
 digitalWrite(LeftMotorDir, HIGH);
 analogWrite(RightMotorSpeed, turnspeed);
 analogWrite(LeftMotorSpeed, turnspeed);
}

void left()//4
{
 Serial.println("left");
 digitalWrite(RightMotorDir, LOW);
 digitalWrite(LeftMotorDir, LOW);
 analogWrite(RightMotorSpeed, turnspeed);
 analogWrite(LeftMotorSpeed, turnspeed);
}


void setup() {
  pinMode(RightMotorSpeed, OUTPUT);
  pinMode(RightMotorDir, OUTPUT);
  pinMode(LeftMotorSpeed, OUTPUT);
  pinMode(LeftMotorDir, OUTPUT);

  

  Serial.begin(9600);

  halt();
  
  
  server.begin();                         //inicializamos el servidor
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);            //Red con clave, en el canal 1 y visible
  //WiFi.softAP(ssid, password,3,1);      //Red con clave, en el canal 3 y visible 
  //WiFi.softAP(ssid);                    //Red abierta
 
  Serial.println();
 
  Serial.print("Direccion IP Access Point - por defecto: ");      //Imprime la dirección IP
  Serial.println(WiFi.softAPIP()); 
  Serial.print("Direccion MAC Access Point: ");                   //Imprime la dirección MAC
  Serial.println(WiFi.softAPmacAddress()); 
 
  //IPAddress local_ip(192, 168, 1, 1);                           //Modifica la dirección IP, por defecto es http://192.168.4.1
  //IPAddress gateway(192, 168, 1, 1);   
  //IPAddress subnet(255, 255, 255, 0);
  //WiFi.softAPConfig(local_ip, gateway, subnet);
  //Serial.println();
  //Serial.print("Access Point - Nueva direccion IP: ");
  //Serial.println(WiFi.softAPIP());
}
 
void loop() 
{
  // Comprueba si el cliente ha conectado
  WiFiClient client = server.available();  
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envía alguna petición
  Serial.println("nuevo cliente");
  while(!client.available()){
    delay(1);
  }
 
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
  // Lee la petición
  String peticion = client.readStringUntil('\r');
  Serial.println(peticion);
  client.flush();
 
  // Comprueba la petición
  if (peticion.indexOf('/robot=H') != -1) {
    estado = 0;
    halt();
  } 
  if (peticion.indexOf('/robot=F') != -1) {
    estado = 1;
    forward();
  } 
   if (peticion.indexOf('/robot=B') != -1) {
    estado = 2;
    reverse();
  } 
   if (peticion.indexOf('/robot=R') != -1) {
    estado = 3;
    right();
  } 
   if (peticion.indexOf('/robot=L') != -1) {
    estado = 4;
    left();
  } 
 
  
 
  // Envía la página HTML de respuesta al cliente
  client.println("HTTP/1.1 200 OK");
  client.println("");                                     //No olvidar esta línea de separación
  client.println("<!DOCTYPE HTML>");
  client.println("<meta charset='UTF-8'>");
  client.println("<html>");

  String chck0="";
  String chck1="";
  String chck2="";
  String chck3="";
  String chck4="";
 
      //Imprime el estado del led
  client.print("<h1>El Robot está ahora: ");                 
  if(estado == 0) {
       chck0=" checked ";
    client.print("PARADO</h1>");  
  } else if(estado==1){
       chck1=" checked ";
    client.print("AVANZANDO</h1>");
  } else if(estado==2){
     chck2=" checked ";
    client.print("RETROCEDIENDO</h1>");
  } else if(estado==3){
     chck3=" checked ";
    client.print("GIRANDO A LA DCHA</h1>");
  }
   else if(estado==4){
     chck4=" checked ";
    client.print("GIRANDO A LA IZDA</h1>");
  }

 
      //Se crean enlaces para modificar el estado del LED      
  client.println("Presiona <a href='/robot=H'>AQUÍ</a> para parar el robot<br>");
  client.println("Presiona <a href='/robot=F'>AQUÍ</a> para avanzar<br>");
  client.println("Presiona <a href='/robot=B'>AQUÍ</a> para retroceder<br>");
  client.println("Presiona <a href='/robot=R'>AQUÍ</a> para girar a la derecha<br>");
  client.println("Presiona <a href='/robot=L'>AQUÍ</a> para girar a la izquierda<br>");
  
  
  
  
      //Se crean cajas de comprobación (checkbox) para modificar el estado del LED

    client.println("<input type='checkbox' "+chck0+" onClick=location.href='/robot=H'> PARAR </input><br>");
    Serial.println("<input type='checkbox' "+chck0+" onClick=location.href='/robot=H'> PARAR </input><br>");
    client.println("<input type='checkbox' "+chck1+" onClick=location.href='/robot=F'> AVANZAR </input><br>");
        client.println("<input type='checkbox' "+chck2+" onClick=location.href='/robot=B'> RETROCEDER </input><br>");
            client.println("<input type='checkbox' "+chck3+" onClick=location.href='/robot=B'> GIRAR DCHA </input><br>");
                client.println("<input type='checkbox' "+chck4+" onClick=location.href='/robot=R'> GIRAR IZDA </input><br>");
  
 
 

 
      //Se crean botones con estilos para modificar el estado del LED
  client.println("<button type='button' onClick=location.href='/robot=F' style='margin:auto; background-color:green; color:#A9F5A9; padding:5px; border:2px solid black; width:200;'><h2> AVANZAR</h2> </button>");
  client.println("<button type='button' onClick=location.href='/robot=H' style='margin:auto; background-color:red; color:#F6D8CE; padding:5px; border:2px solid black; width:200;'><h2> PARAR</h2> </button>");
 client.println("<button type='button' onClick=location.href='/robot=B' style='margin:auto; background-color:yellow; color:black; padding:5px; border:2px solid black; width:200;'><h2> RETROCEDER</h2> </button>");
 client.println("<button type='button' onClick=location.href='/robot=R' style='margin:auto; background-color:orange; color:black; padding:5px; border:2px solid black; width:200;'><h2> GIRAR DCHA</h2> </button>");
 client.println("<button type='button' onClick=location.href='/robot=L' style='margin:auto; background-color:blue; color:black; padding:5px; border:2px solid black; width:200;'><h2> GIRAR IZDA</h2> </button><br><br>");
 
   
  client.println("</html>"); 
  delay(1);
  Serial.println("Petición finalizada");          // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
 
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();
}


Clone this wiki locally