Stap 2: Arduino Code
Arduino IDE: 1.0.3Voordat we de code wijzigen, kunnen bespreken hoe het werkt. De Arduino communiceert met de sonde circuits via de seriële poort, met de behandeling van de grunt werk maken van de betekenis van de sondes circuits. Op een 60 tweede interval noemen we elke functie om de sensorgegevens te krijgen. De pH en de functies afgelezen seriële tot een specifieke reeks wordt gevonden, voortbouwend op de voorafgaande tekens, een geschikt op een GET verzoek resultaatreeks omgezet en de tekenreeks retourneert. Tot slot wordt bij de webapp een verzoek ingediend.
Om te beginnen, verklaren twee input tekenreeksen
Definieer in de verklaringen, twee input tekenreeksen
Phsensorstring koord = "";
Dosensorstring koord = "";
Vervolgens moeten we twee meer seriële verbindingen, maar op een 38400 baud-rate. Om de setup af te sluiten zullen we ruimte gereserveerd voor de input en sensor snaren van het circuit.
In Setup, start u de seriële uitgangen
Serial.begin(9600); Standard Serial
Serial2.begin(38400); pH seriële
Serial3.begin(38400); Seriële doen
Nog steeds in Setup, ruimte gereserveerd voor de sensorgegevens
phsensorstring.reserve(30);
dosensorstring.reserve(30);
Net zoals we de DHT en LDR waarden krijgen, twee nieuwe functies worden gemaakt om de pH en opgeloste zuurstof waarden. Ze lezen uit seriële te krijgen van de respectievelijke waarden, een geretourneerde tekenreeks die is opgemaakt als een stuk van de GET-verzoek te maken en opnieuw de sensor-tekenreeks.
Krijgen van pH
String getPH() {}
char phchar;
terwijl (phchar! = '\r') {}
phchar = (char)Serial2.read();
phsensorstring += phchar;
}
Ph_reading koord = "& pH =" + phsensorstring;
phsensorstring = "";
Return(ph_reading);
}
Krijgen
String getDO() {}
char dochar;
terwijl (dochar! = '\r') {}
Youlicit = (char)Serial3.read();
dosensorstring += dochar;
}
Do_reading koord = "& =" + dosensorstring;
dosensorstring = "";
Return(do_reading);
}
De hoofdlus elke functie verzoekt een 60 tweede interval en stuurt een verzoek naar de webapp
void loop {}
Krijgen van de temperatuur en vochtigheid
DHTSensor koord = "";
DHTSensor = getDHT();
Serial.println ("DHT:" + DHTSensor);
LDR lezing krijgen
LDR string = "";
LDR = getLDR();
Serial.println ("LDR:" + LDR);
PH
PHSensorValue koord = "";
PHSensorValue = getPH();
Serial.println ("pH:" + PHSensorValue);
DOEN
DOSensorValue koord = "";
DOSensorValue = getDO();
Serial.println ("doen:" + DOSensorValue);
Gegevens verzenden Webapp
GAE (webapp + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue);
Serial.println("");
delay(60000);
}
De volledige Arduino sketch:
/*
Het milieu DAQ (V2) schild met de pH en de opgeloste zuurstof sondes.
*/
#include < SPI.h >
#include < Ethernet.h > / / Ethernet Shield
#include < DHT.h > / / DHT. Credit: Adafruit Industries
Ethernet-Shield
byte mac [] = {0x90, 0xA2, 0xDA, 0x00, 0xA1, 0x90};
byte myIP [] = {192, 168, 1, 15};
byte gateway [] = {192, 168, 1, 1};
char [server] = "http://www.myapsystem.appspot.com";
EthernetClient de klant;
Maakt het gemakkelijk om app namen wijzigen
Webapp string = "http://www.myapsystem.appspot.com/";
DHT-22
#define DHTPIN 3
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
Sonde input tekenreeksen
Phsensorstring koord = "";
Dosensorstring koord = "";
DIGITALE PINNEN
int connectedOn = 6;
int connectedOff = 7;
ANALOGE PINS
int AmbientLDR = A0; Lichte Dependent Resistor
DHT gegevens verzenden
char temp_str [10]; Temperatuur tekenreeks
char rh_str [10]; Relatieve vochtigheid String
VOID Setup {}
Uitgang voor seriële van start
Serial.begin(9600); Standaard seriële
Serial2.begin(38400); pH seriële
Serial3.begin(38400); Seriële doen
delay(1000);
SD-kaart uitschakelen als men in de sleuf
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
Start Ethernet
Ethernet.begin(Mac);
Ethernet.begin (mac, myIP);
Ethernet.begin (mac, myIP, gateway);
delay(1000); Geef Ethernet een tweede initialiseren
Serial.println(Ethernet.localIP());
Ruimte gereserveerd voor de sensorgegevens
phsensorstring.reserve(30);
dosensorstring.reserve(30);
Start DHT
DHT.begin();
Set Pin modi
pinMode (connectedOn, OUTPUT);
pinMode (connectedOff, OUTPUT);
Serial.println ('Setup voltooid');
}
void loop {}
Krijgen van de temperatuur en vochtigheid
DHTSensor koord = "";
DHTSensor = getDHT();
Serial.println ("DHT:" + DHTSensor);
LDR lezing krijgen
LDR string = "";
LDR = getLDR();
Serial.println ("LDR:" + LDR);
PH
PHSensorValue koord = "";
PHSensorValue = getPH();
Serial.println ("pH:" + PHSensorValue);
DOEN
DOSensorValue koord = "";
DOSensorValue = getDO();
Serial.println ("doen:" + DOSensorValue);
Gegevens verzenden Webapp
GAE (webapp + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue);
Serial.println("");
delay(60000);
}
String getDHT() {}
zweven h = dht.readHumidity();
zweven t = dht.readTemperature();
Als (isnan(t) || isnan(h)) {}
Serial.println ("kon aflezen uit DHT22");
} else {}
zweven ftemp = (((9.0/5.0) * t) + 32,0);
Tekenreeks temp = dtostrf (ftemp, 3, 1, temp_str);
String rh = dtostrf (h, 3, 1, rh_str);
DhtUrl koord = "Temp =" + temp + "& vochtigheid =" + rh;
Return(dhtUrl);
}
}
String getLDR() {}
int ambientLDR = analogRead(AmbientLDR);
LightUrl koord = "& AmbientLDR =" + String(ambientLDR);
Return(lightUrl);
}
Retourneert de huidige waarde van de pH
String getPH() {}
char phchar;
terwijl (phchar! = '\r') {}
phchar = (char)Serial2.read();
phsensorstring += phchar;
}
Ph_reading koord = "& pH =" + phsensorstring;
phsensorstring = "";
Return(ph_reading);
}
Retourneert de huidige waarde van de opgeloste zuurstof
String getDO() {}
char dochar;
terwijl (dochar! = '\r') {}
Youlicit = (char)Serial3.read();
dosensorstring += dochar;
}
Do_reading koord = "& =" + dosensorstring;
dosensorstring = "";
Return(do_reading);
}
VOID GAE(String link) {}
succes van Boole = httpRequest(link);
Als (succes == true) {}
delay(5000);
Boole currentLineIsBlank = waar;
ReadString koord = "";
char newString [100];
terwijl (client.connected()) {}
Als (client.available()) {}
char c = client.read();
Serial.write(c);
Als (c == '\n' & & currentLineIsBlank) {}
Serial.println ("Reached end of verzoek");
while(client.Connected()) {}
char f = client.read();
readString += f;
}
}
Als (c == '\n') {}
currentLineIsBlank = true;
} else if (c! = '\r') {}
currentLineIsBlank = false;
}
}
}
client.stop();
Serial.println(readString);
} else {}
Serial.println ("niet aangesloten");
}
}
Booleaanse httpRequest (de verwijzing van de tekenreeks) {}
Als er een succesvolle verbinding
Als (client.connect (server, 80)) {}
Serial.println ("GET" koppeling + "HTTP/1.0"); Voor dev-modus
client.println ("GET" + link + "HTTP/1.0");
client.println();
Aangesloten LED inschakelen
digitalWrite (connectedOff, laag);
digitalWrite (connectedOn, hoge);
return true;
} else {}
U kon het niet maken van de verbinding
Serial.println ("verbinding mislukt");
fouten += 1;
client.stop();
Aangesloten LED inschakelen
digitalWrite (connectedOn, laag);
digitalWrite (connectedOff, hoge);
return false;
}
}