このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
ESP8266 のTalkBackでライトを制御する
この例では、ThingSpeak ™ TalkBackキューからコマンドを取得し、そのコマンドを使用してオンボード LED のステータスを変更する方法を示します。
キューにコマンドがある場合にのみ実行するマシンがアプリケーションに関係する場合は、 TalkBack を使用します。

この例では、 TalkBackキューに TURN_ON または TURN_OFF を書き込むと、デバイスはコマンドに合わせてオンボード LED の状態を変更します。 TalkBackアプリ を Web インターフェース または HTTP コマンド経由で使用して、デバイス コマンドをリストに書き込みます。リストには最大 8000 個のコマンドを保存できます。デバイスはコマンド リストを読み取るたびに、1 つのコマンドを読み取り、そのコマンドをリストから削除します。

サポートされているハードウェア
ESP8266ベースのデバイス
NodeMCU
ウェモス
前提条件
この例を完了するには、少なくとも 1 つのチャネルを設定する必要があります。新しいチャネルでデータを収集するに示すようにチャネルを作成し、書き込み API キーを記録します。TalkBackも設定する必要があります。[Apps] > [TalkBack] に移動して、[New TalkBack] を選択します。

TalkBackキューにコマンドを追加する
TalkBackキューにコマンドを追加するには、次の 2 つの方法があります。
TalkBackキューにコマンドを追加するには、ThingSpeak TalkBack Web インターフェースを使用します。TalkBack は最大 8000 個のコマンドを持つように設定できます。
ThingSpeak API を使用します。HTTP POST要求を使用して、コマンドをキューに追加できます。次の POST で、
TALKBACK_ID、YOUR_TALKBACK_API_KEY、TALKBACK_COMMAND、POSITION_NUMBERを、ご使用のチャネルの適切な値に置き換えます。
POST https://api.thingspeak.com/talkbacks/TALKBACK_ID/commands
api_key=YOUR_TALKBACK_API_KEY
command_string=TALKBACK_COMMAND
position=POSITION_NUMBER
デバイスをプログラムする
1) 最新の Arduino® IDE をダウンロードします。
2) ESP8266 ボード パッケージを追加します。
3) [File] > [Preferences] で、[Additional Board Manager URLs] に「https://arduino.esp8266.com/stable/package_esp8266com_index.json」と入力します。
4) Tools > Boards > Board Manager を選択します。検索バーに「ESP8266」と入力し、パッケージを選択してインストールします。
5) ツール メニューで、Arduino IDE で適切なポートとボードを選択します。この例を生成するために使用されたハードウェアは、Node MCU 1.0 (ESP 8266–12E) オプションを使用しました。
6) コードを Arduino IDE に貼り付けます。ネットワーク情報、 TalkBack API キー、 TalkBack番号を追加します。
7) デバイスをプログラムし、シリアル モニターと LED を監視して、コマンドが実行されたときの変化を観察します。実行された各コマンドはリストから削除されます。コマンドが消費された後、リストにさらにコマンドを追加する必要があります。
コード
1) まず、適切なライブラリをインクルードし、変数を定義します。ネットワークのSSIDとパスワードを入力します。チャネル番号とTalkBackパラメーターを入力します: myTalkBackID と 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) setup 関数で LED を初期化し、シリアル モニターを起動します。
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Set up LED
Serial.begin(115200); // Initialize serial
}
3) メイン ループでは、まずローカル Wi-Fi ネットワークへの接続を確立します。正しいパラメーターを使用して POST メッセージを作成します。POST要求を作成し、結果を確認し、 TalkBackコマンドをチェックします。60 秒待ってからキューを再度確認してください。
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) httpPOST 関数を使用して、次の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;
}