2013-04-05 37 views
11

Python 3.3 có hỗ trợ gốc cho ổ cắm bluetooth. Thật không may, nó không phải là quá tốt tài liệu được nêu ra (chỉ có một đề cập đến nó trong documentation).Máy chủ Bluetooth với Python 3.3

Googling nó có a blog post về việc triển khai ứng dụng khách nhưng tôi không thể tìm thấy bất kỳ điều gì về việc tạo máy chủ.

Cụ thể hơn, cách đặt tên người dùng thân thiện và quảng cáo dịch vụ.

Vì vậy, một cái gì đó giống như

import socket 

serverSocket = socket.socket(socket.AF_BLUETOOTH, 
          socket.SOCK_STREAM, 
          socket.BTPROTO_RFCOMM) 
serverSocket.setTimeout(1) 
serverSocket.bind(("", 1)) 
serverSocket.listen(1) 

something.advertise_service(something something) 

Bất kỳ ý tưởng?

+1

Dường như chúng tích hợp pybluez cơ bản. Hãy xem các ví dụ sau: https://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-server.py – TJD

+1

'advertising_service' không tồn tại trong mô-đun ổ cắm cũng như trong socket máy chủ và tìm kiếm 'advert' trong mã nguồn của python chỉ tìm thấy ba chú thích không liên quan. –

+1

Tôi gặp phải vấn đề tương tự. Tôi có thể tạo một máy chủ đơn giản nhưng không thể thực hiện các tác vụ như dịch vụ quảng cáo. Bạn có thể thấy mã cho ứng dụng máy khách-khách tại đây, nếu bạn quan tâm: http://kevindoran1.blogspot.co.nz/2013/04/bluetooth-programming-with-python-3.html – Kevin

Trả lời

11

Tin xấu: Python dường như không hỗ trợ những gì bạn muốn làm ngoài hộp. (Ít nhất không phải trong socketmodule.c).

Hầu hết các python người dùng/bluetooth Tôi đã nhìn thấy sử dụng pybluez mặc dù nó chưa được cập nhật kể từ năm 2009.

Tin tốt: tôi đã đi qua nguồn của họ (cho các kết nối Linux), và tìm thấy các bit liên quan cho các dịch vụ quảng cáo. Hầu hết mã được sao chép cơ bản từ phiên bản python 2.2 của socketmodule.c.

pybluez sẽ xác định một số chức năng bổ sung cho đối tượng socket để triển khai tất cả các tính năng bluetooth đó. Nó không quá thấp, và thay vào đó phụ thuộc vào BlueZ cho điều đó. Từ những gì tôi có thể nói, về cơ bản nó có các đối tượng python và tạo ra các cấu trúc dữ liệu được mong đợi bởi BlueZ và chỉ cần gọi đó. Nếu bạn không muốn/không thể sử dụng pybluez, bạn sẽ phải bằng cách nào đó triển khai chức năng bị thiếu này. Tôi nghĩ rằng bạn có thể làm điều đó với c-loại. Các phần có liên quan để quảng cáo dịch vụ nằm trong số btmodule.c, dòng 2562-2642.

Có một nhánh python-3 trong nguồn cho pybluez, mặc dù tôi không biết liệu nó có hoạt động hay không.

Nếu bạn quyết định sử dụng pybluez, một ví dụ lấy từ their source

server_sock=BluetoothSocket(RFCOMM) 
server_sock.bind(("",PORT_ANY)) 
server_sock.listen(1) 

port = server_sock.getsockname()[1] 

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" 

advertise_service(server_sock, "SampleServer", 
        service_id = uuid, 
        service_classes = [ uuid, SERIAL_PORT_CLASS ], 
        profiles = [ SERIAL_PORT_PROFILE ], 
       ) 

Như google code đang đóng cửa, mã cũng có thể được tìm thấy trên github here.

+0

Cảm ơn, tôi nghĩ rằng tôi sẽ kết thúc bằng cách sử dụng máy tính như nô lệ kể từ khi tôi cần thiết để sử dụng py3. –

Các vấn đề liên quan