Arduino GPRS weerstation - deel 1 (22 / 23 stap)

Stap 22: MEGA 2560 volledige Code

< p > / / SLAVE zie bijgevoegd bestand voor volledige 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 een call back signaal naar de master wanneer succesvol gegevensoverdracht. DHT dht (DHTPIN, DHTTYPE); Privacy oneWire(ONE_WIRE_BUS_PIN); DallasTemperature sensoren (& Privacy); DeviceAddress Probe01 = {0x28, 0xFF, 0xA3, 0x4D, 0x00, 0x16, 0x03, 0xEC}; Dit zijn de adressen van de temp sondes DS18B20 DeviceAddress Probe02 = {0x28, 0x4E, 0xCA, 0x80, 0x04, 0x00, 0x00, 0xA0}; DeviceAddress Probe03 = {0x28, 0x7C, 0x8A, 0x5D, 0x05, 0x00, 0x00, 0xFD}; Const lange fretten = 179224; int n = 0; int z = 0; int vocht = 0; unsigned long heatindex = 0; unsigned long vochtigheid = 0; unsigned long tempDHT22 = 0; niet-ondertekende lange windsnelheid = 0; unsigned long windgust = 0; unsigned long avWindPulseRate = 0; unsigned long maxWindPulseRate = 0; unsigned long regen = 0; niet-ondertekende lange windrichting = 0; unsigned long windway = 0; unsigned long moistureValue = 0; niet-ondertekende lange druk = 0; unsigned long volt = 1200; vermenigvuldigd met 100. unsigned long tempint; unsigned long tempout; unsigned long tempsoil; unsigned long previousMillis = 0; Const lange interval = 10000; Dit is een grote buffer voor antwoorden char replybuffer [255]; Tekenreeks initiatiefnemer, dataString; const char adres [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, uint8_t maxbuff, uint16_t-timeout = 0); uint8_t type; void setup {Serial.begin(115200) pinMode (5, OUTPUT); //Sends een oproep terug signaal naar de wanneer succesvol stamgegevens transmissie. pinMode (6, OUTPUT); / / reset FONA digitalWrite(6,LOW); / / vertraging (1000); / / digitalWrite(6,HIGH); / / vertraging (100); / / digitalWrite(6,LOW); dht.begin(); if(!bmp.begin()) {/ * er was een probleem opsporen van de BMP085... controleren van uw verbindingen * / Serial.print ("Ooops, geen BMP085 gedetecteerd... Check uw bedrading of I2C ADDR!"); while(1); } Wire.begin(9); Wire.onReceive(receiveEvent); terwijl (!. Serieel); Gebruik dit voor het initiëren van programma door opening van seriële monitor. Verwijder onder normaal bedrijf. Serial.println (F ("FONA basis test")); Serial.println (F ("initialiseren... (Kan 3 seconden duren) ")); sensors.begin(); Temperatuursensoren DS18B20. sensors.setResolution (Probe01, 11); Was op pin 10 in versie 09 sensors.setResolution (Probe02, 11); sensors.setResolution (Probe03, 11); fonaSerial -> begin(4800); Als (! fona.begin(*fonaSerial)) {Serial.println (F ('niet kon vinden FONA')); terwijl (1);} type = fona.type(); Serial.println (F ("FONA is OK")); Serial.Print (F ('gevonden')); switch (type) {FONA800L kast: 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 (Amerikaans)"); break; case FONA3G_E: Serial.println (F ("FONA 3G (Europese)")); break; default: Serial.println(F("???")); break;} networkStatus(); Controleer dat het netwerk beschikbaar is. Huis is goed. Test FONA door afdrukken module IMEI-nummer. char imei [15] = {0}; MOET een buffer van 16 tekens voor IMEI gebruiken! uint8_t imeiLen = fona.getIMEI(imei); Als (imeiLen > 0) {Serial.print ("Module IMEI:"); Serial.println(IMEI); } Serial.println(""); Serial.println ("controleren dat GPRS is uitgeschakeld om te beginnen met..."); fona.setGPRSNetworkSettings(F("pp.vodafone.co.uk"), F("wap"), F("wap")); Deze instellingen te wijzigen! (Netwerk APN, gebruikersbenaming, wachtwoord) vertraging (1000); GPRS uitschakelen: als ()
! fona.enableGPRS(false)) Serial.println (F ("No - Failed to uitschakelen")); Serial.println is ("als de bovenstaande regel zegt OK, dan GPRS gewoon uitgeschakeld"); vertraging (1000); Serial.println(""); Serial.println ("Waiting for gegevens uit i2c..."); Serial.println("");} void loop {als (z > 0) / / deze lus wordt geïnitieerd als z groter dan 1 is. De waarde van z wordt gegeven door de ontvangst {/ / i2c vangegevens. Er moet een tweede evaluatie van de z om fona inschakelen zijn GPRS networkStatus(); en gegevensverlies voorkomen in het tijdsverschil. volt = analogRead (0) * 4.688; Alle decimalen worden geconverteerd naar gehele getallen, omdat we niet willen sturen het decimaal teken via HTTP. / / Lezing temperatuur of vochtigheid neemt ongeveer 250 milliseconden! Sensor lezingen kunnen ook worden maximaal 2 seconden 'oude' (het is een zeer langzame sensor) zweven h = dht.readHumidity(); Temperatuur gelezen als Celsius (de standaardinstelling) zweven t = dht.readTemperature(); Lees de temperatuur als Fahrenheit (isFahrenheit = true) vlotter f = dht.readTemperature(true); vertraging (3000); Controleer als elke leest mislukt en exit vroeg (om te probeer het opnieuw). Als (isnan(h) || isnan(t) || isnan(f)) {Serial.println ("Failed to lezen van DHT sensor!"); terugkeer;} / / Compute warmte-index in Fahrenheit (de standaardinstelling) zweven hif = dht.computeHeatIndex (f, h); Berekenen van de warmte-index in Celsius (isFahreheit = false) zweven hic = dht.computeHeatIndex (t, h, false); vochtigheid = h; tempDHT22 = t; heatindex = hic; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// sensors_event_t event; bmp.getEvent(&event); Als (event.pressure) {druk = (event.pressure) * 100;} / / / sensors.requestTemperatures(); DS18B20s windsnelheid = avWindPulseRate * 20; windgust = maxWindPulseRate * 20; Windway = windrichting; vocht = moistureValue * 1,08; printData(); Drukt alle gegevens seriële voor foutopsporing. Serial.Print (F ("FONA >")); turnOnGPRS(); turnOnGPRS(); Lees website URL uint16_t statuscode; de lengte van de int16_t; char url [180]; flushSerial(); weatherData(); / / Dit is waar de gegevens is gecompileerd tot een karakter... dataString = initiatiefnemer + adres + "windsnelheid =" + windsnelheid + "& windgust =" + windgust + "& windway =" + windway + "& tempout =" + tempout + "& tempsoil =" + tempsoil + "& regen =" + regen + "& vochtigheid =" + vochtigheid + "& Druk =" + druk + "& volt =" + volt + "& vocht =" + vocht + "& tempint =" + tempint + "& fretten =" + fretten; int n = dataString.length(); Serial.Print ("de tekenreeks van de Data te sturen:"); Serial.println(dataString); Serial.Print ("grootte van de tekenreeks:"); Serial.println(n); Bouwt de url-karakter: voor (int aa = 0; aa < = n; aa ++) {url [aa] = dataString [aa];} Serial.Print ("karakter van de gegevens moeten worden verzonden:"); Serial.println(URL); Serial.println(""); / /... en verzonden uit via HTTP naar een PHP bestand klaar om te ontvangen het send.php genoemd. Serial.Print ("versturen url... "); Serial.Print ("Compiled url is:"); Serial.println(URL); Serial.println(F("***")); Als (! fona. HTTP_GET_start(URL, &statuscode, (uint16_t *) & lengte)) {Serial.println("Failed!");} terwijl (lengte > 0) {terwijl (fona.available()) {char c = fona.read(); / / Serial.write is te traag, we schrijven rechtstreeks naar seriële register! #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) loop_until_bit_is_set (UCSR0A, UDRE0); / * wachten totdat de gegevens registreren empty. * / UDR0 = c; #else digitalWrite (5, hoog); / / terugbellen naar Master zeggen dat tranmission was succesvol. Toon (7 ((windway*15) +400), 1000); noTone(7); Serial.write(c); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif length--; Als (! lengte) breken; }} Serial.println(F("\n***")); FONA. HTTP_GET_end(); Serial.println ("wacht 10 seconden..."); delay(500); digitalWrite (5, laag); vertraging (10000); GPRS uitschakelen: als (! fona.enableGPRS(false)) Serial.println (F ("No - Failed to uitschakelen")); Serial.println ("GPRS uitgeschakeld?"); Serial.println ("Waiting for gegevens uit i2c..."); spoelen van de invoer flushSerial(); terwijl (fona.available()) {Serial.write(fona.read())}; z = 0; }} / / Einde van de hoofdlus. / / Functies: void flushSerial() {terwijl (Serial.available()) Serial.read();} char readBlocking() {tijdje (! Serial.available()); Return Serial.read(); } uint16_t readnumber() {uint16_t x = 0, c char; terwijl (! isdigit (c = readBlocking())) {/ / Serial.print(c);} Serial.Print(c); x = c - '0'; terwijl (isdigit (c = readBlocking())) {Serial.print(c); x * = 10; x += c - "0";} retour x; } uint8_t readline (char * buff, uint8_t maxbuff, uint16_t-timeout) {uint16_t buffidx = 0; Boole timeoutvalid = waar; als (timeout == 0) timeoutvalid = false; terwijl (waar) {als (buffidx > maxbuff) {/ / Serial.println(F("SPACE")); break;} terwijl (Serial.available()) {char c = Serial.read(); //Serial.print (c, HEX); Serial.Print("#"); Serial.println(c); Als (c == '\r') blijven; Als (c == 0xA) {als (buffidx == 0) / / de eerste 0x0A wordt genegeerd blijven; timeout = 0; / / de tweede 0x0A is het einde van de lijn timeoutvalid = true; break;} buff [buffidx] = c; buffidx ++; } Als (timeoutvalid & & timeout == 0) {/ / Serial.println(F("TIMEOUT")); break;} delay(1); } buff [buffidx] = 0; Null term return buffidx; } / / / void receiveEvent (int bytes) {/ / ervoor zorgen dat de volgorde is hetzelfde in de meester en slaaf. delay(10); maxWindPulseRate = Wire.read(); delay(10); windrichting = Wire.read(); delay(10); regen = Wire.read(); delay(10); avWindPulseRate = Wire.read(); delay(10); moistureValue = Wire.read(); delay(10); z = 1; vocht = moistureValue;} / / void printSoilTemperature (DeviceAddress deviceAddress) {float temp = sensors.getTempC(deviceAddress); tempsoil = temp * 100; als (tempsoil ==-127.00) {Serial.print ("Error getting temperatuur");} else {Serial.print(tempsoil); Serial.Print ("graden C * 100"); }} ongeldig printOutsideTemperature (DeviceAddress deviceAddress) {float temp = sensors.getTempC(deviceAddress); tempout = temp * 100; als (tempout ==-127.00) {Serial.print ("Error getting temperatuur");} else {Serial.print(tempout); Serial.Print ("graden C * 100"); }} ongeldig printInsideTemperature (DeviceAddress deviceAddress) {float temp = sensors.getTempC(deviceAddress); tempint = temp; if (tempint ==-127.00) {Serial.print ("Error getting temperatuur");} else {Serial.print(tempint); Serial.Print ("graden CC * 100"); }} / / void networkStatus() {/ / Lees de netwerk/mobiele status uint8_t n = fona.getNetworkStatus(); Serial.println(""); Serial.Print (F ("Network status")); Serial.Print(n); Serial.Print (F(":")); Als (n == 0) Serial.println (F ("niet geregistreerd")); Als (n == 1) Serial.println (F ("Registered (home)")); Als (n == 2) Serial.println (F ("niet geregistreerd (zoeken)")); Als (n == 3) Serial.println(F("Denied")); Als (n == 4) Serial.println(F("Unknown")); Als (n == 5) Serial.println (F ("aangetekende roaming")); Serial.println ("status van het netwerk moet worden ' geregistreerd' 'thuis' in de bovenstaande regel"); Serial.println("");} VOID turnOnGPRS() {Serial.println ("nu probeert te schakelen GPRS...'); Als ()! fona.enableGPRS(true)) Serial.println (F ("No - Failed to inschakelen")); Serial.println ("GPRS is als de lijn hierboven toont 'OK'"); Serial.println ("wacht 10 seconden om te controleren of dat GPRS is op..."); vertraging (10000); } / / void printData() {Serial.print ("Probe01 (buiten) temp:"); printOutsideTemperature(Probe01); Serial.println(); Serial.Print ("Probe02 (bodem) temp:"); printSoilTemperature(Probe02); Serial.println(); Serial.Print ("Probe03 (tempint) temp:"); printInsideTemperature(Probe03); Serial.println(); Serial.Print ("Main accuspanning:"); Serial.println(Volts); Serial.Print ("i2c-maxWindPulseRate:"); Serial.println(windgust); Nog niet gekalibreerd. Serial.Print ("i2c-avWindPulseRate:"); Serial.println(windspeed); Serial.Print ("i2c windrichting:"); Serial.println(windDirection); Serial.Print ("i2c regen:"); Serial.println(Rain); Serial.Print ("i2c-moistureValue:"); Serial.println(moistureValue); Serial.Print ("atmosferische druk:"); Serial.Print(Pressure); Serial.println ("hPa * 100"); Serial.Print ("vochtigheid:"); Serial.Print(Humidity); Serial.println ("% \t"); Serial.Print ("DHT22 temp:"); Serial.Print(tempDHT22); Serial.println ("* C"); Serial.Print ("warmte-index:"); Serial.Print(heatindex); Serial.println ("* C"); Serial.println("");} < /p >

Gerelateerde Artikelen

Arduino draadloze weerstation & webserver

Arduino draadloze weerstation & webserver

doelMijn PC (die al jarenlang op 24-7 6) en de weerstationsoftware vervangen door een Arduino – lager energieverbruik, minder onderhoud en kleinere fysieke voetafdruk.  Minimale PC-functionaliteit vereisen dubbel:• Registratie van weergegevens (winds
Arduino met Ajax deel 2

Arduino met Ajax deel 2

Github: https://github.com/rogerin/ArduinoComAjaxTwitter: https://twitter.com/rogerin
Arduino met ajax deel 1

Arduino met ajax deel 1

Github: https://github.com/rogerin/ArduinoComAjaxTwitter: https://twitter.com/rogerin
Afstandsbediening via GPRS/GSM SMS(Arduino)

Afstandsbediening via GPRS/GSM SMS(Arduino)

afstandsbediening, vooral wanneer deze geen ethernet of Wifi in de openlucht, een zeer diepe dingen in het verleden is geweest. Toen ik een kind was, beeld ik altijd dat ik heb een uitrusting die alle huistoestellen kunt bepalen. Nu, dit wordt een re
Arduino Tutorials (deel 3-17 Tutorial Pack)

Arduino Tutorials (deel 3-17 Tutorial Pack)

Dit is de Arduino Tutorial Pack deel 3.Het 1ste deel is hier beschikbaar:Het 2de deel hier:In tegenstelling tot andere tutorials hier geven niet ik elke achtergrond in theorie hoe het werkt. Het is hoe te bereiken - metingen uit veel van sensoren en,
Cloud Hoppers - Arduino-weerstation

Cloud Hoppers - Arduino-weerstation

Eenvoudige Arduino Uno weerstation met Ethernet web access met behulp van goedkope Maplin sensoren :) Zie PDF voor beschrijving en Arduino code. Je moet 1 Arduino Uno en de Ethernet-shield + enkele strip board of een brood bord aansluiten van de sens
Arduino Tutorials (deel 4-21 Tutorial Pack)

Arduino Tutorials (deel 4-21 Tutorial Pack)

Dit is de Arduino Tutorial Pack deel 4.Het 1ste deel is hier beschikbaar:Het 2e deel is hier beschikbaar:Het 3e deel is hier beschikbaar:In tegenstelling tot andere tutorials hier geven niet ik elke achtergrond in theorie hoe het werkt. Het is hoe te
Arduino Tutorials (deel twee-17 Tutorial Pack)

Arduino Tutorials (deel twee-17 Tutorial Pack)

Dit is de Arduino Tutorial Pack deel 2.Het 1ste deel is hier beschikbaar:Het 3e deel is hier beschikbaar:In tegenstelling tot andere tutorials hier geven niet ik elke achtergrond in theorie hoe het werkt. Het is hoe te bereiken - metingen uit veel va
Arduino Tutorials (deel één-16 Tutorial Pack)

Arduino Tutorials (deel één-16 Tutorial Pack)

Dit is de Arduino Tutorial Pack deel 1.Het 2e deel is hier beschikbaar:Het 3e deel is hier beschikbaar: In tegenstelling tot andere tutorials hier ik niet elke achtergrond geven in theorie hoe het werkt. Het is gericht op het resultaat hoe het te ber
Opzetten van een A100LK Anemometer op een Arduino

Opzetten van een A100LK Anemometer op een Arduino

Iedereen denkt van het installeren van een windgenerator, of zelfs een hele kudde voor windgenerators, zou er goed aan doen om te controleren de voorgestelde site ten minste één hele jaar voordat de uitgaven een cent meer op hardware. Dit is wat de A
Arduino bodem sonde met behulp van de DS18B20 en DIY vocht Hardware

Arduino bodem sonde met behulp van de DS18B20 en DIY vocht Hardware

Als een fanatieke tuinman of professionele akkerbouwer, te weten de milieuomstandigheden van onze bodem is van onschatbare waarde. Uiteraard kan niet meten we het aantal wormen of stukken van organische humus, maar we kunnen het meten van temperatuur
Arduino temperatuurgevoelig Fan

Arduino temperatuurgevoelig Fan

Ik en een paar leden van de groep hebben besloten dat voor de zomer, zou gunstig zijn voor het maken van een ventilator die worden ingeschakeld bij 70 graden Fahrenheit en in intensiteit met de hitte blijft toenemen. Dus is dat wat we deden. :)Stap 1
Arduino. Industriële apparatuur rijden

Arduino. Industriële apparatuur rijden

Hallo.Dit is waarschijnlijk een tweede deel vanWat ik in het begin heeft1. volledig dood/gedeeltelijk dode CPU op guilotonne (foto 3-4-5-6)2. gemonteerd en geprogrammeerde arduino apparaat uit deel 1 (foto 2)3. de machine zonder docsIn volgende stapp
Arduino afstand Detector met een zoemer en LED's

Arduino afstand Detector met een zoemer en LED's

dit is een eenvoudige gids over hoe te maken van een afstand-detector met behulp van een Arduino, een ultrasone Sensor van HC-SRO4, een zoemer en sommige LED's.  Het uiteindelijke doel van deze tutorial is te gebruiken van de zoemer en LED's om weer