Comment puis-je me connecter et envoyer des données à un port série Bluetooth sous Linux?

Jessaie de configurer un port série virtuel via un adaptateur USB-Bluetooth sous Linux et de lui envoyer un message via un appareil Android. Je « m sur le noyau 3.6. Je « suis capable de coupler avec succès à lappareil en utilisant gnome-bluetooth et également capable de lui envoyer des fichiers.

Pour configurer le port série, jajoute dabord un canal avec un profil SP à mon adaptateur:

sdptool add --channel=22 SP 

Ensuite, jappelle « listen » avec rfcomm:

rfcomm listen /dev/rfcomm0 22 

qui bloque sur

Waiting for connection on channel 22 

Apparemment, rfcomm créera / dev / rfcomm0 lors dune connexion réussie. Une fois que cela se produira, jaimerais utiliser quelque chose comme cutecom pour envoyer des messages dans les deux sens sur lappareil connecté.

Sur mon appareil Android, jouvre un terminal Bluetooth SPP (il y en a plusieurs, jen ai essayé quelques-uns différents) et jessaye de me connecter. Ils échouent tous.

Étant donné que je peux coupler avec succès et envoyer des fichiers sans aucun problème, je sais que le couplage et la communication Bluetooth fonctionnent.

Je ne sais pas trop ce que je peux essayer. Jai utilisé « sdptool parcourir » sur mon appareil local et lappareil Android pour vous assurer quil ny a « aucun conflit de canaux RFCOMM.

Commentaires

Réponse

Il semble que cela fonctionne maintenant. Bluetooth semble un peu capricieux. Je récapitule mes étapes au cas où quelquun dautre le trouverait utile (bien que ce soit à peu près ce que jai essayé au départ). Ceci est pour Android JB (4.2.2) sur un Nexus 4 et Arch Linux 3.6.7-1, avec bluez 4.101 sur Gnome 3.6 (avec gnome-bluetooth).

(cette étape peut ne rien faire dutile) Désactivez Bluetooth sur Android et déconnectez votre adaptateur USB / Bluetooth de votre Machine Linux (ou si vous en avez une intégrée, réinitialisez-la en utilisant hcitool devname reset)

Connectez / allumez votre adaptateur bluetooth sous Linux. Assurez-vous que votre adaptateur est visible (peut être configuré dans gnome-bluetooth – – vous devriez voir une icône Bluetooth dans la barre détat système).

Activez le Bluetooth sur votre appareil Android. Utilisez Android pour coupler ladaptateur (je nai pas pu coupler linverse depuis Linux). Une boîte de dialogue saffiche vous demandez une clé. Entrez le NIP de votre choix. Gnome devrait afficher une notification vous demandant une clé; entrez le même NIP que vous avez entré précédemment. Votre appareil Android et la clé doivent être associés à ce stade.

Sous Linux, ouvrez un terminal et vérifiez quels services Bluetooth sont disponibles en saisissant

sdptool browse local 

Si vous avez déjà un service de port série, créez un notez de quel canal il sagit. Si vous ne le faites pas, vous pouvez ajouter le service:

sdptool add --channel=22 SP 

Maintenant, écoutez sur cette chaîne en utilisant rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

rfcomm va bloquer, en écoutant une connexion avec un message comme

Waiting for connection on channel 22 

De retour sur Android, jai utilisé lapplication BlueTerm ( http://pymasde.es/blueterm/ , également disponible gratuitement sur le Google Play Store) bien que toute application similaire devrait fonctionner. Ouvrez BlueTerm, accédez à options> Connecter lappareil: sélectionnez ladaptateur associé.

Jespère que lapplication a pu se connecter. Vous verrez une vérification supplémentaire dans le terminal où vous avez bloqué lécoute avec un message comme:

Waiting for connection on channel 22 Connection from 22:22:22:22:22:22 to /dev/rfcomm0 Press CTRL-C for hangup 

Tout ce que vous saisissez dans lapplication BlueTerm doit aller dans / dev / rfcomm0. Vous pouvez voir des éléments safficher au fur et à mesure que vous tapez en ouvrant un nouveau terminal et en faisant quelque chose comme:

cat /dev/rfcomm0 

Commentaires

Réponse

Les étapes ci-dessous ont fonctionné pour moi:

Premièrement, vous devez coupler les appareils. Le jumelage est relativement facile. Jappellerai le client (qui commence à parler) et le serveur (qui répond)

Vous devez configurer le serveur avant: Côté serveur (en tant que root):

sdptool add --channel=3 SP mknod -m 666 /dev/rfcomm0 c 216 0 rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 115200 linux 

Côté client (en tant que root):

sdptool add --channel=3 SP rfcomm connect /dev/rfcomm0 [SERVER_ADDR] 3 

Maintenant, pour ouvrir un terminal série sur le client:

screen /dev/rfcomm0 115200 

Commentaires:

Lorsque vous appelez la dernière commande rfcomm connect … dans le client, un appareil /dev/rfcomm0 être créé et associé au serveur /dev/recomm0. Ceci représente le lien série entre les deux

La dernière commande du serveur: rfcomm watch …. « écoutera » les connexions entrantes. En cas de connexion perdue, la commande redémarrera un nouvel état « écoute ».

Commentaires

  • La réponse fournie par ismaia vous y conduit presque.Vous devez cependant vous rappeler que la nouvelle pile bluez nécessite loption spéciale --compat, sinon lajout dun SP peut échouer. Voir ici . Alors ajustez / modifiez vos scripts de démarrage systemd / initd pour que --compat soit là.

Réponse

Jai résolu ce problème avec une légère variation des commandes de Pris. Essayez-les si quelquun a encore des problèmes pour configurer une connexion rfcomm.

sudo service bluetooth restart 

Ceci ^ garantit que vous commencez avec une table rase à chaque fois que vous essayez de configurer une connexion.

rfcomm add --channel=<a_channel_#> SP 

Ce numéro de canal doit être différent de tout autre canal actuellement attribué.

(FACULTATIF) Pour vérifier les canaux:

sdptool browse local | grep Channel 

Je ne sais pas pourquoi cette commande suivante est nécessaire, mais cela a fonctionné pour moi.

rfcomm release 0 

Ensuite, pour écouter les connexions entrantes:

rfcomm watch 0 <a_channel_#> 

REMARQUE: ladresse MAC bt dans /etc/bluetooth/rfcomm.conf mais être le bt MAC de votre téléphone. De plus, le canal de ce fichier doit être le même que celui choisi pour a_channel_ #.

Une fois que jai fait tout ça, jutilise un émulateur de terminal da bt sur mon téléphone pour tout vérifier.

Réponse

Jai essayé différents outils Bluetooth et cela a été difficile pour trouver la séquence correcte de commandes pour se connecter et échanger des données avec un module Bluetooth. Essayez dutiliser rfcomm et minicom:

Voici mon /etc/bluetooth/rfcomm.conf

rfcomm0 { # Automatically bind the device at startup bind no; # Bluetooth address of the device device 11:22:33:44:55:66; # RFCOMM channel for the connection channel 3; # Description of the connection comment "This is Device 1"s serial port."; } 

Recherche de périphériques Bluetooth:

hcitool scan Scanning ... 20:15:12:08:62:95 HC-06 

Lier en utilisant rfcomm

sudo rfcomm bind 0 20:15:12:08:62:95 1 

NB: bind 0 fait référence au numéro de périphérique 0 (rfcomm0 ) et 1 est le canal.

Ensuite, utilisez minicom avec sudo et enregistrez une configuration dans laquelle vous spécifiez le débit en bauds et le port. Vous pouvez trouver plus dinformations ici .

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *