Hoe maak ik verbinding met en stuur ik gegevens naar een Bluetooth-seriële poort op Linux?

Ik “probeer een virtuele seriële poort in te stellen via een USB-Bluetooth-adapter op Linux en stuur er een bericht naar via een Android-apparaat. Ik” m op kernel 3.6. Ik kan het apparaat met succes koppelen met gnome-bluetooth en er ook bestanden naartoe sturen.

Om de seriële poort in te stellen, voeg ik eerst een kanaal met een SP-profiel toe aan mijn adapter:

sdptool add --channel=22 SP 

Dan roep ik “listen” met rfcomm:

rfcomm listen /dev/rfcomm0 22 

welke blokkeert op

Waiting for connection on channel 22 

Blijkbaar zal rfcomm / dev / rfcomm0 creëren na een succesvolle verbinding. Zodra dat gebeurt, zou ik “graag zoiets als cutecom gebruiken om berichten heen en weer te sturen naar het aangesloten apparaat.

Op mijn Android-apparaat open ik een Bluetooth SPP-terminal (er zijn er verschillende, ik heb er een paar geprobeerd) en probeer verbinding te maken. Ze falen allemaal.

Aangezien ik met succes kan koppelen en bestanden zonder problemen kan verzenden, weet ik dat Bluetooth-koppeling en -communicatie werkt.

Ik “weet niet zeker wat ik nog meer kan proberen. Ik gebruikte “sdptool browse” op mijn lokale apparaat en het Android-apparaat om ervoor te zorgen dat er geen “RFCOMM-kanaalconflicten zijn.

Opmerkingen

Antwoord

Het lijkt erop dat dit nu werkt. Bluetooth lijkt een beetje kieskeurig. Ik vat mijn stappen volledig samen voor het geval iemand anders het nuttig vindt (hoewel ik het aanvankelijk zo ongeveer heb geprobeerd). Dit is voor Android JB (4.2.2) op een Nexus 4 en Arch Linux 3.6.7-1, met bluez 4.101 op Gnome 3.6 (met gnome-bluetooth).

(deze stap doet mogelijk niets nuttigs) Schakel Bluetooth op Android uit en koppel je USB / Bluetooth-adapter los van je Linux-machine (of als je een ingebouwde hebt, reset deze dan met hcitool devname reset)

Verbind / zet je bluetooth-adapter aan op Linux. Zorg ervoor dat je adapter zichtbaar is (kan worden ingesteld in gnome-bluetooth – – je zou een bluetooth-pictogram in het systeemvak moeten zien.

Schakel bluetooth in op je Android-apparaat. Gebruik Android om te koppelen met de adapter (ik kon niet andersom koppelen vanuit Linux). Er verschijnt een dialoogvenster komt naar voren en vraagt je om een sleutel. Voer elke gewenste pincode in. Gnome zou een melding moeten laten verschijnen waarin je om een sleutel wordt gevraagd. Voer dezelfde pincode in die je eerder hebt ingevoerd. Je Android-apparaat en de sleutel moeten nu worden gekoppeld.

Open in Linux een terminal en controleer welke bluetooth-services beschikbaar zijn door in te typen

sdptool browse local 

Als je al een seriële poort-service hebt, maak dan een noteer welk kanaal het is. Als je dat niet doet, kun je de service toevoegen:

sdptool add --channel=22 SP 

Luister nu op dit kanaal met rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

rfcomm zal blokkeren, luisterend naar een verbinding met een bericht als

Waiting for connection on channel 22 

Terug op Android gebruikte ik de BlueTerm-applicatie ( http://pymasde.es/blueterm/ , ook gratis verkrijgbaar in de Google Play Store) hoewel een vergelijkbare applicatie zou moeten werken. Open BlueTerm, ga naar options> Connect Device: selecteer de gekoppelde adapter.

Hopelijk heeft de applicatie verbinding kunnen maken. Je zult extra verificatie zien in de terminal waar je het luisteren blokkeerde met een bericht als:

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

Alles wat u in de BlueTerm-app typt, zou naar / dev / rfcomm0 moeten gaan. Je kunt dingen zien verschijnen terwijl je typt door een nieuwe terminal te openen en zoiets te doen als:

cat /dev/rfcomm0 

Reacties

Antwoord

De onderstaande stappen werkten voor mij:

Eerst moet je de apparaten koppelen. Koppelen is relatief eenvoudig. Ik zal de cliënt (die begint te praten) en de server (die antwoordt) bellen.

Je moet de server eerder instellen: Serverzijde (als root):

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

Clientzijde (als root):

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

Nu om een seriële terminal op de client te openen:

screen /dev/rfcomm0 115200 

Opmerkingen:

Wanneer u het laatste commando rfcomm connect … oproept in de client, zal een apparaat /dev/rfcomm0 worden gemaakt en gekoppeld aan de server /dev/recomm0. Dit vertegenwoordigt de seriële verbinding tussen beide.

Het laatste servercommando: rfcomm watch …. zal “luisteren” naar inkomende verbindingen. Als de verbinding verbroken is, herstart het commando een nieuwe “luister” -status.

Reacties

  • Antwoord gegeven door ismaia brengt je daar bijna.U moet echter onthouden dat de nieuwere bluez-stack de speciale --compat -optie nodig heeft, anders kan het toevoegen van een SP mislukken. Zie hier . Dus pas / wijzig je systemd / initd opstartscripts zodat --compat er is.

Antwoord

Ik heb dit opgelost met een kleine variatie op de commandos van Pris. Probeer deze eens als iemand nog steeds problemen heeft met het opzetten van een rfcomm-verbinding.

sudo service bluetooth restart 

Dit ^ zorgt ervoor dat u elke keer dat u probeert een verbinding tot stand te brengen met een schone lei begint.

rfcomm add --channel=<a_channel_#> SP 

Dit kanaalnummer moet anders dan elk kanaal dat momenteel is toegewezen.

(OPTIONEEL) Om kanalen te controleren:

sdptool browse local | grep Channel 

Ik weet niet zeker waarom dit volgende commando is nodig, maar het werkte voor mij.

rfcomm release 0 

Om vervolgens te luisteren naar binnenkomende verbindingen:

rfcomm watch 0 <a_channel_#> 

OPMERKING: het bt MAC-adres in /etc/bluetooth/rfcomm.conf maar moet de bt-MAC van je telefoon zijn. Ook moet het kanaal in dit bestand hetzelfde zijn als het kanaal dat is gekozen voor a_channel_ #.

Zodra ik dit allemaal heb gedaan, gebruik ik da bt terminal-emulator op mijn telefoon om alles te controleren.

Antwoord

Ik heb verschillende bluetooth-tools geprobeerd en het was moeilijk om de juiste reeks opdrachten te vinden om verbinding te maken en gegevens uit te wisselen met een bluetooth-module. Probeer rfcomm en minicom te gebruiken:

Dit is mijn /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."; } 

Scan naar bluetooth-apparaten:

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

Binden met rfcomm

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

NB: bind 0 verwijst naar apparaatnummer 0 (rfcomm0 ) en 1 is het kanaal.

Gebruik dan minicom met sudo en sla een configuratie op waarin je de baudrate en de poort specificeert. U kunt hier meer informatie vinden.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *