Arduino GPRS Wetterstation - Teil 1 (22 / 23 schritt)


Schritt 22: MEGA 2560 vollständigen Code

< p > / / SLAVE siehe Anhang Textdatei für vollständige Details. < Br > #include #include "Adafruit_FONA.h" #include #include #include #include #include #include "DHT.h" #define FONA_RX 2 #define FONA_TX 10 #define FONA_RST 4 #define ONE_WIRE_BUS_PIN 11 #define DHTPIN 4 //#define DHTTYPE DHT11 / / DHT 11 #define DHTTYPE DHT22 / / DHT 22 (AM2302), AM2321 / / Pin 5 //Sends ein Rückruf signal zur master bei erfolgreicher Datenübertragung. DHT Dht (DHTPIN, DHTTYPE); OneWire oneWire(ONE_WIRE_BUS_PIN); DallasTemperature Sensoren (& OneWire); DeviceAddress Probe01 = {0x28, 0xFF, 0xA3, 0x4D, 0 x 00, 0x16, 0x03, 0xEC}; Das sind die Adressen der temp Sonden DS18B20 DeviceAddress Probe02 = {0x28, 0x4E, 0xCA, 0 x 80, 0 x 04, 0 x 00, 0 x 00, 0xA0}; DeviceAddress Probe03 = {0x28, 0x7C, 0x8A, 0x5D, 0 x 05, 0 x 00, 0 x 00, 0xFD}; const lange Frettchen = 179224; Int n = 0; Int Z = 0; Int Feuchtigkeit = 0; unsigned long Heatindex = 0; unsigniert lange Feuchtigkeit = 0; unsigned long tempDHT22 = 0; unsigned long Windspeed = 0; unsigned long Windgust = 0; unsigned long AvWindPulseRate = 0; unsigned long MaxWindPulseRate = 0; unsigned long Regen = 0; unsigned long Windrichtung = 0; unsigned long Windkanal = 0; unsigned long MoistureValue = 0; unsigned long Druck = 0; unsigned long Volt = 1200; multipliziert mit 100. unsigned long Tempint; unsigned long Tempout; unsigned long Tempsoil; unsigned long PreviousMillis = 0; const langes Intervall = 10000; Dies ist ein großer Puffer für Antworten Char Replybuffer [255]; Zeichenfolge-Initiator, Datenstring; const Char WebAddress [180] = "Http://www.goatindustries.co.uk/weather/send.php?"; Char-Url [180]; #include SoftwareSerial FonaSS = SoftwareSerial (FONA_TX, FONA_RX); SoftwareSerial * FonaSerial = & FonaSS; Adafruit_FONA Fona = Adafruit_FONA(FONA_RST); Adafruit_BMP085_Unified Bmp = Adafruit_BMP085_Unified(10085); uint8_t "ReadLine" (Char * Buff, Maxbuff uint8_t, uint16_t Timeout = 0); uint8_t Art; void setup() {Serial.begin(115200); PinMode (5, OUTPUT); //Sends einen Anruf zurück Signal, wenn erfolgreiche Stammdaten Übertragung. PinMode (6, OUTPUT); / / setzt FONA digitalWrite(6,LOW); / / Verzögerung (1000); / / digitalWrite(6,HIGH); / / Verzögerung (100); / / digitalWrite(6,LOW); dht.begin(); if(!bmp.begin()) {/ * gab es ein Problem erkennen die BMP085... Überprüfen Sie die Anschlüsse * / Serial.print ("Ooops, keine BMP085 erkannt... Überprüfen Sie Ihre Verkabelung oder I2C ADDR!"); while(1); } Wire.begin(9); Wire.onReceive(receiveEvent); während (!) Seriell); Verwenden Sie diese für die Initiierung Programm durch Öffnen des seriellen Monitor. Löschen Sie im Normalbetrieb. Serial.println (F ("FONA basic Test")); Serial.println (F ("Initializing... (Dauert 3 Sekunden) ")); Sensors.Begin(); Temperatur-Sensoren DS18B20. sensors.setResolution (Probe01, 11); War auf Pin 10 in Version 09 sensors.setResolution (Probe02, 11); sensors.setResolution (Probe03, 11); FonaSerial -> begin(4800); Wenn (! fona.begin(*fonaSerial)) {Serial.println (F ("konnte nicht finden FONA")); während (1);} Typ = fona.type(); Serial.println (F ("FONA ist" OK"")); Serial.Print (F ("gefunden")); Schalter (Typ) {case FONA800L: Serial.println (F ("FONA 800L")); Break; Case FONA800H: Serial.println (F ("FONA 800H")); Break; Case FONA808_V1: Serial.println (F ("FONA 808 (v1)")); Break; Case FONA808_V2: Serial.println (F ("FONA 808 (v2)")); Break; Case FONA3G_A: Serial.println (F ("FONA 3G (amerikanisch)")); Break; Case FONA3G_E: Serial.println (F ("FONA 3G (Europäischen)")); Break; Default: Serial.println(F("???")); Break;} networkStatus(); Überprüfen Sie, dass das Netzwerk verfügbar ist. Haus ist gut. FONA Test drucken Modul IMEI-Nummer. Char Imei [15] = {0}; MÜSSEN einen 16 Zeichenpuffer für IMEI verwenden! uint8_t ImeiLen = fona.getIMEI(imei); Wenn (ImeiLen > 0) {Serial.print ("Modul IMEI:"); Serial.println(IMEI); } Serial.println(""); Serial.println ("überprüfen, dass GPRS zunächst ausgeschaltet ist..."); fona.setGPRSNetworkSettings(F("pp.vodafone.co.uk"), F("wap"), F("wap")); Ändern Sie diese Einstellungen! (APN, Benutzername, Passwort) Netzwerkverzögerung (1000); GPRS deaktivieren: Wenn ()
! fona.enableGPRS(false)) Serial.println (F ("No - Fehler beim Deaktivieren")); Serial.println wurde ("Wenn die Zeile oben sagt, OK, dann GPRS nur ausgeschaltet"); Verzögerung (1000); Serial.println(""); Serial.println ("warten auf Daten von i2c..."); Serial.println("");} void loop() {wenn (Z > 0) / / diese Schleife wird ausgelöst, wenn z größer als 1 ist. Der Wert von z ergibt sich aus der Quittung {/ / i2c-Daten. Es muss eine zweite Z-Evaluierung Fona schalten Sie die GPRS-networkStatus() zu aktivieren; und Datenverlust in die zeitliche Lücke zu verhindern. Volt = AnalogRead (0) * 4.688; Alle Dezimalstellen werden in Ganzzahlen konvertiert, da wir keine Dezimalstelle Charakter durch HTTP senden möchten. / / Lesung Temperatur oder Luftfeuchtigkeit dauert ca. 250 Millisekunden! Sensor-Werte kann auch bis zu 2 Sekunden "alten" (es ist ein sehr langsam Sensor) schweben h = dht.readHumidity(); Lesen Sie Temperatur Celsius (Standard) schweben t = dht.readTemperature(); Lesen Sie Temperatur Fahrenheit (IsFahrenheit = True) schweben f = dht.readTemperature(true); Verzögerung (3000); Überprüfen Sie, ob alle Lesevorgänge gescheitert und exit früh (erneut versuchen). Wenn (isnan(h) || isnan(t) || isnan(f)) {Serial.println ("Fehler beim Lesen von DHT Sensor!"); return;} / / Compute Hitzeindex in Fahrenheit (Standard) schweben Hif = dht.computeHeatIndex (f, h); Hitzeindex in Celsius zu berechnen (IsFahreheit = False) schweben Hic = dht.computeHeatIndex (t, h, False); Luftfeuchtigkeit = h; tempDHT22 = t; Heatindex = Hic; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// sensors_event_t event; Bmp.getEvent(&event); Wenn (event.pressure) {Druck = (event.pressure) * 100;} / / / sensors.requestTemperatures(); DS18B20s Windgeschwindigkeit = AvWindPulseRate * 20; Windgust = MaxWindPulseRate * 20; Windkanal = Windrichtung; Feuchtigkeit = MoistureValue * 1,08; printData(); Druckt die Daten auf seriell zum Debuggen. Serial.Print (F ("FONA >")); turnOnGPRS(); turnOnGPRS(); Website-URL uint16_t Statuscode zu lesen; int16_t Länge; Char-Url [180]; flushSerial(); weatherData(); / / Dies ist, wo die Daten in ein Charakter... kompiliert ist Datenstring = Initiator + WebAddress + "Windstärke =" + Windspeed + "& Windgust =" + Windgust + "& Windkanal =" + Windkanal + "& Tempout =" + Tempout + "& Tempsoil =" + Tempsoil + "& Regen =" + Regen + "& Feuchtigkeit =" + feuchte + "& Druck =" + Druck + "& Volt =" + Volt + "& Feuchtigkeit =" + Feuchtigkeit + "& Tempint =" + Tempint + "& Frettchen =" + Frettchen; Int n = dataString.length(); Serial.Print ("Daten-String senden:"); Serial.println(dataString); Serial.Print ("Größe der Zeichenfolge:"); Serial.println(n); Baut das Url-Zeichen: für (Int aa = 0; aa < = n; aa ++) {Url [aa] = Datenstring [aa];} Serial.Print ("Charakter der zu sendenden Daten:"); Serial.println(URL); Serial.println(""); / /... und an Sie per HTTP eine PHP-Datei namens send.php bereit, es zu empfangen. Serial.Print ("Url senden... "); Serial.Print ("Compiled Url ist:"); Serial.println(URL); Serial.println(F("***")); Wenn (! Fona. HTTP_GET_start(URL, &Statuscode, (uint16_t *) & Länge)) {Serial.println("Failed!");} (Länge > 0) {während (fona.available()) {Char c = fona.read(); / / Serial.write ist zu langsam, wir schreiben direkt an seriellen Register! #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) Loop_until_bit_is_set (UCSR0A, UDRE0); / * warten Sie, bis Daten leer. registrieren * / UDR0 = c; #else DigitalWrite (5, HIGH); / / Rückruf an Meister zu sagen, dass potentielle war erfolgreich. Ton (7 ((windway*15) + 400), 1000); noTone(7); Serial.Write(c); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif length--; Wenn (! Länge) brechen; {}} Serial.println(F("\n***")); FONA. HTTP_GET_end(); Serial.println ("warten Sie 10 Sekunden..."); Delay(500); DigitalWrite (5, LOW); Verzögerung (10000); GPRS deaktivieren: Wenn (! fona.enableGPRS(false)) Serial.println (F ("No - Fehler beim Deaktivieren")); Serial.println ("GPRS deaktiviert?"); Serial.println ("warten auf Daten von i2c..."); Spülen Sie Eingabe flushSerial(); während (fona.available()) {Serial.write(fona.read());} Z = 0; {}} / / Ende der Hauptschleife. / / Funktionen: void flushSerial() {während (Serial.available()) Serial.read();} readBlocking() char {Weile (!) Serial.available()); Rückkehr Serial.read(); } uint16_t readnumber() {uint16_t X = 0; char c; zwar (! Isdigit (c = readBlocking())) {/ / Serial.print(c);} Serial.Print(c); X = c - '0'; während (Isdigit (c = readBlocking())) {Serial.print(c); X * = 10; X += c - '0';} return x; } uint8_t "ReadLine" (Char * Buff, Maxbuff uint8_t, uint16_t Timeout) {uint16_t Buffidx = 0; boolesche Timeoutvalid = True; wenn (Timeout == 0) Timeoutvalid = False; zwar (True) {wenn (Buffidx > Maxbuff) {/ / Serial.println(F("SPACE")); Break;} während (Serial.available()) {Char c = Serial.read(); //Serial.print (c, HEX); Serial.Print("#"); Serial.println(c); Wenn (c == '\r') weiter; Wenn (c == 0xA) {wenn (Buffidx == 0) / / die erste 0x0A ignoriert weiter; Timeout = 0; / / die zweite 0x0A ist das Ende der Zeile Timeoutvalid = True; Break;} Buff [Buffidx] = c; Buffidx ++; } Wenn (Timeoutvalid & & Timeout == 0) {/ / Serial.println(F("TIMEOUT")); Break;} delay(1); } Buff [Buffidx] = 0; null Begriff Rückkehr Buffidx; } / / / void ReceiveEvent (Int Byte) {/ / sicherstellen, dass die Reihenfolge entspricht in Master und Slave. delay(10); MaxWindPulseRate = Wire.read(); delay(10); Windrichtung = Wire.read(); delay(10); Regen = Wire.read(); delay(10); AvWindPulseRate = Wire.read(); delay(10); MoistureValue = Wire.read(); delay(10); Z = 1; Feuchtigkeit = MoistureValue;} / / / void PrintSoilTemperature (DeviceAddress DeviceAddress) {Float Temp = sensors.getTempC(deviceAddress); Tempsoil = Temp * 100; wenn (Tempsoil ==-127.00) {Serial.print ("Fehler beim Abrufen Temperatur");} Else {Serial.print(tempsoil); Serial.Print ("Grad C * 100"); {}} void PrintOutsideTemperature (DeviceAddress DeviceAddress) {Float Temp = sensors.getTempC(deviceAddress); Tempout = Temp * 100; wenn (Tempout ==-127.00) {Serial.print ("Fehler beim Abrufen Temperatur");} Else {Serial.print(tempout); Serial.Print ("Grad C * 100"); {}} void PrintInsideTemperature (DeviceAddress DeviceAddress) {Float Temp = sensors.getTempC(deviceAddress); Tempint = Temp; wenn (Tempint ==-127.00) {Serial.print ("Fehler beim Abrufen Temperatur");} Else {Serial.print(tempint); Serial.Print ("Grad CC * 100"); {}} / / / void networkStatus() {/ / Netzwerk/Mobilfunk Status uint8_t n zu lesen = fona.getNetworkStatus(); Serial.println(""); Serial.Print (F ("Netzwerk-Status")); Serial.Print(n); Serial.Print (F(":")); Wenn (n == 0) Serial.println (F ("nicht registriert")); Wenn (n == 1) Serial.println (F ("registriert (Heim)")); Wenn (n == 2) Serial.println (F ("nicht registrierte (Suche)")); Wenn (n == 3) Serial.println(F("Denied")); Wenn (n == 4) Serial.println(F("Unknown")); Wenn (n == 5) Serial.println (F ("Registered roaming")); Serial.println ("Netzwerk-Status muss" registriert werden""zu Hause"in der Zeile oberhalb"); Serial.println("");} void turnOnGPRS() {Serial.println ("jetzt Versuch, GPRS aktivieren..."); Wenn ()! fona.enableGPRS(true)) Serial.println (F ("No - Fehler beim Schalten")); Serial.println ("GPRS ist auf, wenn die Zeile oben zeigt"OK""); Serial.println ("warten auf 10 Sekunden, um sicherzustellen, dass GPRS auf..."); Verzögerung (10000); } / / / void printData() {Serial.print ("Probe01 (außen) Temp:"); printOutsideTemperature(Probe01); Serial.println(); Serial.Print ("Probe02 (Boden) Temp:"); printSoilTemperature(Probe02); Serial.println(); Serial.Print ("Probe03 (Tempint) Temp:"); printInsideTemperature(Probe03); Serial.println(); Serial.Print ("Main Batteriespannung:"); Serial.println(Volts); Serial.Print ("i2c-MaxWindPulseRate:"); Serial.println(windgust); Noch kalibriert nicht. Serial.Print ("i2c-AvWindPulseRate:"); Serial.println(Windspeed); Serial.Print ("i2c Windrichtung:"); Serial.println(windDirection); Serial.Print ("i2c Regen:"); Serial.println(Rain); Serial.Print ("i2c-MoistureValue:"); Serial.println(moistureValue); Serial.Print ("atmosphärischen Druck:"); Serial.Print(Pressure); Serial.println ("hPa * 100"); Serial.Print ("Feuchtigkeit:"); Serial.Print(Humidity); Serial.println ("% \t"); Serial.Print ("DHT22 Temp:"); Serial.Print(tempDHT22); Serial.println ("* C"); Serial.Print ("Hitzeindex:"); Serial.Print(heatindex); Serial.println ("* C"); Serial.println("");} </p >

In Verbindung stehende Artikel

Arduino Wireless Wetterstation & Webserver

Arduino Wireless Wetterstation & Webserver

ZielMein PC (die seit 6 Jahren auf 24 / 7) und Wetterstation Software mit einem Arduino – geringeren Stromverbrauch, weniger Wartung und kleinere Stellfläche zu ersetzen.  Minimale PC-Funktionalität erfordert Vervielfältigung:• Erfassung von Wetterda
Arduino mit Ajax Teil 1

Arduino mit Ajax Teil 1

GitHub: https://github.com/rogerin/ArduinoComAjaxTwitter: https://twitter.com/rogerin
Arduino mit Ajax Teil 2

Arduino mit Ajax Teil 2

GitHub: https://github.com/rogerin/ArduinoComAjaxTwitter: https://twitter.com/rogerin
Fernsteuerung per GPRS/GSM SMS(Arduino)

Fernsteuerung per GPRS/GSM SMS(Arduino)

Fernbedienung, vor allem, wenn dieser keine Ethernet oder Wifi im Freien, ist eine sehr tiefgründige Dinge in der Vergangenheit gewesen. Als ich ein Kind war, das Bild ich immer, dass ich eine Ausrüstung haben, die alle Haushaltsgeräte steuern kann.
Arduino Tutorials (Teil 3-17-Tutorial-Paket)

Arduino Tutorials (Teil 3-17-Tutorial-Paket)

Dies ist Arduino Tutorial Pack Teil 3.Der 1. Teil ist hier verfügbar:Der 2. Teil hier:Im Gegensatz zu anderen Tutorials hier geben ich einen Hintergrund in der Theorie nicht wie es funktioniert. Es orientiert sich an das Ergebnis wie man es erreichen
DIY Arduino und Raspberry Pi Wetterstation und Web-Server

DIY Arduino und Raspberry Pi Wetterstation und Web-Server

Dies ist ein Projekt, das die Temperatur mit der TMP36 IC Temperatursensor und ein Arduino -Board bringt. Diese Daten werden über seriell auf dem Raspberry PiBoard Bearbeitung einer Web-Seite, dass der Raspberry Pi selbst gehostet wird. Für dieses Pr
Cloud-Hoppers - Arduino-Wetterstation

Cloud-Hoppers - Arduino-Wetterstation

Einfache Arduino Uno Wetterstation mit Ethernet Web Access mit Piepsen Maplin Sensoren :) siehe PDF für Beschreibung und Arduino Code. Sie benötigen 1 Arduino Uno und Ethernet Shield + einige Streifen Board oder ein Brot-Brett, die Sensoren anzuschli
Arduino Tutorials (Teil 1-16 Tutorial Pack)

Arduino Tutorials (Teil 1-16 Tutorial Pack)

Dies ist Arduino Tutorial Pack Teil 1.Der 2. Teil gibt es hier:3. Teil gibt es hier: Im Gegensatz zu anderen Tutorials hier ich einen Hintergrund in der Theorie geben nicht wie es funktioniert. Es orientiert sich an das Ergebnis wie erreichen - Messu
Arduino Tutorials (Teil 4-21 Tutorial Pack)

Arduino Tutorials (Teil 4-21 Tutorial Pack)

Dies ist Arduino Tutorial Pack Teil 4.Der 1. Teil ist hier verfügbar:Der 2. Teil gibt es hier:Der 3. Teil ist hier verfügbar:Im Gegensatz zu anderen Tutorials hier geben ich einen Hintergrund in der Theorie nicht wie es funktioniert. Es orientiert si
Einrichten eines A100LK-Anemometer auf Arduino

Einrichten eines A100LK-Anemometer auf Arduino

Jemand denkt der Installation einer Windkraftanlage oder sogar eine ganze Herde von Windgeneratoren, wären gut beraten, die vorgeschlagenen Standort für mindestens ein Jahr vor einen Cent mehr auf Hardware zu überwachen. Dies ist, was für die A100LK
Arduino Boden Sonde mittels DS18B20 und DIY Feuchtigkeit Hardware

Arduino Boden Sonde mittels DS18B20 und DIY Feuchtigkeit Hardware

Wie ein fanatischer Gärtner oder einen professionellen Landwirt, zu wissen, die ökologischen Bedingungen unseres Bodens von unschätzbarem Wert ist. Natürlich kann nicht messen wir die Anzahl der Würmer oder Teile des organischen Humus, aber wir könne
Arduino temperaturgesteuerten Lüfter

Arduino temperaturgesteuerten Lüfter

Ich und ein paar Gruppenmitglieder haben beschlossen, dass für den Sommer es vorteilhaft wäre, ein Fan zu schaffen, schaltet bei 70 ° c und Intensität mit der Hitze nimmt weiter zu. Also das ist was wir getan haben. :)Schritt 1: Zahnräder Erstens wir
2 Arduino Powered RC Flugzeug

2 Arduino Powered RC Flugzeug

Willkommen Sie Hallo, auf meiner instructable auf den Aufbau einer RC Flugzeug komplett von Grund auf, mit Arduino.Ich habe eine RC Flugzeug für eine Weile zu bauen wollte und bekam die Teile für Gebäude für. Sender und Empfänger, jedoch können sehr