Jak se mohu připojit a odeslat data na sériový port bluetooth v systému Linux?

Pokouším se nastavit virtuální sériový port prostřednictvím adaptéru USB-Bluetooth v systému Linux a odeslat mu zprávu prostřednictvím zařízení Android. Jsem na jádře 3.6. Jsem schopen úspěšně spárovat zařízení pomocí gnome-bluetooth a také do něj odesílat soubory.

Chcete-li nastavit sériový port, nejprve přidám do adaptéru kanál s profilem SP:

sdptool add --channel=22 SP 

Pak zavolám „poslouchat“ pomocí rfcomm:

rfcomm listen /dev/rfcomm0 22 

který blokuje

Waiting for connection on channel 22 

Zdá se, že rfcomm po úspěšném připojení vytvoří / dev / rfcomm0. Jakmile k tomu dojde, rád bych k odesílání zpráv tam a zpět používal něco jako roztomilýcom k připojenému zařízení.

Na svém zařízení Android otevírám terminál Bluetooth SPP (je jich několik, vyzkoušel jsem několik různých) a pokusím se připojit. Všichni selžou.

Vzhledem k tomu, že mohu úspěšně spárovat a odesílat soubory bez jakýchkoli problémů, vím, že párování a komunikace bluetooth funguje.

Nejsem si příliš jistý, co jiného mohu zkusit. Použil jsem „sdptool browse“ na mém lokálním zařízení a zařízení Android, aby se zajistilo, že nedojde ke konfliktům kanálů RFCOMM.

Komentáře

odpověď

Zdá se, že to teď funguje. Bluetooth vypadá trochu vybíravě. Zrekapituluji své kroky v plném rozsahu pro případ, že by to někdo jiný považoval za užitečné (i když je to skoro to, co jsem původně zkoušel). Toto je pro Android JB (4.2.2) na Nexus 4 a Arch Linux 3.6.7-1, s bluez 4.101 na Gnome 3.6 (w / gnome-bluetooth).

(tento krok nemusí být užitečný) Vypněte Bluetooth na Androidu a odpojte USB / Bluetooth adaptér od vašeho Stroj se systémem Linux (nebo pokud jej máte zabudovaný, resetujte jej pomocí resetování názvu hcitool)

Připojte / zapněte adaptér Bluetooth v systému Linux. Zkontrolujte, zda je adaptér viditelný (lze nastavit v gnome-bluetooth – – měla by se zobrazit ikona systému Bluetooth na hlavním panelu).

Zapněte Bluetooth na zařízení Android. Spárujte pomocí adaptéru Android (z Linuxu se mi nepodařilo párovat opačně). Zobrazí se dialogové okno přijít s žádostí o klíč. Vložte libovolný PIN, který chcete. Gnome by měl vyskakovat oznámení s žádostí o klíč; vložte stejný PIN, který jste zadali dříve. Vaše zařízení Android a klíč by měly být v tomto okamžiku spárovány.

V systému Linux otevřete terminál a zkontrolujte dostupné služby Bluetooth zadáním

sdptool browse local 

Pokud již máte službu sériového portu, vytvořte všimněte si, o jaký kanál jde. Pokud tak neučiníte, můžete službu přidat:

sdptool add --channel=22 SP 

Nyní poslouchejte na tomto kanálu pomocí rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

rfcomm zablokuje, poslouchá spojení se zprávou jako

Waiting for connection on channel 22 

Zpět na Android jsem použil aplikaci BlueTerm ( http://pymasde.es/blueterm/ , který je také volně k dispozici v obchodě Google Play), ale jakákoli podobná aplikace by měla fungovat. Otevřete BlueTerm, přejděte na možnosti> Připojit zařízení: vyberte spárovaný adaptér.

Doufejme, že se aplikace dokázala připojit. Další ověření uvidíte v terminálu, kde jste zablokovali poslech se zprávou jako:

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

Cokoli, co zadáte do aplikace BlueTerm, by mělo jít do / dev / rfcomm0. Během psaní můžete vidět věci, které se zobrazují, když otevřete nový terminál a uděláte něco jako:

cat /dev/rfcomm0 

Komentáře

Odpověď

Níže uvedené kroky pro mě fungovaly:

Nejprve musíte zařízení spárovat. Párování je relativně snadné. Zavolám klientovi (který začne mluvit) a serveru (kdo odpoví).

Musíte server nastavit dříve: Strana serveru (jako root):

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

Strana klienta (jako root):

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

Nyní otevřete sériový terminál na klientovi:

screen /dev/rfcomm0 115200 

Komentáře:

Když zavoláte poslední příkaz rfcomm connect … v klientovi, zařízení /dev/rfcomm0 bude být vytvořeny a přidruženy k serveru /dev/recomm0. Toto představuje sériové spojení mezi oběma

Poslední příkaz serveru: rfcomm watch …. bude „poslouchat“ příchozí připojení. Pokud dojde ke ztrátě připojení, příkaz restartuje nový stav „poslouchat“.

Komentáře

  • Odpověď poskytnutá společností ismaia vás téměř dostane.Je třeba si uvědomit, že novější bluezový zásobník vyžaduje speciální možnost --compat, jinak může přidání SP selhat. Viz zde . Upravte tedy / upravte své spouštěcí skripty systemd / initd tak, aby tam byl --compat.

Odpovědět

Vyřešil jsem to s mírnou obměnou příkazů Pris. Dejte jim šanci, pokud má někdo stále problémy s vytvořením rfcomm spojení.

sudo service bluetooth restart 

Toto ^ zajišťuje, že začínáte s čistým štítem pokaždé, když se pokusíte nastavit připojení.

rfcomm add --channel=<a_channel_#> SP 

Toto číslo kanálu by mělo být jiný než jakýkoli aktuálně přiřazený kanál.

(VOLITELNÉ) Kontrola kanálů:

sdptool browse local | grep Channel 

Nejsem si jistý, proč je tento další příkaz potřeba, ale fungovalo to pro mě.

rfcomm release 0 

Potom poslouchat příchozí spojení:

rfcomm watch 0 <a_channel_#> 

POZNÁMKA: MAC adresa bt v /etc/bluetooth/rfcomm.conf, ale buďte MAC vašeho telefonu. Také kanál v tomto souboru musí být stejný jako kanál vybraný pro a_channel_ #.

Jakmile jsem to všechno udělal, používám emulátor terminálu da bt v telefonu, abych to všechno zkontroloval.

odpověď

Zkoušel jsem různé nástroje bluetooth a bylo to těžké najít správnou posloupnost příkazů pro připojení a výměnu dat s modulem bluetooth. Zkuste použít rfcomm a minicom:

Toto je můj /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."; } 

Vyhledat zařízení Bluetooth:

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

Bind using rfcomm

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

NB: bind 0 odkazuje na číslo zařízení 0 (rfcomm0 ) a 1 je kanál.

Poté použijte minicom s sudo a uložte konfiguraci, ve které určíte přenosovou rychlost a port. Další informace naleznete zde .

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *