Station météo de Arduino GPRS - partie 1 (22 / 23 étapes)

Étape 22 : MEGA 2560 Code complet

< p > / / Voir esclave attaché le fichier texte complet détails. < 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 / / broche 5 //Sends un rappel de signaux pour la transmission de données permanentes lorsque réussie. DHT dht (DHTPIN, DHTTYPE) ; OneWire oneWire(ONE_WIRE_BUS_PIN) ; Capteurs DallasTemperature (& oneWire) ; DeviceAddress Probe01 = {0 x 28, 0xFF, 0xA3, 0x4D, 0 x 00, 0 x 16, 0 x 03, 0xEC} ; Voici les adresses des sondes de température DS18B20 DeviceAddress Probe02 = {0 x 28, 0x4E, 0xCA, 0 x 80, 0 x 04, 0 x 00, 0 x 00, 0xA0} ; DeviceAddress Probe03 = {0 x 28, 0x7C, 0x8A, 0x5D, 0 x 05, 0 x 00, 0 x 00, 0xFD} ; const longs furets = 179224 ; int n = 0 ; int z = 0 ; humidité int = 0 ; unsigned long heatindex = 0 ; unsigned longue humidité = 0 ; unsigned long tempDHT22 = 0 ; unsigned long windspeed = 0 ; unsigned long windgust = 0 ; unsigned long avWindPulseRate = 0 ; unsigned long maxWindPulseRate = 0 ; unsigned long pluie = 0 ; unsigned long direction du vent = 0 ; unsigned long windway = 0 ; unsigned long moistureValue = 0 ; unsigned longue pression = 0 ; unsigned longs volts = 1200 ; multiplié par 100. unsigned long tempint ; unsigned long tempout ; unsigned long tempsoil ; unsigned long previousMillis = 0 ; const long intervalle = 10000 ; Il s’agit d’un gros tampon pour réponses char replybuffer [255] ; Initiateur de la chaîne, dataString ; const char Adresse_web [180] = « http://www.goatindustries.co.uk/weather/send.php? » ; url de char [180] ; #include SoftwareSerial fonaSS = SoftwareSerial (FONA_TX, FONA_RX) ; SoftwareSerial * fonaSerial = & fonaSS ; Adafruit_FONA fona = Adafruit_FONA(FONA_RST) ; Bmp Adafruit_BMP085_Unified = Adafruit_BMP085_Unified(10085) ; uint8_t readline (char * chamois, uint8_t maxbuff, uint16_t timeout = 0) ; type d’uint8_t ; void setup() {Serial.begin(115200) ; pinMode (sortie 5,); //Sends un appel retour de signal pour le données permanentes lorsque réussie transmission. pinMode (6, sortie); / / réinitialise FONA digitalWrite(6,LOW); / / delay (1000); / / digitalWrite(6,HIGH); / / delay (100); / / digitalWrite(6,LOW) ; dht.begin() ; if(!bmp.begin()) {/ * il y avait un problème de détection de la BMP085... Vérifiez vos connexions * / Serial.print ("Oups, pas BMP085 détecté... Vérifiez votre câblage ou I2C ADDR!") ; while(1) ; } Wire.begin(9) ; Wire.onReceive(receiveEvent) ; while (!. Série) ; L’utiliser pour lancer le programme par ouverture de serial monitor. Supprimer en fonctionnement normal. Serial.println (F (« FONA test de base")) ; Serial.println (F ("initialisation... (Peut prendre 3 secondes) ")) ; sensors.Begin() ; Capteurs de température DS18B20. sensors.setResolution (Probe01, 11) ; Était sur la broche 10 en version 09 sensors.setResolution (Probe02, 11) ; sensors.setResolution (Probe03, 11) ; fonaSerial -> begin(4800) ; Si (! fona.begin(*fonaSerial)) {Serial.println (F ("Impossible de trouver FONA")); while (1);} type = fona.type() ; Serial.println (F (« FONA est OK")) ; Serial.Print (F ("Found")) ; commutateur (type) {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 (américain)")); break ; case FONA3G_E : Serial.println (F (« FONA 3G (européenne)")); break ; default : Serial.println(F("???")) ; break;} networkStatus() ; Vérifiez que le réseau est disponible. La maison est bonne. Test FONA en imprimant le numéro IMEI du module. char imei [15] = {0} ; DOIT utiliser une mémoire tampon de 16 caractères pour IMEI ! uint8_t imeiLen = fona.getIMEI(imei) ; Si (imeiLen > 0) {Serial.print ("Module IMEI:") ; Serial.println(IMEI) ; } Serial.println("") ; Serial.println ("vérification que GPRS est désactivé à commencer par...") ; fona.setGPRSNetworkSettings(F("pp.vodafone.co.uk"), F("wap"), F("wap")) ; Modifiez ces paramètres ! Retard (APN, nom d’utilisateur, mot de passe réseau) (1000) ; Désactiver GPRS : si ()
! fona.enableGPRS(false)) Serial.println (F (« No - impossible d’éteindre")) ; Serial.println ("si la ligne du dessus dit OK, alors le GPRS a juste été désactivée ») ; retarder (1000) ; Serial.println("") ; Serial.println ("Waiting for données i2c...") ; Serial.println("");} void loop() {si (z > 0) / / cette boucle est lancée si z est supérieur à 1. La valeur de z est donnée par la réception {/ / des données i2c. Il faut faire une deuxième évaluation de z pour activer fona allumer c' est GPRS networkStatus() ; et éviter toute perte de données dans l’intervalle de temps. v = analogRead (0) * 4,688 ; Tous les nombres décimaux est convertis en entiers comme nous ne voulons pas envoyer le caractère décimale via HTTP. / / Lecture de température ou d’humidité prend environ 250 millisecondes ! Lectures du capteur peuvent être aussi jusqu'à 2 secondes « ancienne » (c’est un capteur très lent) flotter h = dht.readHumidity() ; Lire la température en degrés Celsius (la valeur par défaut) flotter t = dht.readTemperature() ; Lire la température en degrés Fahrenheit (isFahrenheit = true) flotteur f = dht.readTemperature(true) ; retarder (3000) ; Vérifier si des lectures a échoué et arrêter prématurément (pour réessayer). Si (isnan(h) || isnan(t) || isnan(f)) {Serial.println ("Impossible de lire du capteur DHT!"); return;} / / indice de chaleur de calcul en degrés Fahrenheit (par défaut) flotteur hif = dht.computeHeatIndex (f, h) ; Calculer l’indice de chaleur en degrés Celsius (isFahreheit = false) flotter hic = dht.computeHeatIndex (t, h, false) ; humidité = h ; tempDHT22 = t ; heatindex = hic ; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// sensors_event_t event; bmp.getEvent(&event) ; Si (event.pressure) {pression = (event.pressure) * 100;} / / / sensors.requestTemperatures() ; Vitesse du vent de DS18B20s = avWindPulseRate * 20 ; windgust = maxWindPulseRate * 20 ; Windway = direction du vent ; l’humidité = moistureValue * 1.08 ; printData() ; Imprime toutes les données de série pour le débogage. Serial.Print (F (« FONA > ")) ; turnOnGPRS() ; turnOnGPRS() ; lire le site Web URL uint16_t statuscode ; int16_t longueur ; url de char [180] ; flushSerial() ; weatherData() ; / / C’est où les données sont compilées en un personnage... dataString = initiateur + Adresse_web + "windspeed =" + vitesse du vent + "& windgust =" + windgust + "& windway =" + windway + "& tempout =" + tempout + "& tempsoil =" + tempsoil + "& pluie =" + pluie + "& humidité =" + humidité + "& pression =" + pression + "& volts =" + VCC + "& humidité =" + humidité + "& tempint =" + tempint + "& furets =" + furets ; int n = dataString.length() ; Serial.Print ("chaîne de données à envoyer:") ; Serial.println(dataString) ; Serial.Print ("taille de la chaîne:") ; Serial.println(n) ; Crée le personnage d’url : pour (int aa = 0; aa < = n; aa ++) {url [aa] = dataString [aa];} Serial.Print ("données d’envoyer des caractères:") ; Serial.println(URL) ; Serial.println("") ; / /... et envoyé dehors par l’intermédiaire de HTTP vers un fichier PHP appelé send.php prêt à le recevoir. Serial.Print ("envoi d’url... "); Serial.Print ("Compiled url est:") ; Serial.println(URL) ; Serial.println(F("***")) ; Si (! fona. HTTP_GET_start(URL, &StatusCode, (uint16_t *) & longueur)) {Serial.println("Failed!");} while (longueur > 0) {tandis que (fona.available()) {char c = fona.read(); / / Serial.write est trop lent, nous allons écrire directement au registre série! #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) loop_until_bit_is_set (UCSR0A, UDRE0); / * attendre jusqu'à ce que le registre de données vide. * / UDR0 = c; #else digitalWrite (5, HIGH); / / Call back au maître de dire cette transmission a été un succès. ton (7 ((windway*15) + 400), 1000) ; noTone(7) ; Serial.Write(c) ; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif length--; Si (! longueur) break ; }} Serial.println(F("\n***")) ; fona. HTTP_GET_end() ; Serial.println ("Wait for 10 secondes...") ; Delay(500) ; digitalWrite (5, faible) ; retard (10000) ; Désactiver GPRS : si (! fona.enableGPRS(false)) Serial.println (F (« No - impossible d’éteindre")) ; Serial.println ("Data désactivé?"); Serial.println ("Waiting for données i2c...") ; Rincer les flushSerial() d’entrée ; tandis que (fona.available()) {Serial.write(fona.read());} z = 0 ; }} / / Fin de la boucle principale. / / Fonctions : void flushSerial() {tout en (Serial.available()) Serial.read();} readBlocking() de char {while (! Serial.available()) ; Return Serial.read() ; } uint16_t readnumber() {uint16_t x = 0; char c; while (! isdigit (c = readBlocking())) {/ / Serial.print(c);} Serial.Print(c) ; x = c - « 0 » ; tandis que (isdigit (c = readBlocking())) {Serial.print(c); x * = 10 ; x += c - '0';} return x ; } uint8_t readline (char * chamois, uint8_t maxbuff, uint16_t timeout) {uint16_t buffidx = 0; boolean timeoutvalid = true ; if (timeout == 0) timeoutvalid = false ; while (true) {si (buffidx > maxbuff) {/ / Serial.println(F("SPACE")) ; break;} tandis que (Serial.available()) {char c = Serial.read() ; //Serial.print (c, HEX) ; Serial.Print("#") ; Serial.println(c) ; Si (c == « \r ») continuer ; Si (c == 0xA) {si (buffidx == 0) / / est ignoré la première 0x0A continuer ; timeout = 0; / / la deuxième 0x0A est la fin de la ligne timeoutvalid = true ; break;} buff [buffidx] = c ; buffidx ++ ; } Si (timeoutvalid & & timeout == 0) {/ / Serial.println(F("TIMEOUT")) ; break;} delay(1) ; } buff [buffidx] = 0 ; buffidx retour de null à terme ; } / / / void receiveEvent (int bytes) {/ / s’assurer que l’ordre est le même en maître et esclave. delay(10) ; maxWindPulseRate = Wire.read() ; delay(10) ; direction du vent = Wire.read() ; delay(10) ; pluie = Wire.read() ; delay(10) ; avWindPulseRate = Wire.read() ; delay(10) ; moistureValue = Wire.read() ; delay(10); z = 1; humidité = moistureValue;} / / / Sub printSoilTemperature (DeviceAddress deviceAddress) {temp flotteur = sensors.getTempC(deviceAddress) ; tempsoil = temp * 100 ; if (tempsoil ==-127.00) {Serial.print ("Error getting température");} else {Serial.print(tempsoil) ; Serial.Print ("degrés C * 100") ; }} void printOutsideTemperature (DeviceAddress deviceAddress) {temp flotteur = sensors.getTempC(deviceAddress) ; tempout = temp * 100 ; if (tempout ==-127.00) {Serial.print ("Error getting température");} else {Serial.print(tempout) ; Serial.Print ("degrés C * 100") ; }} void printInsideTemperature (DeviceAddress deviceAddress) {temp flotteur = sensors.getTempC(deviceAddress) ; tempint = temp ; if (tempint ==-127.00) {Serial.print ("Error getting température");} else {Serial.print(tempint) ; Serial.Print ("degrés CC * 100") ; }} / / / void networkStatus() {/ / lecture du réseau cellulaire/statut uint8_t n = fona.getNetworkStatus() ; Serial.println("") ; Serial.Print (F (« État du réseau")) ; Serial.Print(n) ; Serial.Print (F(":")) ; Si (n == 0) Serial.println (F ("non enregistrée")) ; Si (n == 1) Serial.println (F "(Registered (maison)")) ; Si (n == 2) Serial.println (F ("n’est pas inscrit (la recherche)")) ; Si (n == 3) Serial.println(F("Denied")) ; Si (n == 4) Serial.println(F("Unknown")) ; Si (n == 5) Serial.println (F (« Registered roaming")) ; Serial.println ("l’état du réseau doit être" inscrit"« home » dans la ligne du dessus") ; Serial.println("");} void turnOnGPRS() {Serial.println ("maintenant tenter activer GPRS...") ; Si ()! fona.enableGPRS(true)) Serial.println (F (« No - n’a pas pu mettre en marche")) ; Serial.println ("GPRS est allumé si la ligne ci-dessus montre « OK »") ; Serial.println ("attendez 10 secondes pour s’assurer que le GPRS est sur...") ; retard (10000) ; } void printData() / / / {Serial.print ("Probe01 temp (extérieur):") ; printOutsideTemperature(Probe01) ; Serial.println() ; Serial.Print ("Probe02 temp (sol):") ; printSoilTemperature(Probe02) ; Serial.println() ; Serial.Print ("Probe03 (tempint) temp:") ; printInsideTemperature(Probe03) ; Serial.println() ; Serial.Print ("tension de la batterie principale:") ; Serial.println(volts) ; Serial.Print ("i2c maxWindPulseRate:") ; Serial.println(windgust) ; Pas encore étalonné. Serial.Print ("i2c avWindPulseRate:") ; Serial.println(WindSpeed) ; Serial.Print ("i2c direction du vent:") ; Serial.println(windDirection) ; Serial.Print ("pluie i2c:") ; Serial.println(Rain) ; Serial.Print ("i2c moistureValue:") ; Serial.println(moistureValue) ; Serial.Print ("pression atmosphérique:") ; Serial.Print(Pressure) ; Serial.println (« hPa * 100") ; Serial.Print ("humidité:") ; Serial.Print(Humidity) ; Serial.println ("\t %") ; Serial.Print ("temp DHT22:") ; Serial.Print(tempDHT22) ; Serial.println ("* C") ; Serial.Print ("indice de chaleur:") ; Serial.Print(heatindex) ; Serial.println ("* C") ; Serial.println("");} < /p >
  • MEGA 2560 code.txt

Articles Liés

ESP8266 Station météo avec Arduino – matériel #1

ESP8266 Station météo avec Arduino – matériel #1

Arrière-planJ'ai lu sur le ESP8266 tout d'abord en mars cette année et je ne savais pas quoi faire avec. Et maintenant, je suis vraiment fasciné comment la connexion d'un Arduino à Internet peut être facile. Comme d'autres, j'ai mis en place une stat
Station météo DIY Arduino et Raspberry Pi et serveur web

Station météo DIY Arduino et Raspberry Pi et serveur web

Il s'agit d'un projet qui va prendre la température à l'aide de la sonde de température TMP36 IC et une carte Arduino . Ces données seront envoyées au cours de la série-le Raspberry PiConseil, modifier une page web que le Raspberry Pi est l'hôte lui-
La Station météorologique de Arduino / Thermostat

La Station météorologique de Arduino / Thermostat

mise à jour :Mise à jour : Ajout du point de rosée calculsMise à jour : surveillance de la vitesse du ventJ'ai toujours été intéressé par ma météo locale de surveillance et a remarqué la différence entre ce que weather.com et accuweather.com pense qu
Station météo de Arduino (AWS)

Station météo de Arduino (AWS)

Dans ce projet, nous allons faire une station météorologique qui mesure la pression atmosphérique, température, gouttes de pluie, humidité du sol et humidité de l'air en utilisant Arduino qui enregistrer les données d'acquisition de données !C'est un
ESP8266 Station météo avec Arduino – logiciel #2

ESP8266 Station météo avec Arduino – logiciel #2

Cette instructable est pour le logiciel de mon projet Station Weater. Veuillez lire tout d'abord pour comprendre toutes les explications.En raison des deux microcontrôleurs le concept de logiciel repose sur deux parties : ESP8266 fonctionne sur Nodem
Station météo de Arduino.

Station météo de Arduino.

Il y a quelque temps j'ai une idée pour construire ma propre station météorologique, à partir de zéro.Il s'est avéré grands. Permet de commencer !Étape 1: pièces Une liste d'éléments que j'ai utilisé :-2 x Arduino nano.-émetteur 433mhz.-433 mhz récep
Mini Station météo avec Arduino

Mini Station météo avec Arduino

C'est mon premier instructable et première entière Arduino projet. Bien que vous pouvez trouver le projet similaire, J'apprend beaucoup par ce projet.Étape 1: But de station météo Cette station météo simple prendra la température et l'humidité de lec
MICILE Arduino Rover partie 1

MICILE Arduino Rover partie 1

Nous avons acheté récemment une rover de la Chine que nous avons contrôlé avec une carte Arduino et MICILE deux comprimés. Le projet de rover a réussi, donc nous avons décidé d'essayer à nouveau, mais cette fois nous sommes un camion télécommande con
Arduino alimenté parti Shirt

Arduino alimenté parti Shirt

cette idée il y a ans après mon achat de la chemise de la bande-son de thinkgeek. C'était une chemise génial, mais comme c'est ma nature j'ai pensé à quelques améliorations. Plus précisément les lumières qui pulse et cligner des yeux à la musique. Ap
Arduino tutoriel - partie 1

Arduino tutoriel - partie 1

Salut! Il s'agit de la première partie de mes guides pour arduino, et c'est pour les débutants, donc il peut être ennuyeux pour les utilisateurs plus avancés ! Dans cette partie, je vais vous donner un guide de codage étape par étape sur la façon de
Station météo personnelle arduino hébreu

Station météo personnelle arduino hébreu

הרעיון בפרויקט זה הוא ליצור שילוב של נתוני מזג אוויר המגיעים מלוח ארדוינו הנמצא בבית, ומהאינטרנט, ולאפשר למשתמש הן חיווי הנובע מהנתונים והן ביצוע פעולות פשוטות כמו הדלקה וכיבוי של תאורה מקומית (או כל מכשיר אחר המחובר לשקע הנשלט על ידי הלוח או מופעל ב
Contrôle à distance via GPRS/GSM SMS(Arduino)

Contrôle à distance via GPRS/GSM SMS(Arduino)

télécommande, surtout quand ce pas ethernet ou Wifi à l'extérieur, a été un très profond des choses dans le passé. Lorsque j'étais enfant, j'ai toujours l'image que j'ai un équipement qui permet de contrôler tous les appareils ménagers. Maintenant, c
Arduino Station météo Part3, pluie

Arduino Station météo Part3, pluie

donc un de mes derniers projets ajoutait une girouette à ma station météorologique d'Arduino.Ce Geek vieux paresseux a décidé d'ajouter un pluviomètre à elle même si nous n'avons pas beaucoup de pluie dans le haut désert. La plupart des pluviomètres
Fait par moi-même sur la base d’Arduino de station de soudage

Fait par moi-même sur la base d’Arduino de station de soudage

Salut! Une fois que j'ai parlé de la station de soudage sur l'Arduino et immédiatement accablé moi questions (Comment? / où? / quand?). Compte tenu de la masse de demandes, j'ai décidé d'écrire un examen de la station de soudage simple (fer à souder