Réinitialisation du bus I2C sur Wemos d1 mini

Bonjour, je réalise une station météo à base de wemos d1 mini et j'ai un problème avec le capteur UV de Sparkfun , voici la partie du sketch concernée :

#include <Arduino.h>
#include "veml6075.h"
#include <ESP8266HTTPClient.h>
#include "connect.h"
#include <SparkFun_VEML6075_Arduino_Library.h>



// Initialisation UV
VEML6075 uv;

void init_veml() {

  Wire.begin();

  if (!uv.begin())
  {
    Serial.println("Unable to communicate with VEML6075.");
    while (1)
      ;
  }
Serial.println(String(uv.a()) + ", " + String(uv.b()) + ", " +
                 String(uv.uvComp1()) + ", " + String(uv.uvComp2()) + ", " +
                 String(uv.index()));
  delay(2000); 
  
}


void getDataVEML6075() {
  Wire.begin();

  if (!uv.begin())
  {
    Serial.println("Unable to communicate with VEML6075.");
    while (1)
      ;
  }
 Serial.println(String(uv.a()) + ", " + String(uv.b()) + ", " +
                 String(uv.uvComp1()) + ", " + String(uv.uvComp2()) + ", " +
                 String(uv.index()));
  delay(2000);

    }

Lorsque j'appelle la fonction init_veml() dans le setup, il me trouve bien le capteur VEML6075 mais lorsque j'appelle la fonction getDataVEML6075() depuis la loop, il ne me le trouve plus et redémarre !
Code complet ci-dessous sans l'onglet connect.cpp pour masquer les identifiants.

Pouvez vous m'aider à résoudre ce problème ?
Merci d'avance.
Cordialement
Philippe
Projet_station_meteo_multi_AGOEURY3_6.zip (16,4 Ko)

Peux tu mettre tout ton code directement lisible, afin que tout le monde puisse le voir simplement.
Si tu pouvais indenter le code, ça serait un plus.

Bonjour

As-tu testé les exemples fournis par Sparkfun pour sa bibliothèque ?

Tu remarqueras que dans ces exemples Wire.Begin(), pour initialiser le bus I2C, n'est appelé qu'une seule fois, pas à répétition

merci @al1fch pour votre réponse, et oui j'ai testé les exemples fournis dans la bibliothèque et de tte façon le capteur fonctionne bien car j'obtiens bien des valeurs dans la fonction init() .
par contre je viens de remarquer que si je fais fonctionner le bme280 en même temps, dans ce cas je n'ai plus de message d'erreur et le veml6075 envoie bien les données dans la fonction getDataveml(), bizarre non ?

@terwal le code entier est donné en zip plus bas car j'ai beaucoup d'onglets et je ne peux pas mettre tout le code en une fois, merci pour votre réponse.
p.s: indenter veut dire quoi ?

Oui, mais cela demande de télécharger un fichier non connu potentielle malveillant et cela n'est pas lisible par les personnes visionnant le site sur leur smartphone.

Pas la peine de mettre tout tes fichiers, mets au moins le ino, qui appelle tes fonctions.

Indenter veut dire mettre un texte en retrait ou faire un alinéa.
Pour le code, cela correspond que les lignes de code d'un même groupe(function, if, ...) commence toutes au même niveau.

Je ne sais même pas si dans ton code, tu as mis l'accolade fermante de la fonction getDataVEML6075?

Merci pour votre réponse et précisions, je comprends pour le problème de téléchargement de virus, en effet je suis vigilant aussi avec çà.
Pour l'accolade fermante, c'est bon elle est bien présente, c'est mon copié-collé qui était un peu juste :wink:
Pour en revenir à mon problème qui n'en était pas un apparemment, car je pense avoir compris ce qui se passe, attention je ne suis pas expert en la matière.
Le fait d'initialiser 2 capteurs sur le même bus I2C provoque ce problème si un des 2 capteurs n'est pas connecté physiquement lors des essais, c'est ce que je faisais, je voulais juste tester mon capteur uv seul mais il n'était trouvé qu'à l'initialisation et plus ensuite lors des appels de la 2ème fonction installée dans la loop.
A partir du moment où je connecte le capteur UV VEML6075 et le capteur temp, hum, pression BME 280, le code fonctionne bien.
Si quelqu'un a un éclairage la dessus pour me confirmer mon impression je suis preneur.
En attendant merci d'avoir pris le temps de me lire et répondre.
Cordialement
Philippe

Voir ici:

@fdufnews Merci pour votre réponse, mais je ne pense pas que cela concerne mon ex-problème :wink:
bien cordialement Philippe

Si tu le dis.
Mais comme en même temps tu dis

.......

Bonjour je relance le sujet, car même si le code fonctionne à présent avec tous les capteurs branchés ainsi que le module DS1307 RTC et carte SD, un problème survient au bout de quelques temps à savoir l'envoi de données des capteurs erronées, comme si le bus I2C ne fonctionnait plus, je voudrais savoir s'il existe un moyen de réinitialiser le bus I2C via lignes de code avant d'exécuter les fonctions de lecture de ces capteurs sur un wemos d1 mini pro ?
Merci de me lire et de m'apporter votre éclairage sur ce problème et solutions .
cdlt
Philippe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.