ChuJALT

Versión completa: Wemos mini, controlar servo via wifi
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Saludos.

Recientemente he adquirido una placa Wemos mini D1 y me parece increíble que con lo pequeña que es, lo funcional que resulta, con wifi integrado y todo (ESP8266). Fijaros en la foto de mas abajo su tamaño, el cable conectado a ella es un micro-usb. El precio también es muy atractivo, por unos 3 € la podéis encontrar.

Con ella vamos a controlar el giro de un servo vía wifi desde una página web.


Material necesario:
  • Una placa Wemos mini D1.
  • Un Micro Servo 9G

[Imagen: wemosmini.jpg]


[Imagen: servo.jpg]




Conexiones:

  • Pin cable amarillo del servo al pin D7 de la Wemos mini.
  • Pin cable rojo del servo al pin 5v de la Wemos mini.
  • Pin cable marrón del servo al pin GND de la Wemos mini.


Página web para controlar el servo:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//ES" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
   <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
   <title>Control servo</title>
<style type="text/css">
#juan {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
   -webkit-transform: translate(-50%, -50%);
}
</style>
 </head>
 <body>
<div id="juan">
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=000';" value="000" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=005';" value="005" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=010';" value="010" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=015';" value="015" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=020';" value="020" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=025';" value="025" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=030';" value="030" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=035';" value="035" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=040';" value="040" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=045';" value="045" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=050';" value="050" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=055';" value="055" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=060';" value="060" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=065';" value="065" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=070';" value="070" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=075';" value="075" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=080';" value="080" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=085';" value="085" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=090';" value="090" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=095';" value="095" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=100';" value="100" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=105';" value="105" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=110';" value="110" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=115';" value="115" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=120';" value="120" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=125';" value="125" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=130';" value="130" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=135';" value="135" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=140';" value="140" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=145';" value="145" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=150';" value="150" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=155';" value="155" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=160';" value="160" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=165';" value="165" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=170';" value="170" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=175';" value="175" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=180';" value="180" />
</div>

</body>
</html>



Imagen de la página web:

[Imagen: grados.png]



Código Wemos mini:
//Conexiones
//Amarillo: D7
//Rojo: 3V
//Marrón: GND
#include <Servo.h>
#include <ESP8266WiFi.h>
const int servo_pin = D7;
Servo myservo;  
unsigned int old_value;
const char* ssid = "Tu_ssid";
const char* password = "Tu_contraseña";
IPAddress ip(192,168,1,111);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
WiFiServer server(80);

void setup()
{
 Serial.begin(115200);
 delay(10);
myservo.attach(servo_pin);
  old_value = 90;
WiFi.begin(ssid, password);
 WiFi.config(ip, gateway, subnet);
 
 server.begin();
}

String f = "";
void loop() {

 WiFiClient client = server.available();
 if (!client) {
   return;
 }


 Serial.println("new client");
 while(!client.available()){
   delay(1);
 }

 String request = client.readStringUntil('\r');
 client.flush();


  char i1 = request.indexOf("GET /angulo="), i2;
  if (i1 != -1)
    i2 = request.indexOf(" ", i1+12);
    f = request.substring(i1+12, i2);
int g = f.toInt();

   
  if ((0 <= g) && (g <= 180)) {
       
     if (g < old_value)
      {  
     for(int i = old_value ; i > g ; i -= 1)
        {
        myservo.write(i);
        delay(15);
        }
        old_value = g;
      }
     
    if (g > old_value)
      {
      for(int i = old_value ; i < g ; i += 1)
        {
        myservo.write(i);
        delay(15);
        }
        old_value = g;
     }

  }  


delay(100);
client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("");
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");
 client.print("<body onload='history.back();'>\n");
 client.println("</body>");
 client.println("</html>");

 delay(1);
}



Comentario del código:
  • Se incluyen las librerías necesarias.
  • Se indica el pin del servo.
  • Se dan todos los parámetros para la conexión wifi. En este caso a la placa le hemos asignado la dirección IP 192.168.1.111.
  • Se inicia el servo y la conexión wifi.
  • Se recibe mediante el método GET los parámetros enviados desde la página web y se desecha todo menos lo que nos interesa, que es el número de grados.
  • Una vez captado ese número, se envía al servo para que gire esos grados.
  • La placa envía al navegador una pequeña página web con un "history.back()" para que nos vuelva a mostrar el teclado de manera inmediata.

Bueno, ya está, espero que a alguien le sirva.


Saludos