Étape 2: Arduino Code
IDE Arduino : 1.0.3Avant de nous modifier le code, permet de discuter de comment cela fonctionne. L’Arduino communique avec les circuits de la sonde au cours de la série, avec les circuits gère les tâches rébarbatives donner un sens les sondes. Sur un intervalle de 60 seconde, nous appelons chaque fonction pour obtenir les données du capteur. Le pH et les fonctions lire de série jusqu'à ce qu’une séquence spécifique se trouve, s’appuyant sur les caractères précédents, formate une chaîne retour appropriée à une requête GET et retourne la chaîne. Enfin, une demande est faite à l’application Web.
Pour commencer, déclarer deux chaînes d’entrée
Dans les déclarations, définir deux chaînes d’entrée
String phsensorstring = "" ;
String dosensorstring = "" ;
Ensuite, nous devons définir les connexions série plus deux, mais à une vitesse de 38400 baud. Pour terminer l’installation, nous réserverons l’espace pour les chaînes d’entrée et de capteur du circuit.
Dans setup(), commencer les sorties séries
Serial.Begin(9600) ; Série standard
Serial2.Begin(38400) ; pH série
Serial3.Begin(38400) ; FAIRE série
Toujours dans setup(), réserver un espace pour les données du capteur
phsensorstring.Reserve(30) ;
dosensorstring.Reserve(30) ;
Tout comme nous obtenons les valeurs DHT et LDR, deux nouvelles fonctions sont créées pour obtenir le pH et dissous les valeurs d’oxygène. Ils lisent de série pour obtenir les valeurs respectives, créez une chaîne de retour mis en forme comme un morceau de la requête GET et puis redéfinissez cette chaîne de capteur.
Obtenir le pH
String getPH() {}
char phchar ;
tandis que (phchar! = « \r ») {}
phchar = (char)Serial2.read() ;
phsensorstring += phchar ;
}
String ph_reading = "& pH =" + phsensorstring ;
phsensorstring = "" ;
Return(ph_reading) ;
}
Obtenir
String getDO() {}
char dochar ;
tandis que (dochar! = « \r ») {}
dochar = (char)Serial3.read() ;
dosensorstring += dochar ;
}
String do_reading = « & DO = » + dosensorstring ;
dosensorstring = "" ;
Return(do_reading) ;
}
La boucle principale appelle chaque fonction sur un intervalle de 60 seconde et envoie ensuite une requête à l’application Web
void loop() {}
Obtenir la température et l’humidité
String DHTSensor = "" ;
DHTSensor = getDHT() ;
Serial.println ("DHT:" + DHTSensor) ;
Obtenir la lecture de LDR
Chaîne de LDR = "" ;
LDR = getLDR() ;
Serial.println ("LDR:" + LDR) ;
PH
String PHSensorValue = "" ;
PHSensorValue = getPH() ;
Serial.println ("pH:" + PHSensorValue) ;
FAIRE
String DOSensorValue = "" ;
DOSensorValue = getDO() ;
Serial.println ("faire:" + DOSensorValue) ;
Envoyer des données vers Webapp
GAE (webapp + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue) ;
Serial.println("") ;
Delay(60000) ;
}
Le sketch Arduino complet :
/*
Le bouclier d’environnement DAQ (V2) avec pH et sondes d’oxygène dissous.
*/
#include < SPI.h >
#include < Ethernet.h > / / Ethernet Shield
#include < DHT.h > / / DHT. Crédit : Adafruit Industries
Ethernet Shield
la mac de Byte [] = {0x90, 0xA2, 0xDA, 0 x 00, 0xA1, 0x90} ;
myIP Byte = {192, 168, 1, 15} ;
la passerelle de Byte [] = {192, 168, 1, 1} ;
Char [serveur] = "http://www.myapsystem.appspot.com" ;
EthernetClient client ;
Le rend facile de changer les noms de app
Chaîne de webapp = « http://www.myapsystem.appspot.com/ » ;
DHT-22
#define DHTPIN 3
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE) ;
Chaînes d’entrée sonde
String phsensorstring = "" ;
String dosensorstring = "" ;
BROCHES NUMÉRIQUES
int connectedOn = 6 ;
int connectedOff = 7 ;
BROCHES ANALOGIQUES
int AmbientLDR = A0 ; Résistance de charge léger
Envoie des données DHT
char temp_str [10] ; Chaîne de température
char rh_str [10] ; Chaîne de l’humidité relative
void setup() {}
Départ sortie série
Serial.Begin(9600) ; Série standard
Serial2.Begin(38400) ; série de pH
Serial3.Begin(38400) ; FAIRE série
Delay(1000) ;
Désactiver la carte SD si on dans la fente
pinMode(4,OUTPUT) ;
digitalWrite(4,HIGH) ;
Commencer à Ethernet
Ethernet.Begin(Mac) ;
Ethernet.Begin (mac, myIP) ;
Ethernet.Begin (mac, myIP, passerelle) ;
Delay(1000) ; Donner Ethernet une seconde pour initialiser
Serial.println(Ethernet.localIP()) ;
Réserver un espace pour les données du capteur
phsensorstring.Reserve(30) ;
dosensorstring.Reserve(30) ;
Début DHT
DHT.Begin() ;
Modes de mettre broche
pinMode (connectedOn, sortie) ;
pinMode (connectedOff, sortie) ;
Serial.println ("installation complète") ;
}
void loop() {}
Obtenir la température et l’humidité
String DHTSensor = "" ;
DHTSensor = getDHT() ;
Serial.println ("DHT:" + DHTSensor) ;
Obtenir la lecture de LDR
Chaîne de LDR = "" ;
LDR = getLDR() ;
Serial.println ("LDR:" + LDR) ;
PH
String PHSensorValue = "" ;
PHSensorValue = getPH() ;
Serial.println ("pH:" + PHSensorValue) ;
FAIRE
String DOSensorValue = "" ;
DOSensorValue = getDO() ;
Serial.println ("faire:" + DOSensorValue) ;
Envoyer des données vers Webapp
GAE (webapp + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue) ;
Serial.println("") ;
Delay(60000) ;
}
String getDHT() {}
flotter h = dht.readHumidity() ;
flotteur t = dht.readTemperature() ;
Si (isnan(t) || isnan(h)) {}
Serial.println ("Impossible de lire de DHT22") ;
} else {}
float ftemp = (((9.0/5.0) * t) + 32,0) ;
Temp de String = dtostrf (ftemp, 3, 1, temp_str) ;
Chaîne HR = dtostrf (h, 3, 1, rh_str) ;
String dhtUrl = "Temp = » + temp +" & humidité = "+ rh ;
Return(dhtUrl) ;
}
}
String getLDR() {}
int ambientLDR = analogRead(AmbientLDR) ;
String lightUrl = "& AmbientLDR =" + String(ambientLDR) ;
Return(lightUrl) ;
}
Retourne la valeur actuelle de pH
String getPH() {}
char phchar ;
tandis que (phchar! = « \r ») {}
phchar = (char)Serial2.read() ;
phsensorstring += phchar ;
}
String ph_reading = "& pH =" + phsensorstring ;
phsensorstring = "" ;
Return(ph_reading) ;
}
Retourne la valeur actuelle de l’oxygène dissous
String getDO() {}
char dochar ;
tandis que (dochar! = « \r ») {}
dochar = (char)Serial3.read() ;
dosensorstring += dochar ;
}
String do_reading = « & DO = » + dosensorstring ;
dosensorstring = "" ;
Return(do_reading) ;
}
void GAE(String link) {}
succès booléen = httpRequest(link) ;
Si (succès == true) {}
Delay(5000) ;
Boolean currentLineIsBlank = true ;
Dim readString = "" ;
char nouvelleChaine [100] ;
tandis que (client.connected()) {}
Si (client.available()) {}
char c = client.read() ;
Serial.Write(c) ;
Si (c == « \n » & & currentLineIsBlank) {}
Serial.println ("conclues fin de demande") ;
{while(client.Connected())}
char f = client.read() ;
readString += f ;
}
}
Si (c == « \n ») {}
currentLineIsBlank = true ;
} ElseIf (c! = « \r ») {}
currentLineIsBlank = false ;
}
}
}
client.Stop() ;
Serial.println(ReadString) ;
} else {}
Serial.println ("non connecté.") ;
}
}
httpRequest booléenne (lien String) {}
s’il y a une connexion réussie
Si (client.connect (serveur, 80)) {}
Serial.println (« GET » + lien + « HTTP/1.0 ») ; Pour le mode dev
client.println (« GET » + lien + "HTTP/1.0") ;
client.println() ;
Allumer la LED connectée
digitalWrite (connectedOff, basse) ;
digitalWrite (connectedOn, HIGH) ;
retourne la valeur true ;
} else {}
Vous ne pouvait pas établir la connexion
Serial.println ("connexion impossible") ;
Errors += 1 ;
client.Stop() ;
Allumer la LED connectée
digitalWrite (connectedOn, basse) ;
digitalWrite (connectedOff, HIGH) ;
retourne la valeur false ;
}
}