我把ESP8266连接到我的Arduino Uno。使用空白草图我可以使用串行监视器使用这些命令将其连接到我的wifi网络
AT+IPR=9600
AT+CWMODE=1
AT+CWJAP="SSID_HERE",""
它是一个ip和一切。但现在我希望我的草图使用此代码
来执行此操作#include <SoftwareSerial.h>
#define SSID "SSID_HERE"
void setup(){
Serial.begin(9600);
Serial.setTimeout(5000);
delay(1000);
}
boolean connectWiFi()
{
// connect
Serial.println("AT+CWMODE=1");
Serial.println("AT+CWJAP=\"SSID_HERE\",\"\"");
delay(2000);
if(Serial.find("OK"))
{
Serial.println("AT+CIFSR");
Serial.flush();
delay(1000);
return true;
}
else
{
// Can not connect to the WiFi.
return false;
}
}
但它不起作用.. Serial.println显示在串行监视器中,但ESP8266似乎没有响应。我错过了什么?
答案 0 :(得分:2)
AT命令以回车结束,因此您需要在打印的每个命令中添加“\ r”。
在您的代码行中看起来像:
Derived
答案 1 :(得分:0)
这里的问题是你正在尝试使用引脚0和1用于串行通信,以及它的部分问题..因为arduino也使用串行,对我来说只使用0和0引脚真的很好。当我将arduino上的复位引脚接地时,串口为1。这将arduino变成虚拟设备。
你可以使用软件串口和两个不同的引脚,这样你就不会干扰arduino的硬件序列。
另外需要注意的是,下面的例子几乎不会起作用..对于其他人来说它会不会..这里的问题是软件序列不能正常工作/运行在115200 ..
您可以通过AT+UART_DEF=19200,8,1,0,0
更改波特率,这也会禁用流量控制,然后使用速度不同的软件序列mySerial.begin(19200)
使用Serial.println("TEXT")
会为您发送换行符,因此除非您使用Serial.print("TEXT\r\n")
请勿使用:AT + IPR = ,因为这会阻止它并需要重新刷新
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 10); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
pinMode(11, INPUT);
pinMode(10, OUTPUT);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("ARDUINO: Starting");
mySerial.begin(115200);
Serial.println("ARDUINO: Sending AT Command");
mySerial.println("AT");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}