Comment connecter un terminal série brut à une connexion Bluetooth?

10

J'essaie de me connecter à une Totalstation qui n'offre pas de pilotes Bluetooth. Comme je le fais pour des raisons purement diagnostiques, j'aimerais voir la sortie brute de la connexion série établie.

Que dois-je faire pour diriger toutes les sorties d'une connexion Bluetooth vers un terminal?

Brian Ballsun-Stanton
la source
Utilisez-vous Bluetooth-> Série, Série-> Bluetooth ou bidirectionnel?
nanofarad
Totalstation Bluetooth <-> Ubuntu Bluetooth. Étant donné que la station totale a la configuration série standard via USB, je soupçonne qu'elle établit une connexion série via Bluetooth. Bien sûr, je peux me tromper complètement, à quel point la réponse que je me trompe et que le Bluetooth utilise XYZ est tout à fait admissible.
Brian Ballsun-Stanton
En termes de preuve bidirectionnelle, j'ai réussi à établir une connexion série vierge via "écran" qui provoque un bip d'erreur sur l'appareil lorsque j'appuie sur une touche du clavier. Je soupçonne donc que je suis à mi-chemin, je ne sais pas quelle moitié.
Brian Ballsun-Stanton
Pouvez-vous dresser un schéma rapide? Je ne peux pas comprendre si c'est série sur ou bluetooth sur série, ainsi que qui transmet les données à où. Faites-le simplement dans GIMP ou quelque chose et téléchargez-le ici
nanofarad
Fonctionne très bien mais je rencontre quelques problèmes avec RFCOMM. Lorsque je me connecte avec SCREEN, certaines séquences AT sont tapées automatiquement "ATE1 E0" <RETURN> trois fois. Pour cette raison, certains "Échec de la connexion" apparaissent du côté Raspi. Après cela, je peux me connecter avec succès et utiliser la session de terminal sans aucun problème supplémentaire.
Cody

Réponses:

5

En complément de la réponse de Brian. L'écran n'a pas fonctionné pour moi, affichant immédiatement[screen is terminating]

J'ai donc trouvé ce script python miniterm . L'utilisation est similaire:

sudo miniterm.py /dev/rfcomm0
Aleksander Belov
la source
12

1) Utilisez hcitool scanpour trouver l'adresse Mac de l'appareil.

L'appareil doit être réglé en mode esclave avec une broche connue. Si vous n'utilisez pas de broche connue, ubuntu en crée une et vous n'aurez généralement pas le temps de la saisir dans les menus maladroits de votre outil de mesure.

2) Je ne suis pas entièrement sûr que cela soit nécessaire, mais dans le menu bluetooth gui, associez l'appareil.

3) dans /etc/bluetooth/rfcomm.conf

rfcomm0 {
        bind no;
        device 00:07:80:44:4F:37;
        channel 1;
        comment "Serial Port";
        }

Le "bind no" est important, sinon il essaiera de se lier automatiquement, ce qui présente toutes sortes de problèmes pour accéder réellement à l'appareil (car il est assez difficile de savoir quand il est associé)

4) sudo rfcomm connect 0

Si vous avez des erreurs, redémarrez le service Bluetooth.

5) screen /dev/rfcomm0

Pour les commandes série réelles transmises de cette manière, contactez votre fournisseur et suppliez.

Brian Ballsun-Stanton
la source
3
J'obtiens un "paramètre de développement manquant" lorsque j'essaie d'exécuter "rfcomm connect 0"
quelqu'un avec
Avez-vous modifié correctement votre fichier conf?
Brian Ballsun-Stanton
5
Essayez sudo rfcomm connect rfcomm0 00: 07: 80: 44: 4F: 37
elopio
Oneliner @ elopia très simple. Cela a fonctionné pour moi
ptetteh227
10

Voici ma façon de procéder pour me connecter à un appareil Bluetooth HC-05 branché sur mon Arduino. Il n'a pas besoin d'écrire un fichier comme dans la réponse de Brian, mais l'idée est similaire. Je l'ai testé avec une configuration de débit en bauds 9600 sur l'appareil HC-05.

Première étape: associer l'appareil et fournir le code PIN

J'ai essayé de configurer l'association à partir de l'interface graphique, mais cela ne fonctionnait pas. Voici la façon de procéder en ligne de commande qui a fonctionné pour moi. Tout d'abord, jumelons l'appareil à partir de la ligne de commande. Courir :

sudo bluetoothctl

Assurez-vous que le périphérique Bluetooth est démarré:

# power on

Nous commençons maintenant l'agent qui "se souviendra de la broche" pour rfcomm:

# agent on

Maintenant, nous activons le mode de numérisation pour trouver notre appareil et pouvoir le coupler:

# scan on

Après quelques secondes, le MAC de votre appareil devrait apparaître. Nous le désignerons comme après. Ensuite, il vous suffit de coupler l'appareil comme ceci:

# pair <MAC>

Il vous sera demandé de taper un code PIN, par défaut, il est 1234sur mon appareil HC-05. Vous pouvez noter qu'il est possible que votre appareil se connecte puis se déconnecte avec un message comme celui-ci:

[CHG] Device 20:16:10:24:29:77 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 20:16:10:24:29:77 ServicesResolved: yes
[CHG] Device 20:16:10:24:29:77 Paired: yes
Pairing successful
[CHG] Device 20:16:10:24:29:77 ServicesResolved: no
[CHG] Device 20:16:10:24:29:77 Connected: no

mais ce n'est pas un problème. Vous n'avez pas besoin de vous connecter, vous pouvez donc quitter bluetoothctlen tapant Ctrl + D.

Fournir un fichier utilisable /dev/rfcomm0

Tout d'abord, assurez-vous que vous n'avez exécuté aucune commande rfcomm auparavant. En effet, même si vous fermez avec Ctrl+Cle programme, il fonctionne toujours en arrière-plan.

sudo killall rfcomm

Maintenant, vous pouvez exécuter

sudo rfcomm connect /dev/rfcomm0 20:16:10:24:29:77 1 &

Notez que si vous essayez d'écrire sur l'entrée de rfcom, rien ne s'est produit. Vous devez utiliser un autre programme.

Troisième et dernière étape: écrire dans le /dev/rfcomm0

Il existe plusieurs façons d'écrire sur le fichier, mais notez que toutes les façons de procéder impliquent root. Je décris ici plusieurs programmes qui peuvent le faire (pour que vous puissiez choisir en fonction de vos besoins ou de ce qui est installé sur votre système par exemple). Si vous oubliez d'exécuter le programme en tant que root, vous pouvez avoir une erreur:

stty: /dev/rfcomm0: Device or resource busy

Première option: se connecter en utilisant screen

L'écran est un outil très puissant. Vous pouvez l'installer (c'est toujours plus utile) en utilisant:

sudo apt-get install screen

puis exécutez

sudo screen /dev/rfcomm0

Si vous oubliez de l'exécuter en tant que root, vous obtiendrez une erreur comme Aleksander:

[screen is terminating]

Pour le quitter, tapez "(CTRL + A) +: quitter"

Deuxième option: se connecter en utilisant minicom

Installez-le

sudo apt-get install minicom

puis exécutez

sudo minicom -D /dev/rfcomm0

Si vous oubliez de l'exécuter en tant que root, vous aurez une erreur comme

minicom: cannot open /dev/rfcomm0: Device or resource busy

Pour le quitter, tapez "Ctrl + A X".

Troisième option: miniterm de script python

Téléchargez ce script et exécutez:

chmod +x miniterm.py
sudo ./miniterm.py /dev/rfcomm0

Écrivez directement dans le fichier

Exécutez d'abord la commande suivante (9600 est le débit en bauds):

sudo stty -F /dev/rfcomm0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts 

Vous pouvez maintenant écrire dans ce fichier comme dans un fichier classique:

sudo su -c "echo 'message' > /dev/rfcomm0"

et en théorie lire à partir de celui-ci en utilisant

sudo tail -f /dev/rfcomm0

Mais je ne sais pas lire ne fonctionne pas, si l'un d'entre vous a une idée ...

tobiasBora
la source
/def/rfcomm0devrait être/dev/rfcomm0
stewSquared