domingo, 30 de junio de 2013

Hydrogen Arduino WiFi Shield

El Hydrogen es una tarjeta del fabricante DIY Sandbox. Llamada también "Hydrogen Arduino WiFi Shield". Respecto al uso de esta tarjeta, no experimenté todas sus funcionalidades pero aquí ustedes tienen el link de su, digamos, DATASHEET hydrogen_quickstart_guide_rev03. Ese documento, indica paso a paso como instalar su librería y como usar la tarjeta.
El ejemplo que hice consisten en prender y apagar un led conectado en el pin 13 del Arduino desde una aplicación Web creada en el mismo código. 
Lo que hice fué agregarle unas lineas de código a un ejemplo dado por el propio fabricante (el ejemplo es cambiar el color del led de la tarjeta HYDROGEN desde la aplicación Web).

###########################################################################
CÓDIGO
###########################################################################
/*
LedDemoAp.pde - Hydrogen board LED demo sketch

Copyright (C) 2011 DIYSandbox LLC

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

#include <Wirefree.h>
#include <WifiServer.h>

WIFI_PROFILE wireless_prof = {
                        /* SSID */ "diysandbox",
         /* WPA/WPA2 passphrase */ "12345678",
                  /* IP address */ "192.168.1.1",
                 /* subnet mask */ "255.255.255.0",
                  /* Gateway IP */ "192.168.1.1", };
                             
// port 80 is default for HTTP
WifiServer server(80, PROTO_TCP);
int led = 13;

void setup()
{
   pinMode(led, OUTPUT);
  // connect as AP & start server
  Wireless.begin(&wireless_prof, AP_MODE);
  server.begin();
 
  delay(1000);
}

void loop()
{
  // Listen for incoming clients
  WifiClient client = server.available();
  int count = 0;
 
  if (client) {
    // an HTTP request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c;
        int  b;
       
        while((b = client.read()) == -1);
        c = b;
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          count = 0;
         
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");    
          client.println("");    
          //client.println("");    
                    
          // Output HTML page
          client.println("<html><head><title>LED PIN</title></head><body>");
          client.println("<center><h1>DIY Sandbox LED Color Change Demo and LED PIN</h1>");

          client.println("<p><form method=\"get\" action=\"\"><select name=\"l\">");
          client.println("<option value=\"r\">Red</option>");
          client.println("<option value=\"g\">Green</option>");
          client.println("<option value=\"b\">Blue</option>");
          client.println("<option value=\"c\">Cyan</option>");
         
          client.println("<option value=\"m\">Magenta</option>");      
          client.println("<option value=\"y\">Yellow</option>");
          client.println("<option value=\"w\">White</option>");
          client.println("<option value=\"p\">pinON</option>");
          client.println("<option value=\"f\">pinOFF</option>");
          client.println("</select><input type=\"submit\" value=\"Change\" /></form></p>");

          client.println("</center></body></html>"); 
          client.println(""); 

          client.flush();

          break;        
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
          count = 0;
        }
        else if (c != '\r'){
          // you've gotten a character on the current line
          currentLineIsBlank = false;
          count++;
          if ((c == '=') && (count == 8)){
             while((b = client.read()) == -1);
             c = b;
             if ( c == 'r')
             Wireless.setLED(LED_RED);
             else if ( c == 'g')
             Wireless.setLED(LED_GREEN);
             else if ( c == 'b')
             Wireless.setLED(LED_BLUE);
             else if ( c == 'c')
             Wireless.setLED(LED_CYAN);
             else if ( c == 'm')
             Wireless.setLED(LED_MAGENTA);
             else if ( c == 'y')
             Wireless.setLED(LED_YELLOW);
             else if ( c == 'w')
             Wireless.setLED(LED_WHITE);
             else if ( c == 'p'){
             digitalWrite(led, HIGH);
             }
              else if ( c == 'f'){
             digitalWrite(led, LOW);
             }
          }         
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection        
    client.stop();            
  }
}


Graba el programa de arriba y conéctate al WIFI de la tarjeta:

Despues de conectarte, digita en tu navegador:




La pagina web diseñada es:
Las dos ultimas opciones: pinON y pinOFF sirven para prender y apagar un led conectado al pin 13 del Arduino.

En la figura de abajo, el led de la derecha fue prendido con pinON:

En la siguiente figura el led fue apagado con el pinOFF:

La luz de la izquierda, es del led multicolor de la tarjeta. Cambia utilizando las opciones: RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW, WHITE.





























































































































































































































































































1 comentario: