🛠 Scanner le bus I2C depuis le microcontrôleur
Objectifs
L'en-tête Arduino de la LattePanda 3 Delta expose un bus I2C (des tutoriels officiels ADC et I2C existent dans la documentation IO_Playability). Plutôt que de supposer un capteur précis, ce tutoriel écrit un scanner I2C natif en C++ sur l'ATmega32U4 : il balaie toutes les adresses 7 bits et rapporte les périphériques présents sur le port série interne. C'est l'outil de diagnostic indispensable avant tout branchement de capteur, et il montre une fois de plus la double personnalité de la carte : le bus est du côté Arduino, pas du côté PC.
Matériel
- LattePanda 3 Delta + Arduino IDE (board « Arduino Leonardo »)
- 1 module capteur ou périphérique I2C au choix (le scanner l'identifiera par son adresse)
- Résistances de pull-up 4,7 kΩ sur SDA et SCL si le module n'en a pas déjà (les modules Gravity/DFRobot en intègrent généralement)
- Câbles Dupont vers les broches I2C de l'en-tête Arduino (repérées SDA/SCL sur le schéma de brochage officiel de la page
io_playability)
Code complet
Sketch Arduino IDE (board « Arduino Leonardo ») :
// Scanner I2C pour l'ATmega32U4 embarqué de la LattePanda 3 Delta.
#include <Wire.h>
void setup {
Serial.begin(9600);
while (!Serial) {} // attendre le port série USB
Wire.begin; // maître I2C
Serial.println("Scan I2C : 0x08 -> 0x77");
}
void loop {
byte trouve = 0;
for (byte addr = 8; addr < 120; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission == 0) { // 0 = ACK reçu
Serial.print("Périphérique trouvé à 0x");
Serial.println(addr, HEX);
trouve++;
}
}
if (trouve == 0) Serial.println("Aucun périphérique I2C.");
Serial.println("---");
delay(5000); // refaire un scan toutes les 5 s
}
Les lignes s'affichent dans le moniteur série de l'IDE ou sur le port COM du MCU depuis le SoC (voir le tutoriel pont série).
Vérification attendue
Avec un module branché, le scan affiche son adresse (par exemple une adresse 0x3C pour beaucoup d'écrans OLED — l'adresse réelle dépend du module). Sans rien brancher mais SDA/SCL laissés en l'air, beaucoup d'adresses peuvent répondre faussement : c'est le symptôme classique de l'absence de pull-up.
Erreurs fréquentes
- SDA/SCL inversés : rien ne répond ; intervertir les deux fils.
- Pas de pull-up : le bus flotte et le scan sort n'importe quoi ; ajouter 4,7 kΩ ou prendre un module avec pull-up intégrés.
- Niveau logique : >
- Broches erronées : ne pas piquer SDA/SCL sur n'importe quelle broche des deux blocs de 50 ; suivre le brochage officiel de la page
io_playability. - Confusion avec le SoC : le bus piloté ici est celui de l'Arduino ; le Celeron N5105 n'expose pas d'I2C utilisateur exploitable de la même façon.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton.pyPythonservo.pyPythonanalogique.pyPythonrespiration.pyPythonneopixel.pyPython