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) 个答案