ChuJALT
Aporte: Enviar mensaje de texto a Arduino vía wifi con HLK-RM04 - Versión para impresión

+- ChuJALT (https://chujalt.com)
+-- Foro: PLACAS DE PROTOTIPOS Y MINI PC'S (https://chujalt.com/forum-22.html)
+--- Foro: Anduino, Nodemcu, Wemos (https://chujalt.com/forum-23.html)
+--- Tema: Aporte: Enviar mensaje de texto a Arduino vía wifi con HLK-RM04 (/thread-13.html)



Enviar mensaje de texto a Arduino vía wifi con HLK-RM04 - chujalt - 05-03-2021

Saludos.

Os voy a mostrar como mandar mensajes (strings) a una placa arduino vía wifi desde un PC, tablet o smartphone.

Materiales utilizados: 
  • Una placa Arduino (yo he utilizado la Uno)
  • Un módulo wifi HLK-RM04
  • Una pantalla lcd I2C 16X2
  • 8 cables dupont

[Imagen: WIFI-HLK-RM04.jpg]

[Imagen: lcd_i2c.jpg]




Conexiones: 
  • Pin RX del módulo HLK-RM04 a pin TX de Arduino.
  • Pin TX del módulo HLK-RM04 a pin RX de Arduino.
  • Pin 5V del módulo HLK-RM04 a pin 5V de Arduino.
  • Pin GND del módulo HLK-RM04 a pin GND de Arduino.
  • Pin SDA del lcd a pin A4 de Arduino.
  • Pin CSL del lcd a pin A5 de Arduino.
  • Pin VCC del lcd a pin 5V de Arduino.
  • Pin GND del lcd a pin GND de Aruino.


Software necesario:
  • Una página web para mandar el mensaje.
  • El código para la placa Arduino.


Código para página web:


Código:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>mandar Mensaje</title>
</head>
<body>
<p align="center">
<font size="8">
</p>
<form name="input" action="http://192.168.1.254:8080/mensaje" method="get">
Introduce texto: <input type="text" name="f">
<input type="submit" value="Submit">
</form>
</body>
</html>


Como veis el código es muy simple, tiene sólo lo indispensable para que funcione.
Lo importante es el action del formulario, que apunta a la dirección ip del módulo HLK-RM04 por el puerto 8080 y a una página llamada mensaje, que en realidad no existe pero lo recogerá nuestra placa Arduino y el method, que tiene que ser get, esto es que mandará el mensaje a través de la url. También en el campo de texto, que lo llamamos f para que recoja la variable y envíe el mensaje a través de ésta a nuestra placa.



Código para la Arduino:

Código:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  

void setup() {    
 Serial.begin(57600);  
lcd.begin(16,2);  
 lcd.backlight();
}

String f = "";
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\r\n")) {
       has_request = true;  break;
     }
   }  
 }
 if (has_request) {
   char i1 = in.indexOf("GET /mensaje?f="), i2;
   if (i1 != -1) {
     i2 = in.indexOf(" ", i1+15);
     f = in.substring(i1+15, i2);
   }
   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;
   lcd.clear();
   f.replace("+", " ");
    lcd.print(f);
 }


}


Este código básicamente lo que hacer es, primero cargar las librerías necesarias, iniciar la comunicación de arduino con el módulo wifi e iniciar la pantalla lcd, recoger el valor de la variable (mensaje) que le hemos enviado, enviar una página web muy básica para que el navegador vuelva a la página de enviar mensajes, imprimir el mensaje en la pantalla lcd.
Cabe destacar que las url no admiten los espacios en blanco, por lo que nuestro navegador, si el mensaje los contiene los sustituirá por el signo +, si nuestro mensaje es "Hola Juan" en la pantalla del lcd imprimirá "Hola+Juan", el código también sustituye los signos + por espacios en blanco para que nos imprima "Hola Juan".

Bueno, espero que le sirva a alguien Guiño