Tôi muốn sử dụng bất kỳ điện thoại di động nào để kết nối với thiết bị IoT qua Bluetooth Classic bằng giao thức cổng nối tiếp (SPP). Thiết bị IoT không có màn hình và không có bàn phím và nó phải chấp nhận kết nối tự động miễn là điện thoại kết nối biết mã PIN bí mật (nghĩa là tôi không muốn bị ssh vào thiết bị IoT để thiết lập ghép nối mọi lúc điện thoại di động mới cố gắng kết nối).Thiết lập ghép nối tự động Bluetooth trên Linux
Đây là những lệnh mà chúng tôi đã chạy rất xa trên thiết bị IOT:
# Make the device discoverable:
hciconfig hci0 piscan
# Register SPP:
sdptool add --channel=22 SP
# Start rfcomm:
rfcomm -r watch /dev/rfcomm0 22
Thật không may, tôi không thể tìm thấy bất cứ cách nào để thiết lập một mã PIN, và ghép nối thất bại khi cố gắng kết nối với điện thoại di động. Ngoài ra, thiết bị chỉ có thể phát hiện được trong một khoảng thời gian ngắn.
Làm cách nào để định cấu hình ngăn xếp Bluetooth của thiết bị IoT (chạy Bluez gần đây) để ghép nối tự động với bất kỳ điện thoại nào biết mã PIN đã cho và cách tôi thực hiện giai đoạn khám phá vĩnh cửu?
Bạn có thể tận dụng các "bluetoothctl" tiện ích mà tàu với thư viện bluez . Bạn cần bật tác nhân để xác thực. Khi hệ thống của bạn không có đầu, sử dụng có thể sử dụng "NoInputNoOutput". Điều này tránh sự tương tác của passkey để xác thực (bluetoothctl agen NoInputNoOutput). Nhưng nếu bạn muốn chấp nhận tất cả kết nối, hãy sử dụng giao diện Dbus "org.bluez.AgentManager1" để đăng ký tác nhân của riêng bạn với phương thức tối thiểu "RequestAuthorization" được triển khai trong "org.bluez.Agent1" –
Nhưng nếu tôi bắt đầu bluetoothctl và đặt " đại lý NoInputNoOutput ", nó vẫn sẽ hỏi tôi có chấp nhận kết nối hay không. Bạn đang nói với tôi nó có một hành vi khác nhau nếu nó được thiết lập trong chế độ hàng loạt? Đối với việc tạo ra thực hiện của riêng tôi của AgentManager1, nó có vẻ giống như một sự tái tạo của bánh xe. Bluez không giao tàu với người quản lý đại lý sao? –
Có, nó vẫn yêu cầu xác nhận (có/không). Nhưng bạn có thể trả lời nó là "Có" bằng cách viết tác nhân đơn giản của riêng bạn bằng cách sử dụng giao diện Agent1. Có, BlueZ cung cấp trình quản lý tác nhân với "DisplayOnly", "DisplayYesNo", "KeyboardOnly", "NoInputNoOutput" và "KeyboardDisplay" các khả năng này. Khi bạn cần trường hợp đặc biệt để chấp nhận mà không có bất kỳ sự can thiệp nào, bạn có thể đạt được nó với Agent1 của riêng bạn gửi "Có" –