通过上篇可以把esp8266设置成透传模式,但掉电后esp8266会退出透传模式,需要重新初始化,这样arduino和esp8266结合使用时,每次重启后都要通过电脑重新设置esp8266进入透传模式,这里通过把AT指令写进arduino程序中来实现上电自动初始化esp8266。上代码。
#include <SoftwareSerial.h>
boolean firstTime = true;
String returnStr = "";
SoftwareSerial mySerial(13, 12); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);//set esp8266 boud 9600
}
void loop() { // run over and over
while(firstTime){
mySerial.println("test");
delay(800);
while(mySerial.available() > 0){
returnStr += char(mySerial.read());
delay(2);
}
if(returnStr.length() < 1){
firstTime = false;
break;
}
returnStr = "";
mySerial.println("AT+RST");
while(true){//wait for ok
while(mySerial.available() > 0){
returnStr += char(mySerial.read());
delay(2);
}
if(returnStr.lastIndexOf("invalid") != -1){
Serial.println(returnStr);
break;
}
}
returnStr = "";
mySerial.println("AT+CIPMODE=1");
while(true){//wait for ok
while(mySerial.available() > 0){
returnStr += char(mySerial.read());
delay(2);
}
if(returnStr.lastIndexOf("OK") != -1){
Serial.println(returnStr);
break;
}
}
returnStr = "";
mySerial.println("AT+CWJAP=\"Chen302lab\",\"au302lab\"");
while(true){//wait for ok
while(mySerial.available() > 0){
returnStr += char(mySerial.read());
delay(2);
}
if(returnStr.lastIndexOf("OK") != -1){
Serial.println(returnStr);
break;
}
}
returnStr = "";
mySerial.println("AT+CIPMUX=0");
while(true){//wait for ok
while(mySerial.available() > 0){
returnStr += char(mySerial.read());
delay(2);
}
if(returnStr.lastIndexOf("OK") != -1){
Serial.println(returnStr);
break;
}
}
returnStr = "";
mySerial.println("AT+CIPSTART=\"TCP\",\"192.168.1.114\",8080");
while(true){//wait for ok
while(mySerial.available() > 0){
returnStr += char(mySerial.read());
delay(2);
}
if(returnStr.lastIndexOf("OK") != -1){
Serial.println(returnStr);
break;
}
}
returnStr = "";
mySerial.println("AT+CIPSEND");
while(true){//wait for ok
while(mySerial.available() > 0){
returnStr += char(mySerial.read());
delay(2);
}
if(returnStr.lastIndexOf("OK") != -1){
Serial.println(returnStr);
break;
}
}
firstTime = false;
}//
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
这里把esp8266波特率设置为9600,esp8266短时间掉电不会退出透传模式,所以通过发送字符串test测试是否退出透传模式,如果退出了就会返回error,在透传模式时不会有返回。