Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme communication arduino RX TX

Sujet résolu
    13 juillet 2017 à 12:04:02

    Bonjour,

    Je travaille sur un projet dans lequel une wemos D1 mini pro (ESP8266) envoie par port série (TX -> RX RX -> TX) une valeur à une arduino mega. Mais l'arduino Mega ne reçoit pas la valeur à l'allumage du système, elle la recoit seulement avec un RESET manuel de l'arduino. L'objectif est que, lorsque on alimente simultanément l'arduino et l'esp8266, la communication marche directement SANS le RESET manuel de l'arduino mega.

    Merci d'avance pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      13 juillet 2017 à 17:21:26

      Pas doué en arduino, désolé.
      • Partager sur Facebook
      • Partager sur Twitter
      Le 25 juillet 2016, j'ai essayé une Ford Mustang.
        13 juillet 2017 à 17:46:46

        Un petit bout du code que tu as coté arduino et coté EPS pourrait nous être utile ;)
        • Partager sur Facebook
        • Partager sur Twitter
          13 juillet 2017 à 18:46:21

          Du coté de l'ESP: (envoie une valeur de type 99999999 (nombre d'abonné d'une chaine youtube))
               Serial.print(",");
               Serial.print(api.channelStats.subscriberCount);
               Serial.println(":");
          Du coté de l'arduino: (reçoit la valeur)

          void setup() {
            int i;

            for (i = 0; i < 4; i++){
              pinMode(BCDPin[i], OUTPUT);
              digitalWrite(BCDPin[i], 0);
            }

            for(i = 0; i < 8; i++){
              pinMode(DIGIPins[i], OUTPUT);
              digitalWrite(DIGIPins[i], 0);
            }
            subsVersDigit(startup);
            Serial.begin(9600);
          }
          void loop() {
          recvdata();
          }
          void recvdata(){
              if (Serial.available() > 0){
                  String a= Serial.readString();
                  String value1, value2, nbabo;
                  if ( a.substring(0, 1) != ","){
                        return;
                      }
                  for (int i = 0; i < a.length(); i++) {
                      if (a.substring(i, i+1) == ",") {
                          value2 = a.substring(0, i);
                          value1 = a.substring(i+1);
                      }
                      if (value1.substring(i,i+1) == ":"){
                               nbabo = value1.substring(0,i);            
                          }
                  }
                  for (int i = 0; i < nbabo.length(); i++) {
                      char c = nbabo.charAt(i);
                       if (c < '0' || c > '9') break;
                      subscount *= 10;
                      subscount += (c - '0');
                  }
                  Serial.println(subscount);
                  Serial.println(nbabo.length());
                  subsVersDigit(nbabo);
                  subscount = 0;
              }
          }

          J'ai l'impression que l'arduino ne boot pas sans le reset ... ( j'ai essayé de remplacer l'arduino et le problème est le même ! )

          -
          Edité par Superelec 13 juillet 2017 à 19:42:06

          • Partager sur Facebook
          • Partager sur Twitter
            13 juillet 2017 à 20:01:54

            N'y aurait-il pas un décalage lors de l'allumage ?

            Par exemple, l'ESP qui envoie le premier caractère avant que l'arduino ne soit prêt...

            A ta place, plutôt que de passer par readString et autre fonction compliqué de gestion des string (ce qui bouffe aussi pleins de mémoire et de temps CPU pour pas grand chose), je ferais tout manuellement char par char ;)

            En plus, ça permet de faire un code plus simple ;)

            Exemple :

            long int currentnb = -1;    // Nombre en cours de réception, ou -1 si invalide et/ou synchro non reçu
            
            void loop() {
            	recvdata();
            }
            
            void recvdata() {
            	while ( Serial.available() > 0 ) {
            		char c = Serial.read();
            		if ( c == ',' ) {
            			currentnb = 0;
            		} else if ( c == ':' ) {
            			if ( currentnb >= 0 ) {
            				Serial.println("Nombre OK !!!");
            				Serial.println(currentnb);
            				currentnb = -1;
            			}
            		} else if ( ( c >= '0' ) && ( c <= '9' ) ) {
            			if ( currentnb >= 0 ) {
            				currentnb = ( ( currentnb * 10 ) + c - '0' );
            			}
            		} else {
            			currentnb = -1;
            		}
            	}
            }



            • Partager sur Facebook
            • Partager sur Twitter
              14 juillet 2017 à 14:50:20

              Non il n'y a pas de décalage, au contraire il faut le temps pour l'ESP de se connecter au wifi contrairement à l 'arduino :)

              Oui c'est une meilleure technique mais le problème ne vient pas de la :-/

              • Partager sur Facebook
              • Partager sur Twitter
                16 juillet 2017 à 12:00:46

                J'ai régler le problème en recevant les donnés sur Serial3 au lieu de Serial sur l'Arduino Mega ! Et ça marche très bien !

                Merci de votre aide :)

                • Partager sur Facebook
                • Partager sur Twitter

                Probleme communication arduino RX TX

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown