Hvordan kobler jeg og sender data til en Bluetooth-seriell port på Linux?

Jeg prøver å sette opp en virtuell seriell port gjennom en USB-Bluetooth-adapter på Linux og sende en melding til den via en Android-enhet. Jeg «m på kjernen 3.6. Jeg kan parre enheten med hell ved hjelp av gnome-bluetooth og kan også sende filer til den.

For å sette opp den serielle porten legger jeg først til en kanal med en SP-profil til adapteren min:

sdptool add --channel=22 SP 

Så kaller jeg «lytt» med rfcomm:

rfcomm listen /dev/rfcomm0 22 

som blokkerer på

Waiting for connection on channel 22 

Tilsynelatende vil rfcomm opprette / dev / rfcomm0 etter en vellykket forbindelse. Når det skjer, vil jeg bruke noe som cutecom til å sende meldinger frem og tilbake til den tilkoblede enheten.

På Android-enheten min åpner jeg en Bluetooth SPP-terminal (det er flere der ute, jeg prøvde noen få forskjellige) og prøv å koble til. De feiler alle.

Gitt at jeg kan pare vellykket og sende filer uten problemer, vet jeg at Bluetooth-paring og kommunikasjon fungerer.

Jeg er ikke så sikker på hva mer jeg kan prøve. Jeg brukte «sdptool browse» på min lokale enhet og Android-enheten for å sikre at det ikke er noen RFCOMM-kanalkonflikter.

Kommentarer

Svar

Jeg ser ut til å ha fått dette til å fungere nå. Bluetooth virker litt kinkig. Jeg tar opp trinnene mine fullstendig hvis noen andre synes det er nyttig (skjønt det er ganske mye det jeg prøvde i utgangspunktet). Dette er for Android JB (4.2.2) på en Nexus 4 og Arch Linux 3.6.7-1, med bluez 4.101 på Gnome 3.6 (w / gnome-bluetooth).

(dette trinnet kan ikke gjøre noe nyttig) Slå Bluetooth av på Android og koble USB / Bluetooth-adapteren fra Linux-maskin (eller hvis du har en innebygd, tilbakestill den ved å tilbakestille hcitool devname)

Koble til / slå på Bluetooth-adapteren din på Linux. Sørg for at adapteren er synlig (kan angis i gnome-bluetooth – – du skulle se et ikon for Bluetooth-systemstatusfeltet.

Slå på Bluetooth på Android-enheten din. Bruk Android til å koble til adapteren (jeg klarte ikke å koble sammen omvendt fra Linux). En dialog vil kom opp og be deg om en nøkkel. Sett inn hvilken PIN-kode du vil. Gnome skal dukke opp et varsel der du blir bedt om en nøkkel. Sett inn den samme PIN-koden du angav tidligere. Android-enheten din og nøkkelen skal være paret på dette punktet.

I Linux åpner du en terminal og sjekker hvilke Bluetooth-tjenester som er tilgjengelige ved å skrive inn

sdptool browse local 

Hvis du allerede har en seriell porttjeneste, lag en merk deg hvilken kanal det er. Hvis du ikke gjør det, kan du legge til tjenesten:

sdptool add --channel=22 SP 

Hør nå på denne kanalen ved hjelp av rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

rfcomm vil blokkere, lytter etter en forbindelse med en melding som

Waiting for connection on channel 22 

Tilbake på Android brukte jeg BlueTerm-applikasjonen ( http://pymasde.es/blueterm/ , også tilgjengelig fritt i Google Play-butikken) men lignende applikasjoner skal fungere. Åpne BlueTerm, gå til valg> Koble til enhet: velg den sammenkoblede adapteren.

Forhåpentligvis klarte applikasjonen å koble til. Du vil se ytterligere bekreftelse i terminalen der du blokkerte lytting med en melding som:

id = «a679374d92»>

Alt du skriver inn i BlueTerm-appen skal gå til / dev / rfcomm0. Du kan se ting dukker opp mens du skriver ved å åpne en ny terminal og gjøre noe sånt som:

cat /dev/rfcomm0 

Kommentarer

Svar

Fremgangsmåten nedenfor fungerte for meg:

Først må du pare enhetene. Paring er relativt enkelt. Jeg vil ringe klient (som begynner å snakke) og server (som svarer)

Du må konfigurere serveren før: Serversiden (som root):

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

Client side (as root):

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

Nå for å åpne en seriell terminal på klienten:

screen /dev/rfcomm0 115200 

Kommentarer:

Når du ringer til den siste kommandoen rfcomm connect … i klienten, vil en enhet /dev/rfcomm0 opprettes og tilknyttes serveren /dev/recomm0. Dette representerer seriekoblingen mellom begge

Den siste serverkommandoen: rfcomm watch …. vil «lytte» etter innkommende tilkoblinger. I mistet forbindelse vil kommandoen starte en ny «lyttetilstand» på nytt.

Kommentarer

  • Svaret fra ismaia får deg nesten dit.Du må huske at den nyere bluez-stakken trenger det spesielle alternativet --compat, ellers kan det hende at mislykkes å legge til en SP. Se her . Så juster / endre systemd / initd oppstartsskript slik at --compat er der.

Svar

Jeg løste dette med en liten variasjon i Priss kommandoer. Gi disse et skudd hvis noen fremdeles har problemer med å opprette en rfcomm-forbindelse.

sudo service bluetooth restart 

Dette ^ sørger for at du begynner med en ren plate hver gang du prøver å sette opp en forbindelse.

rfcomm add --channel=<a_channel_#> SP 

Dette kanalnummeret skal være annerledes enn noen kanal som for øyeblikket er tildelt.

(VALGFRITT) For å sjekke kanaler:

sdptool browse local | grep Channel 

Jeg er ikke sikker på hvorfor denne neste kommandoen er trengte, men det fungerte for meg.

rfcomm release 0 

Så for å lytte etter innkommende tilkoblinger:

rfcomm watch 0 <a_channel_#> 

MERK: bt MAC-adressen i /etc/bluetooth/rfcomm.conf men vær telefonens bt MAC. Også kanalen i denne filen må være den samme som den som er valgt for a_channel_ #.

år jeg gjorde alt dette, bruker jeg da bt terminalemulator på telefonen min for å sjekke det hele.

Svar

Jeg har prøvd forskjellige Bluetooth-verktøy og det har vært vanskelig for å finne riktig rekkefølge av kommandoer for å koble til og utveksle data med en Bluetooth-modul. Prøv å bruke rfcomm og minicom:

Dette er min /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."; } 

Søk etter Bluetooth-enheter:

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

Bind med rfcomm

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

NB: bind 0 refererer til enhetsnummer 0 (rfcomm0 ) og 1 er kanalen.

Bruk deretter minicom med sudo og lagre en konfigurasjon der du angir baudrate og port. Du finner mer informasjon her .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *