Arduino GPRS väderstation - del 1 (15 / 23 steg)
Steg 15: Skickar Data Via GPRS och HTTP
De fysiska anslutningarna mellan Mega 2560 och FONA 800L är ganska enkelt, förutom att något konstigt händer med litiumbatteriet och hur det avgifter. Jag faktiskt slutade med den lilla kontakten i mitten FONA styrelsen för min anslutning till 5V annars skulle den göra konstiga saker som att stänga av sig själv i till synes slumpmässigt ögonblick. Kanske den uppgraderade "H"-versionen är bättre?
Den kod som jag använde är löst baserad på Adafruit test koden i FONA biblioteket med undantag för en pjäs som skrev själv för att ändra data i en karaktär format acceptabelt att FONA chip.
Under inställningar måste vi definiera APN:
< p > fona.setGPRSNetworkSettings(F("pp.vodafone.co.uk"), F("wap"), F("wap")); Ändra dessa inställningar! (Nätverk APN, användarnamn, lösenord) < /p >
Då behöver vi en PHP redo att ta emot data:
< p > const char webadress [180] = < en href = "http://www.goatindustries.co.uk/weather/send.php?" > http://www.goatindustries.co.uk/weather/send.php?</a>;</p>
Märke att jag har använt "Skicka" i ovanstående kod. Använd aldrig send.php som filnamnet eftersom det är alltför lätt för någon att gissa. Använd en lång serie av bokstäver och siffror i stället, av säkerhetsskäl.
< p > / / / < br > / / detta är där data sammanställs i en karaktär...
dataString = initieraren + webadress + "vindhastigheten =" + vindhastigheten + "& windgust =" + windgust + "& windway =" + windway + "& tempout =" + tempout + "& tempsoil =" + tempsoil + "& regn =" + regn + "& luftfuktighet =" + fuktighet + "& Tryck =" + tryck + "& volt =" + volt + "& fukt =" + fukt + "& tempint =" + tempint + "& illrar =" + jaga ut;
int n = dataString.length();
Serial.Print ("sträng att skicka:"); Serial.println(dataString);
Serial.Print ("storleken på sträng:"); Serial.println(n);
Bygger tecknet url:
för (int aa = 0; aa < = n; aa ++)
{
URL [aa] = dataString [aa];
}
Serial.Print ("Character data att skicka:"); Serial.println(URL);
Serial.println("");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
... och som skickas ut via HTTP till en PHP-fil som heter send.php redo att ta emot den.
Serial.Print ("Skicka url... ");
Serial.Print ("sammanställt url är:"); Serial.println(URL);
Serial.println(F("***"));
om (! fona. HTTP_GET_start(URL, &StatusCode, (uint16_t *) & längd)) {
Serial.println("failed!");
}
medan (längd > 0) {
samtidigt (fona.available()) {
char c = fona.read();
Serial.Write är för långsam, ska vi skriva direkt till seriell register!
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
loop_until_bit_is_set (UCSR0A, UDRE0); / * Vänta tills data registrera tomma. */
UDR0 = c;
#else
digitalWrite 5, hög, Ringa tillbaka till Master säga att överförings var framgångsrik.
Tone(7,((Windway*15)+400),1000);
noTone(7);
Serial.write(c);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p>
I ovanstående kod, har vi skickat våra data till send.php och sätta i ett samtal tillbaka för att berätta om det var lyckad eller inte. Denna uppmaning tillbaka utlöser en Summer ton på stift D7 och skickar en puls på stift D7 att berätta 328P befälhavaren att överföringen var ok.