如何从ESP8266获得AT响应连接到arduino

时间:2016-02-25 00:11:53

标签: arduino at-command esp8266

我正在与ESP8266 wifi模块战斗并连接arduino。在将固件更新到最新版本后,我开始编程arduino以获取从wifi传入的数据。我通过ESP8266看到了许多关于maiking webserver的例子,但它们都不适用于我。

ESP连接到我的Arduino Leonardo: >

  

Arduino - > ESP8266

     

电源3.3V - > VCC

     

地面 - >地面

     

tx - > rx(通过逻辑电平转换器5-> 3.3V)

     

rx - > tx(通过logix电平转换器

     

电源3.3V - > gpio0(不带任何电阻)

我做了简单的草图:

void setup(void){

  Serial.begin(9600);
  Serial1.begin(115200);

}

void loop() {
  if(Serial1.available())
  {
    Serial.println("WIFI IS AVAILABLE");
    Serial1.println("AT");
    delay(1000);
  } else {
    Serial.println("WIFI not available.");
    delay(1000);
  }
}

执行后,ESP8266通电(红色指示灯亮),每秒蓝色指示灯(闪烁)。这让我确信在fakt" AT"命令被传输到模块。但也有两个问题:

  • 我希望得到esp的回复 - 在这种情况下,单词" OK"。我尝试过Serial1.read()但它只读取一个字节。 Serial1.readString()使我的消息" wifi不可用"同时" wifi可用"好像有一段时间连接不可用

  • 将草图上传到arduino并且已经通电后esp8266 wifi模块始终不可用 - 我需要关闭再打开模块以使其正常工作。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您需要做的是改变您的方法。不要检查数据是否可用。诀窍是发送模块然后检查数据。

做类似的事情:

while (Serial.available() > 0)
  Serial.read();

在您要发送的任何命令之前清除缓冲区。然后发送命令。然后检查数据作为响应。

依赖蓝色LED作为任何指示。这仅表明ESP8266正忙于以某种方式使用WiFi,无论是使用Keepalive还是初始化WiFi等等。它与您发送的任何内容完全无关。如果您没有收到有效的响应,那么您必须假设您和模块之间存在通信问题。但有一件事是,如果蓝色LED永远不会熄灭,那么模块已冻结或固件已损坏。我有过很多次。然后我重新加载固件,通常修复它。它通常只发生在重置,上传代码或更换电线的开发时间。

我在一个单独的slef-built主板上使用atmega328而不是Uno上的那个,并在3.3v本身上运行该板然后在该atmega板和我的Uno之间使用逻辑电平转换器以便我可以编程它。但我有非通信的零星问题,但我怀疑它可能与电源有关。请注意,通过逻辑电平转换器运行Serial也可能导致通信问题。

建议接线:除RX,TX,VCC和GND外的所有引脚均通过10K上拉电阻进入VCC。 RX进入arduino的TX,TX进入arduino的RX。当然你知道VCC和GND的位置。