Hur ansluter jag och skickar data till en Bluetooth-serieport på Linux?

Jag försöker ställa in en virtuell seriell port genom en USB-Bluetooth-adapter på Linux och skicka ett meddelande till den via en Android-enhet. Jag ”m på kärna 3.6. Jag kan para ihop enheten med framgång med gnome-bluetooth och även kunna skicka filer till den.

För att ställa in den seriella porten lägger jag först till en kanal med en SP-profil i min adapter:

sdptool add --channel=22 SP 

Sedan ringer jag ”lyssna” med rfcomm:

rfcomm listen /dev/rfcomm0 22 

som blockerar på

Waiting for connection on channel 22 

Tydligen skapar rfcomm / dev / rfcomm0 efter en lyckad anslutning. När det händer vill jag använda något som cutecom för att skicka meddelanden fram och tillbaka till den anslutna enheten.

På min Android-enhet öppnar jag en Bluetooth SPP-terminal (det finns flera där, jag försökte några olika) och försök ansluta. De misslyckas alla.

Med tanke på att jag kan para framgångsrikt och skicka filer utan problem vet jag att Bluetooth-parning och kommunikation fungerar.

Jag är inte så säker på vad jag kan försöka mer. Jag använde ”sdptool browse” på min lokala enhet och Android-enheten för att säkerställa att det inte finns några RFCOMM-kanalkonflikter.

Kommentarer

Svar

Jag verkar ha fått detta att fungera nu. Bluetooth verkar lite snyggt. Jag sammanfattar mina steg helt om någon annan tycker att det är användbart (men det är ganska mycket vad jag försökte initialt). Detta är för Android JB (4.2.2) på en Nexus 4 och Arch Linux 3.6.7-1, med bluez 4.101 på Gnome 3.6 (w / gnome-bluetooth).

(detta steg kanske inte gör något användbart) Stäng av Bluetooth på Android och koppla bort din USB / Bluetooth-adapter från din Linux-maskin (eller om du har en inbyggd en, återställ den med återställning av hcitool devname)

Anslut / slå på din Bluetooth-adapter på Linux. Se till att din adapter är synlig (kan ställas in i gnome-bluetooth – – du ska se en ikon för Bluetooth-systemfältet.

Slå på Bluetooth på din Android-enhet. Använd Android för att para ihop med adaptern (jag kunde inte para tvärtom från Linux). En dialogruta komma upp och be dig om en nyckel. Lägg in vilken PIN-kod du vill. Gnome ska dyka upp en avisering där du ber dig om en nyckel. Sätt i samma PIN-kod som du angav tidigare. Din Android-enhet och nyckeln ska vara ihop vid denna punkt.

I Linux öppnar du en terminal och kontrollerar vilka Bluetooth-tjänster som finns tillgängliga genom att skriva in

sdptool browse local 

Om du redan har en seriell porttjänst, gör en notera vilken kanal det är. Om du inte gör det kan du lägga till tjänsten:

sdptool add --channel=22 SP 

Lyssna nu på den här kanalen med rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

rfcomm kommer att blockera och lyssnar efter en anslutning med ett meddelande som

Waiting for connection on channel 22 

Tillbaka på Android använde jag BlueTerm-applikationen ( http://pymasde.es/blueterm/ , också tillgängligt fritt i Google Play Store) men alla liknande applikationer ska fungera. Öppna BlueTerm, gå till alternativ> Anslut enhet: välj den parade adaptern.

Förhoppningsvis kunde applikationen ansluta. Du kommer att se ytterligare verifiering i terminalen där du blockerade lyssnande med ett meddelande som:

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

Allt du skriver i BlueTerm-appen ska gå till / dev / rfcomm0. Du kan se saker visas när du skriver genom att öppna en ny terminal och göra något som:

cat /dev/rfcomm0 

Kommentarer

Svar

Stegen nedan fungerade för mig:

Först måste du para ihop enheterna. Parning är relativt enkelt. Jag kommer att ringa klient (som börjar prata) och server (som svarar)

Du måste ställa in servern innan: Serversidan (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 

Klientsida (som root):

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

Nu för att öppna en seriell terminal på klienten:

screen /dev/rfcomm0 115200 

Kommentarer:

När du ringer till det sista kommandot rfcomm connect … i klienten kommer en enhet /dev/rfcomm0 skapas och associeras till servern /dev/recomm0. Detta representerar den seriella länken mellan båda

Det senaste serverkommandot: rfcomm watch …. kommer att ”lyssna” efter inkommande anslutningar. I anslutning förlorad kommer kommandot att starta om ett nytt ”lyssna” -tillstånd.

Kommentarer

  • Svar från ismaia får dig nästan dit.Du måste dock komma ihåg att den nyare bluez-stacken behöver det speciella alternativet --compat, annars kan ett SP misslyckas. Se här . Så justera / ändra dina systemd / initd startskript så att --compat finns.

Svar

Jag löste detta med en liten variation till Priss kommandon. Ge dem ett skott om någon fortfarande har problem med att skapa en rfcomm-anslutning.

sudo service bluetooth restart 

Detta ^ säkerställer att du börjar med en ren skiva varje gång du försöker skapa en anslutning.

rfcomm add --channel=<a_channel_#> SP 

Detta kanalnummer ska vara annorlunda än någon kanal som för närvarande är tilldelad.

(VALFRITT) För att kontrollera kanaler:

sdptool browse local | grep Channel 

Jag är inte säker på varför det här kommandot är behövde, men det fungerade för mig.

rfcomm release 0 

Sedan lyssna efter inkommande anslutningar:

rfcomm watch 0 <a_channel_#> 

OBS: bt MAC-adressen i /etc/bluetooth/rfcomm.conf men var din telefons bt MAC. Även kanalen i den här filen måste vara densamma som den som valts för a_channel_ #.

När jag väl gjort allt detta använder jag da bt terminalemulator på min telefon för att kontrollera allt.

Svar

Jag har provat olika Bluetooth-verktyg och det har varit svårt för att hitta rätt sekvens av kommandon för att ansluta och utbyta data med en Bluetooth-modul. Försök använda rfcomm och minicom:

Detta är 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 efter Bluetooth-enheter:

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

Binda med rfcomm

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

OBS: bind 0 hänvisar till enhetsnummer 0 (rfcomm0 ) och 1 är kanalen.

Använd sedan minicom med sudo och spara en konfiguration där du anger baudrat och port. Du hittar mer information här .

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *