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
- for de som lurer på hvorfor alt nedenfor svarer ikke ‘ t arbeid: med BlueZ > = 5 trenger du kompatibilitetsmodus, se her: raspberrypi.stackexchange.com/questions/41776/…
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
- Godt svar. Jeg fikk det til å fungere med Ubuntu 16 / Bluez 5 og denne informasjonen: bbs.archlinux.org/viewtopic.php?id=201672 .
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 .