bclose

Arduino como servidor Web

Montando un servidor web con Arduino

Objetivos

 

 
    • Montar un circuito con un DHT11 y un Shield Ethernet.
    • Crear un servidor Web.
    • Mostrar un código básico HTML para publicar los valores del sensor, que nos sirva como armazón para nuestros proyectos.
 

Material requerido.

 

 Tienda EspañaTienda Mexico
Imagen de Arduino UNO Arduino Uno o similar.Arduino UNO R3
Vista principalUn Ethernet shield R3Un Ethernet shield R3
Placa de testUna protoboard Una protoboard
sensor humedad y temperaturaUn DHT11 o DHT22Un DHT11 o DHT22
Resitor resistencias de 1kΩUna resistenciaUna resistencia

 

Circuito de prueba

 

la sesión previa, vimos como conectarnos a la red local y salir a consultar una página Web externa. Es decir ser clientes de internet para conseguir recoger alguna información de la red.

Pero en muchas ocasiones, es muy práctico publicar el resultado de unos sensores en la web para poder consultarlos en remoto. En esta sesión sesión veremos cómo publicar estos valores con nuestro Arduino y el Shield Ethernet mediante un servidor web.

Para ello montaremos un pequeño circuito similar al de la sesión Sensores de temperatura DHT11 y publicaremos los valores el sensor para poderlos consultar inicialmente desde la red local doméstica.

Lo curioso es, que si no necesitáis mostrar páginas web espectaculares, veréis que es mucho más fácil publicar una página web con los valores precisos, como servidor, de lo que es interpretar lo que se recibe de una consulta como cliente.

La cantidad de información es mucho menor y el programa para interpretarlo ni siquiera es necesario.

 

Diagramas del circuito

 

En la sesión previa  Sensores de temperatura DHT11 mostramos la descripción del sensor así como un programa de ejemplo para leerlo, por lo que en esta sesión no entraremos a repetir y nos centraremos en la parte que es nueva de montar el servidor de páginas web.

Vamos a incluir aquí, no obstante copia del esquema de conexión, por comodidad, pero que es sumamente simple.

Esquema electrico

 

Simplemente montad el Shield Ethernet sobre vuestro Arduino y después conectad normalmente el sensor al pin D2, junto con tensión y ground.

 
  • No habíamos dicho hasta ahora, que los Shields necesitan comunicarse con Arduino de Alguna manera y por tanto utilizan pines digitales o analógicos para su propia conveniencia, por lo que no podemos usarlos en nuestros montajes.
  • En el caso del Shield Ethernet, utiliza los pines SPI para comunicarse con Arduino y por ello no podemos usar los pines D11, D12, y D13 en Arduino UNO y los pines D50, D51, D52 en un MEGA, más que para la gestión del bus.
  • Además, la mayor parte de las Shields Ethernet incluyen un lector de tarjetas SD o micro SD por lo que otro pin adicional queda reservado. En el UNO suele ser el pin D10 y en el Mega el pin D53 ( Aunque parece que puede modificarse el número de pin al configurar la librería SD).
 

Aquí os pongo el esquema de protoboard.

Protoboard

 

El programa de control

 

Vamos a empezar comprobando que todo está en su sitio cargando n de los ejemplos que viene con la librería Ethernet. Se llama Web Server y podéis cargarlo desde

\\Archivos\Ejemplos\Ethernet\WebServer

Lo único que hace es crear una página muy sencilla y ponerla en el servidor web para comprobar que las conexiones a la red son correctas.

Enseguida volveremos para ver en detalle el funcionamiento del programa. Por ahora solo queremos comprobar que estamos en la red. Ese programa incluye al principio una línea así:

IPAddress ip(192, 168, 1, 177);

Que es la dirección IP que asignamos al Shield Ethernet. Si esta dirección os sirve, porque estáis en la misma subred, no tenéis que modificarla, pero en caso contrario aseguraros de ponerle una dirección IP válida para vuestra red como vimos en la sesión anterior.

