No se pueden enviar datos a Thingspeak usando ESP8266 y STM32 Nucleo

Estoy usando el compilador mbed de ARM para programar mi STM32 Nucleo. También estoy usando un ESP8266 como mi módulo WiFi.

Mis conexiones son así:

  • Rx del ESP8266 está conectado a D8 en el Nucleo.
  • Tx del ESP8266 está conectado a D2 en el Nucleo.
  • Gnd del ESP8266 al gnd en el tablero. Todos los demás pines del ESP8266 están conectados a 3.3V en el Nucleo.

El siguiente es mi código mbed:

#include "mbed.h"  

Serial esp(D8, D2);  
DigitalOut myled(LED1);

void flush(void) {  
  while (esp.readable()) {  
    (void)esp.getc();  
  }    
}  

int main() {  
  esp.baud (115200);
  char server[]="GET /update?key=NR************2Z&field1=7";
  flush();  

  esp.printf("AT+RST\r\n");
  wait(2);  

  esp.printf("AT+CWMODE=1\r\n");  
  wait(3);  

  esp.printf("AT+CWJAP=\"Harsha\",\"*****\"\r\n"); 
  wait(3);  

  esp.printf("AT+CIPMUX=1\r\n");
  wait(3); 

  esp.printf("AT+CIPSTART=4,\"TCP\",\"184.106.153.149\",80\r\n");  
  wait(3);

  esp.printf("AT+CIPSEND=4,%d\r\n", sizeof(server)+2);  
  wait(2);

  esp.printf("%s\r\n", server); 
  wait(3);

  esp.printf("AT+CIPCLOSE\r\n"); 

  while(1) {  
    myled = 1;
    wait(0.1);

    myled = 0;
    wait(0.1);
   } 

  return 0;  
}

Puedo conectarme a mi punto de acceso WiFi, lo que significa que no hay problema con la conexión. Pero los datos que paso no se actualizan en Thingspeak en absoluto. También lo probé incluyendo HTTP/1.0 y HTTP/1.1 en la cadena 'servidor', todavía nada. ¿Me estoy perdiendo de algo?

¿Cómo puede estar seguro de que sus comandos AT funcionan? No veo ningún error de comprobación en absoluto.
Estaba tratando de evitar una verificación de errores con un retraso prolongado. Sé que no es útil, pero ¿es tan importante la comprobación de errores? He visto otros códigos en los que los comandos AT se envían a ciegas.
Los retrasos no servirán de nada si el dispositivo responde ERROR en unos pocos mseg...
De acuerdo, supongamos que hubo un error, todavía no va a decir qué error es. Significa que hay algo mal con los comandos AT en alguna parte. Para eso quiero opiniones.
Estos comandos AT deben especificarse en alguna parte. Por ejemplo, la respuesta puede ser OK o ERROR para comandos simples y puede incluir un código de error para algunos comandos. ¿Qué dice la hoja de datos? (por ejemplo, en este módulo, AT+RST debería responder con "listo" en algún momento por lo que vi usando 2 minutos de búsqueda en Google)
Responde con un nombre de versión listo y los detalles de su proveedor, etc. para ser específicos. Todo eso está bien. Incluso se está conectando a mi punto de acceso como he indicado en la pregunta. El problema es que los datos no van a Thingspeak. Estoy seguro de que alguien más debería haber tenido problemas similares. Por lo tanto, pido sus opiniones y experiencias. Si está buscando en Google lo que ofrece AT+RST, entonces estoy bastante seguro de que nunca antes ha usado el módulo, ¿verdad?
Enviar comandos AT a ciegas sin leer el manual es buscar problemas. He tratado de señalarte en la dirección correcta (RTFM). Nunca he usado este módulo ni tengo intención de hacerlo. Por extraño que parezca, acabo de tener la misma discusión con un cliente y harían todo lo posible para no leer el manual... mientras se siguen quejando de que las cosas no funcionan. Dejar que otras personas hagan la depuración por usted no lo llevará muy lejos. Lo siento, pero tienes que hacer tu tarea (¿cuál es la respuesta del módulo?).
Es posible que deba cambiar el ESP fuera del modo de comando. En los módems Hayes antiguos, teníamos que esperar alrededor de 200 ms para que el modo de comando expirara antes de enviar los datos. Volvimos a cambiar usando +++. En algunos dispositivos hay un pin de modo. El protocolo puede haber cambiado, échale un vistazo.

Respuestas (1)

Lo resolví aumentando la demora para establecer la conexión Wifi después del reinicio. Para aquellos que puedan encontrar esto útil, el código de trabajo es el siguiente:

#include "mbed.h"  

Serial esp(D8, D2);  
DigitalOut myled(LED1);

void flush(void) {  
    while (esp.readable()) {  
        (void)esp.getc();  
    }    
}

char server[]="GET /update?api_key=9FL*********C2&field2=";

int main() {  
    int x=7;
    esp.baud(115200);
    flush();  

    esp.printf("AT+RST\r\n"); /* reset module */  
    wait(2);  
    flush();  

    esp.printf("AT+CWMODE=3\r\n");  
    wait(1);  
    flush();  

    // The huge delay was key to obtaining the IP address, so that further commands don't interfere with the ongoing process
    esp.printf("AT+CWJAP=\"Harsha\",\"*******\"\r\n"); /* configure as access point */  
    wait(20);  
    flush();  

    esp.printf("AT+CIPMUX=1\r\n");
    wait(5);
    flush();  
    //response();
    esp.printf("AT+CIPSTART=0,\"TCP\",\"api.thingspeak.com\",80\r\n");  
    wait(5);
    flush();  
    //response();

    esp.printf("AT+CIPSEND=0,%d\r\n", sizeof(server)+15);  
    wait(3);
    flush();  
    //response();

    esp.printf("%s", server);
    esp.printf("%d", x);
    esp.printf(" HTTP/1.0\r\n\r\n\r\n\r\n\r\n");
    wait(2);
    flush(); 

    while(1) {  
        //To indicate completion
        myled = 1;
        wait(0.1);
        myled = 0;
        wait(0.1);
    }   
    return 0;  
}