Innholdsfortegnelse:
- Trinn 1: Bill av essensielt utstyr
- Trinn 2: Maskinvaretilkoblinger for oppsett
- Trinn 3: Raspberry Pi -programmering i Java
- Trinn 4: Koden praktisk
- Trinn 5: Utnyttelse i konstruktiv verden
- Trinn 6: Konklusjon
Video: Personlig værstasjon som bruker Raspberry Pi med BME280 i Java: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Dårlig vær ser alltid verre ut gjennom et vindu
Vi har alltid vært interessert i å overvåke vårt lokale vær og det vi ser ut av vinduet. Vi ønsket også bedre kontroll over vårt varme- og klimaanlegg. Å bygge en personlig værstasjon er en flott læringsopplevelse. Når du er ferdig med å bygge dette prosjektet, får du en bedre forståelse av hvordan trådløs kommunikasjon fungerer, hvordan sensorer fungerer og hvor kraftig Raspberry Pi -plattformen kan være. Med dette prosjektet som base og erfaringen, vil du enkelt kunne bygge mer komplekse prosjekter i fremtiden.
Trinn 1: Bill av essensielt utstyr
1. En bringebær Pi
Det første trinnet er å få tak i et Raspberry Pi -kort. Raspberry Pi er en Linux -drevet enkeltbordsmaskin. Målet er å forbedre programmeringskunnskaper og maskinvareforståelse. Det ble raskt vedtatt av hobbyfolk og elektronikkentusiaster for innovative prosjekter.
2. I²C Shield for Raspberry Pi
INPI2 (I2C -adapteren) gir Raspberry Pi 2/3 en I²C -port for bruk med flere I²C -enheter. Den er tilgjengelig på Dcube Store
3. Digital fuktighets-, trykk- og temperatursensor, BME280
BME280 er en fuktighets-, trykk- og temperatursensor som har rask responstid og høy generell nøyaktighet. Vi kjøpte denne sensoren fra Dcube Store
4. I²C -tilkoblingskabel
Vi hadde I²C -tilkoblingskabelen tilgjengelig på Dcube Store
5. Micro USB -kabel
Micro USB -kabelen Strømforsyning er et ideelt valg for å drive Raspberry Pi.
6. Tolk Internett -tilgang via EthernetCable/WiFi -adapter
En av de første tingene du vil gjøre er å få Raspberry Pi koblet til Internett. Vi kan koble til med en Ethernet -kabel. En annen mulighet er at du kan koble til et trådløst nettverk ved hjelp av en trådløs USB -adapter.
7. HDMI -kabel (skjerm og tilkoblingskabel)
Enhver HDMI/DVI -skjerm og hvilken som helst TV skal fungere som en skjerm for Pi. Men det er valgfritt. Mulighet for ekstern tilgang (like-SSH) kan ikke utelukkes også. Du kan også få tilgang med PUTTY -programvare.
Trinn 2: Maskinvaretilkoblinger for oppsett
Lag kretsen i henhold til skjematisk vist.
Mens vi lærte, ble vi grundig med det grunnleggende innen elektronikk angående maskinvare- og programvarekunnskap. Vi ønsket å lage en enkel elektronisk skjema for dette prosjektet. Elektroniske skjemaer er som en blåkopi for elektronikk. Lag en plan og følg designet nøye. Vi har brukt noen grunnleggende elektronikk her. Logikk får deg fra A til B, fantasi tar deg overalt!
Tilkobling av Raspberry Pi og I²C Shield
Først av alt, ta Raspberry Pi og legg I²C -skjoldet (med innadvendt I²C -port) på det. Trykk skjoldet forsiktig over GPIO -pinnene til Pi, og vi er ferdige med dette trinnet så enkelt som en kake (se bildet).
Tilkobling av sensoren og Raspberry Pi
Ta sensoren og koble I²C -kabelen med den. Sørg for at I²C Output ALLTID kobles til I²C Input. Det samme må følges for Raspberry Pi med I²C -skjoldet montert over GPIO -pinnene. Vi har I²C -skjoldet og tilkoblingskablene på vår side som en veldig stor lettelse og en veldig stor fordel ettersom vi bare sitter igjen med plug and play -alternativ. Ingen flere pins og ledningsproblemer, og derfor er forvirringen borte. Tenk deg selv at du er i ledningsnettet og kommer inn på det. En lettelse fra det. Dette gjør ting ukomplisert.
Merk: Den brune ledningen bør alltid følge jordforbindelsen (GND) mellom utgangen til en enhet og inngangen til en annen enhet
Internett -tilkobling er et behov
Du har et valg her faktisk. Du kan koble Raspberry Pi med LAN -kabelen eller den trådløse Nano USB -adapteren for WIFI -tilkobling. Uansett er manifestet å koble til internett som oppnås.
Drift av kretsen
Koble Micro USB -kabelen til strømkontakten på Raspberry Pi. Punch opp og voila! Alt er i orden, og vi starter umiddelbart.
Tilkobling til skjerm
Vi kan enten ha HDMI -kabelen koblet til en skjerm eller en TV. Vi kan få tilgang til en Raspberry Pi uten å koble den til en skjerm ved hjelp av -SSH (Få tilgang til kommandolinjen til Pi fra en annen datamaskin). Du kan også bruke PUTTY -programvaren til det. Dette alternativet er for avanserte brukere, så vi vil ikke dekke det i detalj her.
Jeg har hørt at det kommer en lavkonjunktur, jeg har bestemt meg for ikke å delta
Trinn 3: Raspberry Pi -programmering i Java
Java -koden for Raspberry Pi og BME280 -sensoren. Den er tilgjengelig i vårt Github -depot.
Før du går videre til koden, må du lese instruksjonene i Readme -filen og konfigurere Raspberry Pi i henhold til den. Det vil bare ta et øyeblikk å gjøre det. En personlig værstasjon er et sett med måleinstrumenter som drives av en privatperson, klubb, forening eller til og med virksomhet. Personlige værstasjoner kan bare drives for å glede og utdanne eieren, men mange personlige værstasjonsoperatører deler også dataene sine med andre, enten ved å manuelt samle data og distribuere dem, eller ved bruk av internett eller amatørradio.
Koden er i den enkleste formen du kan forestille deg, og du bør ikke ha noe problem med den, men spør om du har. Selv om du vet tusen ting, kan du spørre noen som vet det.
Du kan også kopiere den fungerende java -koden for denne sensoren herfra.
// Distribuert med en fri viljelisens. // Bruk den på hvilken som helst måte du vil, fortjeneste eller gratis, forutsatt at den passer inn i lisensene til de tilhørende verkene. // BME280 // Denne koden er designet for å fungere med BME280_I2CS I2C Mini Module tilgjengelig fra ControlEverything.com. //
importer com.pi4j.io.i2c. I2CBus;
importer com.pi4j.io.i2c. I2CDenhet; importer com.pi4j.io.i2c. I2CFactory; importer java.io. IOException;
offentlig klasse BME280
{public static void main (String args ) kaster Unntak {// Lag I2C -buss I2CBus -buss = I2CFactory.getInstance (I2CBus. BUS_1); // Få I2C -enhet, BME280 I2C -adresse er 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Les 24 byte med data fra adresse 0x88 (136) byte b1 = ny byte [24]; enhet. lese (0x88, b1, 0, 24); // Konverter dataene // temp koeffisienter int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); hvis (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); hvis (dig_T3> 32767) {dig_T3 -= 65536; } // trykkoeffisienter int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); hvis (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); hvis (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); hvis (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); hvis (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); hvis (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); hvis (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); hvis (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); hvis (dig_P9> 32767) {dig_P9 -= 65536; } // Les 1 byte data fra adresse 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Les 7 byte med data fra adressen 0xE1 (225) device.read (0xE1, b1, 0, 7); // Konverter data // fuktighetskoeffisienter int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); hvis (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); hvis (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); hvis (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; hvis (dig_H6> 127) {dig_H6 -= 256; } // Velg kontrollfuktighetsregister // Fuktighet over samplingsfrekvens = 1 enhet. Skriv (0xF2, (byte) 0x01); // Velg kontrollmålingsregister // Normal modus, temperatur og trykk over samplingshastighet = 1 enhet. Skriv (0xF4, (byte) 0x27); // Velg konfigureringsregister // Standby -tid = 1000 ms device.write (0xF5, (byte) 0xA0); // Les 8 byte data fra adresse 0xF7 (247) // trykk msb1, trykk msb, trykk lsb, temp msb1, temp msb, temp lsb, fuktighet lsb, fuktighet msb byte data = ny byte [8]; device.read (0xF7, data, 0, 8); // Konverter trykk- og temperaturdata til 19-bits lange adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (data [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Konverter fuktighetsdata long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperaturforskyvningsberegninger dobbel var1 = (((dobbel) adc_t) / 16384.0 - ((dobbel) dig_T1) / 1024.0) * ((dobbel) 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); dobbel t_fine = (lang) (var1 + var2); dobbelt cTemp = (var1 + var2) / 5120,0; dobbelt fTemp = cTemp * 1,8 + 32; // Trykkforskyvningsberegninger var1 = ((dobbel) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dobbel) dig_P6) / 32768.0; var2 = var2 + var1 * ((dobbel) dig_P5) * 2,0; var2 = (var2 / 4.0) + (((dobbel) dig_P4) * 65536.0); var1 = (((dobbel) dig_P3) * var1 * var1 / 524288.0 + ((dobbel) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dobbel) dig_P1); dobbel p = 1048576.0 - (dobbel) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dobbel) dig_P9) * p * p / 2147483648.0; var2 = p * ((dobbel) dig_P8) / 32768.0; dobbelt trykk = (p + (var1 + var2 + ((dobbelt) dig_P7)) / 16,0) / 100; // Beregninger av fuktighetsforskyvning dobbel var_H = (((dobbel) t_fin) - 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))); dobbel fuktighet = var_H * (1,0 - dig_H1 * var_H / 524288,0); hvis (fuktighet> 100,0) {fuktighet = 100,0; } annet hvis (fuktighet <0,0) {fuktighet = 0,0; } // Utdata til skjermen System.out.printf ("Temperatur i Celsius: %.2f C %n", cTemp); System.out.printf ("Temperatur i Fahrenheit: %.2f F %n", fTemp); System.out.printf ("Trykk: %.2f hPa %n", trykk); System.out.printf ("Relativ fuktighet: %.2f %% RH %n", fuktighet); }}
Trinn 4: Koden praktisk
Last ned (eller git pull) koden og åpne den i Raspberry Pi.
Kjør kommandoene for å kompilere og laste opp koden på terminalen og se utgangen på Monitor. Etter noen få øyeblikk vil den vise alle parameterne. For å sikre at du har en jevn kodeovergang og et rolig (ish) resultat, tenker du på flere ideer for å gjøre ytterligere endringer (Hvert prosjekt starter med en historie).
Trinn 5: Utnyttelse i konstruktiv verden
BME280 oppnår høy ytelse i alle applikasjoner som krever fuktighets- og trykkmåling. Disse nye applikasjonene er kontekstbevissthet, f.eks. Huddeteksjon, Romendringsdeteksjon, Fitnessovervåking / velvære, Advarsel angående tørrhet eller høye temperaturer, Måling av volum og luftstrøm, Hjemmeautomatiseringskontroll, Kontrollvarme, Ventilasjon, Klimaanlegg (HVAC), Tingenes internett (IoT), GPS-forbedring (f.eks. Forbedring av tid til første-reparasjon, dødsregning, deteksjon av skråninger), innendørs navigasjon (endring av gulvdeteksjon, heisdeteksjon), utendørs navigasjon, fritid og sport, værmeldinger og vertikal hastighetsindikasjon (stigning/synke) Hastighet).
Trinn 6: Konklusjon
Som du kan se, er dette prosjektet en god demonstrasjon av hva maskinvare og programvare er i stand til. På litt tid kan man bygge et så imponerende prosjekt! Selvfølgelig er dette bare begynnelsen. Å lage en mer sofistikert personlig værstasjon som automatiserte flyplass personlige værstasjoner kan involvere noen flere sensorer som vindmåler (vindhastighet), transmissometer (synlighet), pyranometer (solstråling) etc. Vi har en videoopplæring på Youtube som har den grunnleggende funksjonen til I²C -sensor med Rasp Pi. Det er virkelig fantastisk å se resultatene og arbeidet med I²C -kommunikasjonen. Sjekk det også. Ha det gøy å bygge og lære! Gi oss beskjed om hva du synes om dette instruerbare. Vi vil gjerne gjøre noen forbedringer om nødvendig.
Anbefalt:
Profesjonell værstasjon som bruker ESP8266 og ESP32 DIY: 9 trinn (med bilder)
Profesjonell værstasjon ved bruk av ESP8266 og ESP32 DIY: LineaMeteoStazione er en komplett værstasjon som kan grensesnittes med profesjonelle sensorer fra Sensirion samt noen Davis Instrument -komponent (regnmåler, vindmåler) Prosjektet er beregnet som en DIY værstasjon, men bare krever
Enkel værstasjon som bruker ESP8266 .: 6 trinn (med bilder)
Enkel værstasjon som bruker ESP8266 .: I denne instruksen vil jeg dele hvordan jeg bruker ESP8266 for å få data som temperatur, trykk, klima etc. Og YouTube -data som abonnenter og amp; Totalt antall seere. og vis dataene på seriell skjerm og vis dem på LCD. Dataene vil være f
Værstasjon som bruker Wemos D1 Mini, BME280 og Sensate .: 6 trinn
Værstasjon ved hjelp av Wemos D1 Mini, BME280 og Sensate .: I tidligere innlegg har jeg delt forskjellige metoder for å bygge en værstasjon. Hvis du ikke har sjekket det, er det en lenke. I denne instruksen vil jeg demonstrere hvordan du bygger en enkel værstasjon ved hjelp av Wemos og en IoT -plattform som heter Sensate
Værstasjon som bruker Raspberry Pi med BME280 i Python: 6 trinn
Værstasjon som bruker Raspberry Pi Med BME280 i Python: er maith an scéalaí an aimir (Været er en god historieforteller) Med global oppvarming og problemer med klimaendringer blir det globale værmønsteret uberegnelig over hele verden, noe som fører til en rekke værrelaterte naturkatastrofer (tørke, ekstreme
DIY værstasjon som bruker DHT11, BMP180, Nodemcu med Arduino IDE over Blynk Server: 4 trinn
DIY Weather Station Bruke DHT11, BMP180, Nodemcu Med Arduino IDE Over Blynk Server: Github: DIY_Weather_Station Hackster.io: Weather Station Du ville ha sett Weather Application riktig? Som når du åpner den, blir du kjent med værforholdene som temperatur, fuktighet osv. Disse målingene er gjennomsnittsverdien til en stor er