TalkBack di thingspeak non risponde con ESP8266

Ciao

da qualche giorno cerco di utilizzare le api fornite da ThingSpeak https://thingspeak.com/docs per inviare dati da alcuni sensori a questa pagina DHT22 test - ThingSpeak IoT.

Utilizzo Arduino Leonardo e un ESP8266 ESP-01

Per l’invio dei dati non ci sono problemi con la seguente funzione:

void updateThingsSpeak()
{
  
  // TCP connection
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"; // "184.106.153.149"
  cmd += "\",80";
  Serial1.println(cmd);
  Serial.println(cmd);
  
  if(Serial1.find("Error")){
    Serial.println("AT+CIPSTART error");
    return;
  }
  
  // prepare GET string
  String getStr = "GET /update?api_key=";
  getStr += apiKey;
  getStr += "&field1=";
  getStr += String(strTemp);
  getStr += "&field2=";
  getStr += String(strHum);
  getStr += "&field3=";
  getStr += String(strLight);
  getStr += "\r\n\r\n";

  // send data length
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  Serial1.println(cmd);
  Serial.println(cmd);
  
  if(Serial1.find(">")){
    Serial1.print(getStr);
    Serial.println(getStr);
  }
  else{
    Serial1.println("AT+CIPCLOSE");
    // alert user
    Serial.println("AT+CIPCLOSE");
  }
  
}

In questo caso non sembra ci sia nessun problema. Inviando i seguenti valori

Temp: 25.1 Hum: 53.8 Light: 903.0

a terminale ottengo

AT+CIPSTART=“TCP”,“184.106.153.149”,80
AT+CIPSEND=77
GET /update?api_key=&field1=25.1&field2=53.8&field3=903.0

e i grafici sono aggiornati correttamente alla pagina DHT22 test - ThingSpeak IoT

Seguendo le istruzioni di questo indirizzo https://thingspeak.com/docs/talkback cerco senza successo di accendere un led (pin 3) ricevendo i comandi dal servizio TalkBack. Per testare il funzionamento inserisco “TURN_ON”.

La funzione:

void checkTalkBack()
{
  
String talkBackAPIKey = "<apikey talkback specifica>"; 
String talkBackID = "<id talkback specifico>";


  char charIn; 
  // TCP connection
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"; // "184.106.153.149"
  cmd += "\",80";
  delay(1000);
  Serial1.println(cmd);
  Serial.println(cmd);
  
  if(Serial1.find("Error")){
    Serial.println("AT+CIPSTART error");
    return;
  }
  
  // prepare GET string

  String getStr = "GET https://api.thingspeak.com/talkbacks/" + talkBackID + "/commands/execute?api_key=" + talkBackAPIKey;
  
  ///getStr += apiKey;
  ///getStr +="&field1=";
  ///getStr += String(strTemp);
  getStr += "\r\n\r\n";

  // send data length
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  Serial1.println(cmd);
  Serial.println(cmd);
  
  if(Serial1.find(">")){
    Serial1.print(getStr);
    Serial.println("-------Richiesta TalkBack inviata ----------");
    Serial.println(getStr);
  }
  else{
    Serial1.println("AT+CIPCLOSE");
    // alert user
    Serial.println("AT+CIPCLOSE");
  }
  Serial.println("wait...");
  delay(1000);
  talkBackCommand="";
  while (Serial1.available()) {

   
      charIn = Serial1.read();
      //Serial.print(charIn);
      talkBackCommand += charIn;
    
   }
  Serial.println("-------RISPOSTA TalkBack  ----------");
  Serial.println(talkBackCommand);

    // Turn On/Off the On-board LED
    if (find_text("TURN_ON",talkBackCommand) > 0 )
    {
        Serial.println(talkBackCommand);
        digitalWrite(redLed, HIGH);
        Serial.println("---------------------RED ON ------------- talkback");
    }
    else if (find_text("TURN_OFF",talkBackCommand) > 0)
    {
        Serial.println(talkBackCommand);
        digitalWrite(redLed, LOW);
    }
    else if (find_text("+IPD",talkBackCommand) > 0) 
        {
         inputString = talkBackCommand.substring(find_text("+IPD",talkBackCommand));
         if (find_text("OK",inputString) > 0) netMsg = inputString.substring(8,find_text("OK"  ,inputString));
         inputString=netMsg;
         if (find_text("OK",inputString) > 0) netMsg = inputString.substring(0,find_text("OK"  ,inputString));
         Serial.print("Length of netMsg ");
         Serial.println(find_text("OK"  ,inputString));
        }
    Serial1.flush();
    delay(1000);
}

Ripeto quasi completamente quanto indicato nella precedente funzione per inviare richieste a api.thingspeak.com.

il monito seriale riporta:

AT+CIPSTART=“TCP”,“184.106.153.149”,80
AT+CIPSEND=91
-------Richiesta TalkBack inviata ----------
GET https://api.thingspeak.com/talkbacks//commands/execute?api_key=

wait…
-------RISPOSTA TalkBack ----------
GET https://api.thingspeak.com/talkbacks//commands/execute

Secondo la documentazione dovrei ottenere “TURN_ON” e nella pagina per il controllo dei comandi di talkback https://thingspeak.com/apps/talkbacks/ dovrebbero sparire i comandi inviati.

Al contrario la risposta è quella indicata sopra, il led resta spento ma dalla pagina di talkback è eliminato un comando dall’elenco ogni volta come se tutto funzionasse?

Le funzioni sono riprese da questo codice: http://nutandvoltz.blogspot.it/2015/02/iot-tiva-c-with-esp8266-and-thingspeak.html

Avete suggerimenti?

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili