Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.

Nombre de usuario
  

Contraseña
  





Buscar en los foros

(Búsqueda avanzada)

Estadísticas del foro
» Miembros: 116
» Último miembro: Mike Oakman
» Temas del foro: 53
» Mensajes del foro: 83

Estadísticas totales

Usuarios en línea
Actualmente hay 20 usuarios en línea.
» 0 miembro(s) | 20 invitado(s)

Últimos temas
very good
Foro: Charla general
Último mensaje por: Frbetsar
30-03-2024, 12:15
» Respuestas: 0
» Vistas: 219
Desempaquetar y empaqueta...
Foro: Android
Último mensaje por: Danielsip
14-02-2024, 12:07
» Respuestas: 16
» Vistas: 31,019
Web scraping con python B...
Foro: Python
Último mensaje por: chujalt
12-09-2023, 20:29
» Respuestas: 2
» Vistas: 4,847
Web scraping con python y...
Foro: Python
Último mensaje por: blackcatiswhite
12-09-2023, 10:32
» Respuestas: 1
» Vistas: 3,854
solicitud tablet Point of...
Foro: Android
Último mensaje por: chujalt
28-03-2022, 21:10
» Respuestas: 3
» Vistas: 8,143
Presentacion
Foro: Presentaciones
Último mensaje por: chujalt
28-03-2022, 17:31
» Respuestas: 1
» Vistas: 5,870
Desempaquetar y empaqueta...
Foro: Android
Último mensaje por: trasnoastur
08-12-2021, 21:00
» Respuestas: 5
» Vistas: 18,763
Presentación
Foro: Presentaciones
Último mensaje por: chujalt
08-12-2021, 20:08
» Respuestas: 1
» Vistas: 5,119
Python, insertar saltos d...
Foro: Python
Último mensaje por: chujalt
03-08-2021, 20:00
» Respuestas: 0
» Vistas: 3,623
Problemas instalar Linux ...
Foro: Linux
Último mensaje por: chujalt
03-08-2021, 19:55
» Respuestas: 1
» Vistas: 6,218

 
  Arduino, controlar servo vía Wifi con módulo HLK-RM04
Enviado por: chujalt - 05-03-2021, 21:57 - Foro: Anduino, Nodemcu, Wemos - Sin respuestas

Saludos....

En esta ocasión vamos a establecer el giro de un servo vía wifi desde una página web, por lo que podremos controlarlo desde un PC, tableta, smartphone, etc.


Materiales utilizados

  • Una placa Arduino (yo he utilizado la Uno).
  • 7 Cables dupont.
  • Un servo, yo he utilizado el de la imagen de mas abajo.
  • Un módulo wifi HLK-RM04.



[Imagen: servo.jpg]


[Imagen: WIFI-HLK-RM04.jpg]



Conexiones
  • Pin Rx del módulo HLK-RM04 al pin Tx de arduino.
  • Pin Tx del módulo HLK-RM04 al pin Rx de arduino.
  • Pin 5V del módulo HLK-RM04 al pin 5V de arduino.
  • Pin GND del módulo HLK-RM04 al pin GND de arduino.
  • Cable naranja del servo (datos) al pin 9 de arduino
  • Cable marrón del servo a pin GND de arduino.
  • Cable rojo del servo a pin 5v de arduino


Lo que vamos a necesitar son dos clases de código. Por una parte una página web que estará en nuestro servidor web en la que tendremos el formulario con los grados (de 0 a 180) que queremos que gire el servo y el código para la placa arduino que recibirá la los grados de giro del servo.


Código página web, index.html:

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">
<form action="http://192.168.1.254:8080/servo" method="get">
 
 <input type="submit" name="l" value="000">
 <input type="submit" name="l" value="005">
 <input type="submit" name="l" value="010">
 <input type="submit" name="l" value="015">
 <input type="submit" name="l" value="020">
 <input type="submit" name="l" value="025"></br>
 <input type="submit" name="l" value="030">
 <input type="submit" name="l" value="035">
 <input type="submit" name="l" value="040">
 <input type="submit" name="l" value="045">
 <input type="submit" name="l" value="050">
 <input type="submit" name="l" value="055"></br>
 <input type="submit" name="l" value="060">
 <input type="submit" name="l" value="065">
 <input type="submit" name="l" value="070">
 <input type="submit" name="l" value="075">
 <input type="submit" name="l" value="080">
 <input type="submit" name="l" value="085"></br>
 <input type="submit" name="l" value="090">
 <input type="submit" name="l" value="095">
 <input type="submit" name="l" value="100">
 <input type="submit" name="l" value="105">
 <input type="submit" name="l" value="110">
 <input type="submit" name="l" value="115"></br>
 <input type="submit" name="l" value="120">
 <input type="submit" name="l" value="125">
 <input type="submit" name="l" value="130">
 <input type="submit" name="l" value="135">
 <input type="submit" name="l" value="140">
 <input type="submit" name="l" value="145"></br>
 <input type="submit" name="l" value="150">
 <input type="submit" name="l" value="155">
 <input type="submit" name="l" value="160">
 <input type="submit" name="l" value="165">
 <input type="submit" name="l" value="170">
 <input type="submit" name="l" value="175"></br>
 <input type="submit" name="l" value="180">
</form>
</div>
</body>
</html>


Este código lo que hace básicamente es crear un formulario con los grados que queremos que gire el servo y lo envía, por el método get, a la dirección ip de nuestro arduino.

[Imagen: grados.png]


Código para la placa arduino:

Código:
#include <Servo.h>
const int servo_pin = 9;
Servo myservo;  
unsigned int old_value;
void setup()
{
 Serial.begin(57600);
 myservo.attach(servo_pin);
   old_value = 90;
}

int f = 0;
void loop()
{
boolean has_request = false;
 String in = "";
   if (Serial.available()) {
in = "";
   while (true) {  
      while (Serial.available() == false) {}
     in += (char)(Serial.read());
     if (in.endsWith("\r\n")) {
       has_request = true;  break;
     }
   }  
 }
 if (has_request) {
   char i1 = in.indexOf("GET /servo?l="), i2;
   if (i1 != -1) {
     i2 = in.indexOf(" ", i1+13);
     f = in.substring(i1+13, i2).toInt();
   }  
Serial.println("HTTP/1.1 200 OK");
   Serial.println("Content-Type: text/html");
   Serial.println("Connection: close");

   String sr = "<!DOCTYPE HTML>\n";
   sr += "<html>\n";
   sr += "<body onload='history.back();'>\n";    
   sr += "</body>";  
   sr += "</html>";
   Serial.print("Content-Length: ");
   Serial.print(sr.length());
   Serial.print("\r\n\r\n");
   Serial.print(sr);
  has_request = false;  
   
   if ((0 <= f) && (f <= 180)) {
         
      if (f < old_value)
       {  
      for(int i = old_value ; i > f ; i -= 1)
         {
         myservo.write(i);
         delay(15);
         }
         old_value = f;
       }
       
     if (f > old_value)
       {
       for(int i = old_value ; i < f ; i += 1)
         {
         myservo.write(i);
         delay(15);
         }
         old_value = f;
      }

   }  

 }
 delay(100);

}


El código lo que que hace es cargar la librería necesaria, recoger en una variable el valor que le enviamos desde la página web, que será el valor de giro del servo. También crea una página web que lo que hace es volver al index.html desde el que le enviamos los datos.
Mencionar que el script está preparado para que el giro del servo sea un poco mas lento de lo normal, que no gire muy rápido.


.

Imprimir

  Adaptar pagina web en codigo de Arduino.
Enviado por: chujalt - 05-03-2021, 21:53 - Foro: Anduino, Nodemcu, Wemos - Sin respuestas

Saludos.

Si vamos a utilizar nuestro Arduino como un servidor de una página web tenemos que introducir el código de la página dentro del código de Arduino. Esto es, cada linea de código html debe ir dentro de:

Código:
client.println("Aquí código html");

Esto se puede convertir en un trabajo muy cansado si la página es amplia y, además, si el código html tiene comillas doble tendremos que "escaparlas" con una barra invertida.

Para los que trabajamos con linux he creado tres lineas de código bash que nos facilitan enormemente la tarea.

Vamos a suponer que tenemos la siguiente página, la cual la llamamos 1.html

Código:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Portal básico - aprenderaprogramar.com</title>
</head>
<body>
<div id="page">
<div id="header">
Portal (Tutorial básico del programador web: HTML desde cero) - aprenderaprogramar.com
</div>
<!-- contenedor -->
<br />
<br />
<br />
<div id="wrapper">
<!-- menu -->
<div id="menu">
<div>Menú</div>
<hr style="color:red; background-color:red; width:50%;" />
<ul>
<li><a href="#">Portada</a></li>
<li>
<a href="http://www.aprenderaprogramar.com">aprenderaprogramar.com</a>
</li>
</ul>
</div>
<!-- fin menu -->
<!-- cuerpo -->
<div id="body">
<form method="get" action="accion.html">
Nombre: <input type="text" name="nombre" /><br />
Apellidos: <input type="text" name="apellidos" /><br />
Dirección: <input type="text" name="direccion" /><br />
Correo electrónico: <input type="text" name="correo" /><br />
Teléfono: <input type="text" name="telefono" /><br />
</form>
</div>
<!-- fin cuerpo -->
</div>
<!-- fin contenedor -->
<br /> <br /> <br />
<div id="footer">
Copyright 2006-2012 aprenderaprogramar.com
</div>
</div>
</body>
</html>

El script bash creará un archivo llamado 2.txt para nuestro código en Arduino.

Las lineas bash a ejecutar una por una serían:

Código:
sed -e 's/\"/\/"/g' 1.html > 2.txt

sed -i "s|^|client.println(\"|g" 2.txt

sed -i "s|$|\");|g" 2.txt


y el resultado final listo para introducir en nuestro código para Arduino es:

Código:
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<meta charset=/"utf-8/">");
client.println("<title>Portal básico - aprenderaprogramar.com</title>");
client.println("</head>");
client.println("<body>");
client.println("<div id=/"page/">");
client.println("<div id=/"header/">");
client.println("Portal (Tutorial básico del programador web: HTML desde cero) - aprenderaprogramar.com");
client.println("</div>");
client.println("<!-- contenedor -->");
client.println("<br />");
client.println("<br />");
client.println("<br />");
client.println("<div id=/"wrapper/">");
client.println("<!-- menu -->");
client.println("<div id=/"menu/">");
client.println("<div>Menú</div>");
client.println("<hr style=/"color:red; background-color:red; width:50%;/" />");
client.println("<ul>");
client.println("<li><a href=/"#/">Portada</a></li>");
client.println("<li>");
client.println("<a href=/"http://www.aprenderaprogramar.com/">aprenderaprogramar.com</a>");
client.println("</li>");
client.println("</ul>");
client.println("</div>");
client.println("<!-- fin menu -->");
client.println("<!-- cuerpo -->");
client.println("<div id=/"body/">");
client.println("<form method=/"get/" action=/"accion.html/">");
client.println("Nombre: <input type=/"text/" name=/"nombre/" /><br />");
client.println("Apellidos: <input type=/"text/" name=/"apellidos/" /><br />");
client.println("Dirección: <input type=/"text/" name=/"direccion/" /><br />");
client.println("Correo electrónico: <input type=/"text/" name=/"correo/" /><br />");
client.println("Teléfono: <input type=/"text/" name=/"telefono/" /><br />");
client.println("</form>");
client.println("</div>");
client.println("<!-- fin cuerpo -->");
client.println("</div>");
client.println("<!-- fin contenedor -->");
client.println("<br /> <br /> <br />");
client.println("<div id=/"footer/">");
client.println("Copyright 2006-2012 aprenderaprogramar.com");
client.println("</div>");
client.println("</div>");
client.println("</body>");
client.println("</html>");


Bueno, como veréis es fácil y puede ahorrarnos mucho trabajo.

Saludos

Imprimir

  Normas del foro
Enviado por: chujalt - 04-03-2021, 02:10 - Foro: Normas del foro - Sin respuestas

Normas de ChuJALT.com:


Ante todo ser educado y respetuoso.
Evita el lenguaje malsonante, no insultes, desprecies, descalifiques, escribas en mayúsculas (significa que estás gritando) ni metas prisa a nadie, esto suele desfavorecer a quien lo escribe.
Sé modesto, evita la prepotencia, que sepas mucho sobre determinado tema no te hace mejor que nadie. Da la información que consideres correcta. Si conoces varias respuestas, ofrece siempre la mejor.

En caso de encontrarse abusos de uso, insultos, agresiones o cualquier tipo de conducta inapropiada y fuera de lugar, no se debe contestar ese tipo de mensajes si no es para indicarle las normas o que esta obrando mal y siempre con educación y amabilidad dando ejemplo,
El usuario que incumpla las normas será avisado y si tras el aviso no desiste en sus insultos, agresiones  o cualquier tipo de conducta inapropiada y fuera de lugar se procederá a la baja del mismo.
Éste es un foro de libre entrada y el objetivo primordial es hacer que los participantes aprendan y disfruten. Las personas que participan aquí lo hacen de manera altruista, con el único fin de ayudar. Recuerda que nadie te obliga ni apresura a participar, así que hazlo de manera correcta, siendo todos-los comentarios de opinión personal y totalmente respetable.


Una cuenta/nick para una persona/usuario.
No se permite usar más de una cuenta ni compartirla con otras personas.


No hacer spam.
No utilices el foro para espamear al resto de los usuarios, ya sea públicamente o por privado, se considera una conducta inapropiada, cualquiera que utilice el foro o sus herramientas para molestar a los usuarios (mail, privados, ...) será expulsado del foro.


Llevarse el contenido de este foro a otro o viceversa.
Si se copia o comparte contenido de este foro en otro site o de otro a este, se pondrán los enlaces al post original de donde se saca el contenido, dando así el reconocimiento merecido al autor, creador - desarrollador, esto no quita que también se le puede pedir permiso si se cree oportuno.


No pedir que respondan por privado. (*)
No pidas que te respondan a una dirección de correo ni por mensaje privado o tratar asuntos que se puedan tratar públicamente, eso iría en contra de la ética del foro, que es ayudar a la comunidad aportando experiencias y conocimiento para todos.
Tampoco envíes tus preguntas por mensaje privado o correo electrónico a los usuarios.

*La excepción a esta regla sería, reportes por incumplimiento de las normas de uso, consultas a los moderadores por acciones relacionadas con la administración del foro.
No revelar información personal públicamente, divulgar datos personales o privados, tuyos y/o de terceros en los foros, direcciones de email, ip's externas, nº de teléfono, imeis, etc.


Buscar antes de preguntar.
Usa el buscador de esta web antes de preguntar. Aunque pienses que tu tema es único, normalmente no lo es. Probablemente haya sido tratado. Por eso, para no sobrecargar los foros y tener la información lo mas reunida posible, te pedimos que busques antes de escribir.  


No se permite la creación de ciertos temas o mensajes.
Está prohibido el uso del foro como medio para la compra/venta de material de segundamano,
También para descarga de contenidos multimedia y/o programas o enlaces a donde este alojado contenido con copyright, tratar temas de desprotección de software o hardware y, en definitiva, para tratar cualquier tema que sea ilegal.
Este foro tiene una temática específica, no se permite la creación de temas pornográficos, contactos, etc. Dichos temas al ser detectados serán borrados de inmediato.
No se permite la creación de temas o mensajes duplicados o repetitivos, no se considera buena conducta abrir varios hilos preguntando lo mismo o peguntar lo mismo en distintos temas con el objetivo de obtener visibilidad y una respuesta más rápida a tu duda o problema.
Los hilos duplicados serán eliminados.
No está permitido trollear buscando mera polémica o tratando los temas de manera vana o perjudicial para los participantes o el funcionamiento del foro, así como tampoco mensajes y temas de carácter político, religioso o deportivo.


Escribir títulos adecuados y descriptivos.
Escribir títulos que corresponda con la temática a tratar en dicho hilo,
No se permiten textos estilo "AYUDA" o "POR FAVOR ECHADME UNA MANO", dado que no informan en absoluto sobre el contenido del mensaje, "el ayuda, no ayuda a nadie" y las mayúsculas no son correctas.
A la hora de usar el buscador se encontrara mas fácil un titulo descriptivo, como también se sabrá de que trata y si interesa el hilo con solo leer el titulo, si el asunto es explícito se facilitará la búsqueda por parte de terceros.


Ser rigurosos con donde se crean los temas, posts y mensajes nuevos.
Publicar en el subforo o apartado adecuado, lo lógico es usar el subforo del modelo de terminal o de la distribución de la cual se va a comentar.Si tienes X duda, consulta o problema, después de usar el buscador y no encontrar un tema donde exponerlo, publica-lo en el lugar más cercano temáticamente, abriendo un nuevo tema.  
Por lo que tema, post o mensaje que no este donde deba, si consideramos oportuno, podrá ser movido sin aviso.


Preguntas diferentes en temas diferentes.
No satures tus mensajes, si tienes varias dudas, consultas o problemas diferentes, no los expongas todos en un mismo mensaje, separa los de diferente temática y cada uno en su tema correspondiente, es mas fácil tratar los problemas por separado que todos en el mismo hilo.
Así como se consulta también se espera que se exponga la solución, dando una explicación de los pasos seguidos y como se soluciono.
Asi se mantendra cierto orden y facilitamos la búsqueda de información a futuros usuarios.


Escribir con propiedad.
El cuerpo del mensaje debe estar bien redactado, usando signos de puntuación y evitando en la medida de lo posible faltas de ortografía y gramática, eso ayuda a que todos nos entendamos(los correctores es una herramienta muy útil), quedando prohibido escribir deliberadamente con abreviaturas típicas de los SMS.
No abuses del resaltado (negrita y/o colores), esto sirve para otros propósitos como destacar puntos importantes, así como no escribir en mayúsculas, ya que indica que estás gritando, ademas de resultar incomodo de leer se entenderá como que estas alterado causando la reacción contraria(a los histéricos no se le hace caso, escribiendo calmado y correctamente conseguirás mejores resultados).
Usa párrafos e intenta ser extremadamente claro con el problema, añadiendo toda la información que puedas, recuerda que no estamos a tu lado ni vemos que ni como lo estas haciendo.
Los usuarios de este foro son hispanohablantes, por lo tanto usa el español.


Procura no desviar la conversación de la temática inicial.
Recordar que se leen todos los mensajes, así que antes de desviar el asunto de un hilo es mejor abrir otro citando al compañero que se le quiere preguntar o comentar por algo que ha escrito y no tiene que ver con lo que se trata en el hilo donde lo ha escrito.


- ChuJALT.com no se hace responsable de los comentarios de los usuarios.

Imprimir