#include <Wire.h> // Inclus la bibliothèque Wire.h, afin de pouvoir envoyer des instructions sur le port i2c
#include <Adafruit_BME280.h> // Inclusion de la librairie BME280 d'Adafruit
// Constantes du programme
#define adresseI2CduBME280 0x76 // Adresse I2C du BME280 (0x76, dans mon cas, ce qui est souvent la valeur par défaut)
#define pressionAuNiveauDeLaMerEnHpa 1024.90 // https://fr.wikipedia.org/wiki/Pression_atmospherique (1013.25 hPa en moyenne, valeur "par défaut")
#define delaiRafraichissementAffichage 1500 // Délai de rafraîchissement de l'affichage (en millisecondes)
// Instanciation de la librairie BME280
Adafruit_BME280 bme;
byte nombreDePeripheriquesTrouves = 0; // Variable indiquant combien de périphériques I2C ont répondu "présent"
// ========================
// Initialisation programme
// ========================
void setup() {
// Initialisation de la liaison série, côté PC (pour y faire afficher des infos, via le moniteur série de l'IDE Arduino)
Serial.begin(9600);
Serial.println(F(" ~~ SCANNER I2C ~~ "));
Serial.println(F("Scanne toutes les adresses i2c, afin de repérer tous les périphériques connectés à l'arduino"));
Serial.println(F("============================================================================================"));
Serial.println();
// Initialisation de la liaison i2C
Wire.begin();
// Boucle de parcous des 127 adresses i2c possibles
for (byte adresseI2C = 0; adresseI2C < 127; adresseI2C++)
{
Wire.beginTransmission(adresseI2C); // Interrogation de l'adresse i2c ciblée
if (Wire.endTransmission () == 0) // Si cela s'est bien passé, c'est qu'il y a un périphérique connecté à cette adresse
{
Serial.print(F("Périphérique i2c trouvé à l'adresse : "));
Serial.print(adresseI2C, DEC); // On affiche son adresse au format décimal
Serial.print(F(" (0x"));
Serial.print(adresseI2C, HEX); // … ainsi qu'au format hexadécimal (0x..)
Serial.println(F(")"));
nombreDePeripheriquesTrouves++;
//delay(1); // Temporisation, avant de passer au scan de l'adresse suivante
}
}
// Affichage final, indiquant le nombre total de périphériques trouvés sur le port I2C de l'arduino
if (nombreDePeripheriquesTrouves == 0) {
Serial.println(F("Aucun périphérique I2C trouvé…"));
}
else if (nombreDePeripheriquesTrouves == 1) {
Serial.println();
Serial.println(F("1 périphérique trouvé !"));
}
else {
Serial.println();
Serial.print(nombreDePeripheriquesTrouves);
Serial.println(F("périphériques trouvés !"));
}
Serial.println(F("Scan terminé."));
if(!bme.begin(adresseI2CduBME280)) {
Serial.println(F("--> ÉCHEC…"));
} else {
Serial.println(F("--> RÉUSSIE !"));
}
Serial.println();
}
// =================
// Boucle principale
// =================
void loop() {
// Aucun code ici, car tout se passe dans la fonction setup !
// Affichage de la TEMPÉRATURE
Serial.print(F("Température = "));
Serial.print(bme.readTemperature());
Serial.println(F(" °C"));
// Affichage du TAUX D'HUMIDITÉ
Serial.print(F("Humidité = "));
Serial.print(bme.readHumidity());
Serial.println(F(" %"));
// Affichage de la PRESSION ATMOSPHÉRIQUE
Serial.print(F("Pression atmosphérique = "));
Serial.print(bme.readPressure() / 100.0F);
Serial.println(F(" hPa"));
// Affichage de l'estimation d'ALTITUDE
Serial.print(F("Altitude estimée = "));
Serial.print(bme.readAltitude(pressionAuNiveauDeLaMerEnHpa));
Serial.println(F(" m"));
// ... et on répète ce cycle à l'infini !
delay(10000); // Avec x secondes d'attente, avant chaque rebouclage
Serial.println();
}
J'obtiens bien la présence d'un périphérique à l'adresse 0x76