bclose

El módulo WIFI HLK-RM04

Otra forma de acceder a WIFI atraves del puerto serie

Objetivos

 

 
    • Presentar el módulo WIFI HLK-RM04.
    • Entrar en detalle en la configuración básica.
    • Montar un pequeño circuito con él para comprobar que se comporta como es debido.
    • Ver como resetearlo cuando os de problemas.
 
 

Material requerido.

Vista frontalArduino UNO o MEGA.
Soc TCPIP con LinuxUn módulo WIFI HLK-RM04,
conexionesAlgunos cables de protoboard, preferiblemente Dupont macho/hembra más una protoboard
tienda online prometec

Presentando  el módulo WIFI HLK-RM04

 

En sesiones previas, ya vimos el módulo WIFI ESP8266, que en muchos aspectos es muy similar al que nos ocupa hoy HLK-RM04, porque al igual que aquel convierte el WIFI a puerta serie y el manejo es similar, pero también hay diferencias importantes que conviene conocer.

Lo primero que salta a la vista es que la documentación del fabricante chino es un auténtico barullo, con malas traducciones al inglés y omisiones clamorosas de información, y tampoco ayuda mucho que no hay demasiados ejemplos detallados por ahí de cómo usar el módulo de marras.

Por eso voy a excederme un poco (Espero que no mucho) en detallar en este capítulo la configuración del módulo WIFI, porque a mí me ha dado guerra el tema como pocos, y he perdido mucho tiempo revisando páginas por ahí. Así que voy a intentar evitar el problema a los sufridos lectores que no hayan tenido la precaución de irse.

En primer lugar tenemos que decir que este módulo no es un adaptador WIFI para tu Arduino, sino un micro PC (Ahora se llaman SOCs, ele ahí) corriendo un Linux OpenWrt similar al que incluye el Arduino Yun y que incorpora un módulo WIFI.

 
  • El módulo HLK-RM04 acepta la distribución OpeWrt y podéis volcarle modificaciones de esta distro o actualizarla de un modo similar a como lo hacéis con cualquier distro normal de Linux.
  • Eso incluye cargarle vuestros propios programas en Python o PHP, por ejemplo, lo que abre posibilidades muy interesantes a muy bajo coste.
 

Es el micro PC el que gestiona toda la conexión a la WIFI y gestiona la pila (Stack) TCPIP, con lo que encima tenemos la ventaja de quitarnos de encima la gestión en Arduino de toda esa historia.

Pero… ¿Y entonces como nos comunicamos con el HLK-RM04? Pues tranquilamente a través de una puerta serie que incluye.

De hecho, lo que hace este modulito es gestionar la conexión WIFI de forma autónoma y enviar a nuestro Duino lo que le entra por TCPIP y nos lo convierte, limpio de polvo y paja, a datos en nuestra puerta serie y viceversa (En esto es igual que el módulo ESP8266 que vimos en las sesiones previas).

Esto tiene el inconveniente de que nosotros no vemos la WIFI, sino una puerta serie. Y a cambio nos despreocupamos de la gestión de la conexión y del transporte de datos liberando memoria y tiempo de Arduino para nuestras cosas.

A diferencia del ESP-8266 el modulo HLK-RM04 dispone de un servidor web en una dirección concreta que podemos usar para configurar los datos de la conexión y por si esto se queda corto, podemos usar, además,  comandos AT (Os acordáis aun de ellos) para configurar vía el puerto serie distintos aspectos.

Lo primero necesitamos conectar el HLK-RM04 a nuestro Arduino y aunque es un módulo con un montón de pines no hay que asustarse. Solo se necesita conectar 4 a nuestro Arduino.

 
  • Vale la pena indicar aquí, que la distancia entre pines del módulo HLK-RM04, no permite insertarlo en una protoboard, por lo que necesitaras cables Dupont macho/hembra.

 

Como siempre, conviene que le echéis un vistazo a la hoja de características. Aquí tenéis el pinout del modulo

