🛠 Ajouter un capteur I²C (température) sur A4/A5
Objectifs
Exploiter le bus I²C/TWI natif de l'ATmega328P : sur la Pro Mini, SDA est sur A4 et SCL sur A5, sur la même rangée de picots que les entrées analogiques. La dernière révision SparkFun ajoute même des empreintes SMD pour souder les résistances de pull-up I²C — utile en montage fixe, car beaucoup de modules les embarquent déjà. On lit un capteur de température MCP9808 (adresse 0x18) avec la bibliothèque Wire et on affiche les degrés Celsius.
Matériel
- 1 × Arduino Pro Mini (le bus I²C fonctionne identique en 5 V et 3,3 V — alimenter le capteur au même voltage que la carte)
- 1 × module capteur I²C (MCP9808, ou LM75/BME280/OLED SSD1306 — mêmes broches)
- 4 × câbles : VCC, GND, SDA→A4, SCL→A5
- Résistances de pull-up 4,7 kΩ vers VCC sur SDA et SCL si le module n'en a pas (ou souder celles des empreintes de la carte)
- Adaptateur FTDI/CP2102 pour le moniteur série
Code complet
// Capteur temperature I2C MCP9808 sur A4 (SDA) / A5 (SCL)
#include <Wire.h>
const uint8_t ADDR = 0x18; // adresse par defaut du MCP9808
void setup {
Serial.begin(57600);
Wire.begin; // maitre I2C, broches A4/A5 fixes sur 328P
if (Wire.requestFrom(ADDR, (uint8_t)1) == 0) {
Serial.println(F("Capteur absent ! Verifier SDA/SCL/adresse"));
}
}
void loop {
Wire.beginTransmission(ADDR);
Wire.write(0x05); // registre ambient temperature
Wire.endTransmission;
Wire.requestFrom(ADDR, (uint8_t)2);
if (Wire.available >= 2) {
int16_t brut = (Wire.read << 8) | Wire.read;
if (brut & 0x8000) brut -= 0x10000; // signe negatif
float t = (brut & 0x0FFF) * 0.0625; // resolution 1/16 degre
Serial.print(F("T = "));
Serial.print(t);
Serial.println(F(" C"));
}
delay(1000);
}
Vérification attendue
Le moniteur série affiche une température cohérente (~20-25 °C en intérieur), qui monte quand on pince le capteur entre les doigts. Le test de présence du setup n'affiche aucune erreur si SDA/SCL sont bien sur A4/A5 et que les pull-up existent. Sur la dernière révision de la carte, les deux petites empreintes près de A4/A5 permettent de souder des résistances 0603 4,7 kΩ pour un bus propre en installation permanente.
Erreurs fréquentes
- Oublier les pull-up sur SDA/SCL : le bus reste au niveau bas, Wire.requestFrom renvoie 0 octet ; la plupart des modules break-out les embarquent, les puces nues non.
- Câbler SDA sur A5 et SCL sur A4 : l'ATmega328P a ses broches TWI fixées à A4=SDA, A5=SCL, aucun remap possible (contrairement à d'autres MCU).
- Mélanger un module 5 V et une Pro Mini 3,3 V sans vérifier le niveau logique : le module 5 V peut pousser SDA au-dessus de VCC et fatiguer la broche.
- Adressage I²C : certains modules se présentent en 0x48 (LM75) au lieu de 0x18 ; en cas de silence, scanner le bus broche par broche.
- Confondre A4/A5 avec des entrées analogiques libres : dès que Wire.begin tourne, ces broches appartiennent au bus.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino