🛠 Scanner le bus I2C depuis le microcontrôleur
Objetivos
El encabezado Arduino de la LattePanda 3 Delta expone un bus I2C (existen tutoriales oficiales de ADC e I2C en la documentación IO_Playability). En lugar de asumir un sensor específico, este tutorial escribe un escáner I2C nativo en C++ sobre el ATmega32U4: recorre todas las direcciones de 7 bits e informa los dispositivos presentes en el puerto serie interno. Es la herramienta de diagnóstico indispensable antes de conectar cualquier sensor, y muestra una vez más la doble personalidad de la placa: el bus está del lado de Arduino, no del lado del PC.
Material
- LattePanda 3 Delta + Arduino IDE (placa « Arduino Leonardo »)
- 1 módulo sensor o dispositivo I2C a elección (el escáner lo identificará por su dirección)
- Resistencias de pull-up de 4,7 kΩ en SDA y SCL si el módulo no las incluye ya (los módulos Gravity/DFRobot generalmente las integran)
- Cables Dupont hacia los pines I2C del encabezado Arduino (identificados como SDA/SCL en el diagrama de pines oficial de la página
io_playability)
Código completo
Sketch de Arduino IDE (placa « 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
}
Las líneas se muestran en el monitor serie del IDE o en el puerto COM del MCU desde el SoC (ver el tutorial de puente serie).
Verificación esperada
Con un módulo conectado, el escaneo muestra su dirección (por ejemplo, una dirección 0x3C para muchas pantallas OLED — la dirección real depende del módulo). Sin nada conectado pero con SDA/SCL al aire, muchas direcciones pueden responder falsamente: es el síntoma clásico de la ausencia de pull-up.
Errores frecuentes
- SDA/SCL invertidos: nada responde; intercambiar los dos cables.
- Sin pull-up: el bus flota y el escaneo muestra resultados aleatorios; añadir 4,7 kΩ o usar un módulo con pull-up integrados.
- Nivel lógico: >
- Pines erróneos: no conectar SDA/SCL en cualquier pin de los dos bloques de 50; seguir el diagrama de pines oficial de la página
io_playability. - Confusión con el SoC: el bus controlado aquí es el de Arduino; el Celeron N5105 no expone un I2C de usuario utilizable de la misma manera.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton.pyPythonservo.pyPythonanalogique.pyPythonrespiration.pyPythonneopixel.pyPython