Thay thế cho nhị phân rfcomm hiện không dùng nữa trong bluez


10

Kể từ bluez 5,44, các nhị phân rfcomm có trong bluez-utils (trong số các loại khác như hcitool) được coi là không dùng nữa và từ nay chỉ được bao gồm trong gói bluez-utils-compat do AUR cung cấp.

Có một ứng dụng dòng lệnh tương tự để liên kết thiết bị bluetooth với cổng nối tiếp bằng mô-đun hạt nhân rfcomm hay tôi phải sử dụng PyBluez hoặc các lib tương tự kể từ bây giờ?

Nếu trường hợp sau xảy ra, bạn muốn giới thiệu thư viện Python 3 nào?

Và nếu ai đó biết, xin vui lòng cho tôi biết lý do tại sao rất nhiều người sử dụng bluez bị coi là không tán thành. Tôi không thể tìm thấy bất cứ điều gì về điều đó.

Các ArchWiki khuyên nên thực hiện các chức năng rfcomm sử dụng mới D-Bus hồ sơ 1 API .

Câu trả lời:


2

Gần đây tôi đã tìm thấy dự án bluez-tools , nhằm mục đích thực hiện chức năng bị mất bằng cách sử dụng api D-Bus hiện tại của Bluez.

Bluez-tools có sẵn trên ArchLinux từ kho lưu trữ cộng đồng. Tôi chưa thử nghiệm điều này và trang github nói rằng nó vẫn đang trong giai đoạn thử nghiệm. Nhưng theo tài liệu, bt-serial nên có thể thay thế rfz cũ và bt-adapter + bt-agent + bt-device có chức năng của hcitool.


1

Tôi đã tìm thấy một giải pháp khả thi khác. Tôi đã tìm thấy điều này bằng cách đào qua repo hub của ai đó. Điều này sử dụng python3 tích hợp trong mô-đun ổ cắm.

Điều kiện tiên quyết:

  1. Bạn có một bộ chuyển đổi làm việc tại địa chỉ <địa chỉ bộ chuyển đổi>.
  2. Bạn có thiết bị Bluetooth mục tiêu của mình tại <địa chỉ thiết bị>.
  3. Thiết bị được ghim.

Đó là, cùng một điểm mà rfcomm có thể được sử dụng.


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()

Thật tuyệt khi biết rằng Python vốn hỗ trợ giao tiếp nối tiếp Bluetooth. Cảm ơn đã trả lời câu hỏi tương đối cũ này.
eike

0

tôi muốn lưu ý về vấn đề này:

  1. rằng dự án github này chứa một số chức năng rfcomm. (dựa trên các tệp thử nghiệm bluez).
  2. Bản thân dự án bluez vẫn chứa tệp rfcomm.c, có thể dễ dàng biên dịch với:

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

... Chỉ cần một tệp, không cần biên dịch toàn bộ dự án bluez. trong đó xyz là phiên bản của mã nguồn bluez tar.xz đã tải xuống (hiện đã có 5.46). trước khi tải xuống, trước tiên bạn nên kiểm tra riêng bluetoothd -vvà tải xuống nguồn phù hợp. bluez-libs chỉ phụ thuộc vào thành công biên dịch.

Tôi cần rfcomm cho armv7 (raspberry 2) và không có gói aur nào cho rfcomm, và đây chỉ là cách, nhưng nó hoạt động tốt.

Vẫn không chắc chắn tại sao rfcomm bị phản đối, không có sự thay thế tốt và làm thế nào để nói chuyện với bluetooth vì nó là cổng nối tiếp theo cách khác. Bởi vì ngay cả bạn là chuyên gia python cộng với chuyên gia DBUS ... (có thể là chủ sở hữu dự án đã đề cập ở trên) ... vẫn chỉ có fifo được cung cấp theo cách này, không phải thiết bị nhân vật thực trong / dev / ... mà tất cả các chương trình khác (như arduino ) có thể xem và làm việc với.


2
1. Trang dự án nêu rõ "Chỉ để tránh triển khai lại một số mã cũ sử dụng các công cụ này", có nghĩa là tác giả sẽ đề xuất theo một cách tiếp cận khác khi sử dụng bluez cho các dự án mới. 2. Có nhiều cách để tự biên dịch rfcomm, điều tôi đang tìm kiếm là lý do cho sự phản đối của nó và một giải pháp thay thế được hỗ trợ.
eike
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.