Paso 2: Código de Arduino
IDE de Arduino: 1.0.3Antes que modificar el código, permite discutir cómo funciona. El Arduino se comunica con los circuitos de prueba en serie, con los circuitos de manejo el trabajo del ronco dando sentido a las sondas. En un intervalo de 60 segundos, llamamos a cada función para obtener los datos del sensor. El pH y hacer funciones leen de serie hasta una secuencia específica se encuentra, partiendo de los anteriores caracteres, formatos una cadena apta para una petición GET y devuelve la cadena. Por último, se hace una petición a la aplicación.
Para empezar, declarar dos cadenas de entrada
En las declaraciones, definimos dos cadenas de entrada
String phsensorstring = "";
String dosensorstring = "";
A continuación, necesitamos establecer dos conexiones Serial más, pero a una velocidad de 38400 baudios. Para finalizar la instalación se reserva espacio para las secuencias de entrada y el sensor del circuito.
En setup(), comienzan las salidas serie
Serial.Begin(9600); Serie estándar
Serial2.Begin(38400); pH serie
Serial3.Begin(38400); HACER serie
Todavía en setup(), reservar espacio para los datos del sensor
phsensorstring.Reserve(30);
dosensorstring.Reserve(30);
Como obtenemos los valores de DHT y LDR, dos nuevas funciones han sido creadas para obtener el pH y disuelven valores de oxígeno. Leen de serie a los respectivos valores, crear una cadena con formato de una parte de la solicitud GET y luego restablecer la cadena de sensor.
Conseguir pH
String getPH() {}
char phchar;
mientras que (phchar! = '\r') {}
phchar = (char)Serial2.read();
phsensorstring += phchar;
}
String ph_reading = "& pH =" + phsensorstring;
phsensorstring = "";
Return(ph_reading);
}
Conseguir hacer
String getDO() {}
dochar Char;
mientras que (dochar! = '\r') {}
dochar = (char)Serial3.read();
dosensorstring += dochar;
}
String do_reading = "& =" + dosensorstring;
dosensorstring = "";
Return(do_reading);
}
El bucle principal llama a cada función en un intervalo de 60 segundos y luego envía una solicitud a la aplicación
void loop() {}
Obtener la temperatura y la humedad
String DHTSensor = "";
DHTSensor = getDHT();
Serial.println ("DHT:" + DHTSensor);
Obtener lectura del LDR
LDR de cadena = "";
LDR = getLDR();
Serial.println ("LDR:" + LDR);
PH
String PHSensorValue = "";
PHSensorValue = getPH();
Serial.println ("pH:" + PHSensorValue);
HACER
String DOSensorValue = "";
DOSensorValue = getDO();
Serial.println ("hacer:" + DOSensorValue);
Enviar datos a la aplicación
GAE (aplicación + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue);
Serial.println("");
Delay(60000);
}
El bosquejo completo de Arduino:
/*
El escudo de ambiente DAQ (V2) con pH y sondas de oxígeno disuelto.
*/
#include < SPI.h >
#include < Ethernet.h > / Ethernet escudo
#include < DHT.h > / / DHT. Crédito: Adafruit Industries
Escudo de Ethernet
mac de bytes [] = {0x90, 0xA2, 0xDA, 0 x 00, 0xA1, 0x90};
myIP de bytes [] = {192, 168, 1, 15};
puerta de entrada de bytes [] = {192, 168, 1, 1};
Char [servidor] = "http://www.myapsystem.appspot.com";
Cliente EthernetClient;
Es fácil cambiar los nombres de la aplicación
Aplicación de la cadena = "http://www.myapsystem.appspot.com/";
DHT-22
#define DHTPIN 3
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
Cadenas de entrada sonda
String phsensorstring = "";
String dosensorstring = "";
DIGITAL PINS
int connectedOn = 6;
int connectedOff = 7;
PINES ANALÓGICOS
int AmbientLDR = A0; Resistencia dependiente de luz
Enviar datos DHT
char temp_str [10]; Cadena de temperatura
char rh_str [10]; Cadena de humedad relativa
void setup() {}
Salida Serial de arranque
Serial.Begin(9600); Estándar serial
Serial2.Begin(38400); serie pH
Serial3.Begin(38400); HACER serie
Delay(1000);
Desactivar tarjeta SD si uno en la ranura
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
Salida Ethernet
Ethernet.Begin(Mac);
Ethernet.Begin (mac, myIP);
Ethernet.Begin (mac, myIP, puerta de entrada);
Delay(1000); Dar Ethernet una segunda para inicializar
Serial.println(Ethernet.localIP());
Reserva espacio para los datos del sensor
phsensorstring.Reserve(30);
dosensorstring.Reserve(30);
Inicio DHT
DHT.Begin();
Modos de juego Pin
pinMode (connectedOn, salida);
pinMode (connectedOff, salida);
Serial.println ("instalación completa");
}
void loop() {}
Obtener la temperatura y la humedad
String DHTSensor = "";
DHTSensor = getDHT();
Serial.println ("DHT:" + DHTSensor);
Obtener lectura del LDR
LDR de cadena = "";
LDR = getLDR();
Serial.println ("LDR:" + LDR);
PH
String PHSensorValue = "";
PHSensorValue = getPH();
Serial.println ("pH:" + PHSensorValue);
HACER
String DOSensorValue = "";
DOSensorValue = getDO();
Serial.println ("hacer:" + DOSensorValue);
Enviar datos a la aplicación
GAE (aplicación + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue);
Serial.println("");
Delay(60000);
}
String getDHT() {}
Float h = dht.readHumidity();
Float t = dht.readTemperature();
Si (isnan(t) || isnan(h)) {}
Serial.println ("error al leer desde DHT22");
} else {}
flotador ftemp = (((9.0/5.0) * t) + 32.0);
Temp de la cadena = dtostrf (ftemp, 3, 1, temp_str);
Cadena rh = dtostrf (h, 3, 1, rh_str);
String dhtUrl = "Temp =" + temp + "& humedad =" + rh;
Return(dhtUrl);
}
}
String getLDR() {}
int ambientLDR = analogRead(AmbientLDR);
String lightUrl = "& AmbientLDR =" + String(ambientLDR);
Return(lightUrl);
}
Devuelve el actual valor de pH
String getPH() {}
char phchar;
mientras que (phchar! = '\r') {}
phchar = (char)Serial2.read();
phsensorstring += phchar;
}
String ph_reading = "& pH =" + phsensorstring;
phsensorstring = "";
Return(ph_reading);
}
Devuelve el actual valor de oxígeno disuelto
String getDO() {}
dochar Char;
mientras que (dochar! = '\r') {}
dochar = (char)Serial3.read();
dosensorstring += dochar;
}
String do_reading = "& =" + dosensorstring;
dosensorstring = "";
Return(do_reading);
}
void GAE(String link) {}
éxito booleano = httpRequest(link);
Si (éxito == true) {}
Delay(5000);
Boolean currentLineIsBlank = true;
ReadString de cadena = "";
Reemplazos de Char [100];
mientras (client.connected()) {}
Si (client.available()) {}
char c = client.read();
Serial.Write(c);
Si (c == '\n' & & currentLineIsBlank) {}
Serial.println ("alcanzado fin de pedido");
{while(Client.Connected())}
char f = client.read();
readString += f;
}
}
Si (c == '\n') {}
currentLineIsBlank = true;
} else if (c! = '\r') {}
currentLineIsBlank = false;
}
}
}
Client.STOP();
Serial.println(readString);
} else {}
Serial.println ("no conectado.");
}
}
{} Boolean httpRequest (enlace de cadena)
Si hay una conexión exitosa
Si (client.connect (servidor, 80)) {}
Serial.println ("Consigue" enlace + "HTTP/1.0"); Para el modo dev
Client.println ("GET" + enlace + "HTTP/1.0");
Client.println();
Encender LED conectado
digitalWrite (connectedOff, bajo);
digitalWrite (connectedOn, HIGH);
verdaderas;
} else {}
No pudo realizar la conexión
Serial.println ("fallada la conexión");
errores += 1;
Client.STOP();
Encender LED conectado
digitalWrite (connectedOn, bajo);
digitalWrite (connectedOff, HIGH);
devuelven el valor false;
}
}