Estaci贸n Meteorol贸gica Arduino

Estaci贸n Meteorol贸gica Arduino


Decid铆 escribir un art铆culo detallado que explica todos los aspectos de la creaci贸n de una estaci贸n meteorol贸gica Arduino, ya que es dif铆cil cubrir todo el proceso de una vez. Mi versi贸n de la estaci贸n meteorol贸gica es conveniente porque sus datos se almacenan en una computadora.



Lo que se necesita
  • red local construida usando un enrutador Wifi
  • una computadora
  • arduino UNO Arduino UNO (utilic茅 la r茅plica china).
  • Cable USB para conectar a Arduino.
  • bar贸metro BME280 5V I2C (sensor de temperatura, humedad, presi贸n)
  • estaci贸n de soldadura con secador de pelo
  • soldadura 0.7 mm
  • flujo.
  • M贸dulo Wi-Fi ESP8266 versi贸n ESP-01
  • 4 cables de mam谩 a pap谩 para el tablero.
  • 4 cables macho a hembra para protoboard
  • 4 cables de 50 cm de largo para el tablero.
  • 8 tubos delgados termocontra铆bles de 10 cm de largo cada uno.
  • 1 tubo grande termocontra铆ble de tal di谩metro que incluya "4 cables de 50 cm de largo para una placa de prueba" junto con otros tubos termocontra铆bles


Configuraci贸n de red


Cada computadora de la red debe ver el dispositivo en el que se encuentra el servidor. Se recomienda instalar los mismos grupos de trabajo en todas las computadoras de la red.


Click para ampliar.




Debe deshabilitar bradmauser y otros firewalls.


En la configuraci贸n de red, en las propiedades del adaptador inal谩mbrico, en la pesta帽a de acceso, coloque al principio la casilla de verificaci贸n "permitir que otros usuarios accedan" y luego haga clic en la configuraci贸n;
ponga todas las marcas de verificaci贸n en la configuraci贸n, ver谩 los nombres de los servicios en lugar de los n煤meros.


Click para ampliar.


Click para ampliar.




Debe abrir los puertos 80 y 3306 en el enrutador. Le mostrar茅 el ejemplo de un enrutador Tenda: en primer lugar, descubra su direcci贸n IP local ; para esto, haga clic en el icono de red inal谩mbrica. A continuaci贸n, en el panel abierto, cerca del nombre de su red, aparecer谩n Propiedades . Despu茅s, despl谩cese hacia abajo.


Click para ampliar.




Luego, abra la p谩gina web del enrutador, lo tengo http://192.168.0.1 , ingrese la contrase帽a del enrutador, haga clic en Configuraci贸n avanzada, luego en Virtal Server. Luego ingrese primero la IP local y el puerto 80. Luego repita la operaci贸n, pero ingrese el puerto 3306 .


Click para ampliar.


Click para ampliar.





Necesitamos los siguientes componentes:

  • Apache : los datos de la estaci贸n meteorol贸gica se enviar谩n aqu铆.
  • PHP : recoger谩 datos de la estaci贸n meteorol贸gica y guardar谩 la base de datos.
  • Mysql : bases de datos donde se almacenar谩 la temperatura, ya que usar solo PHP significa que es imposible proporcionar visualizaci贸n para varias computadoras y otros dispositivos.
  • HeidiSQL es un visor y editor de base de datos (puede usar cualquier otro, por ejemplo: "PhpMyAdmin").

No describir茅 en detalle la configuraci贸n del servidor Apache , porque hay mucha informaci贸n en Internet. Lo principal es configurar Apache y MySQL para que sean visibles en la red local.

Despu茅s de eso, cree una tabla en la base de datos: la temperatura se guardar谩 all铆.

Un ejemplo de mi p谩gina de controlador (lecturas del sensor) en el servidor:



C贸digo PHP
$link = mysqli_connect("   ", "root", "  ", " "); if (!$link) { echo ":     MySQL." . PHP_EOL; echo "  errno: " . mysqli_connect_errno() . PHP_EOL; echo "  error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "  MySQL !" . PHP_EOL; echo "  : " . mysqli_get_host_info($link) . PHP_EOL; if(isset($_GET['temp'])){ $c=$_GET['temp']; $vlah=$_GET['vlah']; $davlen=$_GET['davlen']; $sql = "UPDATE `temp1` SET `C`='$c',`vlah`='$vlah',`davlen`='$davlen' WHERE `id`='1'";//     mysqli_query($link,$sql); } echo"<br>"; $sql1="SELECT * FROM `temp1`";//  $result = mysqli_query($link,$sql1); $row = mysqli_fetch_all($result,MYSQLI_NUM); echo " "; echo $row[count($row)-1][0]; echo " C"; echo"<br>"; echo " "; echo $row[count($row)-1][1]; echo "hPa"; echo"<br>"; echo " "; echo $row[count($row)-1][2]; echo "%"; 


3. Configurando esp8266


Conecte el esp-01 al adaptador y con茅ctelo al Arduino de la siguiente manera: Rx-RX, TX-TX, GND-GND, VCC-5V ;
Conecte a tierra el puerto RESET Arduino a GND ;


Click para ampliar.



Conecte su arduino a su computadora, abra el IDE de Arduino , luego el Serial Monitor , luego especifique Rate 115200 y
Tanto NL como CR .


Click para ampliar.


  1. Ingrese el comando AT .
  2. Resalta OK .
  3. Ingrese AT + RESTORE , le pedir谩 al m贸dulo la configuraci贸n de f谩brica.
  4. Ingrese AT + CWMODE_CUR = 1 , esto pondr谩 el m贸dulo en modo cliente.
  5. Ingrese AT + CWJAP_CUR = "Network_name", "Password" - conexi贸n a wifi.
  6. Resalte Aceptar si se ha producido una conexi贸n.

Configurar bme280 y compilaci贸n final


Conecte las conclusiones de acuerdo con el diagrama (la atenci贸n al diagrama muestra esp8266 sin un adaptador, pero en realidad necesita estar conectado al adaptador, y ya desde
4 adaptadores de salida tienen la misma funci贸n que se muestra en el diagrama. )


Click para ampliar.


Abra el IDE de Arduino y pegue el siguiente c贸digo:


C贸digo IDE Arduino
 #include <Wire.h> void setup(){ Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 8; address < 127; address++ ){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); 


Abra el Monitor de serie y recuerde la direcci贸n de IC2 resaltada.
Descargue las bibliotecas Sensor Library , Touch Library y descompr铆malas en C: \ Users \ user \ Documents \ Arduino . Abierto
C: \ Usuarios \ usuario \ Documentos \ Arduino \ bibliotecas \ Adafruit_BME280_Library-master y cambie la direcci贸n:


Click para ampliar.


Abra el IDE de Arduino y coloque el c贸digo:


C贸digo IDE Arduino
 #include <SoftwareSerial.h> #define RX 10//    esp8266 #define TX 11//    esp8266 String AP = "Aleks"; //   String PASS = "1brui47ci881"; //  String HOST = "192.168.0.185";//   String PORT = "80";//  String field = "field1"; int countTrueCommand; int countTimeCommand; boolean found = false; int valSensor = 1; SoftwareSerial esp8266(RX,TX); #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() { Serial.begin(9600); bool status; // default settings // (you can also pass in a Wire library object like &Wire2) status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } esp8266.begin(115200); sendCommand("AT",5,"OK"); sendCommand("AT+CWMODE=1",5,"OK"); sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK"); sendCommand("AT+CIPMUX=1",5,"OK"); } void loop() { float vlah=bme.readPressure() / 100.0F; sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK"); String cmd = "GET /?temp="+String(bme.readTemperature())+"&vlah="+String(vlah)+"&davlen="+String(bme.readHumidity())+" HTTP/1.1\r\nHost: 192.168.0.185\r\n\r\n";// GET    ,temp,vlah,davlen           . sendCommand("AT+CIPSEND=0," +String(cmd.length()+4),4,">"); esp8266.println(cmd);delay(1500);countTrueCommand++; sendCommand("AT+CIPCLOSE=0",5,"OK"); delay(100000); } void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); } void sendCommand(String command, int maxTime, char readReplay[]) { Serial.print(countTrueCommand); Serial.print(". at command => "); Serial.print(command); Serial.print(" "); while(countTimeCommand < (maxTime*1)) { esp8266.println(command);//at+cipsend if(esp8266.find(readReplay))//ok { found = true; break; } countTimeCommand++; } if(found == true) { Serial.println("OYI"); countTrueCommand++; countTimeCommand = 0; } if(found == false) { Serial.println("Fail"); countTrueCommand = 0; countTimeCommand = 0; } found = false; } 


Listo Los datos de temperatura se transferir谩n como variables a la base de datos.

Como puede ver, mi estaci贸n meteorol贸gica requiere un conocimiento inicial de programaci贸n web, pero el resultado lo vale.


Source: https://habr.com/ru/post/443664/


All Articles