Wemos mini, controlar servo via wifi. - chujalt - 06-03-2021
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
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:
Código: <!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:
Código Wemos mini:
Código: //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
|