Inhoudsopgave:

Persoonlijk weerstation Raspberry Pi gebruiken met BME280 in Java - Ajarnpa
Persoonlijk weerstation Raspberry Pi gebruiken met BME280 in Java - Ajarnpa

Video: Persoonlijk weerstation Raspberry Pi gebruiken met BME280 in Java - Ajarnpa

Video: Persoonlijk weerstation Raspberry Pi gebruiken met BME280 in Java - Ajarnpa
Video: WiFi weerstation Raspberry Pi voor beginners door gebruik MQQT en SQLite [Jan-2019] 2024, Juli-
Anonim
Image
Image
Factuur van essentiële apparatuur
Factuur van essentiële apparatuur

Slecht weer ziet er altijd slechter uit door een raam

We zijn altijd geïnteresseerd geweest in het volgen van ons lokale weer en wat we uit het raam zien. We wilden ook een betere controle over ons verwarmings- en airconditioningsysteem. Het bouwen van een persoonlijk weerstation is een geweldige leerervaring. Wanneer u klaar bent met het bouwen van dit project, zult u beter begrijpen hoe draadloze communicatie werkt, hoe sensoren werken en hoe krachtig het Raspberry Pi-platform kan zijn. Met dit project als basis en de opgedane ervaring kun je in de toekomst eenvoudig complexere projecten bouwen.

Stap 1: Factuur van essentiële apparatuur

Factuur van essentiële apparatuur
Factuur van essentiële apparatuur
Factuur van essentiële apparatuur
Factuur van essentiële apparatuur
Factuur van essentiële apparatuur
Factuur van essentiële apparatuur

1. Een Raspberry Pi

De eerste stap is om een Raspberry Pi-bord te bemachtigen. Raspberry Pi is een door Linux aangedreven computer met één bord. Het doel is om programmeervaardigheden en hardware-begrip te verbeteren. Het werd al snel door hobbyisten en elektronica-enthousiastelingen geadopteerd voor innovatieve projecten.

2. I²C-schild voor Raspberry Pi

De INPI2 (I2C-adapter) biedt de Raspberry Pi 2/3 een I²C-poort voor gebruik met meerdere I²C-apparaten. Het is beschikbaar in de Dcube Store

3. Digitale vochtigheids-, druk- en temperatuursensor, BME280

De BME280 is een vochtigheids-, druk- en temperatuursensor met een snelle responstijd en een hoge algehele nauwkeurigheid. We hebben deze sensor gekocht bij Dcube Store

4. I²C-verbindingskabel

We hadden de I²C-verbindingskabel beschikbaar bij Dcube Store

5. Micro-USB-kabel

De micro-USB-kabel Voeding is een ideale keuze voor het voeden van de Raspberry Pi.

6. Interpretatie van internettoegang via Ethernet-kabel/WiFi-adapter

Een van de eerste dingen die u wilt doen, is uw Raspberry Pi met internet verbinden. We kunnen verbinding maken met een Ethernet-kabel. Een andere mogelijkheid is dat u verbinding kunt maken met een draadloos netwerk met behulp van een draadloze USB-adapter.

7. HDMI-kabel (beeldscherm- en verbindingskabel)

Elke HDMI/DVI-monitor en elke tv zou moeten werken als een display voor de Pi. Maar het is optioneel. Toegang op afstand (zoals-SSH) kan ook niet worden uitgesloten. U kunt ook toegang krijgen met PUTTY-software.

Stap 2: Hardwareverbindingen voor installatie

Hardwareverbindingen voor installatie
Hardwareverbindingen voor installatie
Hardwareverbindingen voor installatie
Hardwareverbindingen voor installatie

Maak het circuit volgens het getoonde schema.

Tijdens het leren hebben we ons grondig verdiept in de basis van elektronica met betrekking tot hardware- en softwarekennis. Voor dit project wilden we een eenvoudig elektronicaschema maken. Elektronische schema's zijn als een blauwdruk voor elektronica. Maak een blauwdruk en volg het ontwerp nauwkeurig. We hebben hier enkele basisprincipes van elektronica toegepast. Logica brengt je van A naar B, verbeelding brengt je overal!

Aansluiting van de Raspberry Pi en I²C Shield

Neem eerst de Raspberry Pi en plaats het I²C Shield (met naar binnen gerichte I²C-poort) erop. Druk het schild voorzichtig over de GPIO-pinnen van Pi en we zijn zo eenvoudig als taart klaar met deze stap (zie de foto).

Aansluiting van de Sensor en Raspberry Pi

Pak de sensor en sluit de I²C-kabel ermee aan. Zorg ervoor dat de I²C-uitgang ALTIJD wordt aangesloten op de I²C-ingang. Hetzelfde moet worden gevolgd voor de Raspberry Pi met het I²C-schild erop gemonteerd, de GPIO-pinnen. plug-and-play-optie. Geen problemen meer met pinnen en bedrading en dus is verwarring verdwenen. Stel je voor dat je in het web van draden zit en daarin stapt. Een verademing daarvan. Dit maakt het ongecompliceerd.

Opmerking: de bruine draad moet altijd de massaverbinding (GND) volgen tussen de uitgang van het ene apparaat en de ingang van een ander apparaat

Internetverbinding is een noodzaak

Je hebt hier eigenlijk een keuze. U kunt Raspberry Pi aansluiten met de LAN-kabel of de draadloze Nano USB-adapter voor WIFI-connectiviteit. Hoe dan ook, het manifest is om verbinding te maken met internet, wat wordt bereikt.

Voeding van het circuit

Steek de micro-USB-kabel in de stroomaansluiting van de Raspberry Pi. Opschieten en voila! Alles is goed om te gaan en we zullen onmiddellijk beginnen.

Verbinding met beeldscherm

We kunnen de HDMI-kabel op een monitor of een tv aansluiten. We hebben toegang tot een Raspberry Pi zonder deze op een monitor aan te sluiten met -SSH (toegang tot de opdrachtregel van de Pi vanaf een andere computer). U kunt daarvoor ook de PUTTY-software gebruiken. Deze optie is voor gevorderde gebruikers, dus we zullen het hier niet in detail behandelen.

Ik heb gehoord dat er een recessie komt, ik heb besloten niet mee te doen

Stap 3: Raspberry Pi programmeren in Java

Raspberry Pi-programmering in Java
Raspberry Pi-programmering in Java

De Java-code voor de Raspberry Pi en BME280-sensor. Het is beschikbaar in onze Github-repository.

Voordat u verder gaat met de code, moet u ervoor zorgen dat u de instructies in het Readme-bestand leest en uw Raspberry Pi volgens de code instelt. Het duurt slechts een moment om dit te doen. Een persoonlijk weerstation is een set weermeetinstrumenten die worden bediend door een particulier, club, vereniging of zelfs bedrijf. Persoonlijke weerstations mogen uitsluitend worden gebruikt voor het plezier en de opvoeding van de eigenaar, maar veel exploitanten van persoonlijke weerstations delen hun gegevens ook met anderen, hetzij door handmatig gegevens te verzamelen en te verspreiden, hetzij door het gebruik van internet of amateurradio.

De code is in de eenvoudigste vorm die je je kunt voorstellen en je zou er geen probleem mee moeten hebben, maar vraag of je die hebt. Zelfs als je duizend dingen weet, vraag het toch aan iemand die het weet.

U kunt hier ook de werkende Java-code voor deze sensor kopiëren.

// Gedistribueerd met een vrije licentie.// Gebruik het zoals je wilt, winst of gratis, op voorwaarde dat het past in de licenties van de bijbehorende werken. // BME280 // Deze code is ontworpen om te werken met de BME280_I2CS I2C Mini Module die verkrijgbaar is bij ControlEverything.com. //

com.pi4j.io.i2c. I2CBus importeren;

com.pi4j.io.i2c. I2CDevice importeren; importeer com.pi4j.io.i2c. I2CFactory; import java.io. IOException;

openbare klasse BME280

