Table des matières:

Station météo personnelle utilisant Raspberry Pi avec BME280 en Java : 6 étapes
Station météo personnelle utilisant Raspberry Pi avec BME280 en Java : 6 étapes

Vidéo: Station météo personnelle utilisant Raspberry Pi avec BME280 en Java : 6 étapes

Vidéo: Station météo personnelle utilisant Raspberry Pi avec BME280 en Java : 6 étapes
Vidéo: DOMOTIQUE TUTO#08 Home Assistant - Netatmo - Dialogflow - Intent Script 2024, Juillet
Anonim
Image
Image
Nomenclature des équipements essentiels
Nomenclature des équipements essentiels

Le mauvais temps semble toujours pire à travers une fenêtre

Nous avons toujours été intéressés par la surveillance de notre météo locale et de ce que nous voyons par la fenêtre. Nous voulions également un meilleur contrôle de notre système de chauffage et de climatisation. Construire une station météo personnelle est une excellente expérience d'apprentissage. Lorsque vous aurez fini de construire ce projet, vous aurez une meilleure compréhension du fonctionnement des communications sans fil, du fonctionnement des capteurs et de la puissance de la plate-forme Raspberry Pi. Avec ce projet comme base et l'expérience acquise, vous pourrez facilement construire des projets plus complexes à l'avenir.

Étape 1: Nomenclature des équipements essentiels

Nomenclature des équipements essentiels
Nomenclature des équipements essentiels
Nomenclature des équipements essentiels
Nomenclature des équipements essentiels
Nomenclature des équipements essentiels
Nomenclature des équipements essentiels

1. Un Raspberry Pi

La première étape consiste à mettre la main sur une carte Raspberry Pi. Raspberry Pi est un ordinateur monocarte alimenté par Linux. Son objectif est d'améliorer les compétences en programmation et la compréhension du matériel. Il a été rapidement adopté par les amateurs et les passionnés d'électronique pour des projets innovants.

2. Bouclier I²C pour Raspberry Pi

L'INPI2 (adaptateur I2C) fournit au Raspberry Pi 2/3 un port I²C à utiliser avec plusieurs appareils I²C. Il est disponible sur Dcube Store

3. Capteur numérique d'humidité, de pression et de température, BME280

Le BME280 est un capteur d'humidité, de pression et de température qui a un temps de réponse rapide et une précision globale élevée. Nous avons acheté ce capteur sur Dcube Store

4. Câble de connexion I²C

Nous avions le câble de connexion I²C disponible chez Dcube Store

5. Câble micro-USB

Le câble d'alimentation micro USB est un choix idéal pour alimenter le Raspberry Pi.

6. Interpréter l'accès Internet via EthernetCable/WiFi Adapter

L'une des premières choses que vous voudrez faire est de connecter votre Raspberry Pi à Internet. Nous pouvons nous connecter à l'aide d'un câble Ethernet. Une autre possibilité est que vous puissiez vous connecter à un réseau sans fil à l'aide d'un adaptateur sans fil USB.

7. Câble HDMI (câble d'affichage et de connectivité)

N'importe quel moniteur HDMI/DVI et n'importe quel téléviseur devrait fonctionner comme écran pour le Pi. Mais c'est facultatif. La possibilité d'accès à distance (comme SSH) ne peut pas non plus être exclue. Vous pouvez également y accéder avec le logiciel PUTTY.

Étape 2: Connexions matérielles pour la configuration

Connexions matérielles pour la configuration
Connexions matérielles pour la configuration
Connexions matérielles pour la configuration
Connexions matérielles pour la configuration

Faire le circuit selon le schéma montré.

Tout en apprenant, nous avons approfondi les bases de l'électronique en ce qui concerne la connaissance du matériel et des logiciels. Nous voulions établir un schéma électronique simple pour ce projet. Les schémas électroniques sont comme un modèle pour l'électronique. Élaborez un plan et suivez attentivement la conception. Nous avons appliqué ici quelques bases de l'électronique. Logic vous emmène de A à B, Imagination vous emmène partout !

Connexion du Raspberry Pi et du Shield I²C

Tout d'abord, prenez le Raspberry Pi et placez le bouclier I²C (avec le port I²C orienté vers l'intérieur) dessus. Appuyez doucement sur le Shield sur les broches GPIO de Pi et nous en avons terminé avec cette étape aussi simple que bonjour (voir la photo).

Connexion du capteur et du Raspberry Pi

Prenez le capteur et connectez le câble I²C avec. Assurez-vous que la sortie I²C se connecte TOUJOURS à l'entrée I²C. La même chose doit être suivie pour le Raspberry Pi avec le blindage I²C monté sur les broches GPIO. Nous avons le blindage I²C et les câbles de connexion de notre côté comme un très gros soulagement et un très gros avantage car il ne nous reste option plug and play. Plus de problème de broches et de câblage et, par conséquent, la confusion a disparu. Imaginez-vous dans le réseau de fils et entrez-y. Un soulagement de ça. Cela rend les choses simples.

Remarque: Le fil marron doit toujours suivre la connexion de masse (GND) entre la sortie d'un appareil et l'entrée d'un autre appareil

La connectivité Internet est un besoin

Vous avez le choix ici en fait. Vous pouvez connecter Raspberry Pi avec le câble LAN ou l'adaptateur sans fil Nano USB pour la connectivité WIFI. Dans tous les cas, le manifeste consiste à se connecter à Internet, ce qui est accompli.

Alimentation du circuit

Branchez le câble Micro USB dans la prise d'alimentation du Raspberry Pi. Coup de poing et le tour est joué ! Tout est prêt et nous allons commencer immédiatement.

Connexion à l'affichage

Nous pouvons soit avoir le câble HDMI connecté à un moniteur ou à un téléviseur. Nous pouvons accéder à un Raspberry Pi sans le connecter à un moniteur en utilisant -SSH (Accéder à la ligne de commande du Pi depuis un autre ordinateur). Vous pouvez également utiliser le logiciel PUTTY pour cela. Cette option est destinée aux utilisateurs avancés, nous ne la détaillerons donc pas ici.

J'ai entendu dire qu'il allait y avoir une récession, j'ai décidé de ne pas participer

Étape 3: Programmation Raspberry Pi en Java

Programmation Raspberry Pi en Java
Programmation Raspberry Pi en Java

Le code Java pour le Raspberry Pi et le capteur BME280. Il est disponible dans notre référentiel Github.

Avant de passer au code, assurez-vous de lire les instructions données dans le fichier Lisez-moi et configurez votre Raspberry Pi en conséquence. Cela ne prendra que quelques instants pour le faire. Une station météo personnelle est un ensemble d'instruments de mesure météorologique exploités par un particulier, un club, une association, voire une entreprise. Les stations météorologiques personnelles peuvent être exploitées uniquement pour le plaisir et l'éducation du propriétaire, mais de nombreux opérateurs de stations météorologiques personnelles partagent également leurs données avec d'autres, soit en compilant manuellement les données et en les distribuant, soit en utilisant Internet ou la radio amateur.

Le code est dans sa forme la plus simple que vous puissiez imaginer et vous ne devriez pas avoir de problème avec cela, mais demandez si vous l'avez. Même si vous savez mille choses, demandez quand même à quelqu'un qui sait.

Vous pouvez également copier le code Java fonctionnel de ce capteur à partir d'ici.

// Distribué avec une licence libre-arbitre.// Utilisez-le comme vous le souhaitez, à profit ou gratuitement, à condition qu'il rentre dans les licences de ses œuvres associées. // BME280 // Ce code est conçu pour fonctionner avec le mini module BME280_I2CS I2C disponible sur ControlEverything.com. //

importer com.pi4j.io.i2c. I2CBus;

importer com.pi4j.io.i2c. I2CDevice; importer com.pi4j.io.i2c. I2CFactory; importer java.io. IOException;

classe publique BME280

{ public static void main(String args) lève une exception { // Créer un bus I2C I2CBus bus = I2CFactory.getInstance(I2CBus. BUS_1); // Obtenir le périphérique I2C, l'adresse I2C BME280 est 0x76 (108) périphérique I2CDevice = bus.getDevice (0x76); // Lit 24 octets de données à partir de l'adresse 0x88(136) octet b1 = nouvel octet[24]; périphérique.read (0x88, b1, 0, 24); // Convertir les données // coefficients temp 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; } // coefficients de pression 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; } // Lit 1 octet de données à partir de l'adresse 0xA1(161) int dig_H1 = ((byte)device.read(0xA1) & 0xFF); // Lit 7 octets de données à partir de l'adresse 0xE1(225) device.read(0xE1, b1, 0, 7); // Convertir les données // coefficients d'humidité 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; } // Sélectionnez le registre d'humidité de contrôle // Humidité sur le taux d'échantillonnage = 1 device.write(0xF2, (byte)0x01); // Sélectionnez le registre de mesure de contrôle // Mode normal, température et pression sur le taux d'échantillonnage = 1 device.write(0xF4, (byte)0x27); // Sélectionnez le registre de configuration // Temps de veille = 1000 ms device.write(0xF5, (byte)0xA0); // Lecture de 8 octets de données à partir de l'adresse 0xF7(247) // pression msb1, pression msb, pression lsb, temp msb1, temp msb, temp lsb, humidité lsb, humidité msb byte data = new byte[8]; device.read (0xF7, données, 0, 8); // Convertir les données de pression et de température en 19 bits adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (long) (données[2] & 0xF0)) / 16; long adc_t = (((long)(données[3] & 0xFF) * 65536) + ((long)(données[4] & 0xFF) * 256) + (long)(données[5] & 0xF0)) / 16; // Convertir les données d'humidité long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Calculs de décalage de température 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_fin = (long)(var1 + var2); double cTemp = (var1 + var2) / 5120,0; double fTemp = cTemp * 1,8 + 32; // Calculs de décalage de pression 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) * ((double)dig_P1); double p = 1048576.0 - (double)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; double pression = (p + (var1 + var2 + ((double)dig_P7)) / 16,0) / 100; // Calculs de décalage d'humidité 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))); double humidité = var_H * (1,0 - dig_H1 * var_H / 524288.0); if(humidité > 100,0) { humidité = 100,0; } else if(humidité < 0,0) { humidité = 0,0; } // Sortie des données à l'écran System.out.printf("Température en Celsius: %.2f C %n", cTemp); System.out.printf("Température en Fahrenheit: %.2f F %n", fTemp); System.out.printf("Pression: %.2f hPa %n", pression); System.out.printf("Humidité relative: %.2f %% RH %n", humidité); } }

Étape 4: la praticité du code

Le Code Pratique
Le Code Pratique

Maintenant, téléchargez (ou git pull) le code et ouvrez-le dans le Raspberry Pi.

Exécutez les commandes pour compiler et télécharger le code sur le terminal et voir la sortie sur Monitor. Après quelques instants, il passera à l'écran tous les paramètres. En vous assurant que vous avez une transition de code en douceur et un résultat calme (ish), vous pensez à plus d'idées pour apporter d'autres modifications (chaque projet commence par une histoire).

Étape 5: Utilisation dans Constructive World

Le BME280 atteint des performances élevées dans toutes les applications nécessitant des mesures d'humidité et de pression. Ces applications émergentes sont la Conscience du Contexte, par ex. Détection de peau, Détection de changement de pièce, Surveillance de la condition physique / Bien-être, Avertissement concernant la sécheresse ou les températures élevées, Mesure du volume et du débit d'air, Contrôle de la domotique, Contrôle du chauffage, Ventilation, Climatisation (HVAC), Internet des objets (IoT), Amélioration du GPS (par exemple, amélioration du temps de première réparation, navigation à l'estime, détection de pente), navigation intérieure (détection de changement de sol, détection d'ascenseur), navigation extérieure, applications de loisirs et de sports, prévisions météorologiques et indication de la vitesse verticale (montée / descente La vitesse).

Étape 6: Conclusion

Comme vous pouvez le voir, ce projet est une excellente démonstration de ce dont le matériel et les logiciels sont capables. En peu de temps, on peut construire un projet aussi impressionnant ! Bien sûr, ce n'est qu'un début. Faire une station météorologique personnelle plus sophistiquée comme les stations météorologiques personnelles d'aéroport automatisées peut impliquer d'autres capteurs comme l'anémomètre (vitesse du vent), le transmetteur (visibilité), le pyranomètre (rayonnement solaire), etc. Nous avons un didacticiel vidéo sur Youtube présentant le fonctionnement de base du Capteur I²C avec Rasp Pi. C'est vraiment incroyable de voir les résultats et le fonctionnement des communications I²C. Vérifiez-le également. Amusez-vous à construire et à apprendre ! S'il vous plaît laissez-nous savoir ce que vous pensez de cette instructable. Nous aimerions apporter quelques améliorations si nécessaire.

Conseillé: