任何人都可以帮我解决Arduino Uno和ESP8266-05之间的沟通问题吗?
我这个简单的代码仅用于测试响应:
#include <SoftwareSerial.h>
SoftwareSerial esp8266(12, 13);
void setup () {
esp8266.begin(19200);
Serial.begin(115200);
}
void loop () {
char buffer[50];
esp8266.write("AT\r\n");
esp8266.readBytes(buffer, sizeof(buffer));
Serial.println(buffer);
delay(1000);
}
但是响应是一些垃圾(在我的电脑上的串行监视器中):
1_Q¨ (X1JXþUÉÁEóAñ¡5%¥4¡1!!1%%¡5%¡4¡1¡!!G-]5
如果我使用简单的电阻分压器或电平转换器(http://www.banggood.com/5-Pcs-3_3V-5V-TTL-Bi-directional-Logic-Level-Converter-For-Arduino-p-951182.html),则此行为相同。
Connection:
Arduino - esp
pin 12 - pin Tx
pin 13 - resistor divider 10k/20k - pin Rx
OR
Arduino - (HV) level shifter (LV) - esp
pin 12 - TxO - TxI - pin Tx
pin 13 - RxI - RxO - pin Rx
ESP reset pin - not connected
我不知道出了什么问题,因为当我打开Arduino和ESP模块时,我在笔记本上看到一个名为AI-THINKER_012568的新wifi网络,我可以连接到这个网络。 / p>
我想,当我打开ESP模块时,我应该准备好&#39;响应,但我只得到一些垃圾数据。因此,对于AT&#39;命令,我应该得到一个好的&#39;响应...
我搜索了很多字符集(ASCII与UTF)的麻烦,但没有任何结果。
我尝试了很多组合阅读(read()
)并将(write()
,print()
,println()
)数据从一个串口移植到另一个串口,但只有一些垃圾回复或没有任何回应......我也试过各种波特率。
奖金问题:当我搜索一些手册时,我只找到ESP8266-01的手册,那么,ESP8266-05是否比第一版更差或者有什么问题?
编辑:
当我使用arduino的简单代码时,它只将数据从一个串口发送到第二个端口:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13); // RX, TX
void setup () {
Serial.begin(9600);
while (!Serial) {}
Serial.println("€");
mySerial.begin(9600);
}
void loop () {
mySerial.listen();
int i = 0;
while (mySerial.available()) {
char c = mySerial.read();
Serial.write(c);
i++;
}
if (i > 0) {
Serial.println();
}
int j = 0;
while (Serial.available()) {
char c = Serial.read();
mySerial.write(c);
Serial.print(c);
j++;
}
if (j > 0) {
Serial.println();
mySerial.println();
}
}
当我上传代码并打开ESP微芯片时,我得到了类似的东西:
â-¬
ÿ
q·$aã
Å% ð´
D9$kvKþµ¿`ÈÛ¯h:¤ó[Y \B¡H$èðÍÝ׸Jø
å
ü+¡
ð
第一行是&#39;&#39;性格,仅用于测试。下一行是ESP微芯片的初始响应。正如我在ESP文档中读到的那样,当ESP芯片启动时,我应该得到一些关于版本和ready
字的数据。意味着这些线条,ESP微芯片是死亡还是只有读取这种反应有问题?
然后当我发送&#39; AT&#39;命令,我没有回应:(
答案 0 :(得分:0)
这是油炸板的迹象。如果板 曾经 接受5 V电压或使用arduino上的3.3 V引脚运行了很长时间,则很可能该板已死。
从编程的角度来看,我已经看到String line = mySerial.readStringUntil("\n");
的表现很好。然后,您可以使用and if语句检查行是OK
还是ERROR
。如果此实现仍以 9600的波特率 返回垃圾,则说明该板已死。
软件序列无法以115200的波特率运行,因此甚至不要尝试。确保将板的波特率更改为9600(我已经看过了),并保持在该水平!那不是问题。
这些板对电源输入非常敏感。在3.3 V下提供5 V或过小的电流会破坏它们。相信我,我仅通过将它们连接到arduino上的3.3 V电源引脚就破坏了其中的4个,而没有意识到正在发生的事情。
我给您的代码应该有效;我已经在项目中完美使用了它...
希望这会有所帮助:)