Estación meteorológica de Arduino GPRS - parte 1 (22 / 23 paso)

Paso 22: MEGA 2560 código completo

< p > / / esclavo ver adjunto archivo de texto para detalles completo. < 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 DHT11 DHTTYPE / / 11 de DHT #define DHTTYPE DHT22 / / 22 de DHT (AM2302), AM2321 / //Sends Pin 5 señal llamemos a la transmisión de datos maestros al éxito. DHT dht (DHTPIN, DHTTYPE); OneWire oneWire(ONE_WIRE_BUS_PIN); DallasTemperature sensors (& oneWire); DeviceAddress Probe01 = {0x28, 0xFF, 0xA3, 0x4D, 0 x 00, 0x16, 0 x 03, 0xEC}; Estas son las direcciones de las sondas de temperatura 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}; Hurones largo const = 179224; int n = 0; int z = 0; humedad int = 0; heatindex largo sin signo = 0; sin firmar largo humedad = 0; tempDHT22 largo sin signo = 0; velocidad del viento largo sin signo = 0; windgust largo sin signo = 0; avWindPulseRate largo sin signo = 0; maxWindPulseRate largo sin signo = 0; sin firmar largo lluvia = 0; windDirection largo sin signo = 0; Canal largo sin signo = 0; moistureValue largo sin signo = 0; sin firmar largo presión = 0; sin firmar largo voltios = 1200; multiplicado por 100. tempint largo sin firmar; tempout largo sin firmar; tempsoil largo sin firmar; unsigned previousMillis largo = 0; const largo intervalo de tiempo = 10000; se trata de un búfer grande para respuestas char replybuffer [255]; Iniciador de la cadena, dataString; const char DirecciónWeb [180] = "http://www.goatindustries.co.uk/weather/send.php?"; char la url [180]; #include fonaSS SoftwareSerial = SoftwareSerial (FONA_TX, FONA_RX); SoftwareSerial * fonaSerial = & fonaSS; Fona Adafruit_FONA = Adafruit_FONA(FONA_RST); Bmp Adafruit_BMP085_Unified = Adafruit_BMP085_Unified(10085); readline de uint8_t (char * buff, uint8_t maxbuff, uint16_t timeout = 0); tipo uint8_t; void setup() {pinMode (salida 5), Serial.begin(115200); //Sends una llamada de vuelta señal a datos maestros cuando exitosa transmisión. pinMode (6, salida); / / FONA restablece digitalWrite(6,LOW); / / delay (1000); / / digitalWrite(6,HIGH); / / delay (100); / / digitalWrite(6,LOW); dht.begin(); if(!bmp.begin()) {/ * hubo un problema detectando el BMP085... Compruebe sus conexiones * / Serial.print ("Ooops, no BMP085 detectado... Compruebe el cableado o I2C ADDR!"); while(1); } Wire.begin(9); Wire.onReceive(receiveEvent); mientras (!. Serie); Utilícela para iniciar el programa por la apertura de la serie monitor. Eliminar en la operación normal. Serial.println (F ("prueba básica de manejo")); Serial.println (F ("inicializando... (Puede tardar 3 segundos) ")); Sensors.Begin(); Sensores de temperatura DS18B20. sensors.setResolution (Probe01, 11); Fue en el pin 10 en versión 09 sensors.setResolution (Probe02, 11); sensors.setResolution (Probe03, 11); fonaSerial -> begin(4800); Si (! fona.begin(*fonaSerial)) {Serial.println (F ("no pudo encontrar FONA")); mientras que (1);} tipo = fona.type(); Serial.println (F (FONA es OK")); Serial.Print (F ("encontrado")); Switch (tipo) {caso FONA800L: Serial.println (F ("FONA 800L")); break; caso FONA800H: Serial.println (F ("FONA 800H")); break; caso FONA808_V1: Serial.println (F ("FONA 808 (v1)")); break; caso FONA808_V2: Serial.println (F ("FONA 808 (v2)")); break; caso FONA3G_A: Serial.println (F ("FONA 3G (americano)")); break; caso FONA3G_E: Serial.println (F ("FONA 3G (Europea)")); break; default: Serial.println(F("???")); break;} networkStatus(); Compruebe que la red está disponible. Página de inicio es bueno. Prueba de manejo por número IMEI del módulo de impresión. char el imei [15] = {0}; DEBE utilizar un buffer de 16 caracteres por IMEI! uint8_t imeiLen = fona.getIMEI(imei); Si (imeiLen > 0) {Serial.print ("módulo de IMEI:"); Serial.println(IMEI); } Serial.println(""); Serial.println ("comprobando que GPRS es apagado para comenzar con..."); fona.setGPRSNetworkSettings(F("pp.vodafone.co.uk"), F("wap"), F("wap")); Cambiar la configuración. Retardo de (red APN, username, password) (1000); Desactivar GPRS: Si ()
! fona.enableGPRS(false)) Serial.println (F ("No - no ha podido apagar")); Serial.println ("si la línea anterior dice OK, luego GPRS sólo esté apagado"); retrasar (1000); Serial.println(""); Serial.println ("esperando datos i2c..."); Serial.println("");} void loop() {si (z > 0) / / este bucle se inicia si z es mayor que 1. El valor de z está dado por el recibo {/ / de datos i2c. Tiene que haber una segunda evaluación de z que permita fona encender su GPRS networkStatus(); y evitar la pérdida de datos en el espacio de tiempo. voltios = analogRead (0) * 4.688; Los decimales se convierten a enteros como no queremos enviar el carácter de lugar decimal a través de HTTP. / / Lectura de temperatura o la humedad tarda aproximadamente 250 milisegundos! Lecturas del sensor también pueden ser de hasta 2 segundos 'old' (es un sensor muy lento) flotador h = dht.readHumidity(); Leer temperatura Celsius (predeterminado) flotador t = dht.readTemperature(); Leer temperatura Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); retrasar (3000); Compruebe si cualquier Lee falló y salir temprano (para intentarlo de nuevo). Si (isnan(h) || isnan(t) || isnan(f)) {Serial.println ("error al leer del sensor DHT!"); vuelta;} / / cálculo índice de calor en grados Fahrenheit (predeterminado) flotador hif = dht.computeHeatIndex (f, h); Calcular el índice de calor en grados Celsius (isFahreheit = false) flotador hic = dht.computeHeatIndex (t, h, false); humedad = h; tempDHT22 = t; heatindex = hic; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// sensors_event_t event; bmp.getEvent(&event); Si (event.pressure) {presión = (event.pressure) * 100;} / / / sensors.requestTemperatures(); DS18B20s velocidad del viento = avWindPulseRate * 20; windgust = maxWindPulseRate * 20; canal = windDirection; humedad = moistureValue * 1.08; printData(); Imprime todos los datos en serie para la depuración. Serial.Print (F ("FONA >")); turnOnGPRS(); turnOnGPRS(); leer página web URL uint16_t statuscode; longitud de int16_t; char la url [180]; flushSerial(); weatherData(); / Esto es donde los datos se compilaron un carácter dataString = DirecciónWeb iniciador + "velocidad del viento =" + velocidad del viento + "& windgust =" + windgust + "& canal =" + canal + "& tempout =" + tempout + "& tempsoil =" + tempsoil + "& lluvia =" + lluvia + "& humedad =" + humedad + "& presión =" + presión + "& voltios =" + voltios + "& humedad =" + humedad + "& tempint =" + tempint + "& hurones =" + hurones; int n = dataString.length(); Serial.Print ("cadena de datos a enviar:"); Serial.println(dataString); Serial.Print ("tamaño de cadena:"); Serial.println(n); Construye el carácter del enlace: para (int aa = 0; aa < = n; aa ++) {url [aa] = dataString [aa];} Serial.Print ("para enviar los datos de carácter:"); Serial.println(URL); Serial.println(""); / /... y se envía hacia fuera vía HTTP a un archivo PHP llamado send.php listo para recibirlo. Serial.Print ("enviar url... "); Serial.Print ("url del compilado es:"); Serial.println(URL); Serial.println(F("***")); Si (! fona. HTTP_GET_start(URL, &StatusCode, (uint16_t *) & longitud)) {Serial.println("Failed!");} mientras (longitud > 0) {mientras que (fona.available()) {char c = fona.read(); / / Serial.write es demasiado lento, a escribir directamente a registro Serial! #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) loop_until_bit_is_set (UCSR0A, UDRE0); / * espere hasta que el registro de datos vacía. * / UDR0 = c; #else digitalWrite (5, alto); / / llamar al maestro decir que transmisión fue exitosa. tono (7 ((windway*15) + 400), 1000); noTone(7); Serial.Write(c); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif length--; Si (! longitud) break; }} Serial.println(F("\n***")); FONA. HTTP_GET_end(); Serial.println ("espere 10 segundos..."); Delay(500); digitalWrite (5, bajo); retardo (10000); Desactivar GPRS: Si (! fona.enableGPRS(false)) Serial.println (F ("No - no ha podido apagar")); Serial.println ("GPRS desactivado?"); Serial.println ("esperando datos i2c..."); ras flushSerial() de entrada; mientras que (fona.available()) {Serial.write(fona.read());} z = 0; }} / / Fin de bucle principal. / / Funciones: void flushSerial() {mientras que (Serial.available()) Serial.read();} char readBlocking() {mientras que (! Serial.Available()); volver Serial.read(); } uint16_t readnumber() {uint16_t x = 0; char c; mientras que (! isdigit (c = readBlocking())) {/ / Serial.print(c);} Serial.Print(c); x = c - '0'; mientras que (isdigit (c = readBlocking())) {Serial.print(c); x * = 10; x += c - '0';} return x; } uint8_t readline (char * buff, uint8_t maxbuff, tiempo de espera de uint16_t) {uint16_t buffidx = 0; timeoutvalid booleano = true; if (tiempo de espera == 0) timeoutvalid = falso; mientras que (verdad) {si (buffidx > maxbuff) {/ / Serial.println(F("SPACE")); break;} mientras que (Serial.available()) {char c = Serial.read(); //Serial.print c, HEX; Serial.Print("#"); Serial.println(c); Si (c == '\r') continuar; Si (c == 0xA) {si (buffidx == 0) / / se omite la primera 0x0A continuar; timeout = 0; / / el segundo 0x0A es el final de la línea timeoutvalid = cierto; break;} buff [buffidx] = c; buffidx ++; } Si (timeoutvalid & & tiempo de espera == 0) {/ / Serial.println(F("TIMEOUT")); break;} delay(1); } buff [buffidx] = 0; buffidx retorno del término nulo; } / / void receiveEvent (int bytes) {/ / asegurarse de que el orden es el mismo en maestro y esclavo. delay(10); maxWindPulseRate = Wire.read(); delay(10); windDirection = Wire.read(); delay(10); lluvia = Wire.read(); delay(10); avWindPulseRate = Wire.read(); delay(10); moistureValue = Wire.read(); delay(10); z = 1; humedad = moistureValue;} / / void printSoilTemperature (DeviceAddress deviceAddress) {temp flotador = sensors.getTempC(deviceAddress); tempsoil = temp * 100; si (tempsoil ==-127.00) {Serial.print ("Error al obtener la temperatura");} Else {Serial.print(tempsoil); Serial.Print ("grados C * 100"); }} void printOutsideTemperature (DeviceAddress deviceAddress) {temp flotador = sensors.getTempC(deviceAddress); tempout = temp * 100; si (tempout ==-127.00) {Serial.print ("Error al obtener la temperatura");} Else {Serial.print(tempout); Serial.Print ("grados C * 100"); }} void printInsideTemperature (DeviceAddress deviceAddress) {temp flotador = sensors.getTempC(deviceAddress); tempint = temp; if (tempint ==-127.00) {Serial.print ("Error al obtener la temperatura");} Else {Serial.print(tempint); Serial.Print ("grados CC * 100"); }} / / void networkStatus() {/ / leer la red celular estado uint8_t n = fona.getNetworkStatus(); Serial.println(""); Serial.Print (F "(estado de la red del)); Serial.Print(n); Serial.Print (F(":")); Si (n == 0) Serial.println (F ("no registrado")); Si (n == 1) Serial.println (F ("Registered (Inicio)")); Si (n == 2) Serial.println (F ("no registrados (buscando)")); Si (n == 3) Serial.println(F("Denied")); Si (n == 4) Serial.println(F("Unknown")); Si (n == 5) Serial.println (F ("Registered roaming")); Serial.println ("el estado de la red debe ser ' registrado' 'Inicio' en la línea anterior"); Serial.println("");} void turnOnGPRS() {Serial.println ("intentando encender GPRS..."); Si ()! fona.enableGPRS(true)) Serial.println (F ("No - error al encender")); Serial.println ("GPRS es cuando la línea superior muestra 'OK'"); Serial.println ("espere 10 segundos para asegurarse de que GPRS es de..."); retardo (10000); } / / void printData() {Serial.print ("Probe01 (exterior) temperatura:"); printOutsideTemperature(Probe01); Serial.println(); Serial.Print ("Probe02 temp (suelo):"); printSoilTemperature(Probe02); Serial.println(); Serial.Print ("Probe03 (tempint) temperatura:"); printInsideTemperature(Probe03); Serial.println(); Serial.Print ("voltaje de la batería principal:"); Serial.println(Volts); Serial.Print ("i2c maxWindPulseRate:"); Serial.println(windgust); Sin embargo no calibrado. Serial.Print ("i2c avWindPulseRate:"); Serial.println(windspeed); Serial.Print ("i2c windDirection:"); Serial.println(windDirection); Serial.Print ("lluvia de i2c:"); Serial.println(RAIN); Serial.Print ("i2c moistureValue:"); Serial.println(moistureValue); Serial.Print ("presión atmosférica:"); Serial.Print(Pressure); Serial.println ("hPa * 100"); Serial.Print ("humedad:"); Serial.Print(Humidity); Serial.println ("% \t"); Serial.Print ("temperatura de DHT22:"); Serial.Print(tempDHT22); Serial.println ("* C"); Serial.Print ("índice de calor:"); Serial.Print(heatindex); Serial.println ("* C"); Serial.println("");} < /p >

Artículos Relacionados

Estación meteorológica de Arduino DIY

Estación meteorológica de Arduino DIY

Cómo hacer tu propia estación meteorológica utilizando Arduino.Paso 1: partesArduinoCables de puenteProtoboardPantalla de Nokia 5110DHT11Paso 2: Conectar Conectar el circuito como el esquema.Paso 3: Tiempo de código!Cargar el código.Paso 4: hacer!!!!
Estación meteorológica de Arduino (AWS)

Estación meteorológica de Arduino (AWS)

En este proyecto, vamos a hacer una estación meteorológica que mide presión, temperatura, gota de lluvia, humedad del suelo y humedad del aire usando Arduino que guardar los datos de adquisición de datos.Es un proyecto bastante fácil y puede ser util
Independiente DIY estación meteorológica con Arduino

Independiente DIY estación meteorológica con Arduino

Hola creadores de ahiEsto no es un instructivo paso a paso. Como siempre me olvidé de tomar tomar instantáneas desde el inicio de este proyecto.La idea de construir una estación meteorológica de comunidad utilizando hardware abierto comenzó una larga
ESP8266 estación meteorológica con Arduino: Hardware #1

ESP8266 estación meteorológica con Arduino: Hardware #1

FondoHe leido sobre la ESP8266 primero en marzo este año y no sabía qué hacer con. Y ahora estoy realmente fascinado lo fácil que puede ser la conexión de un Arduino a Internet. Como otros me establecer una estación meteorológica en un protoboard pri
Estación meteorológica de Arduino Parte2

Estación meteorológica de Arduino Parte2

para mi último proyecto fue una máquina de frialdad de viento de Arduino.Naturalmente, este vago Geek viejo quería añadir una veleta (dirección del viento) a mi estación. ¿A quién le importa, usted puede preguntar? Bueno, soy un Geek. En realidad, di
La estación meteorológica de Arduino / termostato

La estación meteorológica de Arduino / termostato

actualización:ACTUALIZACIÓN: Agregar cálculos de punto de rocíoACTUALIZACIÓN: control de velocidad del vientoSiempre he estado interesado en el seguimiento de mi tiempo y notó la diferencia entre lo weather.com y accuweather.com creo que mi tiempo es
Estación meteorológica de Arduino.

Estación meteorológica de Arduino.

Hace un tiempo tengo una idea para construir mi propia estación meteorológica, desde cero.Resultó gran. Vamos a empezar!Paso 1: partes Una lista de artículos usan:-2 x Arduino nano.-transmisor 433mhz.-433 mhz receptor.-4 x 20 LCD (azul)-un azul led y
Mini estación meteorológica con Arduino

Mini estación meteorológica con Arduino

Este es mi primer instructable y primer completo Arduino proyecto. Aunque se puede encontrar proyecto similar, yo aprende mucho de este proyecto.Paso 1: Propósito de la estación meteorológica Esta estación meteorológica simple tendrá temperatura y le
ESP8266 estación meteorológica con Arduino – #2 Software

ESP8266 estación meteorológica con Arduino – #2 Software

Este instructable es para el software de mi Weater estación proyecto. Por favor lea primero para entender todas las explicaciones.Debido a las MCU ambos el concepto de software se basa en dos partes: el ESP8266 funciona en Nodemcu y hace el Internet
Nube de tolvas - estación meteorológica de Arduino

Nube de tolvas - estación meteorológica de Arduino

Simple del Arduino Uno estación con acceso web de Ethernet usando sensores de Maplin barato :) Ver PDF para la descripción y el código de Arduino. Se necesita 1 Arduino Uno y el shield Ethernet + algunos de la tira o el tablero un pan para conectar l
Estación meteorológica de Arduino con módulos MHz RF433

Estación meteorológica de Arduino con módulos MHz RF433

En este proyecto que le mostrará cómo hacer dos Arduinos hablar con frecuencia del RF (inalambrico)En el pasado publiqué cuatro instructables que conducen a este:Los dos primeros son acerca de cómo conectar una LCD serial con I2C a un Arduino UNO y u
Estación meteorológica personal arduino hebreo

Estación meteorológica personal arduino hebreo

הרעיון בפרויקט זה הוא ליצור שילוב של נתוני מזג אוויר המגיעים מלוח ארדוינו הנמצא בבית, ומהאינטרנט, ולאפשר למשתמש הן חיווי הנובע מהנתונים והן ביצוע פעולות פשוטות כמו הדלקה וכיבוי של תאורה מקומית (או כל מכשיר אחר המחובר לשקע הנשלט על ידי הלוח או מופעל ב
Arduino Uno DHT11 LCD estación meteorológica DIY

Arduino Uno DHT11 LCD estación meteorológica DIY

esto es DYI sobre cómo hacer su estación meteorológica usando Arduino Uno, sensor de temperatura y humedad DHT11, DFRobot LCD 2 x 16 pantalla con teclado. Generalmente puedes comprar Arduino, DHT11 y LCD por separado y desde cada capítulo de disposit
Anemómetro DIY y Windvane para estación meteorológica independiente

Anemómetro DIY y Windvane para estación meteorológica independiente

Me gustaría compartir algunos conocimientos sobre estación meteorológica. Como hemos escuchado muchas veces acerca de estación y algunas personas le gustaría construir su propia estación meteorológica en su página de inicio.Estación meteorológica es