Patillaje del WIFI HLK-RM04

La conexión a un Arduino UNO o MEGA es tan sencilla que ni siquiera compensa dibujar un diagrama de conexión.

Arduino5VGND3 (Rx)2 (Tx)
HLK-RM041220 (Tx)21 (Rx)

De nuevo, he visto varios ejemplos en Internet que piden que lo conectemos a los pines 0 y 1 de Arduino para aprovechar la puerta serie, pero aquí no vamos a hacer eso si podemos evitarlo. Solo faltaría andar desconectándolos cada vez que queramos reprogramar el Arduino.

Así que si queremos usar un Arduino UNO usaremos la librería SoftwareSerial, como es habitual y por eso conectamos a los pines digitales 2 y 3 de nuestro Duino,pero como yo soy vago homologado, voy a usar un MEGA porque me va a dejar subir la velocidad mas y poder probar el modulo dándole caña.

Pero antes de escribir el programa de gestión de Arduino, vamos a necesitar configurar el módulo HLK-RM04 a nuestros intereses. Vamos a ver cómo.

 

Configurando el  HLK-RM04

 

Para poder probar el módulo basta con que enchufes los pines 0 y 1 del módulo a 5V y GND respectivamente. Con esto el chip se activara y ya podremos buscarlo en la WIFI.

Cuando arranca por primera vez está en la dirección 192.168.16.254 y además se configura como un Router WIFI. Eso significa que no necesitas cambiar tu IP para buscarlo, si no que si configuras tu IP por DHCP bastará con que busques un Router que se llamará algo así como Hi-LINK-xxxx, en mi caso es HI-LINK_8835.

Imagen de seleccion en Windows

Conéctate a él con la clave por defecto: 12345678.

Con ello te habrás conectado al módulo que por defecto está configurado como un Router WIFI.

Ahora vamos a conectarnos al servidor Web del módulo. Para ello abre tu navegador y llévale a la dirección IP 192.168.16.254. Si no hay problemas te pedirá un usuario y password para conectarte al Router. Usa:

     Usuario: admin

     Password: admin

 

Si todo va bien verás la pantalla de bienvenida  del Router:

Entrando al modulo

Tenemos ahora que configurar unos pocos parámetros. Lo primero es seleccionar el NetMode, porque este curioso módulo, puede funcionar de varios modos:

 
  • Cliente WIFI a puerto serie.
  • Punto de acceso WIFI.
  • Cliente Ethernet a puerto serie, para lo que necesitamos un adaptador adicional.
 

Vamos a seleccionar WIFI (Client)-Serial, para que se pueda conectar a nuestra WIFI principal. Veréis algo como esto:

Accediendo a la configuracion

Ahora tenemos que configurar el acceso WIFI a nuestra red. Pulsa en el botón SCAN para localizar WIFIs, selecciona la que corresponda y pulsa Apply.

Seleccion de WIFI
 
  • El modulo por sí mismo no tiene antena WIFI, (aunque si un conector para una antena estándard) y necesitaras tener buena señal WIFI o te puede dar problemas para descubrir las redes.
  • Puedes conectarle una antena típica al conector del que dispone y mejorará mucho la recepción.
 
Detalle de conexion

Configura ahora, los parámetros de tu WIFI: Contraseña y tipo de encriptación.

Dependiendo de si vas a utilizar tu modulo como cliente o servidor WEB, te interesa configurar tu IP por DHCP o bien con dirección estática respectivamente. En mi caso he elegido una dirección IP estática: 192.168.1.254 de mi subred y he configurado la dirección de mi Router y DNS primario. Asegúrate de configurar correctamente todos estos valores o tendrás problemas a la hora de conectar.

También he elegido configurar la velocidad de comunicación serie en 57600, 8, n, 1. SI vas a usar un UNO para conectar no te conviene pasar de esta velocidad para evitar problemas, pero con un MEGA o DUE que tienen puertas hardware puedes subir esta velocidad.

