通过SoftwareSerial端口从Arduino Uno向ESP8266发送AT命令


10

目标

从Arduino UNO,通过SoftwareSerial端口将AT命令发送到ESP8266并接收结果。

当前状态

我要么发送AT命令并且什么也没回来(接线方案1),要么我发送AT命令并且得到了垃圾(接线方案2)。

使用Arduino作为传递(如参考资料部分中列出的教程中所述),我可以发送AT命令。我发现我可以115200波特与ESP8266通讯。

这是运行的结果AT+GMR

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04

接线图1

!! 我的绿线连接到Arduino Uno的引脚3,黄线连接到引脚2;不是1和0,如图所示!

在此处输入图片说明

接线图2

与上述相同的接线,但RX和TX接反了。绿线连接到引脚2,黄线连接到引脚3。

这是在Arduino Uno上运行

#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

运行草图的结果

接线方案1

Started

接线方案2

Started
�����

我已按照下面“ 我已使用资源”部分中的教程中列出的说明对ESP8266进行了测试。通过串行提示符发送指令时,ESP8266可以正常工作。

我使用过的资源 http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

有人知道我想做什么吗?如果是的话,我在做什么错?


尝试使用PDF中的摘要,以将arduino用作串行的旁路(使用图片中的连接)。尝试将波特率设置为115200并使用串行监视器进行测试。您还需要发送\ r \ n作为行尾。如果esp没有响应,请尝试9600波特率。如果输出良好,则以有效的波特率转到软件串行。您还可以尝试将esp固件更新为最新版本。
brtiberio 2015年

您可以发布软件序列号吗?
Magic-Mouse

@Personagem,谢谢。我已经完成了故障排除(即,通过使用Arduino作为旁路来检查是否可以发送AT命令)。我发现我可以在115200与esp通信。我将按照您的建议尝试更新固件。
Paul

@ Magic-Mouse SoftwareSerial是一个由Arduino提供的库。感谢您在问题上的帮助,但我认为在此处发布库不会有所帮助。
保罗

我知道软件序列库是什么,我想在使用软件序列号的地方设置代码。
Magic-Mouse

Answers:


9

有人知道我想做什么吗?

绝对有可能:)

如果是的话,我在做什么错?

SoftwareSerial无法使用115200波特率(尽管“允许”此设置)。一些报告建议最高可以达到57600,尽管以我的经验来看9600最适合可靠性。如何更改ESP8266的波特率取决于固件版本。我已经成功了AT+IPR=9600。您只需要运行一次此命令(这是一个持久设置)。根据您的描述,我建议这是最有可能导致您描述的“垃圾”输出的元凶。

其他一些注意事项:

  • ESP8266在3v3而不是5v上运行,因此您不应该将其直接连接到数字引脚-您需要通过逻辑电平转换器运行。运行5v可以油炸ESP8266。
  • Arduino的3v3输出电流不足,无法可靠地支持ESP8266(某些情况下,Arduino的电流为50mA,ESP8266的电流为300mA),请尝试在单独的电源下运行ESP8266。它可能不会影响简单的命令,例如,AT但是当您尝试连接到网络等时,可能会导致设备意外重置。
  • 如其他人所述,您需要发送\ r \ n-因此请确保将“串行”窗口设置为同时发送两者(这是“串行”窗口中的下拉菜单)

1
请注意,AT + IPR有时可能会使ESP8266变砖。更多详细信息,请访问:arduino.stackexchange.com/questions/24156/…–
Emir

7

好吧,你可以试试这个:

首先将眨眼草图上传到Arduino,然后将其连接到ESP8266,如下所示:TX-TX和RX-RX。

现在打开串行监视器并发送AT命令,看看它是否响应。如果是这样,那么您可以通过将其重新连接到TX-RX和RX-TX来使用Arduino对其进行控制。

PS:别忘了将串行监视器结尾的行设置为换行或回车。

使用以下代码连接到ESP8266:

#include <SoftwareSerial.h>

const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266

// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200); // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
}

void loop() {
  Serial.println("Sending an AT command...");
  ESP8266.println("AT");
  delay(30);
  while (ESP8266.available()){
     String inData = ESP8266.readStringUntil('\n');
     Serial.println("Got reponse from ESP8266: " + inData);
  }  
}

由于硬件串行接口在连接到计算机时会很忙,因此您必须使用另一个串行接口与ESP8266进行通信。在这种情况下,“软件序列号”非常方便。


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。- 评论
里卡多

1
是的,我想你是对的。我编辑了答案。
伊克贝尔2015年

@KiraSan为什么需要delay(30)?
拉胡尔·拉斯托吉

@RahulRastogi仅用于此示例,您可以使用延迟来允许ESP响应,30ms只是一个随机值,但在现实生活中的程序中,应避免这种情况,并使用另一种机制来检查响应。
伊克贝尔

1

有人知道我想做什么吗? 有可能,我已经用2个arduinos完成了,其中一个正在模拟ESP8266(等待ebay订单)。

如果是的话,我在做什么错?

在大多数情况下,您正在做的事情是错误的,但是我认为您的解决方法最多。

一个想法是实现这个小想法:逻辑电平转换器,它将在以后为您节省许多麻烦。

在“布线方案1”上,您正在使用arduino的“硬件”串行端口直接与设备通讯,就好像它是通过TTL电缆或FTDI电缆连接的一样。

这意味着从理论上讲,在与ESP8266通话时,arduino设备也会从硬件读取,如果您还有另一条arduino或TTL电缆,请尝试将其连接到“主” arduino的2号和3号门,您应该会得到类似的结果结果与您的示例结果一样。2.因为您可以通过arduino代理。如果不是,那将是开始调试的地方。

除此之外,我只能建议您投资TTL 3,3v或逻辑电平转换器。当我拿到电缆时,一切就绪。


1

我也有很多问题。就我而言,从SoftwareSerial切换到AltSoftSerial几乎可以解决问题。似乎在Uno上,标准软件串行库不适用于我。切换后,我开始第一次获得结果。(我也使用了3.3V的电平转换和外部电源)


通过几乎解决的方法,我的意思是-我仍然不时在终端上出现乱码。因此,即使AltSoftSerial也不是完美的解决方案。我使用的ESP-07的数据速率为115200 bps。


您可以添加到您的描述中吗?知道如何在Uno和ESP之间建立连接是很有帮助的。谢谢!
dlu 2015年


0

以下是使用ESP8266 Module时的一些技巧。

  1. 不要使用串行软件,因为它不可靠,尤其是波特率较高时。

  2. 在与Arduino交互之前,始终将ESP模块连接到计算机并测试所有AT命令,以确保您的工作方向正确

  3. 制作电源适配器板以使ESP模块与Arduino 5v电源兼容

另请查看此链接以获取更多详细信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.