Bagaimana cara saya menghubungkan dan mengirim data ke port serial bluetooth di Linux?

30

Saya mencoba mengatur port serial virtual melalui adaptor USB-Bluetooth di Linux dan mengirim pesan kepadanya melalui perangkat Android. Saya menggunakan kernel 3.6. Saya dapat memasangkan ke perangkat yang berhasil menggunakan gnome-bluetooth dan juga dapat mengirim file ke sana.

Untuk mengatur port serial, saya pertama-tama menambahkan saluran dengan profil SP ke adaptor saya:

sdptool add --channel=22 SP

Lalu saya memanggil 'dengarkan' dengan rfcomm:

rfcomm listen /dev/rfcomm0 22

yang menghalangi

Waiting for connection on channel 22

Rupanya rfcomm akan membuat / dev / rfcomm0 setelah koneksi berhasil. Setelah itu terjadi, saya ingin menggunakan sesuatu seperti cutecom untuk mengirim pesan bolak-balik ke perangkat yang terhubung.

Pada perangkat Android saya, saya membuka terminal Bluetooth SPP (ada beberapa di luar sana, saya mencoba beberapa yang berbeda) dan mencoba menghubungkan. Mereka semua gagal.

Karena saya dapat memasangkan dengan sukses dan mengirim file tanpa masalah, saya tahu bahwa pemasangan Bluetooth dan komunikasi berfungsi.

Saya tidak terlalu yakin apa lagi yang bisa saya coba. Saya menggunakan 'sdptool browse' pada perangkat lokal saya dan perangkat Android untuk memastikan bahwa tidak ada konflik saluran RFCOMM.

Pris
sumber

Jawaban:

21

Sepertinya saya sudah berhasil ini sekarang. Bluetooth sepertinya agak rewel. Saya sedang menghitung ulang langkah-langkah saya seandainya ada orang lain yang merasakan manfaatnya (meskipun ini yang saya coba pada awalnya). Ini untuk Android JB (4.2.2) pada Nexus 4 dan Arch Linux 3.6.7-1, dengan bluez 4.101 pada Gnome 3.6 (w / gnome-bluetooth).

(langkah ini mungkin tidak ada gunanya) Matikan Bluetooth di Android dan lepaskan USB / Bluetooth Adapter Anda dari mesin Linux Anda (atau jika Anda memiliki built in, reset menggunakan hcitool devname reset)

Hubungkan / nyalakan adaptor bluetooth Anda di Linux. Pastikan adaptor Anda terlihat (dapat diatur dalam gnome-bluetooth - Anda akan melihat ikon baki sistem bluetooth).

Nyalakan bluetooth di perangkat Android Anda. Gunakan Android untuk memasangkan ke adaptor (saya tidak dapat memasangkan sebaliknya dari Linux). Dialog akan muncul meminta Anda untuk kunci. Masukkan PIN yang Anda inginkan. Gnome harus memunculkan notifikasi yang meminta Anda kunci; masukkan PIN yang sama dengan yang Anda masukkan sebelumnya. Perangkat Android Anda dan kunci harus dipasangkan pada titik ini.

Di Linux, buka terminal dan periksa layanan bluetooth apa yang tersedia dengan mengetik

sdptool browse local

Jika Anda sudah memiliki layanan port serial, catat saluran apa itu. Jika tidak, Anda dapat menambahkan layanan:

sdptool add --channel=22 SP

Sekarang dengarkan di saluran ini menggunakan rfcomm:

sudo rfcomm listen /dev/rfcomm0 22

rfcomm akan memblokir, mendengarkan koneksi dengan pesan seperti

Waiting for connection on channel 22

Kembali di Android, saya menggunakan aplikasi BlueTerm ( http://pymasde.es/blueterm/ , juga tersedia secara bebas di google play store) meskipun aplikasi serupa harus bekerja. Buka BlueTerm, buka opsi> Sambungkan Perangkat: pilih adaptor pasangan.

Semoga aplikasi itu bisa terkoneksi. Anda akan melihat verifikasi tambahan di terminal tempat Anda memblokir mendengarkan dengan pesan seperti:

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

Apa pun yang Anda ketikkan ke dalam aplikasi BlueTerm harus menuju / dev / rfcomm0. Anda dapat melihat hal-hal muncul saat Anda mengetik dengan membuka terminal baru dan melakukan sesuatu seperti:

cat /dev/rfcomm0
Pris
sumber
1
Jawaban yang bagus. Saya membuatnya bekerja dengan Ubuntu 16 / Bluez 5 dan info ini: bbs.archlinux.org/viewtopic.php?id=201672 .
wojciii
10

Langkah-langkah di bawah ini bekerja untuk saya:

Pertama, Anda harus memasangkan perangkat. Memasangkan relatif mudah. Saya akan memanggil klien (yang mulai berbicara) dan server (yang membalas)

Anda harus mengatur server sebelum: Sisi server (sebagai root):

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

Sisi klien (sebagai root):

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

Sekarang untuk membuka terminal serial pada klien:

screen /dev/rfcomm0 115200

Komentar:

Ketika Anda memanggil perintah terakhir rfcomm terhubung ... di klien, perangkat /dev/rfcomm0akan dibuat dan dikaitkan ke server /dev/recomm0. Ini merupakan tautan serial antara keduanya

Perintah server terakhir: rfcomm watch.... akan 'mendengarkan' untuk koneksi yang masuk. Jika koneksi terputus, perintah akan memulai kembali kondisi 'dengar' yang baru.

ismaia
sumber
1
Jawaban yang diberikan oleh ismaia hampir membuat Anda di sana. Anda perlu mengingat bahwa tumpukan bluez yang lebih baru memerlukan --compatopsi khusus , jika tidak menambahkan SP mungkin gagal. Lihat di sini . Jadi sesuaikan / ubah skrip startup startup systemd / initd Anda sehingga --compatada.
blacktofu
5

Saya memecahkan masalah ini dengan sedikit variasi pada perintah Pris. Cobalah ini jika ada yang masih kesulitan mengatur koneksi rfcomm.

sudo service bluetooth restart

Ini memastikan bahwa Anda mulai dengan yang bersih setiap kali Anda mencoba mengatur koneksi.

rfcomm add --channel=<a_channel_#> SP

Nomor saluran ini harus berbeda dari saluran apa pun yang saat ini ditetapkan.

(OPTIONAL) Untuk memeriksa saluran:

sdptool browse local | grep Channel

Saya tidak yakin mengapa perintah berikut ini diperlukan, tetapi itu berhasil untuk saya.

rfcomm release 0

Kemudian untuk mendengarkan koneksi incomming:

rfcomm watch 0 <a_channel_#>

CATATAN: alamat bt MAC di /etc/bluetooth/rfcomm.conf tetapi jadilah bt MAC ponsel Anda. Juga saluran dalam file ini harus sama dengan yang dipilih untuk a_channel_ #.

Setelah saya melakukan semua ini, saya menggunakan emulator terminal bt pada ponsel saya untuk memeriksa semuanya.

Ethan Plummer
sumber
0

Saya telah mencoba berbagai alat bluetooth dan sulit untuk menemukan urutan perintah yang benar untuk menghubungkan dan bertukar data dengan modul bluetooth. Coba gunakan rfcomm dan minicom:

Ini adalah /etc/bluetooth/rfcomm.conf saya

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

Pindai perangkat bluetooth:

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

Bind menggunakan rfcomm

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

NB: bind 0 mengacu pada nomor perangkat 0 (rfcomm0) dan 1 adalah saluran.

Kemudian gunakan minicom dengan sudo dan simpan konfigurasi tempat Anda menentukan baudrate dan port. Anda dapat menemukan informasi lebih lanjut di sini .

UserK
sumber