MQTT stop lorsque j'utilise RTClib.h

Bonsoir,
J'utilise la librairie MQTT.h dans un de mes projets qui utilise un Adruino UNO + Ethershield basé sur l'exemple de base. Fonctionne sans problème :

J'essaie simplement d'ajouter un "timestamp" chaque secondes dans la Loop en utilisant un clock RTC (DS3231 - Testé et fonctionnel)

Mais une fois la commande RTC ajoutée dans le "if (millis() - lastMillis > 1000)" l'heure apparaît chaque seconde mais la réception de message MQTT cesse de fonctionner (???).

Comme si le "void messageReceived(String &topic, String &payload)" de s'exécute plus lors de la réception d'un message MQTT sur le topic .

Note: Je peux confirmer que le Arduino est bien connecté au broker et inscrit au topic avec success.

Voici une partie du code et code complet en pièce jointe.
Merci d'avance.

. #include <Ethernet.h>
#include <MQTTClient.h>
#include <MQTT.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;

...
...
...

void loop() {
  client.loop();
  if (!client.connected()) {
    Serial.print("\nNOT CONNECTED TO BROKER....");
    connect();                                     
  }
// publish a message roughly every second.
  if (millis() - lastMillis > 1000) {
    lastMillis = millis();
    Serial.print("\nDEBUG\n");
    DateTime now = rtc.now();       //THIS CAUSE ISSUE
    Serial.print(now.hour(), DEC);  //THIS CAUSE ISSUE
    Serial.print(':');               //THIS CAUSE ISSUE
    Serial.print(now.minute(), DEC); //THIS CAUSE ISSUE
    Serial.print(':');                //THIS CAUSE ISSUE
    Serial.print(now.second(), DEC); //THIS CAUSE ISSUE
    Serial.println();                //THIS CAUSE ISSUE
  }
}

ArduinoForum-RTCbugv1.ino (7.73 KB)

Bonjour

Rien qui me saute aux yeux et qui pourrait expliquer le problème d'incompatibilité avec le RTC.
Par contre dans le code complet je vois que les pin sont utilisés pour des relais.
Le shield ethernet utilise le bus SPI. Attention aux conflits avec la cs pin.

bricoleau:
Bonjour

Rien qui me saute aux yeux et qui pourrait expliquer le problème d'incompatibilité avec le RTC.
Par contre dans le code complet je vois que les pin sont utilisés pour des relais.
Le shield ethernet utilise le bus SPI. Attention aux conflits avec la cs pin.

Merci de l'info.
Tout fonctionne bien présentement. C'est seulement l'intégration du RTC qui cause problème pour le moment.

Je ne vois pas trop ce qui pourrait être en conflit entre I2C (DS3231) et SPI (Ethernet).

Question : avoir une carte Ethernet et ne pas utiliser NTP n'est-il pas dommage ?

Une librairie ici : arduino-ntp-sur-ethernet

hbachetti:
Je ne vois pas trop ce qui pourrait être en conflit entre I2C (DS3231) et SPI (Ethernet).

Question : avoir une carte Ethernet et ne pas utiliser NTP n'est-il pas dommage ?

Une librairie ici : arduino-ntp-sur-ethernet

Merci.
En effet NTP fait bien du sens et est une bonne alternative car je n'ai pas trouvé le problème. Merci!

Le problème du RTC quel qu’il soit est la mise à jour de l'horloge. Une fois que le montage est opérationnel et en place, quelquefois peu accessible, il est plutôt fastidieux de le remettre sur le bureau 6mois ou 1 an après pour le mettre à l'heure, à moins d'y coller un clavier matriciel, où de développer une interface de mise à jour par la ligne série et de disposer d'un PC portable.