IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème Bluetooth profile Serial Port Profile, compilation qui fonctionne mais Bluetooth ne fonctionne pas
    Bonjour,

    J’ai un problème au niveau de mon appareil et sa liaison Bluetooth. En effet j’arrive à établir une connexion et à lui envoyer des instructions entre l’appareil et l’ordinateur grâce à des ports COM virtuel généré via l’appareil en Bluetooth mais l’appareil n’arrive pas à récupérer les instructions et donc ne retourne pas les données attendu. Cependant cela fonctionne en port USB.

    Description du composant Bluetooth :

    La liaison Bluetooth est réalisée par un module homologué à 2.4GHz de classe 2 (puissance radio de 0dBm) qui embarque la pile de protocole Bluetooth 2.0 Le module est programmé avec le profile SPP (Serial Port Profile) en mode esclave et dialogue en point à point avec un module Bluetooth connecté à un PC, programmé avec le profile SPP maître.
    On détecte l’appareil avec l’ordinateur via 1 port COM entrant et 1 port COM sortant.

    Configuration des ports virtuels :


    Vitesse : 115200 bauds
    Stop : 1 stop
    Parité : Aucune
    Taille : 8 bits
    Contrôle de flux : CTS et RTS

    J’ai repris le travail d’un ancien développeur et les travaux étaient conservés dans des disques durs. J’ai pu ainsi tester les applications sans avoir à build mais juste à changer les références des dépendances et le Bluetooth fonctionne bien !
    Les technologies utilisés sont C# avec .Net (les versions varient selon les projets mais je maintiens les mêmes versions et j’ai essayé des versions plus élevés ou plus bas mais toujours le même problème).
    J'ai vérifié aussi au niveau de Visual Studio 2017 ou 2019 et même la commande dotnet build pour compiler mais rien n'y fais le bluetooth ne fonctionne pas. De plus, j’ai vérifié et testé plusieurs versions du langage C# (https://docs.microsoft.com/fr-fr/dot...nguage-version). J'ai aussi compilé sur un autre pc mais le problème de Bluetooth persiste.
    J'ai pensé à une erreur de dépendances mais les dépendances sont les mêmes et j'ai même retélécharger et installer les dépendances et la version de dotnet tout en essayant plus haut ou plus bas.
    Voici un exemple avec une application, le fichier compilé que j'ai fait à gauche (sans toucher au code) puis le fichier compilé de l’ancien développeur qui date de l’année dernière :

    Nom : 1.png
Affichages : 70
Taille : 166,7 Ko

    Les fichiers sont identiques mais la version compilée d'aujourd'hui ne fonctionne pas. En remplaçant les fichiers pour vérifier les dépendances, il n'y a pas de changement et l'un fonctionne toujours et pas l'autre.
    Les résultats de l’ancien build :

    Nom : 2.png
Affichages : 84
Taille : 15,6 Ko

    Les résultats du build d’aujourd’hui :

    Nom : 3.png
Affichages : 78
Taille : 4,6 Ko

    (Note : j’ai juste changé le fichier A2.dll, donc ils ont les mêmes dépendances)

    Nom : 4.png
Affichages : 66
Taille : 11,7 Ko

    Voici une application que j'ai faite pour écouter ce que je reçois de l’appareil :

    Nom : 5.png
Affichages : 83
Taille : 23,4 Ko

    Au niveau du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    using System;
    using System.Collections.Generic;
    using System.IO.Ports;
    using System.Text;
     
    namespace ZTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
                SerialPort serialPort = new SerialPort();
     
                serialPort.PortName = "COM3"; // COM2 for USB/ COM3 for Bluetooth
                serialPort.BaudRate = 115200;
                serialPort.Parity = System.IO.Ports.Parity.None;
                serialPort.DataBits = 8;
                serialPort.StopBits = System.IO.Ports.StopBits.One;
                serialPort.WriteTimeout = 4000;
                serialPort.ReadTimeout = 5000;
                serialPort.Handshake = Handshake.None;
                serialPort.RtsEnable = true;
                serialPort.DtrEnable = false;
     
                serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
     
                serialPort.Open();
     
                bool haveQuit = false;
                while (!haveQuit)
                {
                    Console.WriteLine("Write an instruction !");
                    string write = Console.ReadLine().ToString();
                     System.Threading.Thread.Sleep(2000);
     
                    serialPort.Write(write + "\r\n");
                    // serialPort.WriteLine(write);
     
                     System.Threading.Thread.Sleep(2000);
                   // Console.WriteLine("You received :" + serialPort.ReadExisting().ToString());
     
                    Console.WriteLine("You wrote " + write + "\n");
                    Console.WriteLine("DSR is ready? : " + serialPort.DsrHolding + "\n");
                    Console.WriteLine("CTS is ready? : " + serialPort.CtsHolding + "\n");
     
     
     
                    if (write == "q")
                    {
                        haveQuit = true;
                    }
                }
     
                serialPort.Close();
            }
     
            private static void DataReceivedHandler(
                        object sender,
                        SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
     
                string indata = sp.ReadExisting();
                Console.WriteLine("Data Received:");
                Console.Write(indata);
            }
        }
    }
    La connexion entre l’appareil et l'ordinateur fonctionne bien puisqu'on arrive à faire un lien avec. Puis on fait un write("i" + "\r\n") pour envoyer une commande à l’appareil et récupérer les informations d'identité de la machine (L=XLOGXXX V=015 C=1234 S=0156189 E=00 ). Via le debug j’ai pu vérifier que l’envoie de donnée a bien été réalisé :

    Nom : 6.png
Affichages : 90
Taille : 31,5 Ko

    On peut vérifier toutes les données reçus via la fonction d’écoute DataReceivedHandler.

    Cependant en débuguant, j'ai remarqué que l’appareil ne renvoie pas de données ou du moins juste une seule avec 2 minutes d'intervalle à chaque fois et sans avoir à écrire à la machine : K E=00. Cette donnée est envoyée pour que la machine ne s’endorme pas mais elle prouve aussi qu’on reçoit bien les données.
    Il n'y a pas de message d'erreur donc impossible de tracer le problème à part juste le renvoie de donnée de la machine qui est vide.
    La LED bleue qui indique quand une communication avec l'ordinateur distant est en cours clignote à une seconde d'intervalle, ce qui indique bien la connexion entre les deux machines.

    Les différences que j’ai pu tester sans résultat :
    • J’ai changé la date pour me mettre en 2020 et compiler
    • J’ai créé une VM datant de 2018 puis j’ai compilé
    • Testé sur plusieurs autres appareils
    • Testé sur plusieurs machines différentes
    • Configuré différemment le serialport dans le code


    En complément j’ai pu tester avec Teraterm les liaisons Bluetooth et USB en même temps :

    Test 1.1 :

    Teraterm est connecté via le port COM2 USB et attends les données.
    Mon application est connecté via le port COM3 Bluetooth et envoie l’instruction « i » mais ne fonctionne pas.

    Nom : test1.PNG
Affichages : 74
Taille : 33,7 Ko

    Test 1.2 :

    Teraterm est connecté via le port COM2 USB et envoie l’instruction « i ».
    Mon application est connecté via le port COM3 Bluetooth et reçois bien les données !

    Nom : test2.PNG
Affichages : 97
Taille : 51,2 Ko

    Test 2.1 :

    Teraterm est connecté via le port COM3 Bluetooth attends les données et reçois bien
    Mon application est connecté via le port COM2 USB envoie l’instruction « i » et reçois bien les données !

    Nom : test2.1.PNG
Affichages : 72
Taille : 43,4 Ko

    Test 2.2 :

    Teraterm est connecté via le port COM3 Bluetooth envoie l’instruction « t »
    Mon application est connecté via le port COM2 USB et reçois bien les données !

    Nom : test2.2.PNG
Affichages : 74
Taille : 44,1 Ko

    On peut donc affirmer que le problème se déroule lors de l’envoie de données en Bluetooth (Test 1.1).
    Cette méthode est censé être très simple avec rien à configurer puisque c’est sensé fonctionné identiquement à la méthode en USB c’est ce qu’à confirmer le fabricant de l’appareil.

    Avez-vous une idée pour régler ou contourner ce problème ?
    En vous souhaitant une bonne journée,
    Bien Cordialement,

    Akane

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Résolution du problème
    Merci à Dreamer1507 https://www.developpez.net/forums/d2...hariot-csharp/ pour m'avoir aidé à résoudre le problème

    Le problème était lié au retour chariot. Bizarrement ça fonctionnait avant sans avoir à utiliser ((char)13) pour faire le retour chariot. De plus ça fonctionnait avant et en USB .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/04/2009, 11h29
  2. [Conception] Deux codes identique mais un qui fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/08/2006, 17h25
  3. fonction ridicule qui fonctionne pas sous firefox
    Par Isses dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/06/2006, 12h08
  4. fonction plpgsql qui fonctionne pas...
    Par Empty_body dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/01/2006, 18h22
  5. [Applet+Threads] Pause et resume qui fonctionne pas
    Par MinsK dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 29/11/2005, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo