如何从连接到arduino的ESP8266获得AT响应
how to get AT response from ESP8266 connected to arduino
我在用ESP8266 wifi模块打架,连接arduino。将固件更新到最新版本后,我开始对 arduino 进行编程以获取来自 wifi 的数据。我看到很多关于通过 ESP8266 maiking webserver 的例子,但 none 对我有用。
ESP 连接到我的 Arduino Leonardo:
>
Arduino -> ESP8266
power 3.3V -> vcc
ground -> ground
tx -> rx (via logic level converter 5->3.3V)
rx -> tx (via logix level converter
power 3.3V ->gpio0 (without any resistors)
我做了简单的草图:
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 通电(红色 LED 亮起),蓝色 LED 每隔一秒(闪烁)。这让我确信在 fakt "AT" 命令中被传输到模块。但是也有两个问题:
我想得到 esp 的回应 - 在这种情况下是单词 "OK"。我试过 Serial1.read() 但它只读取一个字节。 Serial1.readString() 使我的消息 "wifi not available" 和同时 "wifi is available" 好像有一段时间连接不可用
将 sketch 上传到 arduino 并为 esp8266 wifi 模块供电后始终不可用 - 我需要关闭并重新打开模块才能使其正常工作。
有人可以帮助我吗?
您需要做的是稍微改变一下您的方法。不检查数据是否可用。诀窍是向模块发送一些东西,然后检查数据。
做类似的事情:
while (Serial.available() > 0)
Serial.read();
在您要发送任何命令之前清除缓冲区。然后发送命令。然后检查数据作为响应。
不要不要依赖蓝色 LED 作为任何指示。这只是表明 ESP8266 正以某种方式忙于使用 WiFi,无论是在保持活动状态、初始化 WiFi 还是其他。它可以与您发送的任何内容完全无关。如果您没有收到有效响应,那么您必须假设您和模块之间存在通信问题。但有一件事是,如果蓝色 LED 永远不会熄灭,则说明模块已冻结或固件已损坏。我有过很多次。然后我重新加载固件,通常会修复它。它通常只发生在我重置、上传代码或更改线路的开发期间。
我在一个单独的自建板上使用我的 atmega328,而不是 Uno 上的那个,运行 那个板本身在 3.3v 上,然后在那个 atmega 板和我的之间使用逻辑电平转换器Uno 这样我就可以编程了。但是我在非通讯方面遇到过零星的问题,但我怀疑这可能与电源有关。请注意,运行通过逻辑电平转换器连接您的串口也可能导致通信问题。
建议接线:除RX、TX、VCC和GND外的所有引脚都通过10K上拉电阻连接到VCC。 RX 连接到 arduino 的 TX,TX 连接到 arduino 的 RX。你当然知道VCC和GND的去向。
我在用ESP8266 wifi模块打架,连接arduino。将固件更新到最新版本后,我开始对 arduino 进行编程以获取来自 wifi 的数据。我看到很多关于通过 ESP8266 maiking webserver 的例子,但 none 对我有用。
ESP 连接到我的 Arduino Leonardo: >
Arduino -> ESP8266
power 3.3V -> vcc
ground -> ground
tx -> rx (via logic level converter 5->3.3V)
rx -> tx (via logix level converter
power 3.3V ->gpio0 (without any resistors)
我做了简单的草图:
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 通电(红色 LED 亮起),蓝色 LED 每隔一秒(闪烁)。这让我确信在 fakt "AT" 命令中被传输到模块。但是也有两个问题:
我想得到 esp 的回应 - 在这种情况下是单词 "OK"。我试过 Serial1.read() 但它只读取一个字节。 Serial1.readString() 使我的消息 "wifi not available" 和同时 "wifi is available" 好像有一段时间连接不可用
将 sketch 上传到 arduino 并为 esp8266 wifi 模块供电后始终不可用 - 我需要关闭并重新打开模块才能使其正常工作。
有人可以帮助我吗?
您需要做的是稍微改变一下您的方法。不检查数据是否可用。诀窍是向模块发送一些东西,然后检查数据。
做类似的事情:
while (Serial.available() > 0)
Serial.read();
在您要发送任何命令之前清除缓冲区。然后发送命令。然后检查数据作为响应。
不要不要依赖蓝色 LED 作为任何指示。这只是表明 ESP8266 正以某种方式忙于使用 WiFi,无论是在保持活动状态、初始化 WiFi 还是其他。它可以与您发送的任何内容完全无关。如果您没有收到有效响应,那么您必须假设您和模块之间存在通信问题。但有一件事是,如果蓝色 LED 永远不会熄灭,则说明模块已冻结或固件已损坏。我有过很多次。然后我重新加载固件,通常会修复它。它通常只发生在我重置、上传代码或更改线路的开发期间。
我在一个单独的自建板上使用我的 atmega328,而不是 Uno 上的那个,运行 那个板本身在 3.3v 上,然后在那个 atmega 板和我的之间使用逻辑电平转换器Uno 这样我就可以编程了。但是我在非通讯方面遇到过零星的问题,但我怀疑这可能与电源有关。请注意,运行通过逻辑电平转换器连接您的串口也可能导致通信问题。
建议接线:除RX、TX、VCC和GND外的所有引脚都通过10K上拉电阻连接到VCC。 RX 连接到 arduino 的 TX,TX 连接到 arduino 的 RX。你当然知道VCC和GND的去向。