2017-07-20 4 views
1

Ich möchte Daten von meinem sdr USB-Stecker auf meinem RPI3 direkt auf meinem Smartphone bekommen. Mit der Funktion samples=sdr.read_samples(256*1024) kann ich leicht Proben in meiner Schleife bekommen (während (1)). Jetzt ist mein Job, die Mittenfrequenz durch Bluetooth mit einer Android-Anwendung zu ändern. Das Problem ist eigentlich: ich keine neue Daten von meinem Schlüssel empfangen kann, habe ich kein Problem Wert ändern mit der Struktur: try...stop recv socket bluetooth daten

Aber unmöglich neuen Wert zu bekommen mit meiner Funktion samples=sdr.read_samples(256*1024), weil die Funktion data=client_sock.recv(1024) meine Schleife sperren, wenn Sie hat keine Daten. Aber das ist nicht was ich will. Ich möchte Daten von meinem sdr.read_samples bekommen und wenn sie neue Daten von meinem Handy erkennt, dann läuft sie.

from pylab import* 
from rtlsdr import* 
from bluetooth import* 
import sys 

#configure device 
sdr= RtlSdr() 
sdr.sample_rate=double(sys.argv[3]) 
sdr.gain=double(sys.argv[2]) 
sdr.center_freq=double(sys.argv[1]) 
NFFT=33 

#Bluetooth connection 

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

port=server_sock.getsockname()[1] 
uuid="94f39d29-7d6d-437d-973b-fba39e49d4ee" 
client_sock,client_info=server_sock.accept() 

while(1): 
     samples=sdr.read_samples(256*1024) 
     result=psd(samples,NFFT, Fs=sdr.sample_rate/1e6, Fc=sdr.center_freq*1e6/1e6) 
     tab_freq=(result[1]/1e6) 
     value_freq=str(tab_freq)[1:-1] 
     value_list=[format(float(v), ".10f") for v in value_freq.split()] 
     value_freq2= "\n".join(value_list) 
     tab_pxx=result[0] 
     value_pxx=str(tab_pxx)[1:-1] 
     client_sock.send(value_freq2+'\n'+'\n'.join(value_pxx.split())) 

      try: 
       data=client_sock.recv(1024) 
       if len(data)==0: break 
       data2=float(data) 
       a=data2 
      except IOError: 
       pass 

Wie kann ich das lösen?

Danke für Ihre Hilfe.

Antwort