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>