如何让AT命令以编程方式在arduino中为ESP8266 wifi模块工作

时间:2015-02-24 09:08:27

标签: tcp tcpclient arduino-uno esp8266 arduino-ide

我正在使用arduino uno上的ESP8266 wifi模块进行从arduino到raspberry-pi的简单tcp通信.tcp服务器在raspberry-pi上运行。我可以使用以下AT命令进行TCP通信在arduino串行监视器中,波特率为9600。

AT+CIPMUX=1
AT+CIPSTART=4,"TCP","192.168.43.150",7777
AT+CIPSEND=4,5
>hai

如何在arduino sketch中以编程方式执行此操作。我在arduino uno上使用了以下代码,但仍然没有成功。波特率仅为9600,因为它直接在串行监视器中工作。

#include <SoftwareSerial.h>
SoftwareSerial esp8266(2,3);

void setup()
{
  Serial.begin(9600);
  esp8266.begin(9600); // your esp's baud rate might be different
}

void loop()
{
 esp8266.println("AT");
 if(esp8266.available()) // check if the esp is sending a message 
 {
 while(esp8266.available())
  {
    // The esp has data so display its output to the serial window 
    char c = esp8266.read(); // read the next character.
    Serial.write(c);
  }  
 }
}

连接如下

  ESP8266  Arduino Uno

  Vcc       3.3V
  CH_PD     3.3V
  RX        RX(PIN 2) 
  TX        TX(PIN 3)
  GND       GND 

2 个答案:

答案 0 :(得分:4)

这可能有点晚了,但最近我遇到了类似的问题。如果它已经分类,那么可以随意忽略它。

根据ESP8266模块的固件版本,9600的波特率可能无效,请尝试使用115200 - 它可能更可靠?

我认为上面的代码无法正常工作的主要原因是ESP在AT命令结束时需要换行符和回车符。串行监视器为您添加这些。而不是发送AT尝试发送AT\r\n。这应该鼓励ESP回复OK,或者如果启用了回声AT\r\nOK

Serial.available()还检查接收缓冲区中是否有内容 - 遗憾的是这需要时间,因此我必须在其中放置一个delay(10)以使其在缓冲区中注册一个字符。

#include <SoftwareSerial.h>

//i find that putting them here makes it easier to 
//edit it when trying out new things

#define RX_PIN 2
#define TX_PIN 3
#define ESP_BRATE 115200

SoftwareSerial esp8266(RX_PIN, TX_PIN);

void setup()
{
  Serial.begin(9600);
  esp8266.begin(ESP_BRATE); // I changed this
}

void loop()
{
 esp8266.println("AT\r\n"); //the newline and CR added
 delay(10);  //arbitrary value

 if(esp8266.available()) // check if the esp is sending a message 
 {
 while(esp8266.available())
  {
    // The esp has data so display its output to the serial window 
    char c = esp8266.read(); // read the next character.
    Serial.write(c);
  }  
 }
}

我的下一个问题是我对ESP的回复是不可靠的 - 有时它们被认为是好的但有时它们是垃圾值。我怀疑这是模块功率不足的问题。

答案 1 :(得分:1)

我遇到了同样的问题但尚未找到解决方案。 但是你的连接有点,你必须将ESP8266模块的TX引脚连接到arduino的RX引脚和ESP8266模块的RX引脚连接到TX引脚。 希望这能帮到你的路上