ESP8266通过arduino给电脑发送数据的延时问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4355|回复: 2

[未解决] ESP8266通过arduino给电脑发送数据的延时问题

[复制链接]
发表于 2019-4-23 09:54 | 显示全部楼层 |阅读模式
  本人在写一个手机通过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]

发表于 2019-4-23 15:37 | 显示全部楼层
可以尝试先把AT指令写好,在来传输数据
发表于 2021-2-18 11:02 来自手机 | 显示全部楼层
请问问题解决了嘛 我也有同样的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 12:42 , Processed in 0.069150 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表