有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通信ESP和STM

我想通过安卓设备和esp8266实时发送2MB的wave文件。esp8266与STM32F030相连。我使用了这个site的wifi桥接库。 我把波特率改为每秒2.4兆比特。由于STM32的闪存和RAM较低,我必须从文件中以512字节的形式发送数据,通信方式如下。。我向STM32发送512个数据包,并从stm确认,如“OK”。这个过程一直持续到我得到所有数据。。。。但我的问题是。这需要超过5分钟,我的文件是30秒。我用了这个密码。如何优化我的代码

Android :


(public class SendWiFi extends Service )
@Override
    public void onCreate() {
        super.onCreate();
        context=this;
        handler= new Handler();
        isRunning=true;
        runnable= new Runnable() {

            @Override
            public void run() {
                    //handler.post(runnable);
                    DataForSend[0] = 'D';
                    DataForSend[1] = 'A';
                    DataForSend[2] = 'T';

                    fileContentWave = getByte(FilePath);
                    int lengthData = fileContentWave.length;
                    int LastData = lengthData - DataSent;
                    co++;
                    if (LastData > 512) {
                        for (int i = 0; i < 512; i++) {
                            DataForSend[i + 3] = fileContentWave[DataSent +i];
                        }
                        try {
                            outputStream.write(DataForSend, 0, 515);
                            outputStream.flush();
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        System.out.println(co+"**"+lengthData+Arrays.toString(DataForSend)+DataForSend.length);

                    } else {
                        for(int a=0;a<515;a++){DataForSend[a]=0;}
                        DataForSend[0] = 'E';
                        DataForSend[1] = 'N';
                        DataForSend[2] = 'D';
                                for (int j = 0; j < LastData; j++) {
                                    DataForSend[j + 3] = fileContentWave[DataSent + LastData - 1];
                                }
                                try {
                                    outputStream.write(DataForSend, 0, 515);
                                    outputStream.flush();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                //System.out.println("original" + count + ":" + FilePath + Arrays.toString(StringForSend) + LastData);
                                DataSent = 0;
                                LastData = 0;

                        System.out.println(co+"**"+lengthData+Arrays.toString(DataForSend)+DataForSend.length);
                        co=0;
                        Toast.makeText(getApplicationContext(), "finish", Toast.LENGTH_LONG).show();

                            }


                        }





        };

        handler.post(runnable);
    }


class Thread2 implements Runnable {
            @Override
            public void run() {
                while (true) {
                    try {

                         final String messageFromWiFi = input.readLine();
                        if (messageFromWiFi != null) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    textViewDataInput.setText(messageFromWiFi );
                                    stopService(intent);
                                    if (messageFromWiFi.equals("OK")) {
                                        DataSent = DataSent + 512;
                                        startService(intent);
                                        isRunning=false;
                                    }
                                    if (messageFromWiFi.equals("END")) {
                                        DataSent = DataSent + 512;
                                        stopService(intent);
                                    }
               }
                            });
                        } else {
                            return;

                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }




STM32:
  






if (RXcheck==1){
            
            RXcheck=0;
            if (UARTX[0]=='D' && UARTX[1]=='A' && UARTX[2]=='T'){
                TIMEstart=TIM1->CNT;
                for(int j=0;j<512;j++){waveFile[j]=UARTX[j+3];}
                HAL_UART_Receive_DMA(&huart1,(uint8_t *)UARTX,515);
                HAL_UART_Transmit(&huart1,(uint8_t *)"OK\r\n",4,1);
                TIMEstop=TIM1->CNT;
                TimerDelay=TIMEstop-TIMEstart;
                
            }
if (UARTX[0]=='E' && UARTX[1]=='N' && UARTX[2]=='D'){
                TIMEstart=TIM1->CNT;
                for(int j=0;j<512;j++){waveFile[j]=UARTX[j+3];}
                HAL_UART_Receive_DMA(&huart1,(uint8_t *)UARTX,515);
                HAL_UART_Transmit(&huart1,(uint8_t *)"END\r\n",5,1);
                TIMEstop=TIM1->CNT;
                TimerDelay=TIMEstop-TIMEstart;
                

   
            } 
}

共 (0) 个答案