cln
December 31, 2025, 9:12am
1
Bonjour à tous,
Je réalise actuellement un montage à base d’un ESP32-S3 pilotant un bus I2C.
Sont présents sur le bus 5 circuits , 3 près de l’esp :
- Un circuit d’horloge DS3231
- Un circuit de pilotage d’écran LCD PCF8574
- Un convertisseur I2c vers 8 entrées TOR PCF8574
2 autres présents situés à 1,5m de l’ESP
Un circuit convertisseur analogique vers I2C ADS1115
- Un circuit mmu MPU6050.
C’est le circuit MPU qui pose problème.
Voici l’extrait du code de déclaration.
Serial0.begin(115200);
Wire.begin(9, 10); // SDA: GPIO9, SCL: GPIO10 (for I2C communication)
EntreTor.begin(); // Initialisation de la lecture des boutons via PCF8574
/* Initialisation des moteurs */
Deplacement.Begin(Inclinometre);
/* Initialisation des capteurs de lumière */
ADS.begin();
// test adress MPU6050
Wire.beginTransmission(0x68);
// Serial.println("Coucou 2");
error = Wire.endTransmission();
// Serial.println("Coucou 3");
if (error == 0)
{
Serial0.println("adresse I2C MPU 0x68 trouvée");
}
else
{
Serial0.println("Erreur inconnue à l'adresse I2C MPU 0x68");
}
// Initialize the MPU6050
if (!mpu.begin(0x68))
{
Serial0.println("Failed to find MPU6050 chip");
while (1)
{
delay(10);
}
}
Serial0.println("MPU6050 Found!");
Au début, je teste si un circuit répond à l’adresse 0x68. C’est toujours le cas.
Ensuite j’initialise le MPU, et cela ne fonctionne que quelquefois. (1/10 environs).
Avez-vous une piste d’investigation à me donner, afin de résoudre ce problème.
Restant à votre disposition pour plus de renseignements.
J-M-L
December 31, 2025, 10:11am
2
cln:
Sont présents sur le bus 5 circuits , 3 près de l’esp :
Un circuit d’horloge DS3231
Un circuit de pilotage d’écran LCD PCF8574
Un convertisseur I2c vers 8 entrées TOR PCF8574
2 autres présents situés à 1,5m de l’ESP
Un circuit convertisseur analogique vers I2C ADS1115
Votre ESP32 est en 3.3V, quelle tension pour vos différents modules ? ont-ils des résistances de pullup ?
1.5m pour de l'I2C, ça peut être beaucoup... La spécification impose uniquement une capacité totale de bus maximale de 400 pF et la distance dépend donc directement de la capacité par mètre du câble, de la fréquence et des résistances de pull-up. En pratique, sur PCB on reste à quelques dizaines de centimètres, et avec câble typique à 100 kHz on atteint environ 0,5 à 1 m dans de bonnes conditions. Au-delà, le bus devient instable sans réduction de vitesse ou ajout de buffers I2C même si sur certains montages ça peut fonctionner.
cln
December 31, 2025, 1:46pm
3
Merci @J-M-L pour cette réponse.
Les différents modules sont en 3.3V, ce sont des modules de ce type :
A priori, ils comportent des résistances de pull-up.
Je peux éventuellement supprimer les résistances de pull-up sur l’ADS1115 qui est juste avant le MPU6050 sur la fin du bus au bout des 1.5m ?
Sinon je ne connais pas les buffers I2C, une référence à me donner ?
Peut-on réduire la vitesse du bus I2C par programmation au niveau de l’ESP32-S3 ?
J-M-L
December 31, 2025, 1:58pm
4
Essayez avec Wire.setClock(100000) ; //fixe le bus à 100 kHz
https://docs.arduino.cc/language-reference/en/functions/communication/wire/setClock/
Par exemple PCA9515
Si vous enlevez les modules proches et vous ne conservez que le module à 1m50, est-ce que ça fonctionne ?
cln
December 31, 2025, 2:15pm
5
J’ai essayé de passer le bus à 100kHz, pas d’amélioration.
Je vais essayer de supprimer les résistantes de tirage sur l’ADS1115. Reste à les trouver.
Si cela ne donne pas de résultats, je regarderais du côté du PCA9515.
cln
December 31, 2025, 2:57pm
6
@J-M-L
J’ai essayé en enlevant l’ADS1115, c’est celui qui est au bout de la ligne avec le MPU6050.
Cela ne résout pas le problème.
Je vais donc essayer avec les buffers I2C.
Avez-vous un fournisseur à me conseiller autre que nos amis Chinois ?
J-M-L
December 31, 2025, 3:46pm
7
pas de fournisseur particulier.
essayez quand même avec chaque composant séparément, puis deux à deux. Il se peut que les multiples résistances de pullup créent des soucis.
cln
December 31, 2025, 4:48pm
8
J’ai fait un essai avec le MPU6050 seul, directement raccordé proche de l’ESP32 et cela fonctionne correctement.
Je n’ai pas réussi à le faire fonctionner seul avec un bus de grande longueur.
J-M-L
December 31, 2025, 4:49pm
9
OK donc c'est un souci à résoudre déjà si vous avez besoin de le mettre aussi loin de l'arduino.
cln
December 31, 2025, 5:02pm
10
Il est placé dans un boitier avec un ADS1115.
Ce boitier est mobile, il tourne selon 2 axes et le MPU me sert à connaitre l’inclinaison de ce boitier selon ces 2 axes.
La partie cerveau (ESP32) du montage est fixe et légèrement déportée afin de permettre la rotation libre du boitier capteur.
J-M-L
December 31, 2025, 5:05pm
11
comment se fait la connexion filaire ? vous allez entortiller les fils ? (où le mouvement est limité ?)
cln
December 31, 2025, 5:11pm
12
Le mouvement est limité à environ 110° sur chaque axe.
cln
December 31, 2025, 5:22pm
13
En fait, mon besoin est de connaitre l’inclinaison de ce boitier et de la transporter à 4 ou 5 mètres. J’ai actuellement 1.5 sur ma maquette de test.
J’ai chois un MPU6050 pour récupérer ces 2 informations :
Mais il existe peu-t-être d’autres solutions ?
J-M-L
December 31, 2025, 5:58pm
14
vous ne pouvez pas avoir l'info sur ce qui pilote les axes ?
cln
December 31, 2025, 6:09pm
15
Les axes seront pilotés par des actionneurs linéaires en 12v ou des moteurs à courant continu.
J-M-L
January 1, 2026, 10:03am
16
Bonjour et bonne Année 2026!
Je voulais dire qu’est ce qui envoie les ordres de mouvement ? N’y a t il pas moyen de lire ces commandes à la source plutôt que de regarder ce qu’il se produit à l’arrivée ?
cln
January 1, 2026, 10:12am
17
Les ordres de mouvement sont transmis par un pont en H, je pense donc que cela n’est pas possible de récupérer les inclinaisons à ce niveau.
De plus dans le boitier déporté est également présent un convertisseur analogique vers I2C.
J-M-L
January 1, 2026, 10:27am
18
Qui envoie les ordres au pont en H ?
Mais bon c’est juste une idée - si c’est pas faisable ou envisageable laissez tomber.
cln
January 1, 2026, 10:46am
19
Les ordres sont envoyés en tout ou rien en fonction des informations récupérées justement depuis les circuits, convertisseur et MPU présents sur ce bus.
Actuellement, je regarde du côté des modules d’extension de bus I2C en différentiel. Pas facile de trouver le bon produit.
L'ESP32 pouvant communiquer sans fil ne serait-il pas plus simple d'embarquer l'ESP32 et donc de l'avoir près des capteurs et de communiquer avec lui en Bluetooth ou en WiFi.