station-air.ino

Arduino Nano Every · Fichier : station-air.ino · Langage : Arduino · Usage : Station air complètes sur le bus I2C

Station de qualité d'air en trois fils : le BME280 sur I2C fournit température, humidité, pression et altitude estimée, que le Nano Every publie en CSV toutes les deux secondes. Le bus Wire du 4809 se branche sur A4/A5, comme sur l'ancien Nano.

Matériel requis

Un Arduino Nano Every (ATmega4809 à 20 MHz, brochage identique au Nano, USB micro-B, convertisseur UART séparé, broches 5 V, pile de compatibilité avec le Nano classique). Nano Every, BME280 I2C (adresse 0x76 ou 0x77 selon le strap), câble USB.

Câblage

BME280 VCC→3,3 V (jamais 5 V sur ce module), GND, SDA→A4, SCL→A5 ; le module embarque ses pull-up.

Fonctionnement

Le test begin(0x76)||begin(0x77) couvre les deux adresses possibles du capteur. readAltitude convertit la pression en altitude par la formule internationale de l'atmosphère.

Exécution

Installez le package Arduino megaAVR Boards dans l'IDE, sélectionnez Arduino Nano Every, téléversez. Le Serial USB est séparé du Serial1 matériel (broches RX/TX) : le code série classique fonctionne tel quel.

Variantes

Ajoutez un BME688/BME680 pour le CO2 équivalent, ou loggez le CSV sur PC via le port série pour une campagne longue.

station-air.ino

// BME280 (I2C 0x76) sur Nano Every : T/H/P via la bibliotheque Adafruit.
// Le bus Wire du 4809 est sur A4/A5 comme sur l'ancien Nano.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;

unsigned long dernier = 0;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  if (!bme.begin(0x76) && !bme.begin(0x77)) {
    Serial.println(F("BME280 absent (0x76/0x77)"));
    while (true);
  }
  Serial.println(F("T;H;P;Alt"));
}

void loop() {
  if (millis() - dernier < 2000) return;
  dernier = millis();
  float t = bme.readTemperature();
  float h = bme.readHumidity();
  float p = bme.readPressure() / 100.0;
  float a = bme.readAltitude(1013.25);
  Serial.print(t, 2);  Serial.print(';');
  Serial.print(h, 1);  Serial.print(';');
  Serial.print(p, 1);  Serial.print(';');
  Serial.println(a, 1);
}

← Retour à la fiche