|
本人在写一个手机通过ESP8266与arduino通讯的程序时,先测试将arduino接收到的信息通过串口转发给PC,但是发现延迟非常高,甚至10几秒电脑串口才能接收到数据,自己实在是看不出来问题在哪儿,想请教一下诸位大神指点一二,拜谢(〃'▽'〃)
这是ESP8266的初始化和数据发送接收的模块:
[mw_shl_code=arduino,true]#include <SoftwareSerial.h>
//初始化串口
void SerialInit()
{
Serial.begin(9600);
esp8266.begin(9600);
}
/*
* Name: sendCommand
* Description:给ESP8266发送数据
* Params: 数据;超时; debug - 是否从硬端口发送?
* Returns: ESP8266返回的数据
*/
String sendCommand(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // send the read character to the esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while(esp8266.available())
{
// The esp has data so display its output to the serial window
char c = esp8266.read(); // read the next character.
response+=c;
}
}
if(debug)
{
Serial.print(response);
}
return response;
}
/*
* Name:dataRecieve
* Description:接收ESP8266的数据并返回给dataRecieve函数,使用时需要定义一个字符串型常量来储存dataRecieve()的返回值
*/
String dataRecieve()
{
String data ="";
while(esp8266.available())//检测是否收到数据
{
delay(1000);//等待所有串口数据写入
data+=char(esp8266.read());
delay(2);
}
return data;
}
[/mw_shl_code]
这是通讯测试的代码:
[mw_shl_code=arduino,true]#include <Arduino.h>
#include <SoftwareSerial.h>
#define DEBUG true
String data="";
SoftwareSerial esp8266(2,3);
void setup()
{
SerialInit();
sendCommand("AT+CIPMUX=1\r\n",1000,DEBUG);
delay(1000);
sendCommand("AT+CIPSERVER=1,8080\r\n",2000,DEBUG);
delay(1000);
}
void loop()
{
String command="";
int a=0;
while(Serial.available())
{
command+=char(Serial.read());
a=1;
}
if(a==1)
{
sendCommand(command,2000,DEBUG) ;
Serial.println(command);
Serial.println(a);
a=0;
}
while(!esp8266.available());
data=dataRecieve();
Serial.print(data);
}
[/mw_shl_code]
|
|