The primary response to the esp8266 receiving a command is to echo it. This is moderately useful since I have used it to validate that the esp8266 received the command.
There are no issues with this since I'm using a PIC mcu at 64Mhz and validating via UART isr the asynchronous command echo at 115200 baud.
Many command echos are followed by a simple OK and again this is not challenging. For others several characters of information are sent before the OK
Other commands EX AT+CIPSTATUS return a variable response after the command echo like STATUS:3
Issues
My isr captures the value in the above case 3 and it turns out this is a pleasant value to get and probably means connected.
4 probably means there is a bad connection issue
1 or 2 are still a mystery.
If anyone has a good documentation of these STATUS values it would help.
Then there is the dreaded busy ...
So far clearing busy .... requires a reset. I do a hardware reset and sometimes it clears it sometimes it doesn't, same with AT+RST
The people readable AT+ commands are fine enough but for autonomous systems all the responses need to be addressed to prevent the esp8266 glitching the MCU code.
The people readable AT+ approach has logical structure but lacks the rigiidity of GPS sentences with their well defined start and end and a check sum.
Parsing the unstructured AT+ is already several hundred lines of c code and I haven't covered every possible response since every response is not so far documented.
I'm using a programatic command line for the autonomous WIFI client
printf(WIFI_PUTC,"\t3AT+CIPSEND=\aESP8266\f"); ...This places chars into the UART tx and scripts the logic for the ESP8266 response
esc sequences \tx starts the sentence and asserts a 3 second for a response \a starts chars to be uploaded (ESP8266) and \f terminates the sentence
a command echo is always validated but if \v ex \vOK is present then the response is validated as well.
One thing to note is the ESP8266 mostly shows CR+LF delimiters but the ESP8266 can react to the CR and interpret the LF as data to upload. Best to just use CR and for get the LF.
Both are there for human readabilty and only one is logically necessary.
Second thing the AT+SEND=n wait for > then upload is restrictive in the value of n ascii values '1'..'9' are the only ones accepted.... no more than 9 chars tops.
Again making this a two step handshake ( request n chars then wait for > and send n chars seems programmatically unwise by the ESP8266 design team.