Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la versión original en inglés.

Actualización de canales y control de luces con ESP8266

Este ejemplo muestra cómo actualizar un canal y obtener comandos de una cola de ThingSpeak™ TalkBack. Utilice los comandos para cambiar el estado del LED integrado.

Use TalkBack cuando su aplicación involucre una máquina que desee ejecutar solo cuando haya un comando en la cola.

Puede actualizar su canal y recuperar simultáneamente el último comando guardado en una cola de TalkBack. Agregar el parámetro talkback_key a su solicitud POST y ThingSpeak devuelve el comando TalkBack más reciente en la respuesta.

Hardware compatible

  • ESP8266 y otras placas basadas en ESP8266

  • NodoMCU

  • Wemos

Requisitos previos

Debe tener al menos un canal configurado para completar este ejemplo. Cree un canal como se muestra en Recopilar datos en un nuevo canal y registre la clave API de escritura. También debe configurar un TalkBack. Ir aplicaciones > TalkBack y elige Nuevo TalkBack.

Agregar comandos a la cola de TalkBack

Puede agregar comandos a una cola de TalkBack de dos maneras.

  • Usar ThingSpeak Replicar interfaz web para agregar comandos a la cola de TalkBack. Puede configurar TalkBack para tener hasta 8000 comandos.

  • Utilice la API de ThingSpeak. Puede usar una solicitud HTTP POST para agregar un comando a la cola. En el siguiente POST, reemplace el TALKBACK_ID , YOUR_TALKBACK_API_KEY , TALKBACK_COMMAND , y POSITION_NUMBER.

POST https://api.thingspeak.com/talkbacks/TALKBACK_ID/commands
 api_key=YOUR_TALKBACK_API_KEY
     command_string=TALKBACK_COMMAND
     position=POSITION_NUMBER

Programe su ESP8266

1) Descargue el último IDE de Arduino®.

2) Agregue el paquete de placa ESP8266.

3) Bajo Expediente > preferencias , ingrese https://arduino.esp8266.com/stable/package_esp8266com_index.json en URL adicionales de Board Manager.

4) Elige Tools > Boards > Board Manager. Ingresar ESP8266 en la barra de búsqueda, luego seleccione e instale el paquete.

5) En el Instrumentos seleccione el puerto y la placa adecuados en el IDE de Arduino. El hardware usado para generar este ejemplo usó el Node MCU 1.0 (ESP 8266–12E) opción.

6) Pegue el código en el IDE de Arduino. Agrega la información de tu red Wi-Fi, tu clave API de TalkBack y tu número de TalkBack.

7) Programe el dispositivo y luego mire el monitor serial y el LED para observar los cambios cuando se consumen los comandos. Cada comando que se ejecuta se elimina de la lista. Debe agregar más comandos a la lista después de que se consuman.

Código

1) Comience por incluir las bibliotecas apropiadas y definir variables. Ingrese el SSID y la contraseña de su red. Edite el número de canal y los parámetros de TalkBack para la ID y la clave API.

/*
WriteMultipleFieldsAndFetchCommandFromTalkBack

Description: Writes values to fields 1,2,3, and 4 and checks a TalkBack queue every 20 seconds for new commands.
             The TalkBack documentation can be found at https://www.mathworks.com/help/thingspeak/talkback-app.html.
             
Hardware: ESP8266-based boards

Notes:
- Requires ESP8266WiFi library and ESP8266 board add-on. See https://github.com/esp8266/Arduino for details.
- Select the target hardware from Tools > Board

Copyright 2018, The MathWorks, Inc.
*/

#include <ESP8266WiFi.h>

char ssid[] = <enter your SSID>;   // your network SSID (name) 
char pass[] = <enter your password>;   // your network password

WiFiClient  client;

unsigned long myChannelNumber = <enter your channel ID>;
unsigned long myTalkBackID = <enter your TalkBack ID>;
const char * myTalkBackKey = <enter your TalkBack API key>;

// Initialize values for ThingSpeak updates
int number1 = 0;
int number2 = random(0,100);
int number3 = random(0,100);
int number4 = random(0,100);

2) En el setup función, inicialice el LED e inicie el monitor serie.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);  // Set up LED
  Serial.begin(115200);  // Initialize serial
}

3) En el bucle principal, comience por establecer una conexión a la red Wi-Fi local. Cree el mensaje POST a partir de los números generados aleatoriamente. Envíe el POST, verifique el resultado y busque un comando de TalkBack. Luego genere nuevos números aleatorios para la próxima solicitud POST en 20 segundos.

void loop() {

  // Connect or reconnect to Wi-Fi
  if(WiFi.status() != WL_CONNECTED){
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(String(ssid));
    while(WiFi.status() != WL_CONNECTED){
      WiFi.begin(ssid, pass);  
      Serial.print(".");
      delay(5000);     
    } 
    Serial.println("\nConnected.");
  }

  // Create the message body for the POST out of the values
  String postMessage =  String("field1=") + String(number1) +
                        String("&field2=") + String(number2) +
                        String("&field3=") + String(number3) +
                        String("&field4=") + String(number4) +
                        String("&api_key=") + String(myWriteAPIKey) +
                        String("&talkback_key=") + String(myTalkBackKey);                      
                       

   // Make a string for any commands in the queue
  String newCommand = String();

  // Make the POST to ThingSpeak
  int x = httpPOST(postMessage, newCommand);
  client.stop();
  
  // Check the result
  if(x == 200){
    Serial.println("checking queue..."); 
    // check for a command returned from TalkBack
    if(newCommand.length() != 0){

      Serial.print("  Latest command from queue: ");
      Serial.println(newCommand);
      
      if(newCommand == "TURN_ON"){
        digitalWrite(LED_BUILTIN, HIGH);  
      }

      if(newCommand == "TURN_OFF"){
        digitalWrite(LED_BUILTIN, LOW);
      }
    }
    else{
      Serial.println("  Nothing new.");  
    }
    
  }
  else{
    Serial.println("Problem checking queue. HTTP error code " + String(x));
  }

  // Confirm code works by changing values
  number1++;
  if(number1 > 99){
    number1 = 0;
  }
  number2 = random(0,100);
  number3 = random(0,100);
  number4 = random(0,100);
  
  delay(20000); // Wait 20 seconds to update the channel again
}

4) Usa el httpPOST para publicar datos en ThingSpeak y leer el siguiente comando de TalkBack.

// General function to POST to ThingSpeak
int httpPOST(String postMessage, String &response){

  bool connectSuccess = false;
  connectSuccess = client.connect("api.thingspeak.com",80);

  if(!connectSuccess){
      return -301;   
  }
  
  postMessage += "&headers=false";
  
  String Headers =  String("POST /update HTTP/1.1\r\n") +
                    String("Host: api.thingspeak.com\r\n") +
                    String("Content-Type: application/x-www-form-urlencoded\r\n") +
                    String("Connection: close\r\n") +
                    String("Content-Length: ") + String(postMessage.length()) +
                    String("\r\n\r\n");

  client.print(Headers);
  client.print(postMessage);

  long startWaitForResponseAt = millis();
  while(client.available() == 0 && millis() - startWaitForResponseAt < 5000){
      delay(100);
  }

  if(client.available() == 0){       
    return -304; // Didn't get server response in time
  }

  if(!client.find(const_cast<char *>("HTTP/1.1"))){
      return -303; // Couldn't parse response (didn't find HTTP/1.1)
  }
  
  int status = client.parseInt();
  if(status != 200){
    return status;
  }

  if(!client.find(const_cast<char *>("\n\r\n"))){
    return -303;
  }

  String tempString = String(client.readString());
  response = tempString;
  
  return status;
    
}