Lo que haceEste programa hace, es mostrar los valores de las puertas analógicas en una página web cuya dirección IP es la que le hemos asignado en el paso anterior.  Naturalmente como no tenemos nada enchufado a estas puertas el resultado que leamos será aleatorio, pero por ahora esto no nos importa.

Vamos a hora a comprobar que podemos leer estos valores. Si usáis un PC, abrid vuestro navegador preferido y escribir en la página de direcciones la IP de vuestro Shield Ethernet. En mi caso es la 192.168.1.177. Deberíais ver algo parecido a esto:

Salida en un navegador

Y cada vez que le deis a refrescar la pantalla los valores cambiaran de modo impredecible por su naturaleza aleatoria. (Normalmente se refresca con F5 en un PC). Si veis algo así, entonces ya podemos pasar a cosas más interesantes porque tenemos acceso a Arduino a través de Ethernet.

Vamos con el programa. Algunas inclusiones y datos previos:

#include <SPI.h>              // El shield Etherent usa SPI
#include <Ethernet.h>
#include "DHT.h"

byte mac[] = {   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177); // Poned aqui vuestra IP <------- <------- <-------- 
EthernetServer server(80);  // Arrancamos el servidor en el puerto estandard 80
DHT dht( 2, DHT11);

Nada nuevo aquí. Fijamos la dirección MAC y la IP, e inicializamos el servidor Web en el puerto 80 (El habitual) y creamos una instancia de DHT, en el pin 2 con modelo DHT11.

 
  • Podríamos cambiar la dirección de escucha del servidor asignando aquí un puerto diferente, pero entonces solo quien supiera el nuevo puerto podría acceder al servidor web.
  • Si el nuevo puerto fuera el 1256, por ejemplo, para acceder al servidor, la dirección seria: 192.168.1.177: 1256
 

El setup, tampoco tiene ninguna novedad, con excepción de server.begin() que inicia el servidor web en nuestro Arduino.

void setup()
{
   dht.begin();
   Serial.begin(9600);
   while (!Serial) ;        // Retraso para el Leonardo

   Ethernet.begin(mac, ip);
   server.begin();          // Inicia el servidor web
   Serial.print("Servidor Web en la direccion: ");
   Serial.println(Ethernet.localIP());
}

Para entrar con la función loop, tenemos antes que entender que los códigos HTML, son un lenguaje de descripción de páginas que consisten en directivas de texto que indican a tu navegador como mostrar la información de una página concreta que visitas.

 
  • Todos los navegadores ofrecen la capacidad de mostrar el código de la página web que visitas. Si usas Firefox o Chrome, apuntando a la página y dando al botón derecho sale la opción “ ver código fuente de la página” .
  • No os asustéis, porque lo que sale suele ser aterrador al principio. Cantidades ingentes de texto estructurado. El objetivo no es que lo entendáis, sino que veáis que, por complicada que sea una página, se describe con texto normal.
 

Así que lo que vamos a hacer es construir una página Web (muy, muy sencilla) que entrega valores a quien lo solicite. Ese texto que conforma la página Web estará formado por una cabecera HTML y unos textos y valores numéricos que representan la humedad y la temperatura leída en el sensor.

No podemos entrar muy en detalle en el tema del HTML porque desborda con mucho las pretensiones de estas sesiones (Y el HTML daría para otro tanto o más) así que digamos que lo primero que tendremos que hacer es entregar unas cabecera de texto, con las reglas de HTML, para que el navegador al otro extremo nos entienda.

La cabecera será:

HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Refresh: 30
<!DOCTYPE HTML>
<html>

Y después enviar los valores leídos del sensor junto con algún texto explicativo de lo que son esos números, con formato HTML.

Como ya hemos iniciado el servidor en el setup, ahora tenemos que comprobar periódicamente si hemos recibido peticiones de un cliente web, en caso afirmativo la propiedad available de server devolverá una entrada a la petición de un cliente, y en caso negativo será 0:

EthernetClient client = server.available()

Por eso, si client es diferente de 0, significa que tenemos una petición de cliente y deberemos procesarla.

El programa que usaremos para procesar esto será más o menos así:

Contenido solo disponible para suscriptores. ¡Accede al contenido!

           

Algunos comentarios respecto del programa. Client es un puntero a un objeto que desciende de la clase Stream de Arduino, lo mismo que Serial y también Ethernet entre otros. Esto quiere decir que tienen propiedades y métodos comunes.

Por eso, lo mismo que podemos hacer Serial.print(), podemos hacer client.print y cumple con exactamente las mismas reglas.  Usamos client.print, para enviar un String de texto al navegador que hay al otro extremo de la conexión abierta.

Igualmente hemos usado client.connected(), para comprobar si alguien ha conectado con el servidor y después usamos client.available(), para determinar si nos ha enviado algún mensaje. Cuando client.available() toma un valor no nulo, sabemos que hay que leer ese mensaje y usamos client.read(), exactamente igual que cuando leíamos caracteres de la consola con GetLine en la sesión Comunicación con el exterior.

Si os dais cuenta, los conceptos que usamos para leer de un cliente web, son los mismos que usamos para leer de una consola serie y se llaman igual. Es una de las grandes ventajas de la programación orientada a objetos, porque ambos descienden de una clase similar, Stream (corriente, flujo), porque conceptualmente, aunque el origen y la tecnología de soporte es muy distinta, la idea de un flujo continuo bit a bit por algo parecido a un hilo lógico es común a ambos casos.

Y en el futuro veremos más casos de esto. Por ejemplo cuando leamos de la tarjeta SD, también leemos datos digitales por un único pin y también se deriva de stream. Veréis como muchas de las instrucciones para leer os resultaran familiares.

 

