Objetivos
-
- Una vez presentado el WIFI HLK-RM04., empezamos el juego.
- Veremos cómo enviar instrucciones a través de una página Web para realizar acciones en nuestro Arduino
- Usaremos Putty para enviar y recibir información del módulo y nuestro Arduino.
- De nuevo, montaremos un pequeño servidor web para ver las posibilidades del módulo.
- Veremos un par de soportes adicionales muy curiosos para el HLK-RM04.
Material requerido.
[product id=»8820″] | |
![]() |
Un módulo WIFI HLK-RM04, |
[product id=»8652″] | Algunos cables de protoboard, preferiblemente Dupont macho/hembra más una protoboard |
Acceso bidireccional a través de una consola
En la sesión previa dejamos configurado el módulo HLK-RM04 para que aceptara peticiones de servicio Web, y vimos que en cuanto alguien se conectaba por el puerto previamente definido, el 8080, recibíamos un aviso puntual de ello en la consola:
Pero tal y como vimos en las sesiones previas con el módulo WIFI ESP8266, esto no nos permite la comunicación bidireccional, porque solo podemos pasarle mensajes al servidor, pero no al revés.
Podemos usar esto para pasar parámetros al servidor Web y que encienda unos LEDs por ejemplo sin más que en la dirección que le pasamos el navegador, añadir los parámetros:
http://192.168.1.254:8080/P13=1
Que podemos rastrear en lo que recibimos por la consola, tal y como vimos en “Usando el módulo WIFI ESP8266” y que hará que recibamos algo así:
Del mismo modo, es igual de sencillo establecer una comunicación bidireccional desde un terminal como Putty
Donde cualquier cosa que tecleemos se envía a la consola de Arduino y de esta a Putty
De nuevo podemos usar este sistema, como un modo de control desde nuestro pc de cualquier proyecto que incluya WIFI.
No hay diferencia entre el programa para este módulo y los programas que usamos con el ESP8266, ya que la comunicación es vía puerta serie exactamente igual, con una excepción importante: Los comandos AT son diferentes y por eso vamos a verlos un poco ahora.
Comandos AT en el WIFI HLK-RM04
Cuando iniciamos el módulo, este arranca en lo que el fabricante llama modo transparente, es decir, que todo lo que viene vía TCPIP lo envía limpio de polvo y paja a la puerta serie y viceversa.
Para poner el módulo HLk-RM04 en modo comando AT, parce que hay dos modos. Uno que se menciona en el manual, mantener el pin de Reset, el número 10, que ya conocemos, más del tiempo Tes de 100 mili segundos y menos del tiempo de Reset que es de 6 segundos (Si no hemos cambiado la configuración)
Podríamos usar esto con el mismo circuito y programa que usamos para Resetear el módulo a sus valores de fábrica cambiando la configuración del delay, pero parece que hay otro sistema de enviar ciertos textos con unos tiempos predefinidos, con lo que entraríamos directamente en modo de comandos AT.
- Encontré este método y función en algún sitio de Internet que he perdido, pero no tengo ni idea de donde sale, porque en mi manual no habla de ello, en absoluto, pero parece que funciona.
Aquí tenéis la función que hace entrar al módulo HLK-RM04 en modo AT:
void exitTransparentMode() { Serial.println("Exiting Transparent Mode..."); delay(500); Serial3.write("+"); delay(20); Serial3.write("+"); delay(20); Serial3.write("+"); delay(500); Serial3.write(0x1b); delay(20); Serial3.write(0x1b); delay(20); Serial3.write(0x1b); delay(20); Serial3.write(0x0d);//not documented, but seems to need CR here delay(500); Serial3.write("at+ver=?\r"); }
Vamos a repetir el diagrama de conexión de la sesión anterior para los más vagos (Yo incluido):

Y aquí tenéis un programa que ejecuta esa función y abre la comunicación entre el módulo y nuestro Arduino, reenviando los mensajes de la puerta del módulo a las puertas de Arduino y viceversa. Prog_78_1 , Una vez que lo volquéis al Mega, deberíamos estar en modo AT.
Tened en cuenta en primer lugar que en estos módulos los comandos AT se deben escribir en minúsculas (¿Qué pasa? ¿Vosotros no tenéis ninguna manía?)
El primero para ver la versión de Firmware instalada:
at+ver=?
Y si queréis saber el modo de trabajo:
at+netmode=?
Donde en la respuesta, 0 es el default setup, 1 modo Ethernet y 2 modo client WIFI y 3 punto de acceso. Para conocer la configuración del TCPIP, usamos
at+net_ip=?

Podemos usar estos comandos AT para fijar el valor de los parámetros en lugar de consultarlos, cambiando la interrogación de las instrucciones anteriores por los parámetros a fijar en el módulo. Por ejemplo:
at+netmode=2
Hay un montón de comandos AT y no es cuestión de probarlos aquí, pero si descargáis el manual del módulo, encontrareis una lista extensiva de ellos: HLK-RM04-user-manual
Servidor Web con el módulo WIFI HLK-RM04
Vamos a ver como montar un pequeño servidor Web para publicar las lecturas de las puertas analógicas. Partiremos del programa que escribimos en la sesión previa “Servidor Web con WIFI ESP8266” y lo modificaremos un poco para adaptarnos al nuevo módulo.
La principal diferencia es que mientras el ESP8266 necesitaba un comando AT+IPSEND para enviar un puñetero String a la puerta serie, el Modulo WIFI HLK-RM04 actual es transparente y enviara por TCPIP cualquier cosa que reciba.
Así que vamos a simplificar un rato el programa del ESP8266, porque no se requiere la mitad de la complicación que tuvimos que montar. Aquí tenéis el programa servidor, al que le hemos quitado, todo el envío de comandos previos: HLK-RM04
El mismo esquema para detectar en Serial3, movimiento, cuando llega algo, llamamos a webserver:
void setup() { Serial3.begin(57600); delay (1000); } void loop() { while (Serial3.available() >0 ) { char c = Serial3.read(); if (c == 71) { webserver(); delay(500); } } }
Y en cuanto a webserver:
void webserver(void) { Serial3.println("<!DOCTYPE HTML>"); Serial3.println("<html>"); Serial3.println("<head><title>LECTURAS ANALOGICAS.</title>"); Serial3.println("<meta Serial3.println-equiv=\"refresh\" content=\"15\"></head>"); Serial3.println("<body><h1> Situacion Ambiente</h1>"); for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); Serial3.println("analog input "); Serial3.println( String(analogChannel)); Serial3.println(" is "); Serial3.println(String(sensorReading)); Serial3.println("<br />"); } Serial3.println("<p><em> La página se actualiza cada 15 segundos.</em></p></body></html>"); }
En la que simplemente enviamos a través del Serial3, los textos que corresponden a generar la página Web que describimos allí.
Al final es aún más fácil, porque eliminamos toda la complicación para enviar textos a través del WIFI y resulta trivial de nuevo. Aquí tenéis un volcado del resultado:

