Go Down

Topic: Necesito consejo shield arduino (Read 176 times) previous topic - next topic

leibniz81

No digo que albergue digo que pudes incrustar el código html en el código de arduino, haciendo este de servidor. ¿Se puede hacer eso mismo la placa HLK-RM04?
No digo que el tutorial de jopapa no esté claro, si no que a mi no me aclara, pero obviamente se debe a mi falta de conocimientos. El tema es que he visto ejemplos de proyectos que usan la ethernet shield y usando las librerias ethernet incluyen el código html en el propio lenguaje de arduino y se me genera la duda de si esto se puede hacer con esta placa o si se puede usar las mismas librerias, etc.

Saludos!

surbyte

#16
Dec 19, 2014, 03:58 am Last Edit: Dec 19, 2014, 04:11 am by surbyte
con el permiso de jopapa tomé su ejemplo y lo posteo acá, asi lo discutimos o incluso que lo haga si quiere el propio jopapa, a ver que es lo que no se comprende o que cosa diferente quieres hacer que este ejemplo no ilustra:


Wifi para Arduino

        El módulo HLK-RM04 nos permite añadir conexión Wifi a nuestro Arduino por tan solo unos 10€. Ello nos posibilita el control inalambrico en un entorno de bastantes metros y sin cables, bien a través de nuestra red local o (si configuramos el Router y tenemos IP fija) via Internet desde cualquier parte con un ordenador o un móvil. ¡¡Guai!!.

        El módulo mide 3x4 cm y solo necesita dos hilos para funcionar ya que se comunica vía serie con el Arduino. No hay una atentica comunicación Wifi, solo es serie, pero es más que suficiente para recibir datos o enviar comandos a cualquiera de los pines del Arduino. Se le puede poner una antena externa para mejorar el alcance y también hay una placa (shield) para usarlo con conexión por cable .

        Estas son las especificaciones y página de configuración:

         Para configurar nuestro HLK-RM04 hay que seguir unos pasos.
-Conectarle alimentación de 5v. Patilla 1 al  pin 5v del Arduino y patilla 2 al negativo del Arduino.
-Con un portátil buscarlo en redes wifi disponibles. Aparece como Hi-Link-xxxx. Conectar con clave 12345678.
-Abrir su página de configuración en la dirección 192.168.16.254/Serial2Net.asp  y hacer log-in: admin/admin
-Hay que poner WIFI(CLIENT)-SERIAL, el nombre SSID de vuestra WIFI, vuestra clave y el tipo de encriptación que usa.
-Prefiero elegir IP STATICA. Poner una libre y gateway de vuestro router.
-He bajado la velocidad del serial a 57600, pero se puede poner el que se prefiera.
-Aplicar cambios y ya se puede (dejar pasar 1 minuto) acceder a esta misma página desde vuestra RED poniendo la nueva IP.

         Si algo falla y no podemos contactar desde nuestra RED local ni por wifi con el portátil, podemos reinicializar el módulo poniendo a masa el pin 10 durante mas de 6 segundos.

         Hay otra página de configuración mucho más completa en 192.168.16.254/home.asp, pero no se necesita para nuestro tema.

         Si todo esta bien y "vemos" el módulo desde nuestra RED local, ya podemos conectar el
Pin 20 (Rx) al Pin 1(Tx) del Arduino
Pin 21 (Tx) al Pin 0 (Rx) del Arduino

         Y así tendremos disponible la comunicación serie HLK-RM04-Arduino y viceversa.

         Ahora vemos unos ejemplos de enviar y recibir. Recordar que como el Arduino uno solo tiene un puerto serie, para cargar los programas hay que desconectar temporalmente al menos el pin Rx del Arduino.

//Se envian a una página WEB los valores analógicos y datos de sensor DHT22


Code: [Select]

#include "DHT.h"
#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);

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

void loop() {
  boolean has_request = false;
  int h = dht.readHumidity(); int t = dht.readTemperature();
  if (Serial.available()) {
    while(Serial.available()) {char c = Serial.read();}
    has_request = true;
  }
  if (has_request) {
    Serial.println("HTTP/1.1 200 OK");
    Serial.println("Content-Type: text/html");
    Serial.println("Connection: close");
    Serial.println("Refresh: 5");  // refresca la página cada 5 sec
  
    String sr = "<!DOCTYPE HTML>\n";
    sr += "<html&lt;\n";
    // valores de cada pin analógico
    for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
      int sensorReading = analogRead(analogChannel);
      sr += "Valor analogico ";
      sr += analogChannel;
      sr += " es ";
      sr += sensorReading;
      sr += "<br />\n";    
    }
    sr += "Humedad: ";
    sr += h;
    sr += (" %\t");
    sr += "<br />\n";
    sr += "Temperatura: ";
    sr += t;
    sr += (" &#38;#38;#38;#186C ");
    sr += "<br />\n";
    sr += "</html>";
    Serial.print("Content-Length: ");
    Serial.print(sr.length());
    Serial.print("\r\n\r\n");
    Serial.print(sr);
    has_request = false;
  }
}


