Bonjour
Mon problème ce soir tient à l'installation de 2 écrans OLED et un accéléromètre en I2C sur un ESP32. Les 2 écrans sont identiques et ont la même adresse 0x3C, donc je ne pouvais pas les mettre sur le même bus. J'utilise donc 2 bus I2C différents, l'un avec {SDA, SCL} sur les pins {19, 23} et l'autre sur les pins {5, 4}. Si j'en reste là, ça fonctionne.
Mais pour corser l'affaire, je veux ajouter un accéléromètre MCU6050, d'adresse 0x68, sur mon premier bus I2C. Je mets des résistances de 13kOhms entre VCC et les deux lignes SDA et SCL (mais le problème persiste si elles ne sont pas là).
Les devices sont bien trouvés par le scanner I2C modifié :
Scanning I2C Addresses Channel 1
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. 3C .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. 68 .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
Scan Completed, 2 I2C Devices found.
Scanning I2C Addresses Channel 2
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. 3C .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
Scan Completed, 1 I2C Devices found.
Le problème est le suivant : la présence de l'accéléromètre me fait perdre l'affichage de l'écran avec lequel il partage son bus I2C.
Le code est un peu long, alors je ne vais donner que des extraits (mais je peux fournir le code complet au besoin).
Déclaration des écrans et de l'accéléromètre :
U8G2_SSD1306_128X64_NONAME_1_SW_I2C display1(U8G2_R0, SCL1, SDA1);
U8G2_SSD1306_128X64_NONAME_1_SW_I2C display2(U8G2_R0, SCL2, SDA2);
MPU6050 accelgyro;
Le setup :
void setup() {
Serial.begin(115200);
AcceleroSuccess = InitAccelero ();
display1.begin();
display2.begin();
display2.setFont(u8g2_font_helvR08_tr);
display1.setFont(u8g2_font_helvB18_tr);
}
Et l'initialisation de l'accéléromètre :
bool InitAccelero () {
Wire.begin(SDA1, SCL1);
accelgyro.initialize();
// verify connection
bool Success = accelgyro.testConnection();
if (Success) {
Serial.println("MPU6050 connection successful");
// supply your own gyro offsets here, scaled for min sensitivity
accelgyro.setXGyroOffset(29);
accelgyro.setYGyroOffset(-30);
accelgyro.setZGyroOffset(-45);
accelgyro.setXAccelOffset(-3499);
accelgyro.setYAccelOffset(-5049);
accelgyro.setZAccelOffset(887);
}
else Serial.println("MPU6050 connection failed");
return Success;
}
Le problème est-il matériel ou logiciel ? Est-ce dû à la façon d'initialiser l'accéléromètre ?
Merci de vos lumières...