Verwenden Sie den Particle Photon Client, um Kanalaktualisierungen zu abonnieren
Dieses Beispiel zeigt, wie Sie mit einem Particle Photon-Board Kanalaktualisierungen vom CheerLights-Kanal abonnieren. Das Programm liest eine Farbe aus dem Kanal und zeigt sie mithilfe der integrierten LED auf der Photon-Platine an. Sie können den Kanal-Feed oder direkt das Farbfeld auf dem CheerLights-Kanal abonnieren, wie in diesem Beispiel gezeigt.
Aufstellen
1) Erstellen Sie ein MQTT-Gerät für den CheerLights-Kanal.
a) Klicken Sie oben auf der ThingSpeak Seite auf „Geräte“ > „MQTT“ und dann auf „Neues Gerät hinzufügen“.
b) Geben Sie einen Namen und eine Beschreibung für Ihr Gerät ein.
c) Klicken Sie unter „Zugriff auf Kanäle autorisieren“ auf Select a Channel
> Enter a channel ID below
.
d) Geben Sie die CheerLights-Kanalnummer 1417
ein und klicken Sie auf „Kanal hinzufügen“.
e) Ihre Liste „Autorisierte Kanäle“ enthält jetzt CheerLights (1417)
. Klicken Sie auf „Gerät hinzufügen“.
f) Das Dialogfeld „Neues Gerät hinzugefügt“ wird angezeigt. Klicken Sie auf „Anmeldeinformationen herunterladen“ > „Nur-Text“. Klicken Sie auf „Fertig“. Verwenden Sie die gespeicherten Anmeldeinformationen im Abschnitt „Code“ unten.
2) Binden Sie die Bibliothek MQTT/MQTT.h
in Ihre Particle-IDE ein.
3) Erstellen Sie mithilfe der Web-IDE eine neue Photon-App.
4) Fügen Sie die MQTT-Bibliothek hinzu. Durch das Hinzufügen der Bibliothek wird die Zeile #include <MQTT.h>
oben in Ihrem Code hinzugefügt.
5) Fügen Sie den hier gezeigten Code ein. Ändern Sie channelID,
und username
sowie password
entsprechend.
Code
1) Beginnen Sie mit der Deklaration der Variablen für die Kommunikation mit ThingSpeak™. Abonnieren Sie Feld 1 von CheerLights, Kanal 1417. Das Programm fügt die MQTT-Bibliothek in den Bereich oben in diesen Zeilen ein.
// 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) Vom MQTT-Broker weitergeleitete Nachrichten rufen die Funktion callback
auf, um die Nachricht zu verarbeiten.
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) Verwenden Sie die Funktion setup
, um die LED-Steuerung zu aktivieren und die MQTT-Verbindung und das Abonnement zu starten.
void setup() { // Set up the onboard LED. RGB.control(true); // Connect to the server. subscribeMQTT(); }
4) Überprüfen Sie in der Funktion loop
, ob eine Verbindung besteht, stellen Sie die Verbindung wieder her und abonnieren Sie sie, wenn die Verbindung verloren geht. Legen Sie fest, dass das Gerät die Uhrzeit überprüft. Versetzen Sie das Gerät in diesem Beispiel zwischen 23:00 und 23:00 Uhr in den Schlafmodus. und 4 Uhr morgens
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) Verwenden Sie die Funktion subscribeMQTT
, um die Verbindung mit dem Broker herzustellen und dann das Kanalfeld zu abonnieren.
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"); } } }
Testen Sie Ihren Code
Um Ihren Code zu testen, ändern Sie die Farbe von CheerLights mit einem Tweet wie „@cheerlights My favorite CheerLights color is green
“.
Siehe auch
Subscribe to a Channel Feed | Subscribe to a Channel Field Feed