Más modos del WIFI HLK-RM04
Al principio de la configuración del módulo, os pedí que seleccionarais como NetMode WIFI Client, y si volvéis allí (Poniendo 192.168.1.254) y desplegáis los modos disponibles, veréis algo así:
Podéis ver el modo ya conocido de cliente WIFI, pero ¿Qué es eso de ETH+Serial?
Pues básicamente, que si usáis un soporte externo adicional para este modulito os podéis configurar un Ethernet a Serie como su nombre indica, y lo que es más, dispone de dos puertas Ethernet que parece indicar que nos permitirían configurar un Router Ethernet más conexión WIFI al mismo.
No he tenido mucho tiempo aun para jugar con ello, porque acabo de recibir uno de estos chismes, pero espero que si hay ocasión volveremos a hablar del asunto.
El único problema que le veo a este módulo, es que anda escaso de documentación y de ejemplos de posibilidades. Por lo demás, la única limitación que le encuentro es que una puerta Ethernet es de 100 Gbits hoy día como mínimo y nosotros estamos usando una puerta seria 57.600 bits, así que no vais a descargar pelis por aquí.
Si queréis usar este módulo en serio, es imprescindible que uséis un Mega, que tiene puertas hardware y que subáis la velocidad al menos hasta 115.200 ( A los que el uno llegara muy joiamente) pero el Mega lo tengo probado hasta el doble sin problemas.
- Sí señor, el Mega alcanza sin problemas velocidades de 230.400 bits por segundo, que es la velocidad a la que suelen ir las impresoras 3D del tipo RepRap que se basan en él.
Y por si aún os parece poco lo de este modulito dispone también de un Shield para ponerlo a la espada de nuestros Arduinos y dotarlos de conexión WIFI (Lentorra, eso sí)
En resumen una sorprendente pieza de hardware, con unas capacidades camaleónicas, a la espera de encontrar utilidad y por si fuera poco a un precio muy bajo tanto el modulo como los soportes adicionales. Tengo mucha curiosidad por ir viendo lo que hace la peña con ellos
Resumen de la sesión
-
- Vimos como montar la comunicación con el módulo HLK.-RM04, tanto unidireccional como bidireccional.
- Vimos cómo poner el modulo en modo comandos AT, y jugamos con un par de ellos.
- Montamos de nuevo un pequeño servidor web para ver las posibilidades del módulo.
- Presentamos varias opciones disponibles de soportes para este sorprendente módulo
Hola sergio, Hace mucho que no pruebo este modulo, pero fijate que el 8080 parece ams el puerto en el que colocas el servidor que la IP
cordial saludos
Tuve la oportunidad de comprar el modulo y su respectiva base,
estoy intentado probar el programa y pues hasta donde lo puede monitorear, el
logra entrar hasta la sub-rutina de void webserver(void)
pero no se logra evidenciar que la pagina carge y se visualice, desde el pc donde le doy la IP:8080
que problema estare teniendo?
y por otro lado no entiendo para que preguntas por if (c == 71)
Hola Sergio, no se si comprendo tu problema. ¿Envias por tcpip, en cuyo caso no entinedo el com? o envias por com y entonces no entiendo el problema
Cordial saludos
De antemano quiero darle un 10 al admin, por este excelente aporte, lo he probado y funciona excelente.
pero actualmente compre dos modulos HLK.-RM04, con sus respectivas bases para RS232 y me los conecto
a un convertidor de RS-232 a USB y me asigna el com2 y com4, ambos configurados como clientes, hice
ping entre el pc y cada uno de ellos y la respuesta en positiva, ademas ingreso desde el pc una direccion ip
seguida del puerto 8080 y ademas le adiciono un mensaje y lo recibo eficientemente en cualquiera de los COM
(192.168.0.10:8080/hola mundo).
Pero el inconveniente lo tengo es cuando atravez de cualquiera de los puerto COM envio un mensaje con las respectiva
codificacion de la IP y no veo el mensaje en el otro COM.
Ejemplo
Desde el COM2 con IP 192.168.0.10 envio => 192.168.0.20:8080/hola mundo
por lo cual en el COM4 no veo que llega el mensaje.
por favor quedo atento a cualquier ayuda o apoyo.
Hola Nando, pues me temo que no te puedo decir mucho porque hace ya mucho tiempo que probe este modulo y actualmente no dispongo de el. Lo siento
En primer lugar mis felicitaciones por estos fantásticos «tutos».
Mi pregunta va en relación a los leds que incorpora el módulo. ¿Qué función indican los leds 2 y 3?
Hola y ante todo gracías. Y si es cierto hay algún jubilado siguiendo el curso.
A los que, como yo, han empezado desde el principio este tutorial (He realizado todas
las prácticas, excepto unas pocas que estoy a la espera del material) y le van dando
a «Siguiente» se encuentran (como el caso de Jaume y su comentario) con el error del
enlace «Siguiente» de la sesión «29 Sensor de temperatura y ventilación» que en lugar
de llevarte a la 29B, te lleva a la «78 Jugando con el HLK-RM04».
De ahí la confusión de «Jaume» que no entiende cuando hablas de una sesión anterior,
esta en el apartado de Comunicaciones, fuera de hilo.
De nuevo gracias y yo sigo.
No veo porque no, Claus, y ademas el HLk es un modulo de 3.3V asi que deberia funcionar sin problemas aunque no l
Se puede usar el DUE en vez del MEGA?
Gracias, admin, ya he localizado los tutos que faltaban. Ni estría de más que lo apuntases en la sesión, más que nada por que es un salto en la línia de los tutos que no se espera.
Venga, gracias y voy a ello.
salu2
jaume
Hula Jauma, NO, lo siento, pero naturalmente puedes seguir los tutos del esp8266 que hemos probado a fondo
Hola jaume, si miras aqui veras que hay dos sesiones sobre este modulo wifi
https://www.prometec.net/comunicaciones/
Se me olvidaba, tengo un módulo wifi inalambrico, para el Mega, ESP8266 (ESP-01), ¿podré seguir el tema con él?
Gracias, admin.
Hola, admin, ¿me estoy volviendo loco, o falta una sesión? Al principo dices que «En la sesión previa dejamos configurado el módulo HLK-RM04 para que aceptara peticiones de servicio Web, y vimos…» La sesión anterior, que acabo de terminar, era sobre el sensor de temperatura y el ventilador… ¿Que me he perdido? ¿o es que de tanto arduinear ya no se por donde navego?
Gracias por la ayuda
Hola Victor, entiendo muy bien tu frustracion proque a mi me mareo lo suyo y hasat lo condené al rincón una temporada, pero al final volvi con el y consegui usarlo.
No reconozco el patillaje de la imagen que me envias, pero se que hay varios modulos de este tipo y que ademas se puede reprogramar el firmware con lo que e sdificil darte una respuesta.
De todos modos yo buscaria el manual de tu modelo exacto en la red y despues entender cual es el pin de reset porque seguro que hay uno.
buenas tardes,,, el modelo que yo tengo tienen estas tablas de conexiones.. , con lo que no veo modo de resetearlo… ademas despues de 4 horas,, apenas entre unos segundos en la direccion de configuracion, ya que salvo esos segundos no me aparece en las busquedas de wifi…. necesito ayuda, ya que estoy estresadisimo con este tema,. Gracias
Hola de nuevo:
Al fin he conseguido que me funcione,pero tengo un problema.Al acceder con mi navegador,me sale la pagina HTML perfectamente,pero el navegador no se cierra,¿sabe de que forma podría cerrar la conexión?por ejemplo con el internet shield seria con micliente.stop(); aquí no tenemos librería.agradeceria su comentario.Siga haciendo tutoriales tan estupendos.