Contrôler une lumière avec Talkback sur Arduino
Cet exemple montre comment extraire des commandes d'une file d'attente ThingSpeak™ Talkback et les utiliser pour modifier l'état du voyant intégré.
Utilisez Talkback lorsque votre application implique une machine que vous souhaitez exécuter uniquement lorsqu'il y a une commande dans la file d'attente.
Dans cet exemple, vous écrivez TURN_ON
ou TURN_OFF
dans une file d'attente Talkback et l' appareil modifie l'état du voyant intégré pour correspondre à la commande. Utilisez le ThingSpeak TalkBack App pour stocker les commandes de votre appareil. Vous pouvez utiliser les commandes web interface ou HTTP pour écrire des commandes de appareil dans une liste. Vous pouvez stocker jusqu'à 8000 commandes dans la liste. Chaque fois que l' appareil lit la liste de commandes, il lit une seule commande et supprime la dernière commande de la liste.
Matériel pris en charge
Arduino UNO ou similaire avec module Wi-Fi ou connectivité Wi-Fi
MKR1000
"Conditions préalables"
Configurez un Talkback pour exécuter cet exemple. Allez dans Applications > TalkBacks et choisissez Nouveau Talkback. Ensuite, ajoutez des commandes à la file d'attente.
Ajouter des commandes à la file d'attente Talkback
Vous pouvez ajouter des commandes à une file d'attente Talkback de deux manières.
Utilisez l'interface Web ThingSpeak TalkBack pour ajouter des commandes à la file d'attente Talkback . Vous pouvez configurer Talkback pour avoir jusqu'à 8000 commandes.
Utilisez l'API ThingSpeak . Vous pouvez utiliser une requête HTTP POST pour ajouter une commande à la file d'attente. Dans le POST suivant, remplacez
TALKBACK_ID
,YOUR_TALKBACK_API_KEY
,TALKBACK_COMMAND
etPOSITION_NUMBER
par les valeurs appropriées. de votre canal.
POST https://api.thingspeak.com/talkbacks/TALKBACK_ID/commands api_key=YOUR_TALKBACK_API_KEY command_string=TALKBACK_COMMAND position=POSITION_NUMBER
Programmez votre Arduino
1) Téléchargez le dernier IDE Arduino®.
2) Ajoutez WiFi101
au Library Manager , s'il n'y est pas déjà.
a) Sélectionnez Sketch > Inclure la bibliothèque > Gérer les bibliothèques . Recherchez WiFi101
.
b) Sélectionnez la bibliothèque WiFi101 et cliquez sur Installer .
3) Ajoutez la bibliothèque WiFi101
au figure.
a) Sélectionnez Sketch > Inclure la bibliothèque > Gérer les bibliothèques .
b) Sélectionnez WiFi101
pour l'ajouter à votre figure.
4) Ajoutez la bibliothèque SPI
au figure.
a) Sélectionnez Sketch > Inclure la bibliothèque > Gérer les bibliothèques .
b) Sélectionnez SPI
pour l'ajouter à votre figure.
5) Dans le menu Outils , sélectionnez le port et la carte appropriés dans l'IDE Arduino.
6) Collez le code dans l'IDE Arduino. Ajoutez les informations de votre réseau Wi-Fi, votre clé d'API Talkback et votre numéro Talkback .
7) Programmez l' appareil , puis regardez le moniteur série et la LED pour observer les changements lorsque les commandes sont consommées. Chaque fois qu'une commande est exécutée, elle est supprimée de la liste. Vous devez ajouter d'autres commandes à la liste après leur utilisation.
Code
1) Commencez par inclure les bibliothèques appropriées et définissez les variables.
/* 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)
Dans la fonction setup
, initialisez la LED et démarrez le moniteur série.
void setup() { pinMode(LED_BUILTIN, OUTPUT); // Set up LED Serial.begin(115200); // Initialize serial }
3) Dans la boucle principale, commencez par établir une connexion au réseau WiFi local. Créez le message POST avec les paramètres corrects. Envoyez la requête POST, vérifiez le résultat et recherchez une commande Talkback . Attendez 60 secondes et vérifiez à nouveau la file d'attente.
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) Utilisez la fonction httpPOST
pour lire la prochaine commande Talkback .
// 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; }