Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um das englische Original zu sehen.

Steuern Sie ein Licht mit TalkBack auf ESP8266

Dieses Beispiel zeigt, wie Sie Befehle aus einer ThingSpeak ™ TalkBack-Warteschlange abrufen und dann die Befehle verwenden, um den Status der integrierten LED zu ändern.

Verwenden Sie TalkBack, wenn Ihre Anwendung eine Maschine umfasst, die Sie nur ausführen möchten, wenn sich ein Befehl in der Warteschlange befindet.

In diesem Beispiel schreiben Sie TURN_ON oder TURN_OFF in Ihre TalkBack-Warteschlange und das Gerät ändert den Status der integrierten LED entsprechend dem Befehl. Verwenden Sie die TalkBack-App über die Weboberfläche oder HTTP-Befehle, um Gerätebefehle in eine Liste zu schreiben. Sie können bis zu 8000 Befehle in der Liste speichern. Jedes Mal, wenn das Gerät die Befehlsliste liest, liest es einen einzelnen Befehl und entfernt diesen Befehl aus der Liste.

Unterstützte Hardware

  • ESP8266-basierte Geräte

  • NodeMCU

  • Wemos

Voraussetzungen

Sie müssen mindestens einen Kanal eingerichtet haben, um dieses Beispiel abzuschließen. Erstellen Sie einen Kanal, wie unter Daten in einem neuen Kanal sammeln gezeigt, und notieren Sie den Schreib-API-Schlüssel. Sie müssen auch ein TalkBack einrichten. Gehen Sie zu Apps > TalkBacks und wählen Sie Neues TalkBack.

Befehle zur TalkBack-Warteschlange hinzufügen

Sie können einer TalkBack-Warteschlange auf zwei Arten Befehle hinzufügen.

  • Verwenden Sie die ThingSpeak TalkBack-Weboberfläche, um Befehle zur TalkBack-Warteschlange hinzuzufügen. Sie können TalkBack so konfigurieren, dass es über bis zu 8000 Befehle verfügt.

  • Verwenden Sie die ThingSpeak-API. Sie können eine HTTP-POST-Anforderung verwenden, um der Warteschlange einen Befehl hinzuzufügen. Ersetzen Sie im folgenden POST TALKBACK_ID, YOUR_TALKBACK_API_KEY, TALKBACK_COMMAND und POSITION_NUMBER durch die entsprechenden Werte für Ihren Kanal.

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

Programmieren Sie Ihr Gerät

1) Laden Sie die neueste Arduino® IDE herunter.

2) Fügen Sie das ESP8266-Board-Paket hinzu.

3) Geben Sie unter Datei > Einstellungen https://arduino.esp8266.com/stable/package_esp8266com_index.json in Zusätzliche Board Manager-URLs ein.

4) Wählen Sie Tools > Boards > Board Manager. Geben Sie ESP8266 in die Suchleiste ein, wählen Sie dann das Paket aus und installieren Sie es.

5) Wählen Sie im Menü Tools den entsprechenden Port und die entsprechende Karte in der Arduino IDE aus. Die zum Generieren dieses Beispiels verwendete Hardware verwendete die Option Node MCU 1.0 (ESP 8266–12E).

6) Fügen Sie den Code in die Arduino IDE ein. Fügen Sie Ihre Netzwerkinformationen, Ihren TalkBack-API-Schlüssel und Ihre TalkBack-Nummer hinzu.

7) Programmieren Sie das Gerät und beobachten Sie dann den seriellen Monitor und die LED, um Änderungen zu erkennen, wenn Befehle ausgeführt werden. Jeder ausgeführte Befehl wird aus der Liste entfernt. Sie müssen der Liste weitere Befehle hinzufügen, nachdem diese verbraucht wurden.

Code

1) Beginnen Sie mit der Einbindung der entsprechenden Bibliotheken und der Definition von Variablen. Geben Sie Ihre Netzwerk-SSID und Ihr Passwort ein. Geben Sie Ihre Kanalnummer und die TalkBack-Parameter ein: myTalkBackID und myTalkBackKey.

/*
WiFi
FetchCommandFromTalkBack

Description: Checks a TalkBack queue every 60 seconds and sets the state of the built-in LED according
             to the latest command fetched. Turn the LED on and off by using the commands TURN_ON and TURN_OFF.
             The TalkBack documentation can be found at https://www.mathworks.com/help/thingspeak/talkback-app.html.
             
Hardware: ESP8266-based boards

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 myTalkBackID = <enter your TalkBack ID>;
const char * myTalkBackKey = <enter your TalkBack API key>;

2) Initialisieren Sie in der Funktion setup die LED und starten Sie den seriellen Monitor.

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

3) Beginnen Sie in der Hauptschleife mit dem Aufbau einer Verbindung zum lokalen WLAN-Netzwerk. Erstellen Sie die POST-Nachricht mit den richtigen Parametern. Stellen Sie die POST-Anfrage, überprüfen Sie das Ergebnis und suchen Sie nach einem TalkBack-Befehl. Warten Sie 60 Sekunden und überprüfen Sie die Warteschlange erneut.

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 TalkBack URI
  String tbURI = String("/talkbacks/") + String(myTalkBackID) + String("/commands/execute");
  
  // Create the message body for the POST out of the values
  String postMessage =  String("api_key=") + String(myTalkBackKey);                      
                       
   // Make a string for any commands that might be in the queue
  String newCommand = String();

  // Make the POST to ThingSpeak
  int x = httpPOST(tbURI, 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));
  }

  
  delay(60000); // Wait 60 seconds to check queue again
}

4) Verwenden Sie die Funktion httpPOST, um den nächsten TalkBack-Befehl zu lesen.

// General function to POST to ThingSpeak
int httpPOST(String uri, 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 ") + uri + String(" 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;
    
}