PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV Mobile 2024 → [WM21 - Android] Lecture Bluetooth
[WM21 - Android] Lecture Bluetooth
Iniciado por Cezame, jul., 06 2016 4:52 PM - 18 respostas
Publicado em julho, 06 2016 - 4:52 PM
Bonjour,

Je dois récupérer pour une application des données en provenance d'un périphérique bluetooth.

Cet équipement renvoie simplement une chaine de caractère.

Quelle est la méthode la plus simple?

D'avance merci pour votre aide

Cezame
Publicado em julho, 08 2016 - 4:31 PM
Bonjour,

Personne n'utilise d'équipement bluetooth?

Je dois simplement récupérer une chaine de caractère renvoyée par un équipement bluetooth (pas BTLE)

Cet équipement reçois des données par radio et les transmet en bluetooth.

Quelle serait selon vous la meilleure approche? Est ce que WM21 permet facilement de réaliser cette fonction?

D'avance merci

Cezame
Membro registado
474 mensagems
Popularité : +17 (19 votes)
Publicado em julho, 11 2016 - 8:01 AM
Bonjour,

http://doc.pcsoft.fr/fr-FR/?1000017173

Il y a des exemples.

--
Jean-Michel
Publicado em julho, 11 2016 - 9:32 AM
Bonjour,

Merci pour votre réponse.

J'ai bien regardé avant de poster la documentation PCSoft.

J'ai bien trouvé comment me connecter au périphérique Bluetooth sans problèmes.

Mais ensuite comment faire ma lecture des données envoyées par le périphérique?

Le périphérique envoie régulièrement une trame avec des données que je dois interpréter.

L'idéal serait une fonction lancée à chaque émission du périphérique.

Je n'ai pas trouvé de fonction PCSoft qui permette de lire simplement la trame renvoyée.

D'avance merci pour votre aide

Cezame
Membro registado
474 mensagems
Popularité : +17 (19 votes)
Publicado em julho, 11 2016 - 11:46 AM
Bonjour,

Tu as un exemple de transfert de fichier par BT dans la LST 91

--
Jean-Michel
Publicado em julho, 11 2016 - 1:21 PM
Bonjour,

Merci de ton aide, je n'ai pas la LST91. Mais je veux bien l'exemple pour voir si il n'existe pas une solution.

Le besoin n'est pas un transfert de fichier mais récupérer une trame envoyée régulièrement par le périphérique BT.

Le périphérique est simplement un convertisseur. Il recoit une information par radio (VHF) et la retransmet via BT.

Comment simplement lire cette trame?

Encore merci pour votre aide

Cyril
Publicado em julho, 11 2016 - 1:34 PM
Bonjour Cyril


Merci de ton aide, je n'ai pas la LST91. Mais je veux bien l'exemple
pour voir si il n'existe pas une solution.


C'est facile... tu vas sur le site de pcsoft et tu achète ce numéro...

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com
Publicado em julho, 11 2016 - 2:10 PM
Bonjour,

Merci pour ta réponse mais je ne pense pas que l'exemple réponde à mes besoins.

Il y a un exemple de transfert obex livré avec Windev Mobile.

La le besoin est juste de récupérer une trame envoyée par le périphérique.

Personne n'a une piste comment solutionner cela avec les fonctions WM?

Encore merci pour votre aide.

Cezame
Membro registado
474 mensagems
Popularité : +17 (19 votes)
Publicado em julho, 11 2016 - 3:43 PM
Bonjour,

C'est un truc de ce genre mais en WM que tu cherches ?
http://nononux.free.fr/index.php…

--
Jean-Michel
Publicado em julho, 11 2016 - 3:59 PM
Bonjour,

Merci de ton aide.

En effet cela y ressemble beaucoup.

Seule la partie réception m’intéresses

Pensez vous que cela est réalisable en wlanguage?

Encore merci

Cezame
Membro registado
474 mensagems
Popularité : +17 (19 votes)
Publicado em julho, 12 2016 - 9:17 AM
Bonjour,

Oui c'est réalisable. Cherche du côté de "socketlit" et des fonctions associées.

--
Jean-Michel
Publicado em julho, 12 2016 - 3:19 PM
Jean-Michel COUDERC a écrit :
Bonjour,

Oui c'est réalisable. Cherche du côté de "socketlit" et des fonctions associées.

--
Jean-Michel


Bonjour,

Merci pour ton aide.

Si j'ai bien compris il faut créer un socket avec le périphérique avec la fonction

// Création du socket Bluetooth en spécifiant un nom de service
SI SocketCréeBluetooth(gsNomSocketBT, "SerialPortServiceClass_UUID") = Faux ALORS
Erreur("Impossible de créer le socket Bluetooth", ErreurInfo(errComplet))
RETOUR
FIN


Problème je n'ai pas de service sur le périphérique.... ou alors je mets "1" dans le nom du service?


Ensuite j'utilise SocketLit pour lire les informations...

Comment lancer le socketlit uniquement quand le périphérique renvoie une donnée?

Cela évitera d'utiliser un timer.

D'avance merci

Cezame
Publicado em julho, 19 2016 - 7:13 PM
Bonjour,

J'ai un projet fort similaire au vôtre : je souhaite récupérer sur une tablette Android des données provenant d'un pc sous Windows 7 via Bluetooth.

J'ai effectué la même opération avec un microcontôleur Arduino équipé d'une carte bluetooth et cela fonctionne.
Code côté pc :
Ouverture du port COM
cmp est un entier = 26 // port COM
lc est un booléen = sOuvre(cmp, 2000, 2000,sTimeoutDéfaut,Vrai)
SI lc = Vrai ALORS
sFixeParamètre(cmp, 9600, 0, 8, 0,Faux,Faux,Vrai)
SINON
Erreur("Erreur d'ouverture de COM")
FIN
Envoi de la commande :
sEcrit(cmp,m)

Cependant la tablette Samsung sous Android n'offre pas de service Serial port.
Comment faire dans ce cas ?

Merci
Publicado em julho, 21 2016 - 7:25 PM
Bonjour,

Je n'arrive toujours pas à récupérer les données en provenance de mon périphérique bluetooth.

La liaison Bluetooth se fait par le profil Bluetooth SPP (Serial Port Profile), qui permet d'émuler une connexion série.

Le but est simplement de lire les données envoyées sur le port série à partir de ma tablette Android.

L'idéal étant que lorsqu'une trame arrive sur le port série cela lance une procédure qui traite la trame reçue (enregistrement de données dans un fichier Hyperfile)

J'arrive sans problème à visualiser le périphérique grâce au code suivant :

// Liste les périphériques Bluetooth
sChaîneTmp est une chaîne
sListePériphs est une chaîne
ToastAffiche("Détection Périphériques BT",toastCourt,cvHaut,chCentre)
// Liste les périphériques
Sablier(Vrai)
sListePériphs = BTListePériphérique(btListeSimple)
Sablier(Faux)

// Vide le champ Table où sont listés les périphériques
ZoneRépétéeSupprimeTout(ZR_Périphériques)
// Remplit le champ Table
SI sListePériphs <> "" ALORS
POUR TOUTE CHAINE sChaîneTmp DE sListePériphs SEPAREE PAR RC
SI Contient(sChaîneTmp,"BTMod") ALORS
ZoneRépétéeAjouteLigne(ZR_Périphériques, ExtraitChaîne(sChaîneTmp,3,TAB),ExtraitChaîne(sChaîneTmp,2,TAB))
FIN
FIN
SINON
Info(ErreurInfo(errComplet))
FIN



Ensuite j'ai imaginé utiliser un socket pour réaliser cette fonction avec le code suivant :

SI SocketConnecteBluetooth("Socket_BT", ZR_Périphériques.ATT_AdresseMac, "SerialPortServiceClass_UUID") = Faux ALORS
Erreur("Impossible de créer le socket Bluetooth", ErreurInfo(errComplet))
RETOUR
FIN


La fonction me renvoie une erreur " Adresse MAC incorrecte" alors que cette adresse est bien correcte.

J'ai lu sur la documentation ceci :

Sous Android, les sockets Bluetooth fonctionnent uniquement en mode simplifié. La connexion est établie au premier succès de la fonction SocketLit sur le serveur. Les fonctions SocketAttend, SocketAccepte et SocketRefuse ne sont pas disponibles pour les sockets Bluetooth.

J'ai essayé de ne pas tenir compte du message d'erreur et de lancer

SocketLit("Socket_BT",Vrai)


Et la j'ai un message d'erreur fatale m'indiquant que le socket "Socket_BT" n'existe pas...

Je ne sais pas quoi tester d'autre et me demande si ce que je veux réaliser qui me parait simple pourtant est faisable avec les fonctions WLanguage?

D'avance merci pour votre aide.

Cezame
Publicado em julho, 22 2016 - 1:50 PM
Bonjour,


La liaison Bluetooth se fait par le profil Bluetooth SPP (Serial Port
Profile), qui permet d'émuler une connexion série.


Si c'est vrai, logiquement, il suffit d'utiliser les fonctions sxxxx,
pas besoin de socket

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com
Publicado em julho, 22 2016 - 5:41 PM
Bonjour,

Merci Fabrice pour ta réponse.

Cependant les fonctions sxxxx n'existent pas sous Windev Mobile et Android ...

L'utilisation des sockets semble être la seule solution.

Sous windev bien sur ce serait plus simple avec les fonctions série.

Cezame
Publicado em julho, 23 2016 - 6:50 PM
Bonjour,

J'ai réussi à l'aide de la fonction SocketConnecteBluetooth à me connecter au service port série de l'appareil. En utilisant le code suivant

SI SocketConnecteBluetooth("Socket_BT", "SerialPortServiceClass_UUID" , ZR_Périphériques.ATT_AdresseMac) = Faux ALORS
Erreur("Impossible de créer le socket Bluetooth", ErreurInfo(errComplet))
RETOUR
SINON
//Lancer la scrutation du port série

FIN


Maintenant je souhaiterai scruter en permanence le port série pour récupérer les données envoyées par l'appareil comme je pourrais le faire sur pc avec les fonctions de gestion des ports série.

La fonction SocketLit semble être la solution, mais comment faire une lecture permanente et lancer une procédure à chaque réception sur le port série?

Utilisation d'un Thread?

Merci d'avance pour votre aide

Cezame
Membro registado
18 mensagems
Publicado em agosto, 19 2017 - 3:06 PM
Sous Windows il faut utiliser S ouvre avec le numéro de port Com attribué par windows un pour l’émission l'autre pour la réception des données.

Sous Android il faut utiliser la fonction SocketConnecteBluetooth après avoir récupéré l adresse mac du périph BT.

J utilise windev pour les loisirs et franchement je ne comprends pas que des pros n'arrivent pas à répondre a ce genre de questions.

Sur les forums Arduino la mentalité n'est pas la même .Les gens sont la pour essayer d'aider les autres.bien triste.
Publicado em outubro, 24 2017 - 11:57 AM
Bonjour,

Avez-vous réussi ?


J'arrive à faire connecter en bluetooth un smartphone android à un microcontroleur via une liaison bluettoth low energy.
Mais impossible de lire ou d'envoyer des données
Je vois bien grâce aux fonctions du micontroleur qu'il se connecte , mais il ne lit aucune donnée venant de l'android.

En fait impossible de faire fonctionner le SocketConnecteBluetooth à l'adresse mac pourtant récupérée par les BTLEconnecte et en passant en paramètre (l'un après l'autre) les 6 UUID également renvoyés par périphérique..Service[s]..UUI

J'ai essayé SocketCréeBluetooth, qui donne vrai comme résultat quel que soit l'UUID, mais comme le microcontroleur ne gère pas de socket, on ne peut logiquement pas échanger de données .

Y-at-il une autre alternative aux fonctions SocketConnecteBluetooth puis socketlit /socketecrit pour dialoguer sur une liaison série reposant sur une connexion bluetooth (low energy) établie ?

Merci de votre moindre piste car j'en ai plus.
Laurent