- boolean setup_ESP(){//returns a '1' if successful
ESP8266.print("AT\r\n");// Send just 'AT' to make sure the ESP is responding
//this read_until_... function is used to find a keyword in the ESP response - more on this later and in the function itself
if(read_until_ESP(keyword_OK,sizeof(keyword_OK),5000,0))//go look for keyword "OK" with a 5sec timeout
Serial.println("ESP CHECK OK");
else
Serial.println("ESP CHECK FAILED");
serial_dump_ESP();//this just reads everything in the buffer and what's still coming from the ESP
ESP8266.print("AT+RST\r\n");// Give it a reset - who knows what condition it was in, better to start fresh
if(read_until_ESP(keyword_OK,sizeof(keyword_OK),5000,0))//go look for keyword "Ready" - takes a few seconds longer to complete
Serial.println("ESP RESET OK");//depneding on the FW version on the ESP, sometimes the Ready is with a lowercase r - ready
else
Serial.println("ESP RESET FAILED");
serial_dump_ESP();
ESP8266.print("AT+CWMODE=");// set the CWMODE
ESP8266.print(CWMODE);//just send what is set in the constant
ESP8266.print("\r\n");
if(read_until_ESP(keyword_OK,sizeof(keyword_OK),5000,0))//go look for keyword "OK"
Serial.println("ESP CWMODE SET");
else
Serial.println("ESP CWMODE SET FAILED"); //probably going to fail, since a 'no change' is returned if already set - would be nice to check for two words
serial_dump_ESP();
//Here's where the SSID and PW are set
ESP8266.print("AT+CWJAP=\"");// set the SSID AT+CWJAP="SSID","PW"
ESP8266.print(SSID_ESP);//from constant
ESP8266.print("\",\"");
ESP8266.print(SSID_KEY);//form constant
ESP8266.print("\"\r\n");
if(read_until_ESP(keyword_OK,sizeof(keyword_OK),10000,0))//go look for keyword "OK"
Serial.println("ESP SSID SET OK");
else
Serial.println("ESP SSID SET FAILED");
serial_dump_ESP();
//This checks for and stores the IP address
Serial.println("CHECKING FOR AN IP ADDRESS");
ESP8266.print("AT+CIFSR\r\n");//command to retrieve IP address from ESP
if(read_until_ESP(keyword_rn,sizeof(keyword_rn),10000,0)){//look for first \r\n after AT+CIFSR echo - note mode is '0', the ip address is right after this
if(read_until_ESP(keyword_rn,sizeof(keyword_rn),1000,1)){//look for second \r\n, and store everything it receives, mode='1'
//store the ip adress in its variable, ip_address[]
for(int i=1; i<=(scratch_data_from_ESP[0]-sizeof(keyword_rn)+1); i++)//that i<=... is going to take some explaining, see next lines
ip_address[i] = scratch_data_from_ESP[i];//fill up ip_address with the scratch data received
//i=1 because i=0 is the length of the data found between the two keywords, BUT this includes the length of the second keyword, so i<= to the length minus
//size of teh keyword, but remember, sizeof() will return one extra, which is going to be subtracted, so I just added it back in +1
ip_address[0] = (scratch_data_from_ESP[0]-sizeof(keyword_rn)+1);//store the length of ip_address in [0], same thing as before
Serial.print("IP ADDRESS = ");//print it off to verify
for(int i=1; i<=ip_address[0]; i++)//send out the ip address
Serial.print(ip_address[i]);
Serial.println("");
}}//if first \r\n
else
Serial.print("IP ADDRESS FAIL");
serial_dump_ESP();
ESP8266.print("AT+CIPMUX=");// set the CIPMUX
ESP8266.print(CIPMUX);//from constant
ESP8266.print("\r\n");
if(read_until_ESP(keyword_OK,sizeof(keyword_OK),5000,0))//go look for keyword "OK" or "no change
Serial.println("ESP CIPMUX SET");
else
Serial.println("ESP CIPMUX SET FAILED");
serial_dump_ESP();
//that's it! Could be done by nesting everything together, so if one thing fails, it returns '0', and if it gets all the way through it returns '1'...oh well
}//setup ESP
10 decembrie 2019
cod esp8266
Abonați-vă la:
Postare comentarii (Atom)
Niciun comentariu:
Trimiteți un comentariu