通过蓝牙Python发送15 000字节 - Java

时间:2017-07-11 09:55:34

标签: java android python bluetooth rfcomm

我想通过蓝牙协议RFCOMM发送15 000个caracteres(或15 000字节)。

我用它在python上发送数据:

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=50

#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()))

这是为了获取有关java的数据:

public void run() {
            byte[] buffer = new byte[1048576]; // 20 bits
            int bytes;
            String strRx = "";

            while (running) {
                try {
                    bytes = connectedInputStream.read(buffer);
                    final String strReceived_freq = new String(buffer,0, bytes);
                    final String strReceived_pxx = new String(buffer,(bytes/2)+1, bytes);
                    //final int samples_sdr=new Integer(buffer,0,bytes);
                    final String strByteCnt = String.valueOf(bytes) + " bytes received.\n";

                    runOnUiThread(new Runnable(){

                        @Override
                        public void run() {
                                Pxx_value.setText(strReceived_pxx+"\n");    // get data PXX
                                freq_value.setText(strReceived_freq+"\n"); // get data freq

                            // plot value
                          /*  for (int i=0; i<nb_points; i++)
                            {
                                freq[i]=Double.parseDouble(strReceived_freq);
                                pxx[i]=Double.parseDouble(strReceived_pxx);
                                series.appendData(new DataPoint(freq[i],pxx[i]), true,500);
                            }*/

                        }});

问题,在33分(NFFT)之后,我无法发送更多数据,因此我的代码重写并删除了我的最后数据......

我该如何解决?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我终于找到了原因。 Raspberry PI配备蓝牙4.1,您可以为每个数据包长度发送最大 33个字节。如果你想获得更多,你需要升级你的蓝牙版本(蓝牙4.2最多可以发送257字节的数据包长度)。

来源:http://www.cypress.com/file/224826/download