#include <Ethernet.h> #include <SPI.h> //////////////////////////////////////////////////////////////////////// //CONFIGURE //////////////////////////////////////////////////////////////////////// byte server[] = { 192,168,1,10 }; //ip Address of the server you will connect to String location = "http://192.168.1.10/cargaDatosEnArduino.php HTTP/1.0"; // if need to change the MAC address (Very Rare) byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //////////////////////////////////////////////////////////////////////// EthernetClient client; char inString[32]; // string for incoming serial data int stringPos = 0; // string index counter boolean startRead = false; // is reading? void setup(){ Ethernet.begin(mac); Serial.begin(9600); } void loop(){ String pageValue = connectAndRead(); //connect to the server and read the output Serial.println(pageValue); //print out the findings. delay(3000); //wait 3 seconds before connecting again } String connectAndRead(){ //connect to the server Serial.println("connecting..."); //port 80 is typical of a www page if (client.connect(server, 80)) { Serial.println("connected"); client.print("GET "); client.println(location); client.println(); //Connected - Read the page return readPage(); //go and read the output }else{ return "connection failed"; } } String readPage(){ //read the page, and capture & return everything between '<' and '>' stringPos = 0; memset( &inString, 0, 32 ); //clear inString memory while(true){ if (client.available()) { char c = client.read(); if (c == '<' ) { //'<' is our begining character startRead = true; //Ready to start reading the part }else if(startRead){ if(c != '>'){ //'>' is our ending character inString[stringPos] = c; stringPos ++; }else{ //got what we need here! We can disconnect now startRead = false; client.stop(); client.flush(); Serial.println("disconnecting."); return inString; } } } } } //////////////////////////////////////////////////////////////////////////////// <?php $username="usuario"; $password="pass"; $database="domo"; mysql_connect("192.168.1.10",$username,$password); @mysql_select_db($database) or die( "Unable to select database"); $query="SELECT * FROM actuadores"; $result=mysql_query($query); $num=mysql_numrows($result); mysql_close(); $i=0; $LuzPrincipal=mysql_result($result,$i,"LuzPrincipal"); $LuzMesa=mysql_result($result,$i,"LuzMesa"); $Persiana=mysql_result($result,$i,"Persiana"); $Store=mysql_result($result,$i,"Store"); $Clima=mysql_result($result,$i,"Clima"); $Ventilacion=mysql_result($result,$i,"Ventilacion"); echo '<'.",".$LuzPrincipal.",".$LuzMesa.",".$Persiana.",".$Store.",".$Clima.",". $Ventilacion.'>' ?> //////////////////////////////////////////////////////////////////////////////// COMENTARIOS Primero hace la consulta con los datos que quiero que pasen al arduino, los guardo en variables y luego simplemente hace un echo uniendo todas las variables, separándolas por comas para luego en el código del Arduino poder guardarlas en variables diferentes (cosa que aún está por hacer). ////////////////////////////////////////////////// ////////////////////// /// CONFIGURE ///////////////////////// /////////////////////////////////////////////// servidor de bytes [ ] = {174,123,231,247}; // dirección IP del servidor al que se conectará // La ubicación a la que ir en el servidor // asegúrese de mantener HTTP / 1.0 al final, esto le indica qué tipo de archivo es String location = “/ ~ bildr / examples / ethernet / HTTP / 1.0”; // si es necesario cambiar la dirección MAC (muy rara) byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; ////////////////////////////////////////////////// //////////////////////// Cliente de cliente de Ethernet; char inString [32]; // cadena para los datos seriales entrantes int stringPos = 0; // string index counter boolean startRead = false; // ¿está leyendo? Void setup () { Ethernet.begin (mac); Serial.begin (9600); } void loop () { String pageValue = connectAndRead (); // conectarse al servidor y leer la salida Serial.println (pageValue); // imprimir los resultados. delay (5000); // espera 5 segundos antes de volver a conectarte } String connectAndRead () { // connect to the server Serial.println ("conectando ..."); // el puerto 80 es típico de una página www si (client.connect (server, 80)) { Serial.println ("conectado"); client.print ("GET"); client.println (ubicación); client.println (); // Conectado - Leer la página return readPage (); // ve y lee la salida } else { return "conexión fallida"; } } String readPage () { // lee la página y captura y devuelve todo entre '<' y '>' stringPos = 0; memset (& inString, 0, 32); // borrar la memoria en la cadena while (verdadero) { if (client.available ()) { char c = client.read (); si (c == '<') {// '<' es nuestro carácter inicial startRead = true; // Listo para comenzar a leer la parte} else if (startRead) {if (c! = '>') {// '>' es nuestro carácter final inString [stringPos] = c; stringPos ++; } else { // tengo lo que necesitamos aquí! Podemos desconectar ahora startRead = false; client.stop (); client.flush (); Serial.println ("desconectar"); retorno enString; } } } } } [/código] El ejemplo de archivo php. Esto solo crea una cadena alfa-numérica aleatoria como <1Hc2f> [code lang = "php”] ' // Entonces, si la salida era <1kjhghk5> - el arduino leería 1kjhghk5 // Solo genera una cadena alfanumérica aleatoria $ what_the_arduino_reads = '1'.base_convert (rand (10000,9999999), 10, 36); echo '<'. $ what_the_arduino_reads. '>'; ?> [/ código] CODIGOS IMPORTANTES Importación de librerias y definición de modulo Ethernet //*************** IMPORTACION DE LIBRERIAS #include <Ethernet.h> #include <EthernetClient.h> #include <EthernetServer.h> #include <SPI.h> //*************** DEFINICION DE MODULO ETHERNET byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 }; //Define Dirección Mac de Arduino IPAddress ip(192,168,1,15); //Define dirección IP fija de Arduino EthernetClient client; //Define Instancia para Cliente Ethernet char server[]="192.168.1.11"; //Dirección de servidor PHP Metodo para enviar datos de Temperatura al servidor PHP //*************** METODO PARA ENVIAR DATOS DE TEMPERATURA void envioWeb(float tem, String id){//Parametros requeridos Temperatura e ID de sensor Serial.println("Enviando datos al servidor PHP"); if(client.connect(server,80)){//Conecta al servidor en el puerto 80 Serial.println("GOOD CONECT!"); client.print("GET /domotica/WsArdTemp.php?id="); //Envia petición GET con parametro 'id' del sensor client.print(id);//envia valor del parametro id client.print("&tempe=");//anexa 2do parametro 'tempe' client.print(tem);//envia el valor del parametro tempe client.println(" HTTP/1.1");//envia el standar de petición HTTP client.print("Host: ");//Envia parametro de HOST client.println(server);//Envia la dirección del Servidor WEB client.println("User-Agent: Arduino-Ethernet");//dato extra de arduino client.println("Connection: close");//Cierra la conexión client.println(); client.stop();//Detiene el CLiente Ethernet }else{ Serial.println("conexion fallida"); } } Método para leer temperatura de los sensores LM35 //***************** METODO PARA LEER TEMPERATURA float leerTemp(int pin){//Parametro requerido PIN ANALOGO t=0.0; temp=0.0; st=0.0; for(int i=0;i<15;i++){ //LECtura de 15 datos para fiabilidad temp+=analogRead(pin); } st=temp/15;//Promedio de datos recogidos t=(5.0*st*100.0)/1024.0;//Conversión a sistema Decimal return t;//Retorna dato } Método de conexión al servidor PHP //******************* METODO DE CONEXION A SERVIDOR PHP String conectPhp(){ Serial.println("conectando..."); if (client.connect(server, 80)) {//Conecta al servidor PHP en el puerto 80 Serial.println("connected"); client.print("GET "); //Define metodo de recepción de datos client.println(location); //Indica la localidad del Script PHP client.println(); return leerPhp(); //Metodo de lectura de Servidor PHP }else{return "conexión fallida luces"; } }//Finaliza metodo para conectar a Servidor PHP Método para leer los datos del Script php de nuestro Servidor PHP //******************* METODO PARA LEER DATOS DE SERVIDOR PHP String leerPhp(){ stringPos = 0; //Reinicia indice memset( &inString, 0, 32 ); //Limpia Memoria while(true){ //*********************** COMIENZA LECTURA DEL SERVIDOR PHP if (client.available()) { char c = client.read(); //Lee lo que imprime el Servidor PHP en la dirección: "http://192.168.1.15/domotica/leds.php"; if (c == '<' ) { //Si el caracter leido es el de inicio '<' (ver impresión de variable en servidor php) startRead = true; //inicia el periodo de lectura del servidor PHP }else if(startRead){ if(c != '>'){ //Si el caracter es diferente el caracter de finalización '>' (ver impresión de variable en servidor php) if(c!=','){//No tomar en cuenta las comas inString[stringPos] = c; //Asigna valor al espacio de la matriz stringPos ++; //Aumenta indice para matriz } }else{ //*********************** DESCONECTA DEL SERVIDOR PHP startRead = false; client.stop(); client.flush(); Serial.println("disconnecting."); //*********************** INICIA MODULO DE MANEJO DE LEDS for(int i=0;i<=6;i+=2){ stled=inString[i]-48; pnled=inString[i+1]-48; staled=bitRead(PIND,pnled); Serial.println("Imprime valores de st,sta y pn"); Serial.print(stled); Serial.print(staled); Serial.println(pnled); if(stled!=staled && pnled>0){ if(stled==1){digitalWrite(pnled,HIGH);} else{digitalWrite(pnled,LOW);} } }//fin FOR //*********************** FIN MODULO DE MANEJO DE LEDS return inString; }//fin else c != '>' }//fin else if(startRead) }//fin if (client.available()) }//Fin While }//Fin Metodo