Main Content

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

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 の色を変更します。

参考

|

関連する例

詳細