Linux'taki bir bluetooth seri bağlantı noktasına nasıl bağlanır ve veri gönderirim?


30

Linux'ta bir USB-Bluetooth adaptörü olsa da bir sanal seri port kurmaya çalışıyorum ve bir Android cihaz aracılığıyla ona bir mesaj gönderiyorum. Ben çekirdekten 3.6. Gnome-bluetooth kullanarak başarılı bir şekilde cihaza eşleştirilebiliyor ve dosya gönderebiliyorum.

Seri bağlantı noktasını ayarlamak için önce adaptörüme SP profilli bir kanal eklerim:

sdptool add --channel=22 SP

Sonra rfcomm ile 'dinle' diyorum:

rfcomm listen /dev/rfcomm0 22

hangi bloklarda

Waiting for connection on channel 22

Görünüşe göre rfcomm / dev / rfcomm0 ile başarılı bir bağlantı kurulacak. Bu gerçekleştiğinde, bağlı cihaza ileri geri mesaj göndermek için cutecom gibi bir şey kullanmak istiyorum.

Android cihazımda bir Bluetooth SPP terminali açtım (orada birkaç tane var, birkaç tane daha denedim) ve bağlanmayı deneyin. Hepsi başarısız.

Başarıyla eşleştirip sorunsuz bir şekilde dosya gönderebildiğim için, bluetooth eşleşmesinin ve iletişimin işe yaradığını biliyorum.

Başka ne deneyebileceğimden emin değilim. Herhangi bir RFCOMM kanalı çakışması olmadığından emin olmak için yerel cihazımda ve Android cihazımda 'sdptool browse' kullandım.

Yanıtlar:


21

Bunu şimdi işe almış gibiyim. Bluetooth biraz titiz görünüyor. Başkası işe yarar buluyorsa (başlangıçta denediğim kadarıyla), adımlarımı tamamen geri alıyorum. Bu, Nexus 4 ve Arch Linux 3.6.7-1'deki Android JB (4.2.2) için, Gnome 3.6'da bluez 4.101 (w / gnome-bluetooth) ile ilgilidir.

(bu adım işe yarar bir şey yapmayabilir) Android'i Bluetooth'u kapatın ve USB / Bluetooth Adaptörünüzü Linux makinenizden çıkarın (veya yerleşik bir cihazınız varsa, hcitool devname reset kullanarak sıfırlayın)

Linux'ta bluetooth adaptörünüzü bağlayın / açın. Adaptörünüzün görünür olduğundan emin olun (gnome-bluetooth'da ayarlanabilir - bir bluetooth sistem tepsisi simgesi görmelisiniz).

Android cihazınızda bluetooth özelliğini açın. Bağdaştırıcıyla eşleştirmek için Android kullanın (Linux'ta başka bir yolla eşleştiremedim). Sizden bir anahtar isteyen bir iletişim kutusu açılacaktır. İstediğiniz PIN'i girin. Gnome sizden bir anahtar isteyen bir bildirim açmalıdır; Daha önce girdiğiniz aynı PIN’i girin. Android cihazınızla anahtarın bu noktada eşleştirilmesi gerekir.

Linux'ta bir terminal açın ve yazarak ne tür bluetooth servislerinin kullanılabilir olduğunu kontrol edin

sdptool browse local

Zaten bir seri bağlantı noktası servisiniz varsa, hangi kanalın olduğuna dikkat edin. Yapmazsanız, servisi ekleyebilirsiniz:

sdptool add --channel=22 SP

Şimdi rfcomm kullanarak bu kanalı dinle:

sudo rfcomm listen /dev/rfcomm0 22

rfcomm bloke edecek, gibi bir mesajla bağlantı dinleyerek

Waiting for connection on channel 22

Android'e döndüğümde , benzer bir uygulamanın çalışması gerektiğine rağmen BlueTerm uygulamasını ( http://pymasde.es/blueterm/ , ayrıca google oyun mağazasında serbestçe kullanılabilir) kullandım. BlueTerm'i açın, seçenekler> Cihaz Bağla'ya gidin: eşleştirilmiş adaptörü seçin.

Umarım, uygulama bağlamak başardı. Aşağıdaki gibi bir mesajla dinlemeyi engellediğiniz terminalde ek doğrulama göreceksiniz:

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

BlueTerm uygulamasına yazdığınız herhangi bir şey / dev / rfcomm0 konumuna gelmelidir. Yeni bir terminal açarak ve şöyle bir şey yaparak yazarken ortaya çıkan şeyleri görebilirsiniz:

cat /dev/rfcomm0


10

Aşağıdaki adımlar benim için çalıştı:

Öncelikle cihazları eşleştirmeniz gerekir. Eşleştirme nispeten kolaydır. İstemci (konuşmaya başlayanlar) ve sunucuyu (cevaplar) arayacağım

Sunucuyu daha önce kurmanız gerekir: Sunucu tarafı (kök olarak):

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

Müşteri tarafı (root olarak):

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

Şimdi istemcide bir seri terminal açmak için:

screen /dev/rfcomm0 115200

Yorumlar:

İstemcideki son rfcomm connect ... komutunu çağırdığınızda, bir cihaz /dev/rfcomm0oluşturulur ve sunucu ile ilişkilendirilir /dev/recomm0. Bu, ikisi arasındaki seri bağlantıyı temsil eder.

Son sunucu komutu: rfcomm watch.... gelen bağlantılar için 'dinleyecektir'. Bağlantı kaybedildiğinde, komut yeni bir 'dinle' durumunu yeniden başlatır.


1
Ismaia tarafından verilen cevap neredeyse oraya ulaştı. Yeni bluez yığınının özel --compatseçeneğe ihtiyacı olmasına rağmen, SP'nin eklenmesi başarısız olabileceğini unutmayın. Buraya bakınız . Bu yüzden sistemd / initd başlangıç ​​başlatma komut dosyalarınızı değiştirin / değiştirin --compat.
blacktofu 16:15

5

Bunu, Pris'in komutlarında ufak bir değişiklikle çözdüm. Biri rfcomm bağlantısı kurma konusunda hala sorun yaşıyorsa, bunlara bir şans verin.

sudo service bluetooth restart

Bu, her bağlantı kurmaya çalıştığınızda temiz bir sayfa ile başlamanızı sağlar.

rfcomm add --channel=<a_channel_#> SP

Bu kanal numarası, o anda atanmış olan herhangi bir kanaldan farklı olmalıdır.

(İSTEĞE BAĞLI) Kanalları kontrol etmek için:

sdptool browse local | grep Channel

Bir sonraki komutun neden gerekli olduğundan emin değilim, ama benim için çalıştı.

rfcomm release 0

Sonra gelen bağlantıları dinlemek için:

rfcomm watch 0 <a_channel_#>

NOT: /etc/bluetooth/rfcomm.conf adresindeki bt MAC adresi ancak telefonunuzun bt MAC'si olacaktır. Ayrıca bu dosyadaki kanal a_channel_ # için seçilen ile aynı olmalıdır.

Bütün bunları yaptıktan sonra, hepsini kontrol etmek için telefonumda bir bt terminal emülatörü kullandım.


0

Farklı bluetooth araçlarını denedim ve bir bluetooth modülüne bağlanmak ve veri alışverişi yapmak için doğru komut sırasını bulmak zor oldu. Rfcomm ve minicom'u kullanmayı deneyin:

Bu benim /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.";
}

Bluetooth cihazlarını tara:

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

Rfcomm kullanarak bağla

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

Not: bağlama 0, cihaz numarası 0'a (rfcomm0) atıfta bulunur ve 1 kanaldır.

Sonra sudo ile minicom kullanın ve içinde baudratı ve bağlantı noktasını belirlediğiniz bir yapılandırmayı kaydedin. Daha fazla bilgiyi burada bulabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.