{public static void main (String args ) gooit Exception { // Create I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Haal I2C-apparaat op, BME280 I2C-adres is 0x76 (108) I2CDevice-apparaat = bus.getDevice (0x76); // Lees 24 bytes aan gegevens van adres 0x88 (136) byte b1 = nieuwe byte [24]; apparaat.lezen (0x88, b1, 0, 24); // Converteer de gegevens // temp coëfficiënten 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; } // drukcoëfficiënten 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; } // Lees 1 byte aan gegevens van adres 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Lees 7 bytes aan gegevens van adres 0xE1 (225) device.read (0xE1, b1, 0, 7); // Converteer de gegevens // vochtigheidscoëfficiënten 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; } // Selecteer controle vochtigheid register // Vochtigheid over bemonsteringsfrequentie = 1 device.write (0xF2, (byte)0x01); // Selecteer controlemeetregister // Normale modus, temperatuur en druk over bemonsteringssnelheid = 1 apparaat.write (0xF4, (byte)0x27); // Selecteer config register // Stand-by tijd = 1000 ms device.write (0xF5, (byte)0xA0); // Lees 8 bytes aan gegevens van adres 0xF7 (247) // druk msb1, druk msb, druk lsb, temp msb1, temp msb, temp lsb, vochtigheid lsb, vochtigheid msb byte data = nieuwe byte [8]; apparaat.lezen (0xF7, gegevens, 0, 8); // Converteer druk- en temperatuurgegevens naar 19-bits lange adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (long) (gegevens[2] & 0xF0)) / 16; long adc_t = (((long)(data[3] & 0xFF) * 65536) + ((long)(data[4] & 0xFF) * 256) + (long)(data[5] & 0xF0)) / 16; // Converteer de vochtigheidsgegevens long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Berekeningen temperatuur offset dubbele var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); dubbele var2 = ((((dubbel)adc_t) / 131072.0 - ((dubbel)dig_T1) / 8192.0) * (((dubbel)adc_t)/131072.0 - ((dubbel)dig_T1)/8192.0)) * ((dubbel)dig_T3); dubbele t_fine = (lang)(var1 + var2); dubbele cTemp = (var1 + var2) / 5120,0; dubbele fTemp = cTemp * 1.8 + 32; // Berekeningen drukoffset var1 = ((dubbel)t_fine / 2.0) - 64000,0; var2 = var1 * var1 * ((dubbel)dig_P6) / 32768.0; var2 = var2 + var1 * ((dubbel)dig_P5) * 2.0; var2 = (var2 / 4.0) + (((dubbel)dig_P4) * 65536.0); var1 = (((dubbel) dig_P3) * var1 * var1 / 524288,0 + ((dubbel) dig_P2) * var1) / 524288,0; var1 = (1,0 + var1 / 32768.0) * ((dubbel)dig_P1); dubbele p = 1048576,0 - (dubbele) adc_p; p = (p - (var2 / 4096.0)) * 6250,0 / var1; var1 = ((dubbel) dig_P9) * p * p / 2147483648.0; var2 = p * ((dubbel) dig_P8) / 32768.0; dubbele druk = (p + (var1 + var2 + ((dubbel)dig_P7)) / 16.0) / 100; // Vochtigheid offset berekeningen dubbel var_H = (((dubbel)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))); dubbele vochtigheid = var_H * (1,0 - dig_H1 * var_H / 524288,0); if (vochtigheid > 100,0) { vochtigheid = 100,0; }else if (vochtigheid < 0,0) { vochtigheid = 0,0; } // Voer gegevens uit naar het scherm System.out.printf ("Temperatuur in Celsius: %.2f C %n", cTemp); System.out.printf("Temperatuur in Fahrenheit: %.2f F %n", fTemp); System.out.printf("Druk: %.2f hPa %n", druk); System.out.printf("Relatieve vochtigheid: %.2f %% RH %n", vochtigheid); } }

Stap 4: De praktische bruikbaarheid van de code

De praktische bruikbaarheid van de code
De praktische bruikbaarheid van de code

Download nu (of git pull) de code en open deze in de Raspberry Pi.

Voer de opdrachten uit om de code te compileren en te uploaden op de terminal en bekijk de uitvoer op Monitor. Na enkele ogenblikken zal het alle parameters screenen. Door ervoor te zorgen dat je een soepele code-overgang en een rustig (ish) resultaat hebt, bedenk je meer ideeën om verdere wijzigingen aan te brengen (Elk project begint met een verhaal).

Stap 5: Gebruik in een constructieve wereld

De BME280 bereikt hoge prestaties in alle toepassingen die vochtigheids- en drukmeting vereisen. Deze opkomende toepassingen zijn Context Awareness, b.v. Huiddetectie, detectie van kamerverandering, fitnessmonitoring / welzijn, waarschuwing met betrekking tot droogte of hoge temperaturen, meting van volume en luchtstroom, domoticaregeling, regeling van verwarming, ventilatie, airconditioning (HVAC), internet der dingen (IoT), GPS-verbetering (bijv. Time-to-First-Fix-verbetering, gegist bestek, hellingsdetectie), binnennavigatie (wijziging van vloerdetectie, liftdetectie), buitennavigatie, vrijetijds- en sporttoepassingen, weersvoorspelling en verticale snelheidsindicatie (stijgen/zinken Snelheid).

Stap 6: Conclusie

Zoals u kunt zien, is dit project een geweldige demonstratie van waartoe hardware en software in staat zijn. In een korte tijd kan men zo'n indrukwekkend project bouwen! Dit is natuurlijk nog maar het begin. Het maken van een meer geavanceerd persoonlijk weerstation zoals Automated Airport Persoonlijke weerstations kan wat meer sensoren omvatten zoals Anemometer (windsnelheid), Transmissometer (zichtbaarheid), Pyranometer (zonnestraling) enz. We hebben een video-tutorial op YouTube met de basiswerking van de I²C-sensor met Rasp Pi. Het is echt verbazingwekkend om de resultaten en werking van de I²C-communicatie te zien. Controleer het ook. Veel plezier met bouwen en leren! Laat ons weten wat je van deze instructable vindt. We zouden graag enkele verbeteringen aanbrengen indien nodig.

Aanbevolen: