[Resolu] Probleme de conflit I2C ou entre bibliotheques...?

Bonjour à tous,

Je travaille sur un projet de contrôleur domotique depuis un moment. J'y apporte des petites améliorations de temps en temps.

En gros c'est un boitier avec un clavier et un écran LCD qui m'affiche la température de plusieurs capteurs, stocke un historique des mesures, et calcule minima/maxima ainsi que la tendance pour chacun de ces capteurs. En plus de cela, le boitier est connecté à un autre module (radio) qui envoi des ordres au boitier principal via des entrées numériques, ce dernier déclenchant les relais correspondants.

Situation 1.0 (fonctionne)
J'ai une carte Arduino Mega sur laquelle sont connectés les éléments suivants:

  • Un écran LCD 4x20 (I2C)
  • Un pavé numérique
  • 3 capteurs de température digitaux (OneWire)
  • 4 entrées numériques venant d'un boitier externe au montage
  • Une carte 8 relais de puissance 10A
  • Un buzzer piezzo
  • Une sortie série envoyant des données un autre Arduino (Uno), et recevant également des ordres de ce dernier

Le tout alimenté par une alim de PC, 12v pour la carte Mega et 5v pour l'alim des relais de puissance.

Situation 2.0 (problème)
J'ai testé un petit montage sur une autre carte (Uno), une simple horloge faite d'un shield DS3231 et d'un petit écran OLED qui affiche l'heure et la date. Les deux fonctionnant via le protocole I2C.

Seulement voila, si je teste ma petite horloge seule, tout fonctionne parfaitement. Mais quand j’intègre mon horloge à mon boitier domotique, ça ne fonctionne plus.
Symptômes:

  • Mon écran LCD ne s'allume plus
  • Le programme ne termine pas sa phase d'initialisation (je n'entend pas le BIP du buzzer que j'ai placé à la fin de la boucle d'init)
  • Mon écran OLED reste noir
  • La LED du DS3231 clignote

J'ai donc tenté ceci:

  • Si je débranche le fil d'alim du DS3231 et que je redémarre, le boitier fonctionne mais l'écran OLED reste noir
  • Si je débranche l'écran OLED, ça ne change rien au problème
  • Si je débranche l'alim du LCD, le programme démarre correctement et la LED du DS3231 reste allumée fixe

Tentative d'analyse
Vu les symptômes, j'ai bien sûr tout de suite pensé à un conflit d'adresse. Malheureusement chacun des composants I2C a bien une adresse différente. Je pensais donc peut-être à un conflit au niveau des registres de ces composants, ou bien des bibliothèques utilisées.

Quel est votre avis ?

PS1: Je precise que je n'utilise pas l'IDE Arduino, mais VSCode avec le plugin PlatformIO
PS2: Les bibliothèques que j'utilise sont:

#include <OneWire.h>
#include <DallasTemperature.h>
#include <math.h>
//#include <Wire.h> // Deja defini dans le LiquidCrystal_I2C.h
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <DS3232RTC.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Essaie déjà ceci :

Perso je préfère la version modifiée par fdufnews.

Merci mais j'avais deja passé les composants au scanner. Je n'ai pas le matos sous la main là mais si je me souviens bien:
LCD=0x3F
RTC=0x68
OLED=0x3C

La LED du DS3231 clignote

Très étonnant.
Normalement la LED est branchée sur l'alimentation du module.
Je suppose que tu l'as branché sur le 5V de la UNO ?
Tu pourrais mesurer ce 5V ?

Oui elle est bien branchée sur le 5V de l'Arduino Mega (il en va de meme pour l'alim du LCD). L'ecran OLED, quant à lui, est sur la sortie 3,3v du Mega.

La LED ne clignote pas de manière regulière.

Oui je peux mesurer ça. Je le fais dès que je rentre chez moi.

Effectivement tu avais raison, un coup j'ai 5v, un coup j'ai 200mv... la tension n'est pas constante. Je pense que mon bornier en est la cause car si je change de borne je n'ai plus du tout de tension. Il doit etre defectueux.
Je vais essayer de le remplacer temporairement par une platine d'essai et refaire le test.

Ça sent le faux contact :confused:

Je confirme, ca n'etait dû qu'à ce faux contact. Apres remontage sur la platine d'essai tout fonctionne parfaitement.

Parfois on cherche un peu trop la complication :slight_smile:

Merci pour le coup de main.