我正在使用两个头文件SoftwareSerial.h
和ESP8266WiFi.h
。当我使用ESP8266WiFi.h
编译和上传程序时,出现错误“无法连接到ESP8266:超时等待报文头”。我仅用ESP8266WiFi.h
尝试过,但是它有相同的错误。要使用此头文件,我该怎么办?
这是我的电路和代码。
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char *ssid = "circuits4you";
const char *pass = "password";
unsigned int localPort = 2000; // local port to listen for UDP packets
IPAddress ServerIP(192,168,4,1);
IPAddress ClientIP(192,168,4,2);
WiFiUDP udp;
char packetBuffer[9]; //Where we get the UDP data
void setup()
{
Serial.begin(9600);
Serial.println();
WiFi.softAP(ssid, pass); //Create Access point
Serial.println("Starting UDP");
udp.begin(localPort);
Serial.print("Local port: ");
Serial.println(udp.localPort());
}
void loop()
{
int cb = udp.parsePacket();
if (!cb)
{
if(Serial.available()>0)
{
udp.beginPacket(ClientIP, 2000);
char a[1];
a[0]=char(Serial.read()); //Serial Byte Read
udp.write(a,1); //Send one byte to ESP8266
udp.endPacket();
}
}
else {
udp.read(packetBuffer, 1);
Serial.print(packetBuffer);
delay(20);
}
}
答案 0 :(得分:0)
您的代码旨在将ESP8266用作与Arduino Core一起运行的独立微控制器。我意识到您对ESP8266的运行方式感到困惑。使用ESP8266基本上有两种方法。
当前,您的代码专为在独立ESP8266上运行而设计,但我意识到您的硬件配置已配置为与ESP8266作为WiFi设备进行通信,并且ESP8266上具有AT命令固件。为了让Arduino通过AT命令与ESP8266通讯,您需要运行此Arduino草图开始使用,该草图基本上会读取您在Serial Monitor上键入的AT命令并将其发送给ESP8266,并回显从ESP8266收到的消息:
#include <SoftwareSerial.h>
SoftwareSerial espSerial(2, 3); //RX,TX
// Arduino pin 2 (RX) to ESP8266 TX
// Arduino pin 3 to voltage divider then to ESP8266 RX
// Connect GND from the Arduiono to GND on the ESP8266
// Pull ESP8266 CH_PD HIGH
void setup()
{
Serial.begin(9600); // for communication with the host computer
espSerial.begin(9600); // Soft derail for communicate with ESP8266
// Remember to set 'Both NL & CR' in the serial monitor
}
void loop()
{
// listen for data from the ESP8266 and then write it to the serial monitor
if ( espSerial.available() ) {
Serial.write( espSerial.read() );
}
// listen for manual input from user and send it to the ESP8266
if ( Serial.available() ) {
mySerial.write( Serial.read() );
}
}
请记住在串行监视器中设置“ NL和CR两者”
Expressif有一个不错的官方AT Command example,您可以关注其中,其中包括UDP通信。您可以通过串行监视器手动键入AT命令以逐步测试ESP8266。一切正常后,您可以编写草图以使程序中的所有AT命令自动化,以替换loop()
中的代码。
如果与ESP8266的通信工作量太大并且对您来说太繁琐,您可能需要考虑通过使用Arduino Core之类的固件升级ESP8266来将ESP8266用作独立的微控制器。然后,您可以使用显示的代码。但您的硬件需要稍作更改才能将ESP8266设置为固件闪存模式,您需要将ESP8266的GPIO0接地,并在ESP8266的复位引脚和接地之间设置一个复位开关,以便您可以按一下它来放置ESP8266进入编程模式。
在这种情况下,请确保您的目标板已在Arduino IDE上设置为ESP8266。