2013-04-05 22 views
11

Python 3.3 è fornito con supporto nativo per socket bluetooth. Sfortunatamente, non è ancora ben documentato (ce ne è solo una menzione nello documentation).Server Bluetooth con Python 3.3

Cercare su Google ci sono a blog post sull'implementazione di un client, ma non sono riuscito a trovare nulla sulla creazione di un server.

In particolare, come impostare il nome descrittivo e pubblicizzare il servizio.

Quindi, qualcosa di simile a

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) 

Tutte le idee?

+1

Sembra che abbiano fondamentalmente integrato pybluez. Dai un'occhiata a quegli esempi: https://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-server.py – TJD

+1

"advertise_service" non esiste nel modulo socket né in il socket del server, e cercando 'advert' nel codice sorgente di python trova solo tre commenti non correlati. –

+1

Mi sono imbattuto nello stesso problema. Potrei creare un server semplice, ma non posso svolgere attività come i servizi di pubblicità. Puoi vedere il codice per un'applicazione client-server qui, se sei interessato: http://kevindoran1.blogspot.co.nz/2013/04/bluetooth-programming-with-python-3.html – Kevin

risposta

11

Cattive notizie: Python non sembra supportare ciò che si desidera fare fuori dalla scatola. (Almeno non in socketmodule.c).

La maggior parte degli utenti di Python/Bluetooth che ho visto l'uso pybluez anche se non è stato aggiornato dal 2009.

Buone notizie: Sono andato attraverso la loro fonte (per le connessioni Linux), e ha trovato i bit rilevanti per i servizi pubblicitari. La maggior parte del codice è essenzialmente copiata dalla versione 2.2 python di .

pybluez definisce alcune funzionalità aggiuntive per un oggetto socket per implementare tutti quei gadget bluetooth. Non diventa troppo basso, e invece dipende da BlueZ per quello. Da quello che posso dire, prende sostanzialmente oggetti python e crea le strutture dati previste da BlueZ e le chiama. Se non si desidera/non può usare pybluez, sarà necessario in qualche modo implementare questa funzionalità mancante. Penso che potresti essere in grado di farlo con i c-types. Le parti pertinenti per la pubblicità del servizio sono in btmodule.c, righe 2562-2642.

C'è un ramo python-3 nell'origine per pybluez, anche se non so se funziona o meno.

Se si decide di utilizzare pybluez, un esempio tratto dalla 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 ], 
       ) 

come codice google sta chiudendo, il codice può anche essere trovato su github here.

+0

Grazie, penso che finirò di usare il pc come slave dato che avevo bisogno di usare py3. –

Problemi correlati