Hvordan tilslutter jeg og sender data til en bluetooth seriel port på Linux?

Jeg prøver at konfigurere en virtuel seriel port gennem en USB-Bluetooth-adapter på Linux og sende en besked til den via en Android-enhed. Jeg “m på kerne 3.6. Jeg kan parre med enheden med succes ved hjælp af gnome-bluetooth og også sende filer til den.

For at indstille den serielle port tilføjer jeg først en kanal med en SP-profil til min adapter:

sdptool add --channel=22 SP 

Så kalder jeg “lyt” med rfcomm:

rfcomm listen /dev/rfcomm0 22 

som blokerer på

Waiting for connection on channel 22 

Tilsyneladende vil rfcomm oprette / dev / rfcomm0 efter en vellykket forbindelse. Når det sker, vil jeg gerne bruge noget som cutecom til at sende meddelelser frem og tilbage til den tilsluttede enhed.

På min Android-enhed åbner jeg en Bluetooth SPP-terminal (der er flere derude, jeg prøvede et par forskellige) og prøv at oprette forbindelse. De fejler alle.

Da jeg kan parre med succes og sende filer uden problemer, ved jeg, at Bluetooth-parring og kommunikation fungerer.

Jeg er ikke alt for sikker på, hvad jeg ellers kan prøve. Jeg brugte “sdptool browse” på min lokale enhed og Android-enheden for at sikre, at der ikke er nogen RFCOMM-kanalkonflikter.

Kommentarer

Svar

Jeg ser ud til at have fået det til at fungere nu. Bluetooth virker lidt fin. Jeg gentager mine trin fuldt ud, hvis en anden finder det nyttigt (selvom det stort set er det, jeg oprindeligt prøvede). Dette er til 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 trin kan muligvis ikke gøre noget nyttigt) Slå Bluetooth til Android fra og frakobl din USB / Bluetooth-adapter fra din Linux-maskine (eller hvis du har en indbygget en, nulstil den ved hjælp af nulstilling af hcitool devname)

Tilslut / tænd din Bluetooth-adapter på Linux. Sørg for, at din adapter er synlig (kan indstilles i gnome-bluetooth – – du skulle se et blåt ikon på systembakken).

Tænd bluetooth på din Android-enhed. Brug Android til at parre med adapteren (jeg kunne ikke parre omvendt fra Linux). En dialog vises kom op og bede dig om en nøgle. Indsæt en hvilken som helst PIN-kode. Gnome skal pope op en meddelelse, der beder dig om en nøgle. Indsæt den samme PIN-kode, som du indtastede tidligere. Din Android-enhed og nøglen skal parres på dette tidspunkt.

I Linux skal du åbne en terminal og kontrollere, hvilke bluetooth-tjenester der er tilgængelige ved at indtaste

sdptool browse local 

Hvis du allerede har en seriel porttjeneste, lav en bemærk, hvilken kanal det er. Hvis du ikke gør det, kan du tilføje tjenesten:

sdptool add --channel=22 SP 

Lyt nu på denne kanal ved hjælp af rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

rfcomm vil blokere, lytte efter en forbindelse med en besked som

Waiting for connection on channel 22 

Tilbage på Android brugte jeg BlueTerm-applikationen ( http://pymasde.es/blueterm/ , også tilgængelig frit i Google Play Butik) selvom enhver lignende applikation skal fungere. Åbn BlueTerm, gå til valgmuligheder> Forbind enhed: vælg den parrede adapter.

Forhåbentlig var applikationen i stand til at oprette forbindelse. Du vil se yderligere verifikation i terminalen, hvor du blokerede lytning med en besked som:

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

Alt, hvad du skriver i BlueTerm-appen, skal gå til / dev / rfcomm0. Du kan se ting dukke op, når du skriver ved at åbne en ny terminal og gøre noget som:

cat /dev/rfcomm0 

Kommentarer

Svar

Trinene nedenfor virker for mig:

For det første skal du parre enhederne. Parring er relativt let. Jeg ringer til klient (der begynder at tale) og server (hvem svarer)

Du skal konfigurere serveren før: Serverside (som rod):

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

Klientside (som rod):

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

For at åbne en seriel terminal på klienten:

screen /dev/rfcomm0 115200 

Kommentarer:

Når du kalder den sidste kommando rfcomm connect … i klienten, vil en enhed /dev/rfcomm0 oprettes og tilknyttes serveren /dev/recomm0. Dette repræsenterer den serielle forbindelse mellem begge

Den sidste serverkommando: rfcomm watch …. vil “lytte” efter indgående forbindelser. I forbindelse med mistet forbindelse genstarter kommandoen en ny “lytttilstand”.

Kommentarer

  • Svar fra ismaia får dig næsten derhen.Du skal dog huske, at den nyere bluez-stak har brug for den specielle --compat -mulighed, ellers kan tilføjelse af en SP muligvis mislykkes. Se her . Så juster / rediger dine systemd / initd opstartsskripter, så --compat er der.

Svar

Jeg løste dette med en lille variation til Priss kommandoer. Giv disse et skud, hvis nogen stadig har problemer med at oprette en rfcomm-forbindelse.

sudo service bluetooth restart 

Dette ^ sikrer, at du starter med en ren skifer hver gang du prøver at oprette en forbindelse.

rfcomm add --channel=<a_channel_#> SP 

Dette kanalnummer skal være anderledes end enhver kanal, der aktuelt er tildelt.

(VALGFRIT) For at kontrollere kanaler:

sdptool browse local | grep Channel 

Jeg er ikke sikker på, hvorfor denne næste kommando er nødvendigt, men det fungerede for mig.

rfcomm release 0 

Så for at lytte efter indgående forbindelser:

rfcomm watch 0 <a_channel_#> 

BEMÆRK: bt MAC-adressen i /etc/bluetooth/rfcomm.conf, men vær din telefons bt MAC. Også kanalen i denne fil skal være den samme som den, der er valgt til a_channel_ #.

Når jeg gjorde alt dette, bruger jeg da bt terminalemulator på min telefon for at kontrollere det hele.

Svar

Jeg har prøvet forskellige Bluetooth-værktøjer, og det har været svært for at finde den korrekte rækkefølge af kommandoer til at oprette forbindelse og udveksle data med et Bluetooth-modul. Prøv at bruge 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."; } 

Scan efter bluetooth-enheder:

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

Bind ved hjælp af rfcomm

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

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

Brug derefter minicom med sudo, og gem en konfiguration, hvor du angiver baudrate og port. Du kan finde flere oplysninger her .

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *