このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
ESP8266 のTalkBackでライトを制御する
この例では、 ThingSpeak™ TalkBackキューからコマンドをフェッチし、そのコマンドを使用してオンボード LED のステータスを変更する方法を示します。
キューにコマンドがある場合にのみ実行したいマシンがアプリケーションに含まれる場合は、 TalkBack を使用します。
この例では、 TURN_ON
またはTURN_OFF
をTalkBackキューに書き込むと、デバイスはコマンドに一致するようにオンボード LED の状態を変更します。TalkBack Appからweb interfaceまで、または HTTP コマンドを使用して、デバイス コマンドをリストに書き込みます。リストには最大 8000 個のコマンドを保存できます。デバイスがコマンド リストを読み取るたびに、単一のコマンドを読み取り、そのコマンドをリストから削除します。
《サポートされているハードウェア》
ESP8266ベースのデバイス
ノードMCU
ウェモス
≪前提条件≫
この例を完了するには、少なくとも 1 つのチャネルを設定する必要があります。Collect Data in a New Channelに示すようにチャネルを作成し、書き込み API キーを記録します。TalkBackも設定する必要があります。アプリ > TalkBacks に移動し、新しいTalkBack を選択します。
TalkBackキューにコマンドを追加
2 つの方法のいずれかでコマンドをTalkBackキューに追加できます。
ThingSpeak TalkBack Web インターフェイスを使用して、 TalkBackキューにコマンドを追加します。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 ボード マネージャー 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; }