このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
Particle Photon Client を使用してチャネル更新を購読する
この例では、Particle Photon ボードを使用して CheerLights チャネルのチャネル更新をサブスクライブする方法を説明します。プログラムはチャネルから色を読み取り、Photon ボードの内蔵 LED を使用して表示します。この例で示すように、チャネル フィードをサブスクライブするか、または CheerLights チャネルの色のフィールドを直接サブスクライブすることができます。
設定
1) CheerLightsチャネル用の MQTT デバイスを作成します。
a) ThingSpeakページの上部にある [デバイス] > [MQTT] をクリックし、[新しいデバイスの追加] をクリックします。
b) デバイスの名前と説明を入力します。
c) 「チャネルへのアクセスを許可」の下で、 Select a Channel
> Enter a channel ID below
をクリックします。
d) CheerLightsチャネル番号1417
を入力し、«チャネルの追加 » をクリックします。
e) «承認済みチャネル» リストにCheerLights (1417)
が含まれるようになりました。「デバイスの追加」をクリックします。
f) [新しいデバイスが追加されました] ダイアログが表示されます。「認証情報のダウンロード」 > 「プレーンテキスト」をクリックします。「完了」をクリックします。以下の「コード」セクションで保存した認証情報を使用します。
2) ライブラリMQTT/MQTT.h
を Particle IDE に含めます。
3) Web IDE を使用して、新しい Photon アプリを作成します。
4) MQTT ライブラリを追加します。ライブラリを追加すると、コードの先頭に#include <MQTT.h>
という行が追加されます。
5) ここに表示されているコードを貼り付けます。channelID,
、 username
、およびpassword
を必要に応じて変更します。
コード
1) まず、 ThingSpeak™と通信するための変数を宣言します。CheerLights のフィールド 1 (チャネル1417) を購読します。プログラムには、これらの行の先頭のスペースに MQTT ライブラリが含まれています。
// This #include statement is automatically added by the Particle IDE. #include <MQTT.h> const long channelID = 1417; String subscribeTopic = "channels/" + String( channelID ) + "/subscribe/fields/field1"; char clientId[] = "MQTT_CLIENDID_FROM_THINGSPEAK"; //clientID returned when adding this device on ThingSpeak char username[] = "MQTT_USERNAME_FROM_THINGSPEAK"; //username returned when adding this device on ThingSpeak char password[] = "MQTT_PASSWORD_FROM_THINGSPEAK"; //password returned when adding this device on ThingSpeak char server[] = "mqtt3.thingspeak.com"; MQTT client(server, 1883, callback); // Initialize the MQTT client
2) MQTT ブローカーから中継されたメッセージは、 callback
関数を呼び出してメッセージを処理します。
void callback(char* topic, byte* payload, unsigned int length) { char p[length + 1]; // Leave an extra space to null terminate the string. memcpy(p, payload, length); p[length] = NULL; // Terminate the string. Particle.publish(p); if (!strncmp(p, "red", 3)) { RGB.color(255, 0, 0); } else if (!strncmp(p, "green", 5)) { RGB.color(0, 255, 0); } else if (!strncmp(p, "blue", 4)) { RGB.color(0, 0, 255); } else if(!strncmp(p, "yellow", 6)) { RGB.color(255, 255, 0); } else if(!strncmp(p, "orange", 5)) { RGB.color(255, 165, 0); } else if(!strncmp(p, "magenta", 5)) { RGB.color(255, 0, 255); } else if(!strncmp(p, "cyan", 5)) { RGB.color(0, 255, 255); } else if(!strncmp(p, "white", 5)) { RGB.color(255, 255, 255); } else if(!strncmp(p, "oldlace", 5)) { RGB.color(253, 245, 230); } else if(!strncmp(p, "purple", 5)) { RGB.color(128, 0, 128); } else if(!strncmp(p, "pink", 5)) { RGB.color(255, 192, 203); } else { RGB.color(255, 255, 255); } }
3) setup
関数を使用して LED 制御を有効にし、MQTT 接続とサブスクリプションを開始します。
void setup() { // Set up the onboard LED. RGB.control(true); // Connect to the server. subscribeMQTT(); }
4) loop
関数で、接続を確認し、接続が失われた場合は再接続してサブスクライブします。デバイスが時刻をチェックするように指定します。この例では、デバイスを午後 11 時から午前 4 時までスリープ モードに設定します。
void loop() { int timeHour = Time.hour(); if (client.isConnected()) { client.loop(); } else { subscribeMQTT(); } if ((timeHour > 23) or (timeHour < 4)) { Particle.publish("Sleep"); System.sleep(SLEEP_MODE_DEEP, 7200); } delay(1); }
5) subscribeMQTT
関数を使用してブローカーとの接続を確立し、チャネルフィールドをサブスクライブします。
void subscribeMQTT() { if (!client.isConnected()) { Particle.publish("Connecting"); client.connect(clientId, username, password, NULL, MQTT::QOS0, 0, NULL, true); delay(2000); if (client.isConnected()) { client.subscribe(subscribeTopic); Particle.publish("Subscribed"); } else { Particle.publish("Not connected"); } } }
コードをテストする
コードをテストするには、「@cheerlights My favorite CheerLights color is green
」などのツイートで CheerLights の色を変更します。
参考
Subscribe to a Channel Feed | Subscribe to a Channel Field Feed