Configuramos además, el puerto donde atenderá los servicios de red como el 8080 (En el 80 sale siempre la página de configuración del módulo, y no he visto como cambiarla).

HLK-RM04

Pulsa el botón de Apply, y listo. Perderás la conexión con el modulo porque cambia de dirección IP y deja de ser punto de acceso WIFI, así que te desconectará.

 
  • Un punto que tienden a olvidarse de decirte en Internet, es que aparentemente, para activar la configuración nueva, hay que apagar y encender el modulo ( Y darle al menos 30 segundos para que arranque).
 

Vuelve a conectarte a la red local, bien por WIFI o por Ethernet y ya deberías poderte conectar al módulo desde tu red, accediendo a su nueva dirección IP local. En mi caso 192.168.1.254:

Pantalla web

 

Si algo falla y no ves el módulo: Reset   

Si no consigues conectarte al módulo, no te asustes todavía. Podemos resetearlo para que vuelva a su condición inicial. Para ello tienes que saber que según el manual del fabricante hay que poner el pin 10 del módulo a GND durante no menos de 6 segundos (Recordad que cuando todo falla, es que hay que leerse el manual).

Como a mí, me ha estado mareando continuamente, acabé, haciendo un programa para resetear el modulo, porque eso de mirar cómo pasan 6 segundos me acaba cabreando.

ESquema de conexion en protoboard

Aquí tienes el programita para Resetear el módulo:

//#include <SoftwareSerial.h>
//SoftwareSerial BT1(3, 2); // RX | TX

void setup()
  {   Serial.begin(9600);
      pinMode(7,OUTPUT);
      digitalWrite( 7 , HIGH);               // Levanta el pin 7
      delay(1000);
      Serial.println("Reseteando el modulo WIFI HLK-RM04 ");

      digitalWrite( 7 , LOW);                // Iniciamos el Reset
      Serial.println("Iniciando reset...");
      delay(6500);
      digitalWrite( 7 , HIGH);               // Volvemos alevantar el pin 7

      Serial.println("HLK-RM04 reseteado OK");
   }

void loop()
{ }

 

Para probar la comunicación   

Cuando puedas, accede a su dirección IP de nuestra red local, ya solo falta comprobar que la puerta serie comunica correctamente con nuestro Duino. Para ello conecta los hilos de comunicaciones entre el módulo y tu Arduino:

ESquema de conexion en protoboard

Carga ahora este programa de comunicaciones en tu Arduino, que lo único que hace es enviar y recibir todo que llegue a las puertas serie:

//#include <SoftwareSerial.h>     //Si tu Arduino es UNO o similar descomenta esta linea
//SoftwareSerial Serial3(3, 2); // RX | TX y  crea una instancia de Softwareserial

void setup()
  {  Serial.begin(57600);
     Serial3.begin(57600);
  }

void loop()
  {  if (Serial3.available())
         { char c = Serial3.read() ;
           Serial.print(c);
         }

     if (Serial.available())
         {  char c = Serial.read();
            Serial3.print(c);
         }
  }

Solo falta ya acceder al puerto 8080 de la dirección IP del modulo:

Conexion al modulo WIFI HLK-RM04

En la consola serie de Arduino deberías ver algo parecido a esto:

Conexion de un cliente WEB

Tenemos activado un servidor Web en el módulo HLK-RM04, que nos reenvía los datos a través d la puerta serie. No está mal para un módulo de menos de 20€

En la próxima sesión haremos algún ejemplo de prueba para ver cómo manejar el acceso WIFI de este modulito.

 

Resumen de la sesión

 

 
    • Presentamos las características básicas del módulo HLK.-RM04.
    • Vimos cómo hacer la configuración básica del módulo y como Resetearlo cuando se pierda (Que si os pasa como a mí, se os perderá).
    • Usamos una conexión básica con Arduino y un programa habitual para reenviar las lecturas de las puertas series.
    • Hemos comprobado, finalmente, que la conexión es correcta y la comunicación fluida en ambas direcciones.

 
 
 

 

 

 

 

 

(25) Comments

  • Hola de nuevo, admin, he cargado los dos programas, el de resetear y el programa de comunicaciones. No me compilaba, hasta que he descomentado las dos primeras líneas:
    //#include //Si tu Arduino es UNO o similar descomenta esta linea
    //SoftwareSerial Serial3(3, 2); // RX | TX y crea una instancia de Softwareserial

    Pero el caso es que lo probaré con una placa MEGA, no con una UNO.

    Si intento cargarlo sin tocar nada, tal como viene, me dice esto:

    ‘Serial3’ was not declared in this scope

    Funciona correctamente el programa?

    gracias, admin

    • Hola Jaume, mucho mejor el Mega sin duda. El UNO solo tiene una puerta serie por hardware en los pines 0 y 1, que se usa para comunicar con tu PC a traves del USB y por eso, para no bloquear esa comunicacion usamos otros pines y hay que definir un puerto serie por soft con la libreria al caso

      Pero el mega tiene tres puertas comm hardware y no necesitas cargar la libreria, sino que puedes usar las puertas comm, que se llaman Serial1, Serial2 y Serial3. Segun donde conectes tu programa dira Serial3.println() o Serial2.println ¿Vale?

      • Bien, de acuerdo, gracias, admin, a ver si este fin de semana puedo ponerme… Ya he solucionado el problema, resulta que el sketch lo tenía activado para Arduino UNO. Al cambiarlo per Arduino MEGA me compila perfecto… No había caido.

        Gracias, admin

        salu2

    • Jorge

    Hola, primero que todo realmente agradecido por que te das el tiempo de ir registrando y publicando este material, que para muchos nos sirve no sabes como!!.

    Haber si me puedes ayudar. Conecto 5V del arduino al pin 1 del Hlk-rm04 y el GND al pin2 . Prende la led roja nada mas y no encuentro nunca la señal de wifi. Actualmente el chip no tiene antena, ¿Crees que sea el problema? lo he buscado estando al lado del hlk y nada, no veo la red wifi. solo la led roja.

    alguna idea?

    • Hola Jorge, Me imagino que si das tensión y conectas los hilos de comunicación, si no ves nunca la wifi solo puede ser por avería o bien porque la señal sea débil. Yo tuve que poner antena porque sin ella no conseguía ver nada. Comprate una que no valen mas alla de 3 o 4 euros y te mejorara mucho la ecepcion

  • Buenas Admin,

    Viendo esta entrada e inmerso en mi proyecto me gustaría lanzar una pregunta. ¿Hay algún shield o componente para Arduino que establezca una red Wifi? He pensado, de esta manera combinando Arduino, Raspberry pi y un movil Android, conectar Rasperry pii a la red que Arduino crease, transmitir video mediante VLC y desde el movil android reproducir dicho contenido de streaming conectandolo a la misma red de Raspberry pi.

    • Poperes

    para todos que quieran manipular mas profundo el RM04 esta la opcin de entrar al modulo 192,168,16,254/home.asp

  • Hola a todos, para los que no han podido conectar este módulo, debo decir que hay un error con la configuración de los pines que amablemente nos proveen, el pin 20 en realidad es RX y el 21 es TX, además es necesario saber que la imagen del chip mostrando los pines, no es claro si la númeración es viendo de frente los chips o viendo de frente la cara frontal donde aparecen los leds, segun información del manual el pin número 1 es el primer pin justo despueés de los tres leds, yo cometí el error de interpretar los pines al revés:
    http://www.prometec.net/wp-content/uploads/2015/01/HLK-RM04-user-manual.pdf

    • Muchas gracias por la correccion Tommy

  • Hola maestro!

    Tras dos dias probando como ya le he dicho antes, por “arte de magia” he conseguido hacerlo funcionar…

    Si le contará que tardé 2 horas en conseguir resetearlo… jajaja que cruz!

    No querria caer en rutina, pero…

    Como le digo consigo hacer cliente el modulo, puesto que pongo la IP asignada y consigo acceder al menu de configuración al que antes se accedia con la IP de la puerta de enlace predeterminada de la placa, por ende deduzco que la operación esta bien.

    El problema viene cuando intento acceder mediante IP/8080, me da el siguiente error:

    Access Error: Site or Page Not Found

    Cannot open URL

    No entiendo muy bien, la configuración se guarda, porque la puedo ver. Hago PING y todos los paquetes TTL llegan sin problemas, me conecto mediante TELNET y la conexion la realiza bien.

    Pero cargo su programa, conecto los pines como dice en su esquema (que por cierto, cambia respecto a los pines que pone al principio en la tabla, solo el tx2 por el tx3, para que vea que lo he mirado y fijado bien 😛 ). Puede usted comprender el porque de ese error y que el arduino no realice sus funciones cuando lo intento con la IP/8080?

    Muchas gracias maestro!

    Por cierto, gracias por su dedicación y explicaciones.

    • Jajaja me alegro de que vayas avanzando Jon. Está claro que tienes comunicación TCPIP y una dirección asignada pero ese error indica que no has arrancado el modo servidor en el módulo.
      Asegúrate de que tienes asignado el “Network Mode” a server porque no parece que sea mucho más grave

        • Jon

        Nada maestro, la configuración está tal cual la suya. Hubo una vez que puse la direccion que le comento y empezo una “descarga” de algo, pero se queda cargando el inicio eternamente….no se, me ha llegado el ESP ya, pero…lo mismo da XDDD Creo que voy acabar por pasarme a ethernet, fruto de la desesperación xDDD

        Me da pena por el tiempo y dinero invertido, pero bueno.

  • Maestro, tengo problemas con la configuración inicial del modulo hlk rm04.

    No queria molestarle pero me encuentro un poco desesperado, siento de verdad las molestias.

    Consigo acceder al menú de configuración, el problema viene cuando intento asignarle un IP estatica como hace usted. Yo presupongo que hago algo mas, en algun paso previo que no aparece en el tutorial y que se presupone sabido, pero parece ser que yo no lo se 🙁 He intentado asignar la IP que me da el ordenador: No funciona. He probado a reservar una IP en el equipo: No funciona. He intentado reservar una IP en el router: No funciona.

    Por eso le digo, que doy por hecho que que la culpa es mia.

    Pero si usted pudiera ahondar un poco en el tema de la IP estatica de nuestra subred que le asignamos al modulo, me haria un gran favor, porque llevo dos dias enteros intentandolo de todas las formas que se me ocurre (que no son muchas y no soy capaz).

    Si puede explicar esa parte para dummies, se lo agradeceria mucho,de verdad.

    De ante mano gracias por la atención y por las molestias.

    • Jon, te aseguro que con pocos chismes he estado mas tentado de estampanarlo contra la pared que con este modulo HLK rm04. De hecho lo abandone y volvi por casualidad al cabo de un par de meses.
      Te aseguro que todo lo que necesitas esta en la sesion del tutorial, y recuerdo que era un autentico calvario asignar la IP estatica porque al intentarlo se reseteaba, perdia la direccion y mareaba con ganas.
      De hecho hay un apartado especifico sobre como resetera el jodido modulo porque me volvio loco, pero al final vas encontrando el punto y de repente en un momento funciona.
      Te recomiendo que te tomes algo y sigas intentandolo porque te acabara saliendo, pero si te puedo dar un consejo, asegurate de que la señal de tu router WIFI es fuerte cuando programes el dichosos modulo. A mi se me resolvio cuando le puse una antena externa
      Un saludo

    • Marco

    Hola, muy buena la informacion pero tengo algunas dudas, porfavor si me pueden ayudar
    Necesito saber si este modulo lo puedo conectar a una red local sin internet en modo cliente.
    Es compatilbe con arduino uno R3? como lo conecto…
    Gracias

    • Hola Marco, claro que lo puedes conectar a la red local…mediante wifi, o usando un adaptador a ethernet que s evende aparte y cuya foto os pongo al final de algun tutorial.
      Y en cuanto a como conectarlo al Arduino UNO R3 esperoque la sesion sea lo suficientemente eplicativa porque sino estoy perdido

        • Marco

        Muchas Gracias por la respuesta, a decir verdad ya adquirí los equipos pero aun no llegan a mis manos para poder probarlos.
        Tengo una gran duda quizá me puedas ayudar porfavor.
        Explicare un poco el escenario.
        Tengo un sensor de temperatura integrado en una protoboard con un arduino 1 y también pienso sumar a esto el modulo WIFI
        Mi interrogante es saber si es posible enviar un ICMP Ping con esta shield via wifi en una LAN a un determinada Pc de escritorio cuando el sensor de temperatura detecte calor mayor a 15 grados por ejemplo.
        Esa es mi pregunta. Espero que me haya dejado entender.
        🙂
        PD: Claro que habrá un código de por medio, es posible integrar estos módulos para recibir una alerta (PING)

        Gracias por tu respuesta.

        Ah…Buen aporte el tuyo. Claro que se te entiende…!!! 🙂

        • Marco, seguro que esosible enviar un ping de un sitio a otro mediante las librerias disponibles, pero seria mas logico usar un socket tcp o udp para enviar un mensaje de texto
          Si no recuerdo mal los ejemplos del shield ethernet tienen in ejemplo de. Ominicacion udp lo que te permitiria no solo enviar un ping sino mas interesante enviR un mensaje con el valor de la te,peratura por ejemplo

          Estoy fuera de mi sitio por vacaciones y habla de memoria, pero preubaño y vovemos a hablar cuando quieras

        • Saludos…
          En este enlace http://haciendoweb.com/Hilo-Aporte-Arduino-sensor-temperatura-wifi-php-MySql tienes un sistema para enviar la temperatura a un pc.
          Lo de la alarma cuando sean 15 grados lo puedes hacer desde el arduino, que mande la información cuando la temperatura sea inferior a la que tu estipulas, o que la gestione el pc.

            • Marco

            Hola. muchas gracias a Ud por sus respuestas. En verdad estoy muy agradecido por sus comentarios y sugerencias. Agradezco de igual forma el ultimo link sobre el sensor de temperatura y su implementación me será de muchisima utilidad, incluso me abren nuevas ideas con eso de almacenar en una base de datos la información percibida por el sensor.(No tenia idea que podía hacer eso)
            Estos momentos también me encuentro fuera de la ciudad y no dispongo de los materiales para probarlos que muero de ganas de hacerlo. 🙁
            Tengan por seguro que estaré haciéndoles algunas consultas en el futuro, espero que puedan ayudarme porfavor.
            Por el momento quedo muy agradecido de Uds. Tengan un buen día.
            Gracias.

          • Imagen de perfil de admin

            Se bienvenido Marco, y aquui estamos para ayudarnos unos a otros y entre todos disfrutar de nuestra aficion

    • GIOVANNY

    Amigo excelente Tutorial !!

    • Juanjo

    Gracias por tu review. Dispongo de este modulo y un arduino uno, es posible enviar los datos, digamos de un sensor de temperatura a un webhosting para así mostrarlos en una web?

    Muchas gracias

    • No veo problema en principio. Incluso podrias montar el servidor en el propio ARduino

        • Juanjo

        muchas gracias, estoy esperando que me lleguen los sensores y entonces haré la prueba a ver, el modulo si lo engo y también un shield que lleva toma de ethernet y se le acopla el hlk-rm04, aunque con este módulo estoy muy verde y por eso te preguntaba.

        Muchas gracias

Give a Reply

WordPress Anti-Spam by WP-SpamShield