2013-04-05 23 views
11

Python 3.3, Bluetooth soketleri için yerel destekle birlikte geldi. Ne yazık ki, henüz çok iyi belgelenmiş değil (documentation'da sadece bir tane var).Python ile Bluetooth sunucusu 3.3

Bir istemci uygulama hakkında a blog post var, ancak bir sunucu oluşturma hakkında bir şey bulamadım.

Daha ayrıntılı olarak, kullanıcı dostu adı nasıl belirlenir ve hizmeti tanıtılır.

Yani,

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) 

Herhangi bir fikir gibi bir şey?

+1

Temel olarak pybluez'i entegre etmiş gibi görünüyor. Şu örneklere bakın: https://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-server.py – TJD

+1

'advertise_service' soket modülünde veya sunucu soketi ve python'un kaynak kodunda 'reklam' kelimesini aramak yalnızca üç alakasız yorum bulur. –

+1

Aynı problemle karşılaştım. Basit bir sunucu yapabilirdim, ancak reklam hizmetleri gibi görevleri yerine getiremedim. Burada bir istemci-sunucu uygulaması için kod görebilirsiniz, eğer ilgileniyorsanız: http://kevindoran1.blogspot.co.nz/2013/04/bluetooth-programming-with-python-3.html – Kevin

cevap

11

Kötü haber: Python kutunun dışında ne yapmak istediğinizi desteklemiyor. (En azından socketmodule.c'da değil).

o 2009.

İyi haber beri güncellenmedi rağmen kullanımını pybluez gördüğüm piton/bluetooth kullanıcılarının çoğu: Ben (Linux bağlantılar için) onların kaynağı geçti ve bulunan reklam hizmetleri için ilgili bitler. Kodun çoğu, socketmodule.c'un python 2.2 sürümünden kopyala yapıştırılır. Tüm bu bluetooth ürünlerini uygulamak için socket nesnesinin bazı ek işlevlerini tanımlamaktadır. Çok düşük seviyeli değil ve bunun için BlueZ'a bağlı. Anlatabildiğim kadarıyla, temel olarak python nesnelerini alır ve BlueZ tarafından beklenen veri yapılarını oluşturur ve sadece bunu çağırır. pybluez'u kullanmak istemezseniz/kullanamazsanız, bu eksik işlevselliği bir şekilde uygulamanız gerekir. Bunu c-tipi ile yapabileceğinizi düşünüyorum. Hizmetin reklamını yapmak için ilgili parçalar btmodule.c, satır 2562-2642'dir.

pybluez için bir python-3 dalı var, ancak çalışıp çalışmadığını bilmiyorum. Eğer pybluez kullanmaya karar verirseniz

, örnek google kod kapandığında, kodu da github here bulunabilir 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 ], 
       ) 

alınan.

+0

Teşekkürler, py3 kullanmam gerektiğinden pc'yi köle olarak kullanacağımı düşünüyorum. –