Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Station Météo IoT Portable avec Arduino Nano 33 IoT

Composants et fournitures

Arduino Nano 33 IoT 1
Capteur météo BME280 (température, humidité, pression) 1
Écran OLED 0,96" 128×64 1
Boîtier plastique 3,9" × 2,7" 1
Câble micro-USB 1
Fils de liaison mâle-femelle (breadboard) 1 jeu
Chargeur secteur USB 1

Outils nécessaires

Applications et services en ligne

À propos du projet

Il existe beaucoup d'applications pour connecter son smartphone à l'Internet des Objets. J'en ai testé plusieurs et ai souvent été déçu. Pas avec Blynk ! C'est flexible, interface soignée, compatible avec de nombreuses plateformes IoT, fonctionne sur Android et iOS, et gratuit pour les hobbyistes. Ce projet IoT relativement simple m'a permis d'explorer Blynk.

Matériel

Le hardware est simple : Arduino Nano 33 IoT (gère le Wi-Fi), capteur BME280 (température, humidité, pression barométrique en un seul module), écran OLED 1". Les trois fonctionnent en 3,3 V. L'écran est optionnel — l'objectif est l'affichage sur smartphone — mais il facilite grandement la mise au point avant d'intégrer Blynk.

Le schéma ci-dessous montre l'interconnexion. Capteur et écran utilisent l'I2C. En théorie un bus I2C supporte plusieurs périphériques, mais les bibliothèques du capteur et de l'écran avaient des conflits, donc j'ai utilisé deux ports I2C distincts :

Station Météo IoT Portable avec Arduino Nano 33 IoT

Le tout est logé dans un petit boîtier plastique à face transparente (pour voir l'écran). Le plastique est nécessaire pour la transparence aux RF (Wi-Fi). Le boîtier doit être relativement étanche, mais le capteur est exposé à l'air extérieur par un trou de 1/2" en bas. Le capteur est positionné juste à l'intérieur de ce trou. Fixation à la colle chaude (pour l'extérieur en été, préférez l'époxy).

L'alimentation passe par le câble USB : programmation ou alimentation par un seul câble sortant du boîtier. Branché sur l'ordi pour programmer, sur un chargeur USB secteur pour l'usage station météo.

Logiciel

Le code sur l'Arduino est un assemblage des exemples des bibliothèques : capteur, écran, Blynk. Bibliothèques utilisées :

Toutes disponibles via le gestionnaire de bibliothèques Arduino. Testez chacune séparément pour bien les comprendre.

Blynk propose des exemples de configuration hardware : examples.blynk.cc. Malheureusement, le Nano 33 IoT n'est pas listé parmi les Arduino supportés. Mais Blynk supporte WiFiNINA, utilisé par le Nano 33 IoT. Il suffit d'ajouter :

#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>

Autre ajout dans mon code : #include <avr/dtostrf.h> pour convertir les valeurs numériques du capteur en chaînes adaptées à l'affichage OLED. Un point m'a bloqué : Blynk accepte d'afficher les données qu'elles soient envoyées comme chaîne ou nombre. Au début j'envoyais la même chaîne qu'à l'OLED. Ça marchait pour l'affichage, mais échouait totalement pour les graphiques. Pour les graphiques, Blynk a besoin de vrais nombres.

Note sur la pression barométrique : elle est normalement corrigée au niveau de la mer. En altitude, la pression chute. Pour corriger la valeur du capteur à son équivalent niveau de la mer, ajoutez environ 1 pouce Hg (inHg) par 1000 pieds d'altitude. Dans mon code, j'ai ajouté 1.3 pour mon altitude de 1300 pieds. Adaptez cette valeur à votre altitude. Le 1 inHg / 1000 ft est une approximation ; pour une correction précise, consultez des tables en ligne.

Station météo sans Blynk

À ce stade, vous pouvez monter le hardware et utiliser mon logiciel joint pour afficher les données météo sur l'OLED. Commentez simplement la ligne Blynk.begin() dans setup() pour faire tourner la station sans Blynk. (Sans cette mise en commentaire, sans connexion Blynk valide, le sketch bloque à cet endroit.) La section suivante couvre l'intégration Blynk.

Blynk

Blynk s'installe facilement sur iPhone/Android avec doc détaillée : docs.blynk.cc. Mais il y a tant d'infos et d'options que j'ai trouvé ça confus au début. Voici ma version simplifiée pour démarrer.

J'ai utilisé Blynk sur iPhone, l'expérience Android est similaire. Une fois l'app installée, créez un compte. Dans l'app, créez un nouveau projet. Il reçoit un code d'authentification pour lier votre hardware. Première mission : connecter le hardware via Wi-Fi à votre projet Blynk. Testez avec le sketch par défaut Blynk Blink (examples.blynk.cc) qui allume/éteint la LED intégrée du Nano 33 IoT (broche 13). Faites-le marcher avant d'attaquer la station météo.

Configuration du sketch pour Nano 33 IoT : sur examples.blynk.cc, le défaut est ESP8266. Remplacez :

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

par :

#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>

Ajoutez vos identifiants Wi-Fi et le code d'auth du projet Blynk. On verra le contrôle de la LED dans un instant, mais d'abord vérifions la connexion. Avec le sketch Blynk Blink bien configuré et en cours, ouvrez le Moniteur Série Arduino : vous verrez la connexion au serveur cloud Blynk. À ce stade, on peut laisser le hardware de côté et travailler sur l'app Blynk du téléphone.

L'app Blynk m'a paru un peu déroutante. L'icône en haut à gauche permet de changer de projet ou se déconnecter. Celle en haut à droite entre/sort du mode Édition. Celle du milieu fait selon le contexte.

Station Météo IoT Portable avec Arduino Nano 33 IoT

Pour contrôler la LED intégrée : mode Édition → écran vide → glisser vers la gauche pour afficher la boîte à outils → sélectionner « Button » → il apparaît sur l'écran principal → cliquer pour configurer → passer de mode « Push » à « Switch » → Pin Select → choisir broche 13 (LED intégrée du Nano 33 IoT) → OK → quitter le mode Édition (icône haut droite). Le bouton contrôle maintenant la LED.

Station météo avec Blynk

Prêt à lier notre station météo à Blynk. Ouvrez mon code joint, décommentez Blynk.begin() dans setup(), ajoutez votre code d'auth et identifiants Wi-Fi, téléversez sur l'Arduino.

Station Météo IoT Portable avec Arduino Nano 33 IoT

Ouvrez Blynk sur votre téléphone. Si vous avez suivi ce tutoriel, votre bouton est là et contrôle encore la LED. Mode Édition → cliquer le bouton → configurer → « Delete » tout en bas. Maintenant, dans la boîte à outils, sélectionnez « Labeled Value » (sous « Displays »). De retour sur l'écran principal, cliquez sur le Labeled Value pour configurer. Pin → Virtual Pin V3. Label (là où c'est écrit « e.g. Temp ») : tapez Temp /pin.#/ deg.F. Le .# affiche une décimale. Taille de texte grande, Refresh Interval sur « Push », Couleur texte verte. OK. Le Labeled Value est presque prêt, mais trop étroit. Sélectionnez-le lentement (sans réentrer en config) : le contour s'allume. Étirez-le sur ~3/4 de l'écran. Sortez du mode Édition : la température s'affiche.

