Station météo Arduino

Station météo Arduino


J'ai décidé d'écrire un article détaillé racontant tous les aspects de la création d'une station météo Arduino, car il est difficile de couvrir l'ensemble du processus à la fois. Ma version de la station météo est pratique car ses données sont stockées sur un ordinateur.



Ce qui est nécessaire
  • rĂ©seau local construit Ă  l'aide d'un routeur Wifi
  • un ordinateur
  • arduino UNO Arduino UNO (j'ai utilisĂ© la rĂ©plique chinoise.)
  • Câble USB pour se connecter Ă  Arduino.
  • baromètre BME280 5V I2C (tempĂ©rature, humiditĂ©, capteur de pression)
  • station de soudage avec sèche-cheveux
  • soudure 0,7 mm
  • flux.
  • Module Wi-Fi ESP8266 version ESP-01
  • 4 câbles maman Ă  papa pour planche Ă  pain.
  • 4 câbles mâle Ă  femelle pour planche Ă  pain
  • 4 câbles de 50 cm de long pour la planche Ă  pain.
  • 8 tubes minces thermorĂ©tractables de 10 cm de long chacun.
  • 1 grand tube thermorĂ©tractable d'un tel diamètre pour qu'il comprenne "4 câbles de 50 cm de long pour une planche Ă  pain" avec d'autres tubes thermorĂ©tractables


Configuration du réseau


Chaque ordinateur du réseau doit voir le périphérique sur lequel se trouve le serveur. Il est conseillé d'installer les mêmes groupes de travail sur tous les ordinateurs du réseau.


Cliquer pour agrandir.




Vous devez désactiver le bradmauser et les autres pare-feu.


Dans les paramètres réseau, dans les propriétés de l'adaptateur sans fil, dans l'onglet d'accès, cochez au début la case «autoriser les autres utilisateurs à accéder» puis - cliquez sur les paramètres;
mettez toutes les coches dans les paramètres, vous verrez les noms des services au lieu des numéros.


Cliquer pour agrandir.


Cliquer pour agrandir.




Vous devez ouvrir les ports 80 et 3306 dans le routeur. Je vais vous montrer l'exemple d'un routeur Tenda: tout d'abord, découvrez votre adresse IP locale , pour cela, cliquez sur l'icône du réseau sans fil. Ensuite, dans le panneau ouvert, à côté du nom de votre réseau, Propriétés apparaîtra. Après, faites défiler vers le bas.


Cliquer pour agrandir.




Ensuite, ouvrez la page Web du routeur, je l'ai http://192.168.0.1 , saisissez le mot de passe du routeur, cliquez sur Paramètres avancés, puis sur Virtal Server. Saisissez d'abord l' IP local et le port 80. Répétez l'opération, mais entrez le port 3306 .


Cliquer pour agrandir.


Cliquer pour agrandir.





Nous avons besoin des composants suivants:

  • Apache - les donnĂ©es de la station mĂ©tĂ©o seront envoyĂ©es ici.
  • PHP - rĂ©cupĂ©rera les donnĂ©es de la station mĂ©tĂ©o et sauvegardera la base de donnĂ©es.
  • Mysql - bases de donnĂ©es oĂą la tempĂ©rature sera stockĂ©e, car en utilisant uniquement PHP, il est impossible de fournir un affichage pour plusieurs ordinateurs et autres appareils.
  • HeidiSQL - visionneuse et Ă©diteur de base de donnĂ©es (vous pouvez utiliser n'importe quel autre, par exemple: "PhpMyAdmin").

Je ne décrirai pas en détail les paramètres du serveur Apache , car il y a beaucoup d'informations sur Internet, l'essentiel est de configurer Apache et MySQL pour qu'ils soient visibles sur le réseau local.

Après cela, créez une table dans la base de données - la température y sera enregistrée.

Un exemple de ma page de gestionnaire (lectures de capteur) sur le serveur:



Code 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. Configuration de esp8266


Connectez l'esp-01 Ă  l'adaptateur et connectez-le Ă  l'Arduino comme suit: Rx-RX, TX-TX, GND-GND, VCC-5V ;
Mettre Ă  la terre le port RESET Arduino sur GND ;


Cliquer pour agrandir.



Connectez votre arduino à votre ordinateur, ouvrez l' Arduino IDE , puis Serial Monitor , puis spécifiez Rate 115200 et
NL et CR .


Cliquer pour agrandir.


  1. Entrez la commande AT .
  2. Sélectionnez OK .
  3. Entrez AT + RESTORE , il demandera au module les paramètres d'usine.
  4. Entrez AT + CWMODE_CUR = 1 , cela mettra le module en mode client.
  5. Entrez AT + CWJAP_CUR = "Network_name", "Password" - connexion au wifi.
  6. Sélectionnez OK si une connexion a eu lieu.

Configurer bme280 et la version finale


Connectez les conclusions selon le schéma (attention au schéma montre esp8266 sans adaptateur, mais en réalité il doit être connecté à l'adaptateur, et déjà depuis
4 adaptateurs de sortie ont la même fonction que celle illustrée dans le diagramme. )


Cliquer pour agrandir.


Ouvrez l'IDE Arduino et collez le code suivant:


Code 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); 


Ouvrez le moniteur série et souvenez-vous de l'adresse IC2 en surbrillance.
Téléchargez la bibliothèque Sensor Library , les bibliothèques Touch Library et décompressez-les dans C: \ Users \ user \ Documents \ Arduino . Ouverte
C: \ Users \ user \ Documents \ Arduino \ bibliothèques \ Adafruit_BME280_Library-master et changez l'adresse:


Cliquer pour agrandir.


Ouvrez l'IDE Arduino et mettez le code:


Code 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; } 


C'est fait. Les données de température seront transférées sous forme de variables dans la base de données.

Comme vous pouvez le voir, ma station météo nécessite une connaissance initiale de la programmation web, mais le résultat en vaut la peine.


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


All Articles