Jugando con el HLK-RM04

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.

    Soc TCPIP con Linux Un módulo WIFI HLK-RM04,
    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:

    Conexion de un cliente WEBPero 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í:

    Recibiendo parametrosDel mismo modo, es igual de sencillo establecer una comunicación bidireccional desde un terminal como Putty

    Recibiendo mensajes

    Comunicacion bidireccional

    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)

    TimingPodrí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):

    ESquema de conexion en protoboard

    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=?

    HLK-RM04

    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:

    Aspecto resultante

    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í:

    Selector de modoPodé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.

    Soporte EthernetEl ú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í)

    para el modulo HLK-RM04En 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
  •  

    Deja una respuesta