Resumen de la sesión

 

 
    • Hemos recuperado de una sesión anterior el circuito con un sensor de temperatura y humedad para montar un servidor Web que nos informa en remoto de las lecturas del sensor.
    • Hemos visto que podemos enviar código HTML al cliente, de forma similar a como imprimimos en la consola.
    • Hemso visto como mezclar el texto HTML con las lecturas de nuestros sensores para montar una pagina, que aunque poco elegante, e muy útil, porque podeis usar este ejemplo con vuestros propios sensores, para publicar esos valores en Internet.
    • Hemos habaldo, como sin querer, de laclase Stream, de la que derivan en Arduino muchas clases superiores entre las que se cuentan, Serial, los clientes y servidores Ethernet, y también como veremos las tarjetas SD entre otras.

 

 

 

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(85) Comments

    • Chujalt

    vaya,,,,, me acabo de dar cuenta que tampoco sale el código html…. bueno…. si te interesa te lo mando por otro método

    • Chujalt

    no se porque no sale… el include es ESP8266WiFi.h

    • Chujalt

    No se porque no ha salido,,,, la primera linea del script es

    #include

    Saludos

    • Chujalt

    Saludos….

    Te envio el script completo. Está hecho para el nodemcu V2, pero con el Arduino IDE. Es para que te hagas una idea, con el script controlas un led, la página si el led está encendido te dice que está encendido y sólo te muestra el botón de apagar y si está apagado pues lo contrario.

    Como en el script le he asignado una dirección ip fija, 192.168.1.222, le he quitado toda la comunicación serial, para ahorrar lineas.

    #include

    const char* ssid = “Tu_red”;
    const char* password = “Tu_contraseña”;
    IPAddress ip(192,168,1,222);
    IPAddress gateway(192,168,1,1);
    IPAddress subnet(255,255,255,0);
    int ledPin = 13;
    WiFiServer server(80);

    void setup() {
    Serial.begin(115200);
    delay(10);

    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);

    WiFi.begin(ssid, password);
    WiFi.config(ip, gateway, subnet);

    server.begin();
    }

    void loop() {

    WiFiClient client = server.available();
    if (!client) {
    return;
    }

    Serial.println(“new client”);
    while(!client.available()){
    delay(1);
    }

    String request = client.readStringUntil(‘\r’);
    client.flush();

    int value = digitalRead(ledPin);
    if (request.indexOf(“/LED=ON”) != -1) {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
    }
    if (request.indexOf(“/LED=OFF”) != -1) {
    digitalWrite(ledPin, LOW);
    value = LOW;
    }

    client.println(“HTTP/1.1 200 OK”);
    client.println(“Content-Type: text/html”);
    client.println(“”);
    client.println(“”);
    client.println(“”);

    client.print(“El led esta ahora: “);

    if(value == HIGH) {
    client.print(“Encendido”);
    client.println(“”);
    client.println(“Apagar“);
    } else {
    client.print(“Apagado”);
    client.println(“”);
    client.println(“Encender“);
    }
    client.println(“”);

    delay(1);

    }

    A mi me funciona bien

    Saludos

    • Chujalt

    Saludos.. al código que te pasé me falto ponerle algo

    int value = digitalRead(ledPin);
    client.print(“El led esta ahora: “);
    if(value == HIGH) {
    client.print(“encendido”);
    } else {
    client.print(“apagado”);
    }

    Faltaba la primera linea, que lee el estado del pin.
    A mi me funciona bien.

    Saludos

    • Jorge

    Gracias Chujalt por preocuparte lo he intentado de esa forma y nada ,,
    Gracias admin por contestar ,,,
    Creo que la solución pasa por crearme algo que me guarde el estado de las salidas y lo refresque de forma independiente a la de pulsar qualquier comando ,,, voy a probar con la EPROM haber que pasa !!!

    • Chujalt

    Saludos….

    Cuando se está conformando la página web podrías poner algo como esto:

    client.print(“El led esta ahora: “);

    if(value == HIGH) {
    client.print(“encendido”);
    } else {
    client.print(“apagado”);
    }

    Espero que te sirva…. Saludos

      • Admin

      Muchas gracias Chujalt, a ver si saco un rato para incluirlo

    • Jorge

    Hola ,, de momento esta en proyecto ,, y tengo dos leds en una board que estan controlados por dos salidas, el progrma funciona correctamente , tanto si me conecto desde una red local como si lo hago desde una red pública.
    Lo que hago es conectarme con un ordenador (red local) a la vez que con un movil (red pública) , bien pues desde el ordenador enciendo el led de la salida 5, y en pantalla me indica un texto como que esta “ENCENDIDO” , mientras en el movil me sigue diciendo que el led está “APAGADO” , y es aquí dnde esta el quit de la cuestión , si refresco de forma manual el móvil el led se apaga ya que la variable que envia es la de apagar , entonces si refresco de nuevo el host el led se enciende ya que la variable que se envia es la de encender , lo que me gustaría conseguir es que cuando refresco recoja el estado del led y me indique si esta apagado o encendido… te dejo codigo

    #include //Importamos librería comunicación SPI
    #include //Importamos librería Ethernet

    byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
    byte ip []{192,168,0,160}; //Le damos la IP elegida a Arduino
    IPAddress gateway (192,168,0,1);
    IPAddress subnet (255,255,255,0);
    EthernetServer servidor(80); //Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto

    int led5=5; //Pin del led 2
    String comedor=”APAGADAS”; //Estado del Led 6 inicialmente “OFF”(label)

    void setup()
    {
    Serial.begin(9600);

    // Inicializamos la comunicación Ethernet y el servidor
    Ethernet.begin(mac, ip, gateway, subnet);
    servidor.begin();
    Serial.print(“server is at “);
    Serial.println(Ethernet.localIP());

    pinMode(led5,OUTPUT); //Declaramos led5 como salida
    }
    void loop()
    {
    EthernetClient client = servidor.available(); //Creamos un cliente Web

    if (client) { // Entra en el “if” si detecta un cliente a través de una petición HTTP
    Serial.println(“new client”);
    boolean currentLineIsBlank = true; //Una petición HTTP acaba con una línea en blanco
    String cadena1=””; //Creamos una cadena de caracteres vacía para control led 5

    while (client.connected()) {
    if (client.available()) {
    char c = client.read(); //Leemos la petición HTTP carácter por carácter
    Serial.write(c); //Visualizamos la petición HTTP por el Monitor Serial
    cadena1.concat(c); //Unimos el String ‘cadena1’ con la petición HTTP (c). De esta manera convertimos la petición HTTP a un String

    //Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto.

    int posicion1=cadena1.indexOf(“LED”); //Guardamos la posición de la instancia “LED=” a la variable ‘posicion1’
    if(cadena1.substring(posicion1)==”LED=A”) //Si a la posición ‘posicion1’ hay “LED=A”
    {
    comedor=”ENCENDIDAS”;
    digitalWrite(led6,HIGH);
    }
    if(cadena1.substring(posicion1)==”LED=B”)//Si a la posición1 ‘posicion1’ hay “LED=B”
    {
    comedor=”APAGADAS”;
    digitalWrite(led6,LOW);
    }
    //Cuando reciba una línea en blanco, quiere decir que la petición HTTP ha acabado y el servidor Web está listo para enviar una respuesta
    if (c == ‘\n’ && currentLineIsBlank) {

    // Enviamos al cliente una respuesta HTTP
    client.println(“HTTP/1.1 200 OK”);
    client.println(“Content-Type: text/html”);
    client.println(“connection: close”);
    client.println(“Refreshpage”);
    client.println(“”);
    client.println(“”);
    client.println(“”);
    client.println(“”);
    client.println(“”);
    client.println(“”);

    client.println(“”);
    client.println(“”);
    client.println(“”);
    client.println(“”); //////////////////PULSADOR COMEDOR/////////////////////
    client.println(“”);//Pulsador ON led 6
    client.println(“”);
    client.println(“ENCENDER”);
    client.println(“”);
    client.println(“”);//Pulsador OFF led 6
    client.println(“”);
    client.println(“APAGAR”);
    client.println(“”);
    client.println(” &nbsp”);
    client.println(“”);
    client.println(“ ADO. COMEDOR “);
    client.println(comedor);
    client.println(“”);
    client.println(“”);
    client.println(“
    “);
    client.println(“”);
    break;
    }
    if (c == ‘\n’) {
    currentLineIsBlank = true;
    }
    else if (c != ‘\r’) {
    currentLineIsBlank = false;
    }

    }
    }
    //Dar tiempo al navegador para recibir los datos
    delay(1);
    client.stop(); // Cierra la conexión

    Serial.println(“client desconected”);
    Serial.println(comedor);
    }
    }

      • Admin

      Me temo Jorge, que no dispongo de tiempo para revisar programas, pero te recomiendo que lo publiques en el foro, porque alli es mas probable que alguien se nterese por el tema y te pueda a yudar con tu problema ¿Vale?

    • Jorge

    hola muy buenas , un gran aporte enhorabuena ,,,
    Tengo una aplicacion muy similar , el cambio esta en que utilizo pulsadores para gobernar las salidas , digamos que seria un control domotico ,, lo tengo programado para acceder desde la red local y la red publica, bien pues cuando activo o desactivo desde el host (red local) pues enciendo un led y aparece por pantalla led encendido , luego me voy al movil (red publica) y le doy a refrescar para saber el estado del led , pues el led se vuelve a apagar , entiendo que al refrescar se envia la variable se quedo en el bufer de esta red , esto me ocurre si lo ago a la inversa , si desde el movil enciendo , el led se enciende y me muestra por pantalla led on, pero me voy al host y al actualizar se apaga el led y me indica led off que es lo que tenia ,, como podria saber el estado del led desde qualquier red sin tener este problema ??

      • Admin

      Hola Jorge, me lo pones un poco dificil lo que me preguntas porque no conozco nada de tu instalacion, lo siento

    • Uziel perez

    Hola admin, gracias por tu aporte es muy bueno, podrías ayudarme con lo siguiente: necesito que se pueda ingresar al servidor con clave, hasta ahora he logrado hacerlo pero cuando ya ingreso en una PC, queda abierto el servidor (interface HTML) para cualquier otra PC. Es un proyecto para activar una alarma utilizando el cableado estructurado.

      • Admin

      Hola uziel, tengo pendiente un tuto asi, pero me temo que de momento no se para cuando, porque voy fatal de tiempo. Cuando lo consigas me encantaria que nos informases de tus avances para poderlo publicar en la web

        • Uziel perez

        void loop() {
        EthernetClient cliente = servidor.available();
        if (cliente) {
        boolean lineaenblanco = true;
        String cadena = “”;
        while (cliente.connected()) {
        if (cliente.available()) {
        char c = cliente.read();
        cadena.concat(c);

        int posicion = cadena.indexOf(“CA=”); //La variable “posicion” sera igual a la posicion de la instancia “CA=”

        if (cadena.substring(posicion) == “CA=clave”) { //Si en la posicion “posicion” hay o es igual a “CA=clave”
        i = 1;
        }
        //ACCION SUBMIT EMERGENCIA
        if (cadena.substring(posicion) == “CA=ON” && i == 1) { //Si en la posicion “posicion” hay o es igual a “CA=ON” y la variable i sea igual a 1
        digitalWrite(PIN_ALA, HIGH); //Enciende PIN_ALA
        delay(3000);
        digitalWrite(PIN_ALA, LOW);
        delay(1000);
        digitalWrite(PIN_ALA, HIGH);
        delay(3000);
        digitalWrite(PIN_ALA, LOW);
        delay(1000);
        digitalWrite(PIN_ALA, HIGH);
        delay(3000);
        digitalWrite(PIN_ALA, LOW);
        }
        //ACCION SUBMIT SALIR
        if (cadena.substring(posicion) == “CA=S” && i == 1) {
        i = 0;
        }

        if (c == ‘\n’ && lineaenblanco) {//Se envia la respuesta a una peticion de un cliente cuando a finalizado la peticion

        // Enviamos al cliente una respuesta HTTP
        cliente.println(“HTTP/1.1 200 OK”);
        cliente.println(“Content-Type: text/html”);
        cliente.println();

        //Página web en formato HTML
        cliente.println(“”);
        cliente.println(“”);
        cliente.println(“ALARMA”);
        cliente.println(“”);
        cliente.println(“”);
        cliente.println(“”);

        if (i == 0) {
        cliente.println(“”);
        cliente.println(“INTERFAZ DE ALARMA BLOQUEADA”);
        cliente.println(“”);
        cliente.println(“”);
        cliente.println(“”);
        cliente.println(“”);
        }
        if (i == 1) {
        //ENCABEZADO
        cliente.println(“”);
        cliente.print(“
        ALARMA“);
        cliente.print(“”);
        cliente.print(“
        AEROPUERTO“);
        cliente.print(“”);
        //SUBMIT EMERGENCIA
        cliente.println(“”);
        //SUBMIT SALIR
        cliente.print(“”);
        cliente.println(“”);
        cliente.println(“”);
        }
        cliente.println(“
        “);
        cliente.println(““);
        cliente.println(“”);
        break;
        }
        if (c == ‘\n’) {
        lineaenblanco = true;
        }
        else if (c != ‘\r’) {
        lineaenblanco = false;
        }
        }
        }
        }
        delay(1);
        cliente.stop();
        }

          • Uziel perez

          No se copio gran parte del codigo, le enviaré un correo

  • Hola el problema que presento es el siguiente tengo un arduino mega y una ethernet shield, estaba trabajando correctamente con ambas placas ejecutaba codigos de webserver y webclient correctamente, pero de un momento a otro me ha comenzado a presentar problemas mi ethernet shield ya no me funciona correctamente si le hago ping desde el cmd me sale el mensaje de host de destino inaccesible y se ejecuto desde el IDE y pongo el COM me sale ipserver at 0.0.0.0, me podrian ayudar muchas gracias SALUDOS…

      • Admin

      Hola Rolando, No es facil darte una opinion sin hacer pruebas, pero no tiene buena pinta y llega un momento que tienes que aceptar que a veces los componentes se estropean

  • Gracias admin por tu gran aporte……..

    • RRECIO

    Hola. Tenemos un arduino uno con un shield Ethernet que pretendemos conectar a nuestra infraestructura. Antes de monta el shield, la placa nos entregaba datos de temperatura y humedad de una sala técnica. Estos datos los podemos ver en un display LCD. Ahora pretendemos verlos en el display y mediante web. Al inicializar el servidor Ethernet con las líneas de código del ejemplo, el display se apaga y ya no sabemos si está funcionando. Si comentamos estas tres líneas, vuelve a funcionar el display:

    Ethernet.begin(mac, ip);
    server.begin(); // Inicia el servidor web
    Serial.print(“Servidor Web en la direccion: “);
    Serial.println(Ethernet.localIP());

    Gracias por tu ayuda y enhorabuena por tu trabajo

      • Admin

      Hola amigo, EL shield Ethernet usa los pines 10,11,12 y 13 (Utiliza los pines de SPI) y se los reserva para el chip de conexion y tambien el pin 4 para el amnejo de la tarjeta SD. Si tu LCD intenta usar alguno de estos pines habra colision y no funcionará

      Si empleas ujn display LCD tipo I2C no deberias tener problemas en conectar ambos a la vez de un modo comodo

    • VANESSA ELENA MOROCHO SAILEMA

    Buenas disculpe como puedo enviar los datos del sensor a una pagina web pero esta vez no usando ethernet sino GPRS shield… Gracias de antemano

      • Admin

      Hola Vanessa, tengo por aqui rodando un shield GPRS y cualquier dia de estos me tendre que meter con el pero de momento no he tenido ocasion y por eso aun no puedo responer tu consulta

    • Alejandro suarez

    Victor, puedes ayudarme?. quiero enviar datos del sensor DHT11 y posteriormente del MQ2 a una pagina web, tengo un arduino mega, un modulo wifi ESP8266 01, un conversor uart, es decir todo lo necesario. Baje un código desde una página que utilizó tus tutoriales (“isla tortuga”); desde monitor serie veo que el modulo arranca y se conecta, pero cuando pongo el numero IP en el navegador no aparece nada, nose si debo realizar un paso previo, pero mi arduino no veo ademas que trasmita datos, arranca el modulo , da el IP y se queda. Como en tus ejemplos utilizas otro modulo de conexión a wifi, no puedo guiarme, Saludos, si alguien mas está trabajando en esto puede resultar de ayuda tambien.

    • Milka

    hola, gran aporte, mil gracias. Para enviar datos desde el arduino a la pagina web lo entiendo, pero como hago para traer datos desde la pagina a mi arduino, hablo de datos introducidos por el usuario, números, palabras, etc???

      • Admin

      Hola Milka, cuando lees una pagina web desde arduino, recibes un chorro de texto que puedes procesar , buscando los datos que contiene. Creo recordar que hay un ejemplo en la seccion de shield ethernet que hacia un ejemplo de sto precisamente

    • Alberto

    Buenos días, he probado el ejemplo y me funciona OK. Incluso lo he tomado como referencia para otros ejemplos con otros sensores añadiendo enlaces en el código que me enciendan un led o que muevan un servo.

    ejemplo:
    Leer temperatura – Encender Led – Apagar Led – Mover servo 0º – Mover servo 90º

    Mi problema es que no siempre se me muestra la web en el navegador (IE – Chrome) o en el móvil. La primera vez me carga bien la web, pero después de pulsar en alguno de los enlaces no se refresca correctamente en el navegador (lo mismo pueden faltar alguna opción, o salir una debajo de la otra).

    Se te ocurre que puede pasar?? aumentar el tiempo de la instrucción “delay(10)”, aunque esto también lo he probado.
    y otra cosa que me he fijado es que si cargo la web en 2 navegadores a la vez, entonces ya no funciona nada. Tengo que pulsar el botón reset de la placa o desconectar el usb y volverlo a conectar.

    Muchas gracias por tu tiempo y si se te ocurre algo……

    Un saludo.

      • Admin

      Pues no se q decirte Alberto, y desde luego no deberia afectarle que ntres con dos navegadores, ahi deberia estar la clave

        • Alberto

        Muchas gracias por la respuesta.
        supongo que el problema está en el código HTML, seguiré probando.
        un salduo.

    • Paul

    diculpa me sale esto error de compilacion
    C: \ Users \ Paul \ Desktop \ Arduino \ windows \ arduino.7-arduino-1.6.7 \ bibliotecas \ vec \ DateStrings.cpp: 41: 22: error: la variable ‘monthNames_P’ debe ser const con el fin de poner en sólo lectura a través de la sección ‘__ __attribute ((PROGMEM))’
    como le arreglo porfa necesito entregar este proyecto el martes

      • Admin

      Hola Paul,
      Ya he visto (Y m eolvidé de comentar) que el pluggin IDE ESP8266 falla con la version 1.6.7 del IDE. SI bajas a la 1.6.6 o 1.6.5 te compilara sin problemas. Puedes descargar las versiones en la pagina de arduino.cc directamente como versione sprevias

    • Alvaro Martinez

    hola amigo, buen dia, sabes yo estoy realizando una versión de el dht11 con arduino mega pero este lee 20 dht11 y los guarda en una sd lo que me gustaría saber es si puedo hacer que trabajen con un modulo de internet o adaptarles el escudo ethernet mmm espero no enredarlo

    tengo 20 dht11 trabajando con arduino
    un rtc 1302
    un lcd
    y un modulo sd

    ya que puedo tomar las 20 lecturas de humedad y temperatura
    me gustaría guardarlas en sd (ya logrago)
    que se vean en el lcd (ya logrado)
    que de el tiempo y hora exacto ( ya logrado)
    publicarlo en internet o en red

    tengo un modulo enc28j60 ethernet

    de no ser posible me puedes ayudar a adecuarlo al ethernet shiled
    porfavor

    mi otra duda es como puedo poner el valor de t o de h ](temperatura o humedad dentro de una celda en una tabla por html en arduino)

    ojala me pudieses ayudar

      • Admin

      Te ayudare encantado si puedo Alvaro. No conozco el modulo ethernet que me mencionas por lo que no hay mucho que pueda decir, pero si usas un shield ethernet puedes publicar los datos como se muestra aqui: https://www.prometec.net/webserver/

      Para publicar los valores en una tabla, basta con que envies los textos que corresponden e insertes el valor de t o h a la altura que quieras. Puede parecerte muy complicado pero es mas sencillo de lo que crees y basta con que partas del codigo de una tabla.

      Dime cuantas filas y columnas quieres y te pongo el codigo generico aqui ¿Vale?

  • Primero que todo muy buen aporte, mi pregunta es la siguiente: es una alarma que se activa cada 5 minutos, y en el codigo HTML se muestra “ALERTA” (en caso que se active) y ESPERANDO (en caso que no este activo aun) la variable depende del tiempo y no de algun boton, por el cual no se muestra el cambio en la plataforma HTML porq ningun cliente a solicitado una peticion, como logro visualizar el estado de la alarma en el codigo HTML. (el programa se vuelve ciclico a la espera de presionar un switch)
    Muchas gracias de antemano

      • Admin

      Hola Alejandro, no estoy muy seguro de entenderte, pero si quieres cacular el tiempo mediante y disparar un mensaje en el navegado que refleje el estado parece facil. Basta con sacar un mensaje u otro en el servidor web cuando lo consideres ¿No?

      • Ya se soluciono el problema de la siguiente manera, cuando el programa se vuelve cíclico a la espera de un cambio en el sensor, llama en esa misma subrutina al servidor como cliente para hacer el cambio a alerta.
        Muchas gracias por todos sus consejos amigo.

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login