Problème de communication Bluetooth Arduino/Android

Bonjour à tous !

J'essaie de mettre en place une communication Bluetooth entre un Arduino Nano et une application Android. Pour l'instant, je veux m'assurer que les messages qui transitent soient bien reçus en clair des 2 côtés, mais ça coince déjà !

Je n'ai pas de problème de connexion, l'application s'appaire correctement au module, et je reçois parfaitement les messages qui me sont envoyés depuis l'appli. Le problème est que dès que je souhaite envoyer un message (ce que je fais depuis le moniteur série), l'appli reçoit le message en 2 parties, comme si j'envoyais 2 messages au lieu d'un. Par exemple, si j'envoie "BONJOUR", l'appli va généralement recevoir un premier message "B", puis un 2e message "ONJOUR".

Je dis "généralement", car la taille des messages est variable (particulièrement quand j'envoie des messages rapidement). Par exemple, "BON" puis "JOUR".

Côté appli, les messages sont visualisés directement depuis les log d'Android Studio, donc je ne pense pas que cela vienne de ce côté.

J'utilise un module HC-05 pour le Bluetooth, configuré comme suit :

  • Fréquence : 38.400 Bauds
  • 2 bits de stop
  • Pas de bit de parité
    (en changeant ces paramètres, l'Arduino envoie quand même 2 messages, mais illisibles en plus...)

Pour le moniteur série, je me suis bien mis en fréquence 38.400, et j'ai choisi "Pas de fin de ligne".

Voilà mon code, qui est des plus basiques pour le moment :

#include <SoftwareSerial.h>

SoftwareSerial mavoieserie(2, 3); // (RX, TX) (pin Rx BT, pin Tx BT)

void setup()
{
    // Ouvre la voie série avec l'ordinateur
    Serial.begin(38400);
    
    // Ouvre la voie série avec le module BT
    mavoieserie.begin(38400);
}

void loop()
{
    if (mavoieserie.available()) {
        Serial.write(mavoieserie.read());
    }
    if (Serial.available()) {
        mavoieserie.write(Serial.read());
    }
}

La partie Android n'est pas gérée par moi directement, donc je n'aurai pas trop de détails au niveau de la configuration de cette partie...

Je vous remercie de votre aide !

l'appli reçoit le message en 2 parties, comme si j'envoyais 2 messages au lieu d'un. Par exemple, si j'envoie "BONJOUR", l'appli va généralement recevoir un premier message "B", puis un 2e message "ONJOUR".

C'est un problème de votre code... la voie série envoie les données les unes après les autres... la question à vous poser c'est quand savez vous que vous avez reçu un message complet... pour cela il vous faut un marqueur de fin de phrase... qu'utilisez vous aujourd'hui?

cf mon petit tuto sur Ecouter le Port Série

je suis prêt à prendre le pari que vous lisez tout ce qui a dans le buffer et pensez que quand le buffer est vide vous avez reçu tout le message :slight_smile: --> ce n'est pas le cas, c'est juste que votre ordinateur lit plus vite le contenu du buffer que les data arrivent... donc vous videz le buffer, available() dit qu'il n'y a plus rien à lire et....

Bonjour,

Je vous remercie de votre aide, et du lien vers votre tuto.

Effectivement, je n'utilise pas de marqueurs de fin de phrase dans les messages que j'envoie, et je ne sais pas comment la partie application les interprète. Je pense que c'est en effet vers cet axe que je vais me tourner pour corriger le problème.

Malheureusement, je n'ai plus la main sur le projet pour l'instant, et je ne peux plus rien tester... Je prendrai vos remarques en compte dès que j'en aurai la possibilité.