Al ejecutar el programa podemos ver los valores en los pines analógicos y datos de temperatura y humedad de un sensor DHT22. Los veremos en el navegador poniendo la IP que habiamos asignado al módulo y el puerto 8080. Por ejemplo, en mi caso 192.168.1.120:8080. Desde fuera de casa cambiando a mi IP fija.

Ahora enviamos comandos al Arduino por medio de nuestro ordenador o móvil y simplemente poniendo la dirección IP del módulo, el puerto y un número para cada acción. Ejemplo

http://192.168.1.120:8080/blink?f=1  Enciende el LED 13, activa un relé o cualquier otra acción
http://192.168.1.120:8080/blink?f=2  Pone a nivel bajo el pin 13 (apaga el LED)

Code: [Select]
//Enviar comandos al Arduino via WIFI
//Actuar con http://192.168.1.120:8080/blink?f=1
//O con http://MyIPexterna:8080/blink?f=1
//Joaquin paredes. www.jopapa.me 2014

void setup() {    
  Serial.begin(57600);
  pinMode(13, OUTPUT); //Rele 1
  pinMode(12, OUTPUT);  //Rele 2
}

int f = 0;
void loop() {
  boolean has_request = false;
  String in = "";
  if (Serial.available()) {
    in = "";
    while (true) {  // should add time out here
      while (Serial.available() == false) {}
      in += (char)(Serial.read());
      if (in.endsWith("\r\n\r\n")) {
        has_request = true;  break;
      }
    }  
  }
  if (has_request) {
    int i1 = in.indexOf("GET /blink?f="), i2;
    if (i1 != -1) {
      i2 = in.indexOf(" ", i1+13);
      f = in.substring(i1+13, i2).toInt();
    }
    Serial.println("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close");
    String sr = "<!DOCTYPE HTML                           >\n";  //¡¡NO QUITAR ESPACIOS EN BLANCO!!
 
    Serial.print("Content-Length: ");
    Serial.print(sr.length());
    Serial.print("\r\n\r\n");
    if (f==1) { Serial.println("Comando 1. Activado Rele 1"); }
    if (f==2) { Serial.println("Comando 2. Desactivado Rele 1"); }
    if (f==3) { Serial.println("Comando 3. Activado Rele 2"); }
    if (f==4) { Serial.println("Comando 4. Desactivado Rele 2"); }  
    Serial.print(sr);
    has_request = false;
  
  }

switch (f){
  case 1:
   digitalWrite(13, HIGH);
   break;
  case 2:
   digitalWrite(13, LOW);
   break;
  case 3:
   digitalWrite(12, HIGH);
   break;
  case 4:
   digitalWrite(12, LOW);
   break;
   f=0;  
}
 
}


        Resumiendo, si juntamos este módulo y usamos un Arduino mini, por unos 13€ tenemos control vía WEB en cualquier punto de la casa, tanto de recogida de datos como mandar acciones.

        Todo ello desde ordenador o desde el móvil y tanto desde nuestra RED local como desde Internet

Jopapa

 leibniz81, en la configuración de mi tutorial (y la que he visto en todas partes) el módulo se usa como salida serie. De ese modo no se aloja ninguna página HTML como puede hacerse con el Ethernet Shield.
Simplemente enviamos una URL que contiene la "frase" (blink?f=1) que Arduino lee del puerto serie y tomas las decisiones pertinentes por medio de IF. 
Sin tal página Web, puedes enviar los comandos (las URL) que quieras almacenándolos, por ejemplo en el escritorio o desde un navegador. Un icono para cada comando URL.
Personalmente envió las URL desde el móvil programado con Basic4Android.


Jopapa
www.jopapa.me

leibniz81

#18
Today at 11:33 am Last Edit: Today at 11:37 am by leibniz81
Para arrojar algo má de luz a esto he encontrado una página que explica más detalladamente los pros y los contras de esta placa. Por similitud del contenido imagino que será la página en la que jopapa se ha basado.


http://rayshobby.net/?p=9592


Saludos.

Go Up