Inhaltsverzeichnis:

Persönliche Wetterstation mit Raspberry Pi mit BME280 in Java - Gunook
Persönliche Wetterstation mit Raspberry Pi mit BME280 in Java - Gunook

Video: Persönliche Wetterstation mit Raspberry Pi mit BME280 in Java - Gunook

Video: Persönliche Wetterstation mit Raspberry Pi mit BME280 in Java - Gunook
Video: DIY: Метеостанция на максималках | ESP8266 + Raspberry Pi + Arduino + LoRa (IoT) 2024, Juli
Anonim
Image
Image
Liste der wesentlichen Ausrüstungsgegenstände
Liste der wesentlichen Ausrüstungsgegenstände

Schlechtes Wetter sieht durch ein Fenster immer schlimmer aus

Wir waren schon immer daran interessiert, unser lokales Wetter und das, was wir aus dem Fenster sehen, zu überwachen. Wir wollten auch eine bessere Kontrolle über unsere Heizungs- und Klimaanlage. Der Bau einer persönlichen Wetterstation ist eine großartige Lernerfahrung. Wenn Sie mit der Erstellung dieses Projekts fertig sind, werden Sie besser verstehen, wie drahtlose Kommunikation funktioniert, wie Sensoren funktionieren und wie leistungsstark die Raspberry Pi-Plattform sein kann. Mit diesem Projekt als Basis und den gesammelten Erfahrungen können Sie in Zukunft auch komplexere Projekte problemlos aufbauen.

Schritt 1: Liste der wesentlichen Ausrüstungsgegenstände

Liste der wesentlichen Ausrüstungsgegenstände
Liste der wesentlichen Ausrüstungsgegenstände
Liste der wesentlichen Ausrüstungsgegenstände
Liste der wesentlichen Ausrüstungsgegenstände
Liste der wesentlichen Ausrüstungsgegenstände
Liste der wesentlichen Ausrüstungsgegenstände

1. Ein Himbeer-Pi

Der erste Schritt besteht darin, ein Raspberry Pi-Board in die Hände zu bekommen. Raspberry Pi ist ein Linux-betriebener Einplatinencomputer. Ziel ist es, die Programmierkenntnisse und das Hardwareverständnis zu verbessern. Es wurde schnell von Bastlern und Elektronik-Enthusiasten für innovative Projekte übernommen.

2. I²C-Shield für Raspberry Pi

Der INPI2 (I2C-Adapter) bietet dem Raspberry Pi 2/3 einen I²C-Port zur Verwendung mit mehreren I²C-Geräten. Es ist im Dcube Store erhältlich

3. Digitaler Feuchtigkeits-, Druck- und Temperatursensor, BME280

Der BME280 ist ein Feuchtigkeits-, Druck- und Temperatursensor mit schneller Reaktionszeit und hoher Gesamtgenauigkeit. Wir haben diesen Sensor im Dcube Store gekauft

4. I²C-Verbindungskabel

Das I²C-Verbindungskabel hatten wir im Dcube Store

5. Micro-USB-Kabel

Das Micro-USB-Kabel Netzteil ist eine ideale Wahl für die Stromversorgung des Raspberry Pi.

6. Interpretieren des Internetzugangs über Ethernet-Kabel/WiFi-Adapter

Eines der ersten Dinge, die Sie tun sollten, ist, Ihren Raspberry Pi mit dem Internet zu verbinden. Wir können eine Verbindung über ein Ethernet-Kabel herstellen. Eine andere Möglichkeit besteht darin, dass Sie über einen USB-Wireless-Adapter eine Verbindung zu einem drahtlosen Netzwerk herstellen.

7. HDMI-Kabel (Display- und Verbindungskabel)

Jeder HDMI/DVI-Monitor und jedes Fernsehgerät sollte als Anzeige für den Pi funktionieren. Aber es ist optional. Die Möglichkeit des Fernzugriffs (wie SSH) kann ebenfalls nicht ausgeschlossen werden. Sie können auch mit der PUTTY-Software darauf zugreifen.

Schritt 2: Hardwareverbindungen für die Einrichtung

Hardware-Anschlüsse für die Einrichtung
Hardware-Anschlüsse für die Einrichtung
Hardware-Anschlüsse für Setup
Hardware-Anschlüsse für Setup

Machen Sie die Schaltung gemäß dem gezeigten Schaltplan.

Während des Lernens haben wir uns gründlich mit den Grundlagen der Elektronik in Bezug auf Hardware- und Softwarekenntnisse vertraut gemacht. Wir wollten für dieses Projekt einen einfachen Elektronikschaltplan erstellen. Elektronische Schaltpläne sind wie eine Blaupause für die Elektronik. Erstellen Sie eine Blaupause und folgen Sie dem Design sorgfältig. Wir haben hier einige Grundlagen der Elektronik angewandt. Logic bringt Sie von A nach B, Imagination bringt Sie überall hin!

Anschluss von Raspberry Pi und I²C Shield

Nehmen Sie zunächst den Raspberry Pi und platzieren Sie das I²C Shield (mit nach innen gerichtetem I²C Port) darauf. Drücken Sie das Schild vorsichtig über die GPIO-Pins von Pi und wir sind mit diesem Schritt kinderleicht fertig (siehe Bild).

Anschluss von Sensor und Raspberry Pi

Nehmen Sie den Sensor und verbinden Sie das I²C-Kabel damit. Stellen Sie sicher, dass der I²C-Ausgang IMMER mit dem I²C-Eingang verbunden ist. Das gleiche gilt für den Raspberry Pi mit dem I²C Shield über dem die GPIO Pins montiert sind. Wir haben das I²C Shield und die Anschlusskabel auf unserer Seite als sehr große Entlastung und einen sehr großen Vorteil da uns nur noch die Plug-and-Play-Option. Kein Pin- und Verdrahtungsproblem mehr und somit ist die Verwirrung verschwunden. Stellen Sie sich einfach vor, Sie befinden sich im Netz von Drähten und gehen darauf ein. Eine Erleichterung davon. Das macht die Sache unkompliziert.

Hinweis: Das braune Kabel sollte immer der Masseverbindung (GND) zwischen dem Ausgang eines Geräts und dem Eingang eines anderen Geräts folgen

Internet-Konnektivität ist ein Bedürfnis

Sie haben hier tatsächlich die Wahl. Sie können Raspberry Pi mit dem LAN-Kabel oder dem drahtlosen Nano-USB-Adapter für WIFI-Konnektivität verbinden. In jedem Fall besteht das Manifest darin, eine Verbindung zum Internet herzustellen, was erreicht wird.

Stromversorgung der Schaltung

Stecken Sie das Micro-USB-Kabel in die Strombuchse des Raspberry Pi. Zuschlagen und voila! Alles ist gut zu gehen und wir werden sofort starten.

Verbindung zum Display

Wir können entweder das HDMI-Kabel an einen Monitor oder einen Fernseher anschließen. Wir können auf einen Raspberry Pi zugreifen, ohne ihn mit -SSH (Zugriff auf die Befehlszeile des Pi von einem anderen Computer aus) an einen Monitor anzuschließen. Sie können dafür auch die PUTTY-Software verwenden. Diese Option ist für fortgeschrittene Benutzer gedacht, daher werden wir sie hier nicht im Detail behandeln.

Ich habe gehört, dass es eine Rezession geben wird, und habe mich entschieden, nicht mitzumachen

Schritt 3: Raspberry Pi-Programmierung in Java

Raspberry Pi-Programmierung in Java
Raspberry Pi-Programmierung in Java

Der Java-Code für den Raspberry Pi und den BME280-Sensor. Es ist in unserem Github-Repository verfügbar.

Bevor Sie mit dem Code fortfahren, lesen Sie die Anweisungen in der Readme-Datei und richten Sie Ihren Raspberry Pi entsprechend ein. Es dauert nur einen Moment, dies zu tun. Eine persönliche Wetterstation ist ein Satz von Wettermessgeräten, die von einer Privatperson, einem Verein, einer Vereinigung oder sogar einem Unternehmen betrieben werden. Persönliche Wetterstationen dürfen nur zum Vergnügen und zur Schulung des Besitzers betrieben werden, aber viele Betreiber von persönlichen Wetterstationen teilen ihre Daten auch mit anderen, entweder durch manuelles Zusammenstellen und Verteilen von Daten oder durch die Verwendung des Internets oder des Amateurfunks.

Der Code ist in seiner einfachsten Form, die Sie sich vorstellen können, und Sie sollten kein Problem damit haben, aber fragen Sie, ob Sie es haben. Auch wenn Sie tausend Dinge wissen, fragen Sie jemanden, der sich auskennt.

Von hier aus können Sie auch den funktionierenden Java-Code für diesen Sensor kopieren.

// Verbreitung mit freier Lizenz.// Verwenden Sie es, wie Sie wollen, profitabel oder kostenlos, sofern es in die Lizenzen der zugehörigen Werke passt. // BME280 // Dieser Code wurde entwickelt, um mit dem BME280_I2CS I2C Mini-Modul zu arbeiten, das von ControlEverything.com erhältlich ist. //

com.pi4j.io.i2c. I2CBus importieren;

com.pi4j.io.i2c. I2CDevice importieren; com.pi4j.io.i2c. I2CFactory importieren; import java.io. IOException;

öffentliche Klasse BME280

{ public static void main(String args) wirft Ausnahme {// I2C-Bus erstellen I2CBus-Bus = I2CFactory.getInstance(I2CBus. BUS_1); // I2C-Gerät abrufen, BME280 I2C-Adresse ist 0x76 (108) I2CDevice-Gerät = bus.getDevice (0x76); // 24 Byte Daten von Adresse 0x88 (136) lesen byte b1 = new byte[24]; device.read (0x88, b1, 0, 24); // Konvertieren Sie die Daten // Temp-Koeffizienten int dig_T1 = (b1[0] & 0xFF) + ((b1[1] & 0xFF) * 256); int dig_T2 = (b1[2] & 0xFF) + ((b1[3] & 0xFF) * 256); if(dig_T2 > 32767) {dig_T2 -= 65536; } int dig_T3 = (b1[4] & 0xFF) + ((b1[5] & 0xFF) * 256); if(dig_T3 > 32767) {dig_T3 -= 65536; } // Druckkoeffizienten int dig_P1 = (b1[6] & 0xFF) + ((b1[7] & 0xFF) * 256); int dig_P2 = (b1[8] & 0xFF) + ((b1[9] & 0xFF) * 256); if(dig_P2 > 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); if(dig_P3 > 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); if(dig_P4 > 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); if(dig_P5 > 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); if(dig_P6 > 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); if(dig_P7 > 32767) {dig_P7 -= 65536; } int dig_P8 = (b1[20] & 0xFF) + ((b1[21] & 0xFF) * 256); if(dig_P8 > 32767) {dig_P8 -= 65536; } int dig_P9 = (b1[22] & 0xFF) + ((b1[23] & 0xFF) * 256); if(dig_P9 > 32767) {dig_P9 -= 65536; } // 1 Byte Daten von Adresse 0xA1 (161) lesen int dig_H1 = ((byte)device.read (0xA1) & 0xFF); // 7 Byte Daten von Adresse 0xE1 (225) lesen device.read (0xE1, b1, 0, 7); // Konvertieren Sie die Daten // Feuchtekoeffizienten int dig_H2 = (b1[0] & 0xFF) + (b1[1] * 256); if(dig_H2 > 32767) {dig_H2 -= 65536; } int dig_H3 = b1[2] & 0xFF; int dig_H4 = ((b1[3] & 0xFF) * 16) + (b1[4] & 0xF); if(dig_H4 > 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1[4] & 0xFF) / 16) + ((b1[5] & 0xFF) * 16); if(dig_H5 > 32767) {dig_H5 -= 65536; } int dig_H6 = b1[6] & 0xFF; if(dig_H6 > 127) {dig_H6 -= 256; } // Regelfeuchteregister auswählen // Feuchte über Abtastrate = 1 device.write (0xF2, (byte) 0x01); // Kontrollmessregister auswählen // Normalmodus, Temperatur und Druck über Abtastrate = 1 device.write (0xF4, (byte) 0x27); // Konfigurationsregister auswählen // Standby-Zeit = 1000 ms device.write(0xF5, (byte)0xA0); // 8 Byte Daten von Adresse 0xF7(247) lesen // Druck msb1, Druck msb, Druck lsb, temp msb1, temp msb, temp lsb, feuchtigkeit lsb, feuchtigkeit msb byte data = new byte[8]; device.read (0xF7, Daten, 0, 8); // Druck- und Temperaturdaten in eine Länge von 19 Bit umwandeln adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (long) (Daten[2] & 0xF0)) / 16; long adc_t = (((long)(data[3] & 0xFF) * 65536) + ((long)(data[4] & 0xFF) * 256) + (long)(data[5] & 0xF0)) / 16; // Konvertieren der Feuchtedaten long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Temperatur-Offset-Berechnungen double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); double var2 = ((((double)adc_t) / 131072.0 - ((double)dig_T1) / 8192.0) * (((double)adc_t)/131072.0 - ((double)dig_T1)/8192.0)) * ((double)dig_T3); double t_fine = (long)(var1 + var2); doppelter cTemp = (var1 + var2) / 5120.0; doppeltes fTemp = cTemp * 1,8 + 32; // Druck-Offset-Berechnungen var1 = ((double)t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((double)dig_P6) / 32768.0; var2 = var2 + var1 * ((double)dig_P5) * 2,0; var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0); var1 = (((double) dig_P3) * var1 * var1 / 524288.0 + ((double) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((doppelt)dig_P1); doppeltes p = 1048576,0 - (doppeltes)adc_p; p = (p – (var2 / 4096,0)) * 6250,0 / var1; var1 = ((double) dig_P9) * p * p / 2147483648.0; var2 = p * ((double) dig_P8) / 32768.0; doppelter Druck = (p + (var1 + var2 + ((double)dig_P7)) / 16.0) / 100; // Feuchtigkeits-Offset-Berechnungen double var_H = (((double)t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64,0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536,0 * (1,0 + dig_H6 / 67108864.0 * var_H * (1,0 + dig_H3 / 67108864.0 * var_H))); doppelte Feuchtigkeit = var_H * (1.0 - dig_H1 * var_H / 524288.0); Wenn (Luftfeuchtigkeit > 100,0) { Feuchtigkeit = 100,0; } Sonst wenn (Luftfeuchtigkeit < 0,0) { Feuchtigkeit = 0,0; } // Daten auf Bildschirm ausgeben System.out.printf("Temperatur in Celsius: %.2f C %n", cTemp); System.out.printf("Temperatur in Fahrenheit: %.2f F %n", fTemp); System.out.printf("Druck: %.2f hPa %n", Druck); System.out.printf("Relative Luftfeuchtigkeit: %.2f %% RH %n", Luftfeuchtigkeit); } }

Schritt 4: Die Praxis des Codes

Die Praxis des Kodex
Die Praxis des Kodex

Laden Sie nun den Code herunter (oder git pull) und öffnen Sie ihn auf dem Raspberry Pi.

Führen Sie die Befehle zum Kompilieren und Hochladen des Codes auf dem Terminal aus und sehen Sie sich die Ausgabe auf Monitor an. Nach wenigen Augenblicken werden alle Parameter angezeigt. Um sicherzustellen, dass Sie einen reibungslosen Codeübergang und ein ruhiges (ish) Ergebnis haben, denken Sie an weitere Ideen, um weitere Änderungen vorzunehmen (Jedes Projekt beginnt mit einer Geschichte).

Schritt 5: Nutzung in konstruktiver Welt

Der BME280 erreicht eine hohe Leistung in allen Anwendungen, die Feuchtigkeits- und Druckmessungen erfordern. Diese neuen Anwendungen sind Context Awareness, z. B. Hauterkennung, Raumveränderungserkennung, Fitnessüberwachung / Wohlbefinden, Warnung vor Trockenheit oder hohen Temperaturen, Messung von Volumen und Luftstrom, Hausautomationssteuerung, Steuerung von Heizung, Lüftung, Klimaanlage (HVAC), Internet of Things (IoT), GPS-Verbesserung (z. B. Verbesserung der Zeit bis zur ersten Fehlerbehebung, Koppelnavigation, Neigungserkennung), Indoor-Navigation (Bodenwechselerkennung, Aufzugserkennung), Outdoor-Navigation, Freizeit- und Sportanwendungen, Wettervorhersage und Anzeige der vertikalen Geschwindigkeit (Anstieg/Sink) Geschwindigkeit).

Schritt 6: Fazit

Wie Sie sehen, ist dieses Projekt eine großartige Demonstration dessen, was Hardware und Software leisten können. In kurzer Zeit kann man so ein beeindruckendes Projekt bauen! Natürlich ist dies nur der Anfang. Um eine anspruchsvollere persönliche Wetterstation wie automatisierte persönliche Flughafenwetterstationen zu erstellen, können einige weitere Sensoren wie Anemometer (Windgeschwindigkeit), Transmissometer (Sichtbarkeit), Pyranometer (Sonnenstrahlung) usw I²C-Sensor mit RasPi. Es ist wirklich erstaunlich, die Ergebnisse und das Funktionieren der I²C-Kommunikation zu sehen. Überprüfen Sie es auch. Viel Spaß beim Bauen und Lernen! Bitte lassen Sie uns wissen, was Sie von diesem instructable halten. Bei Bedarf würden wir gerne einige Verbesserungen vornehmen.

Empfohlen: