Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Aporte Wemos mini, controlar servo via wifi
#1
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
Responder



Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)