Avant de finir la config Blynk, deux notions vues ci-dessus :

Finissons l'affichage météo sur Blynk. Il faut deux autres Labeled Value :

Si les trois Labeled Value affichent température, humidité, pression, ajoutez le graphique des trois avec le widget « SuperChart ». Étirez-le vers le bas pour remplir l'écran. Configurez : Show X axis values ON, résolutions : live, 1h, 6h, 1j, 1sem, 1mois, 3mois. Trois flux de données (un par variable). Pour chaque flux : icône à droite → sélectionner la broche virtuelle correspondante. Échelle Y : « height ». Temp : height 67–100. Humidité : 34–66. Pression : 0–33. Couleurs assorties aux Labeled Value. Show Y axis ON. Sortez du mode Édition : l'affichage devrait ressembler au mien. Le graphique met un peu de temps à se remplir. Pour résultats rapides, affichez en résolution live ou 1h.

Une dernière fonction Blynk à connaître : le partage de votre projet fini avec d'autres smartphones, pour que plusieurs téléphones voient la station météo. Mode Édition → icône du milieu en haut (Project Settings) → activer « Sharing » → générer un lien → QR code à envoyer par email ou autre. Le nouvel utilisateur a besoin de l'app Blynk mais pas de compte. L'app non enregistrée a un lien pour charger le QR code d'un projet partagé. C'est tout.

Cette intro à Blynk est limitée, mais donne de bonnes bases. Blynk est « presque » gratuit : widgets et partage consomment des points appelés « énergie ». 2500 points offerts au début, assez pour ce projet gratuitement. Mais partager ou étendre peut épuiser l'énergie. J'ai dépensé 6 $ pour 5000 points supplémentaires. Vous devrez peut-être investir quelques dollars si vous multipliez les projets Blynk.

Code

Tiny Internet Weather Station

Avec Wi-Fi et Blynk vers smartphone.

