我正在与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模块始终不可用 - 我需要关闭再打开模块以使其正常工作。
任何人都可以帮助我吗?
答案 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的位置。