¿Cómo conecto un terminal serie sin procesar a una conexión Bluetooth?

10

Estoy tratando de conectarme a una estación total que no ofrece controladores bluetooth. Como estoy haciendo esto por razones puramente diagnósticas, me gustaría ver la salida sin formato de la conexión en serie establecida.

¿Qué debo hacer para canalizar toda la salida de una conexión bluetooth a un terminal?

Brian Ballsun-Stanton
fuente
¿Estás haciendo Bluetooth-> Serie, Serie-> Bluetooth o bidireccional?
nanofarad el
Totalstation Bluetooth <-> Ubuntu Bluetooth. Dado que la estación total tiene la configuración en serie estándar a través de USB, sospecho que está estableciendo una conexión en serie a través de Bluetooth. Por supuesto, podría estar completamente equivocado, en ese momento la respuesta de que estoy equivocado y el bluetooth usa XYZ es completamente permisible.
Brian Ballsun-Stanton
En términos de la prueba bidireccional, he logrado establecer una conexión serial en blanco a través de "pantalla" que causa un pitido de error en el dispositivo cuando presiono una tecla en el teclado. Así que sospecho que estoy a mitad de camino, simplemente no sé qué mitad.
Brian Ballsun-Stanton
¿Puedes dibujar un diagrama rápido? No puedo entender si es en serie o bluetooth en serie, así como quién está pasando los datos a dónde. Simplemente hazlo en GIMP o algo así y súbelo aquí
nanofarad
Funciona muy bien, pero me encuentro con algunos problemas técnicos con RFCOMM. Cuando me conecto con SCREEN, algunas secuencias AT se escriben automáticamente "ATE1 E0" <RETURN> tres veces. Debido a eso, aparece un mensaje "Error de inicio de sesión" en el lado de Raspi. Después de eso, puedo iniciar sesión con éxito y usar la sesión de terminal sin más problemas técnicos.
Cody

Respuestas:

5

Como una adición a la respuesta de Brian. La pantalla no funcionó para mí, mostrando inmediatamente[screen is terminating]

Así que encontré este script de Python miniterm . El uso es similar:

sudo miniterm.py /dev/rfcomm0
Aleksander Belov
fuente
12

1) Use hcitool scanpara encontrar la dirección Mac del dispositivo.

El dispositivo debe configurarse en modo esclavo con un pin conocido. Si no usa un pin conocido, ubuntu lo inventa y generalmente no tendrá tiempo para ingresarlo en los menús torpes de su herramienta de medición.

2) No estoy completamente seguro de que esto sea necesario, pero en el menú de la interfaz gráfica de Bluetooth, empareje el dispositivo.

3) en /etc/bluetooth/rfcomm.conf

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

El "enlace no" es importante, de lo contrario, intentará unirse automáticamente, lo que presenta todo tipo de problemas para acceder realmente al dispositivo (ya que es bastante exigente cuando está asociado)

4) sudo rfcomm connect 0

Si tiene errores, reinicie el servicio bluetooth.

5) screen /dev/rfcomm0

Para los comandos seriales reales transmitidos de esta manera, comuníquese con su proveedor y rogue.

Brian Ballsun-Stanton
fuente
3
Obtengo "Falta parámetro de desarrollo" cuando intento ejecutar "rfcomm connect 0"
someonewithpc
¿Editó su archivo conf correctamente?
Brian Ballsun-Stanton
55
Prueba sudo rfcomm connect rfcomm0 00: 07: 80: 44: 4F: 37
elopio el
@elopia oneliner muy simple. Funcionó para mí
ptetteh227
10

Aquí está mi manera de proceder para conectarme a un dispositivo Bluetooth HC-05 conectado a mi arduino. No necesita escribir un archivo como en la respuesta de Brian, pero la idea es similar. Lo probé con una configuración de velocidad en baudios de 9600 en el dispositivo HC-05.

Primer paso: emparejar el dispositivo y proporcionar el PIN

Traté de configurar desde la GUI el emparejamiento, pero no estaba funcionando. Aquí está la forma de proceder de la línea de comando que funcionó para mí. Primero, emparejemos el dispositivo desde la línea de comandos. Correr :

sudo bluetoothctl

Asegúrese de que se inicie el dispositivo bluetooth:

# power on

Ahora iniciamos el agente que "recordará el pin" para rfcomm:

# agent on

Ahora habilitamos el modo de escaneo para encontrar nuestro dispositivo y poder emparejarlo:

# scan on

Después de unos segundos, debería aparecer el MAC de su dispositivo. Lo denotaremos como después. Luego, solo necesita emparejar el dispositivo de esta manera:

# pair <MAC>

Se le pedirá que escriba un PIN, de manera predeterminada está 1234en mi dispositivo HC-05. Puede observar que es posible que su dispositivo se conecte y luego se desconecte con un mensaje como ese:

[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

Pero no es un problema. No necesita conectarse, por lo que ahora puede salir bluetoothctlescribiendo Ctrl + D.

Proporcionar un archivo utilizable /dev/rfcomm0

En primer lugar, asegúrese de no haber ejecutado ningún comando rfcomm antes. De hecho, incluso si cierra con Ctrl+Cel programa, todavía se ejecuta en segundo plano.

sudo killall rfcomm

Ahora puedes correr

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

Tenga en cuenta que si intenta escribir en la entrada de rfcom, no pasó nada. Necesitas usar otro programa.

Tercer y último paso: escriba en el /dev/rfcomm0

Hay varias formas de escribir en el archivo, pero tenga en cuenta que todas las formas de proceder implican la raíz. Describo aquí varios programas que pueden hacer eso (para que pueda elegir dependiendo de su necesidad o de lo que esté instalado en su sistema, por ejemplo). Si olvida ejecutar el programa como root, puede tener un error:

stty: /dev/rfcomm0: Device or resource busy

Primera opción: conectarse usando screen

La pantalla es una herramienta muy poderosa. Puede instalarlo (siempre es útil) usando:

sudo apt-get install screen

y luego correr

sudo screen /dev/rfcomm0

Si olvida ejecutarlo como root, recibirá un error como Aleksander obtuvo:

[screen is terminating]

Para salir, escriba "(CTRL + A) +: salir"

Segunda opción: conectarse usando minicom

Instalarlo

sudo apt-get install minicom

y luego correr

sudo minicom -D /dev/rfcomm0

Si olvida ejecutarlo como root, tendrá un error como

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

Para salir, escriba "Ctrl + A X".

Tercera opción: miniterm de script de Python

Descargue este script y ejecute:

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

Escribir directamente en el archivo

Primero ejecute el siguiente comando (9600 es la velocidad en baudios):

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

Ahora puede escribir en este archivo como en un archivo clásico:

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

y, en teoría, lee de ella usando

sudo tail -f /dev/rfcomm0

Pero no sé leer no funciona, si alguno de ustedes tiene una idea ...

tobiasBora
fuente
/def/rfcomm0debería ser/dev/rfcomm0
stewSquared