Main Content

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Steuern Sie ein Licht mit TalkBack auf Arduino

Dieses Beispiel zeigt, wie Befehle aus einer ThingSpeak™ TalkBack-Warteschlange abgerufen und zum Ändern des Status der integrierten LED verwendet werden.

Verwenden Sie TalkBack, wenn Ihre Anwendung einen Computer umfasst, den 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 eine TalkBack-Warteschlange und das Gerät ändert den Status der integrierten LED entsprechend dem Befehl. Verwenden Sie ThingSpeak TalkBack App , um Befehle für Ihr Gerät zu speichern. Sie können die Befehle web interface oder HTTP verwenden, 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 den neuesten Befehl aus der Liste.

Unterstützte Hardware

  • Arduino UNO oder ähnliches mit Wi-Fi-Modul oder Wi-Fi-Konnektivität

  • MKR1000

Voraussetzungen

Richten Sie TalkBack ein, um dieses Beispiel auszuführen. Gehen Sie zu „Apps“ > „TalkBacks“ und wählen Sie „Neues TalkBack“. Fügen Sie dann Befehle zur Warteschlange hinzu.

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 bis zu 8000 Befehle hat.

  • Verwenden Sie die ThingSpeak API. Sie können eine HTTP-POST-Anfrage 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 von deinem 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 Arduino

1) Laden Sie die neueste Arduino® IDE herunter.

2) Fügen Sie WiFi101 zum „Bibliotheksmanager“ hinzu, falls es noch nicht vorhanden ist.

a) Wählen Sie „Skizze“ > „Bibliothek einschließen“ > „Bibliotheken verwalten“. Suchen Sie nach WiFi101.

b) Wählen Sie die Bibliothek „WiFi101“ aus und klicken Sie auf „Installieren“.

3) Fügen Sie der Skizze die Bibliothek WiFi101 hinzu.

a) Wählen Sie „Skizze“ > „Bibliothek einschließen“ > „Bibliotheken verwalten“.

b) Wählen Sie WiFi101 aus, um es Ihrer Skizze hinzuzufügen.

4) Fügen Sie der Skizze die SPI- Bibliothek hinzu.

a) Wählen Sie „Skizze“ > „Bibliothek einschließen“ > „Bibliotheken verwalten“.

b) Wählen Sie SPI aus, um es Ihrer Skizze hinzuzufügen.

5) Wählen Sie im Menü „Extras“ den entsprechenden Port und das entsprechende Board in der Arduino IDE aus.

6) Fügen Sie den Code in die Arduino IDE ein. Fügen Sie Ihre WLAN-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 beobachten, wenn Befehle verbraucht werden. Jedes Mal, wenn ein Befehl ausgeführt wird, wird er 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.

/*
FetchCommandFromTalkBack

Description: Checks a TalkBack queue every 60 seconds and set 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: Arduino WiFi Shield 101 or MKR

Notes:
 - Requires WiFi101 library. Use the WiFi101 library version 0.13.0 or older. WiFi101 library versions 0.14.0 and newer have a bug
   that prevents the ThingSpeak library from working properly.
 - Make sure the WiFi Shield 101 has updated firmware. Find instructions at https://www.arduino.cc/en/Tutorial/FirmwareUpdater.

Copyright 2018, The MathWorks, Inc.
*/

#include <SPI.h>  // Required for shield communication
#include <WiFi.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 damit, eine Verbindung zum lokalen WLAN-Netzwerk herzustellen. Erstellen Sie die POST-Nachricht mit den richtigen Parametern. Senden 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 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;
    
}