🛠 Connecter un capteur I2C sur le GIGA R1
Objectifs
Communiquer avec un périphérique I2C externe. Le GIGA R1 dispose de 3 bus I2C sur le STM32H747XI ; nous utiliserons le bus par défaut de la bibliothèque Wire avec un capteur d'environnement (température/humidité/pression) du commerce, par exemple un BME680 ou BMP280. Attention : la carte elle-même n'embarque pas de capteur de température/humidité — le capteur est ici externe.
Matériel
- 1 carte Arduino GIGA R1 WiFi
- 1 capteur I2C externe (BME680, BME280 ou BMP280) — alimentation 3,3 V
- 4 filles de connexion, câble USB-C
- Éventuellement des résistances de pull-up 4,7 kΩ si le module n'en a pas
Code complet
// GIGA R1 WiFi — scanner I2C puis lecture d'un capteur BMP280/BME680 (adresse 0x76/0x77)
#include <Arduino.h>
#include <Wire.h>
const uint8_t ADRESSE_CAPTEUR = 0x76; // 0x77 selon le brochage ADDR du module
void setup {
Serial.begin(115200);
Wire.begin; // bus I2C par defaut (SDA/SCL)
delay(1000);
// Petit scanner : liste les peripheriques presents
Serial.println("Scan du bus I2C :");
for (uint8_t a = 1; a < 127; a++) {
Wire.beginTransmission(a);
if (Wire.endTransmission == 0) {
Serial.printf(" peripherique trouve a 0x%02X\n", a);
}
}
}
void loop {
// Lecture de l'identifiant de puce (registre 0xD0 pour BMP280/BME680)
Wire.beginTransmission(ADRESSE_CAPTEUR);
Wire.write(0xD0);
Wire.endTransmission(false);
Wire.requestFrom(ADRESSE_CAPTEUR, (uint8_t)1);
if (Wire.available) {
uint8_t chipId = Wire.read;
Serial.printf("Chip ID = 0x%02X (attendu 0x58/0x60/0x61)\n", chipId);
} else {
Serial.println("Capteur absent : verifiez SDA/SCL et l'adresse");
}
delay(2000);
}
Câblage : VCC vers 3,3 V, GND vers GND, SDA vers la broche SDA du GIGA, SCL vers la broche SCL.
Vérification attendue
Le scan I2C liste l'adresse du capteur (0x76 ou 0x77). Ensuite, le Moniteur série affiche un identifiant de puce cohérent (0x58 pour BMP280, 0x60/0x61 pour BME680) toutes les deux secondes.
Erreurs fréquentes
- Mauvaise adresse : la patte ADDR du module non raccordée change 0x76 en 0x77 ; lancez d'abord le scanner.
- Absence de pull-up sur SDA/SCL : le bus reste bloqué à l'état bas, le scanner ne trouve rien.
- Alimentation en 5 V d'un module non tolérant : préférez 3,3 V, tension logique de la carte.
- Inversion SDA/SCL : aucun périphérique détecté, le bus semble mort.
- Deux capteurs à la même adresse : il reste deux bus I2C disponibles sur la carte pour les séparer.
Autres tutoriels pour cette carte
- Faire clignoter la LED de l'Arduino GIGA R1
- Bouton poussoir et console série sur le GIGA R1
- Potentiomètre et sortie DAC sur la prise audio du GIGA R1
- Piloter un micro-servo avec la PWM du GIGA R1
- Publier des données en MQTT/HTTP via le Wi-Fi du GIGA R1
- Programmer les deux cœurs M7 et M4 du GIGA R1 et les faire communiquer
Exemples de code pour cette carte
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino