Wetterstation Arduino
Ich habe beschlossen, einen ausführlichen Artikel zu schreiben, in dem alle Aspekte der Erstellung einer Arduino-Wetterstation erläutert werden, da es schwierig ist, den gesamten Prozess auf einmal abzudecken. Meine Version der Wetterstation ist praktisch, da ihre Daten auf einem Computer gespeichert sind.
Was wird benötigt- lokales Netzwerk, das mit einem WLAN-Router aufgebaut wurde
- Computer
Arduino UNO (Ich habe die chinesische Nachbildung verwendet.)
- USB-Kabel zum Anschließen an Arduino.
Barometer BME280 5V I2C (Temperatur-, Feuchtigkeits-, Drucksensor)
- Lötstation mit Haartrockner
- Löten 0,7 mm
- Flussmittel.
Wi-Fi-Modul ESP8266 Version ESP-01
- 4 Kabel Mama zu Papa für Steckbrett.
- 4 Kabel männlich zu weiblich für Steckbrett
- 4 Kabel 50 cm lang für das Steckbrett.
- 8 dünne Schrumpfschläuche mit einer Länge von jeweils 10 cm.
- 1 großes wärmeschrumpfbares Rohr mit einem solchen Durchmesser, dass es zusammen mit anderen wärmeschrumpfbaren Rohren „4 Kabel mit einer Länge von 50 cm für ein Steckbrett“ enthält
Netzwerkeinrichtung
Jeder Computer im Netzwerk sollte das Gerät sehen, auf dem sich der Server befindet. Es wird empfohlen, auf allen Computern im Netzwerk dieselben Arbeitsgruppen zu installieren.

Zum Vergrößern anklicken.
Sie sollten den Bradmauser und andere Firewalls deaktivieren.
Aktivieren Sie in den Netzwerkeinstellungen in den Eigenschaften des WLAN-Adapters auf der Registerkarte Zugriff am Anfang das Kontrollkästchen "Anderen Benutzern den Zugriff erlauben" und klicken Sie dann auf die Einstellungen.
Wenn Sie alle Häkchen in den Einstellungen setzen, werden die Namen der Dienste anstelle der Nummern angezeigt.

Zum Vergrößern anklicken.

Zum Vergrößern anklicken.
Sie müssen die Ports 80 und 3306 im Router öffnen. Ich werde am Beispiel des Tenda-Routers zeigen: Ermitteln Sie zunächst Ihre lokale IP-Adresse . Klicken Sie dazu auf das Symbol für das drahtlose Netzwerk. Als Nächstes werden im geöffneten Bereich neben dem Namen Ihres Netzwerks Eigenschaften angezeigt. Scrollen Sie danach nach unten.

Zum Vergrößern anklicken.
Öffnen Sie als Nächstes die Webseite des Routers unter http://192.168.0.1 , geben Sie das Kennwort für den Router ein, klicken Sie auf Erweiterte Einstellungen und dann auf Virtal Server. Geben Sie zuerst die lokale IP und dann Port 80 ein. Wiederholen Sie dann den Vorgang, geben Sie jedoch Port 3306 ein .

Zum Vergrößern anklicken.

Zum Vergrößern anklicken.
Wir benötigen folgende Komponenten:
- Apache - Daten von der Wetterstation werden hier gesendet.
- PHP - nimmt Daten von der Wetterstation auf und speichert die Datenbank.
- MySQL - Datenbanken, in denen die Temperatur gespeichert wird, da die Verwendung von nur PHP bedeutet, dass es unmöglich ist, mehrere Computer und andere Geräte anzuzeigen.
- HeidiSQL ist ein Viewer und Datenbankeditor (Sie können jeden anderen verwenden, zum Beispiel: "PhpMyAdmin").
Ich werde die Apache- Servereinstellungen nicht im Detail beschreiben, da es im Internet viele Informationen gibt. Die Hauptsache ist, Apache und MySQL so zu konfigurieren, dass sie im lokalen Netzwerk sichtbar sind.
Erstellen Sie anschließend eine Tabelle in der Datenbank - die Temperatur wird dort gespeichert.
Ein Beispiel für meine Handlerseite (Sensorwerte) auf dem Server:
PHP-Code$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'";
3. Konfigurieren von esp8266
Schließen Sie den esp-01 an den Adapter an und verbinden Sie ihn wie folgt mit dem Arduino: Rx-RX, TX-TX, GND-GND, VCC-5V ;
Erden Sie den RESET Arduino-Port auf GND .

Zum Vergrößern anklicken.
Verbinden Sie Ihr Arduino mit Ihrem Computer, öffnen Sie die Arduino IDE , dann den seriellen Monitor , geben Sie die Rate 115200 an und
Sowohl NL als auch CR .

Zum Vergrößern anklicken.
- Geben Sie den AT- Befehl ein.
- Markieren Sie OK .
- Geben Sie AT + RESTORE ein und das Modul wird nach den Werkseinstellungen gefragt.
- Geben Sie AT + CWMODE_CUR = 1 ein , um das Modul in den Client-Modus zu versetzen.
- Geben Sie AT + CWJAP_CUR = "Netzwerkname", "Passwort" - Verbindung zu WLAN ein.
- Markieren Sie OK, wenn eine Verbindung hergestellt wurde.
Konfigurieren Sie bme280 und den endgültigen Build
Verbinden Sie die Schlussfolgerungen gemäß dem Diagramm (die Aufmerksamkeit auf dem Diagramm zeigt esp8266 ohne Adapter, aber in Wirklichkeit muss es an den Adapter angeschlossen werden und bereits von
4 Ausgangsadapter haben die gleiche Funktion wie in der Abbildung gezeigt. )

Zum Vergrößern anklicken.
Öffnen Sie die Arduino IDE und fügen Sie den folgenden Code ein:
Arduino IDE Code #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);
Öffnen Sie den seriellen Monitor und merken Sie sich die markierte IC2-Adresse.
Laden Sie die Sensorbibliothek, Touch Library-Bibliotheken herunter und entpacken Sie sie unter C: \ Users \ user \ Documents \ Arduino . Öffnen
C: \ Benutzer \ Benutzer \ Dokumente \ Arduino \ Bibliotheken \ Adafruit_BME280_Library-Master und ändern Sie die Adresse:

Zum Vergrößern anklicken.
Öffnen Sie die Arduino IDE und geben Sie den Code ein:
Arduino IDE Code #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; }
Fertig. Temperaturdaten werden als Variablen in die Datenbank übertragen.
Wie Sie sehen können, benötigt meine Wetterstation grundlegende Webprogrammierkenntnisse, aber das Ergebnis ist es wert.