/* Sketch pour Arduino Nano 33 IoT
 * Capteur BME280
 * Écran OLED 0.96" 128x64
 * Connexion WiFi vers serveur cloud Blynk pour affichage météo sur smartphone */
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BME280.h>      // Bibliothèque BME280
#include <avr/dtostrf.h>         // Conversion nombres -> chaînes pour OLED
#include <ss_oled.h>             // Bibliothèque OLED
// Deux includes requis pour Nano 33 IoT + Blynk
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>

char auth[] = "YourBlynkProjectCode";
char ssid[] = "YourWifiID";
char pass[] = "YourWiFiPassword";

Adafruit_BME280 bme;  // interface I2C
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();

#define SDA_PIN 5
#define SCL_PIN 4
#define RESET_PIN -1
#define OLED_ADDR -1
#define FLIP180 0
#define INVERT 0
#define USE_HW_I2C 0
#define MY_OLED OLED_128x64
#define OLED_WIDTH 128
#define OLED_HEIGHT 64

SSOLED ssoled;          // instance OLED
BlynkTimer timer;       // instance timer Blynk

void setup() {
  if (!bme.begin(0x76)) {
    while (1) delay(10);  // attend détection capteur
  }
  bme_temp->printSensorDetails();
  bme_pressure->printSensorDetails();
  bme_humidity->printSensorDetails();
  
  oledInit(&ssoled, MY_OLED, OLED_ADDR, FLIP180, INVERT, USE_HW_I2C, SDA_PIN, SCL_PIN, RESET_PIN, 400000L);
  oledFill(&ssoled, 0x0, 1);
  
  Blynk.begin(auth, ssid, pass);  // commentez cette ligne pour fonctionnement sans Blynk
  timer.setInterval(60000L, myupdate);  // myupdate toutes les minutes
  myupdate();  // mise à jour initiale (affichage + envoi Blynk) car loop attend 1 min
}

void loop() {
  Blynk.run();  // Blynk préfère tourner seul dans loop principal
  timer.run();  // tout le reste géré via timer Blynk
}

// Routine appelée par timer Blynk pour mettre à jour OLED et pousser données vers Blynk
void myupdate() {
  sensors_event_t temp_event, pressure_event, humidity_event;
  bme_temp->getEvent(&temp_event);
  bme_pressure->getEvent(&pressure_event);
  bme_humidity->getEvent(&humidity_event);
  
  float ctemp = temp_event.temperature;           // température en °C
  float ftemp = 32 + (9 * ctemp) / 5;             // conversion en °F
  float hum = humidity_event.relative_humidity;   // humidité relative %
  float ppress = pressure_event.pressure;         // pression en hPa (mm)
  float mpress = 1.3 + ppress / 33.8939;          // conversion en inHg + correction altitude (1.3 = 1300 ft)
                                                  // Adaptez ou retirez 1.3 selon votre altitude
  
  char mytemp[8];  dtostrf(ftemp, 6, 2, mytemp);  // temp -> chaîne
  char myhum[8];   dtostrf(hum, 6, 2, myhum);     // humidité -> chaîne
  char mypress[8]; dtostrf(mpress, 6, 2, mypress); // pression -> chaîne
  
  // Mise à jour affichage OLED
  oledWriteString(&ssoled, 0, 2, 1, (char *)"Weather Station", FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 2, 3, (char *)"Temp = ", FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 50, 3, (char *)mytemp, FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 105, 3, (char *)"F", FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 2, 5, (char *)"Humid=", FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 50, 5, (char *)myhum, FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 105, 5, (char *)"%", FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 2, 7, (char *)"Press=", FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 50, 7, (char *)mypress, FONT_NORMAL, 0, 1);
  oledWriteString(&ssoled, 0, 105, 7, (char *)"in", FONT_NORMAL, 0, 1);
  
  // Envoi nouvelles données météo vers Blynk
  Blynk.virtualWrite(V3, ftemp);
  Blynk.virtualWrite(V4, hum);
  Blynk.virtualWrite(V5, mpress);
}

Schémas

Station Météo IoT Portable avec Arduino Nano 33 IoT

Processus de fabrication

  1. Circuits intégrés (CI) : puces compactes et puissantes alimentant l'électronique moderne
  2. Station météo solaire DIY avec Raspberry Pi
  3. Construction d'une station météo extérieure avec Raspberry Pi 2 et ADS‑WS1
  4. Construire une station météo Raspberry Pi qui envoie les données météo quotidiennes par email
  5. Intégrer votre station météo à CWOP : Guide pratique
  6. Station météo avancée v2.0 : Surveillance en temps réel de température, pression, humidité et altitude
  7. Construire une Centrale DCC Numérique pour Modélisme Ferroviaire avec Arduino – Application Android Gratuite Incluse
  8. Station de Mixage Automatique 6-Shooter Pilotée par Arduino – Construisez Votre Propre Robot Barman
  9. MotionSense : Détection d'intrusion intelligente avec Arduino et ESP8266