Verwenden Sie den Particle Photon Client, um Kanalaktualisierungen zu abonnieren
Dieses Beispiel zeigt, wie Sie mithilfe einer Particle Photon-Platine 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 Devices > MQTT oben auf der ThingSpeak Seite, dann Add a new device.
b) Geben Sie einen Namen und eine Beschreibung für Ihr Gerät ein.
c) Klicken Sie unter Authorize channels to access auf Select a Channel > Enter a channel ID below.
d) Geben Sie die CheerLights-Kanalnummer 1417 ein und klicken Sie auf Add Channel.

e) Ihre Liste der autorisierten Kanäle enthält jetzt CheerLights (1417). Klicken Sie auf Add Device.
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 Codeabschnitt unten.
2) Integrieren Sie die Bibliothek MQTT/MQTT.h in Ihre Particle-IDE.
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 eingefügt.
5) Fügen Sie den hier angezeigten 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, und stellen Sie die Verbindung wieder her und abonnieren Sie sie, wenn die Verbindung verloren geht. Geben Sie an, dass das Gerät die Uhrzeit überprüft. Stellen Sie das Gerät für dieses Beispiel zwischen 23:00 und 4:00 Uhr in den Ruhemodus.
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 abonnieren Sie dann das Kanalfeld.
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 CheerLights-Farbe mithilfe des Cheer Lights-Discord-Servers unter https://cheerlights.com/growing-the-community-new-cheerlights-discord-bot/.
Siehe auch
Subscribe to a Channel Feed | Subscribe to a Channel Field Feed