Ezali na ndenge ya kolakisa na ndenge ya kosala na ESP32 Tutorial 47/55 - WS2812 CheerLights na MQTT na Internet | SunFounder's ESP32 IoT kit
Na boyekoli oyo, tokosala système ya mindondo ya synchronized na kopesa ESP32 na ba LEDs ya WS2812 oyo ekoki kozala na contrôle ya mosika na nzela ya MQTT. Système oyo epesa bato ebele nzela ya kobongola couleur ya ba lumières na mbala moko, mpe kosala expérience ya connexion ata soki bazali na bisika ndenge na ndenge. Projet oyo esalelaka SunFounder ESP32 IoT kit, oyo ezali na microcontrôleur ya makasi na capacité ya Wi-Fi, mpe ezali malamu mpo na ba applications ya IoT.
Na vidéo mobimba, tokotalaka na détail na mise en place, na câblage, mpe na implémentation ya code mpo na kozwa effet oyo. Soki olingi koyeba mingi, tala vidéo na ba timestamps spécifiques (na vidéo na mm:ss).
Hardware Explication
Ba composants ya liboso ya projet oyo ezali microcontrôleur ESP32, bande ya LED WS2812, mpe broker ya MQTT. ESP32 ezali microcontrôleur ya polyvalent na Wi-Fi mpe Bluetooth ya intégré, oyo epesi ye nzela ya kokɔta na Internet na mpiko. Ezali lokola cerveau ya projet na biso, oyo esalaka communication mpe contrôle ya bande ya LED.
Bande ya LED WS2812 ezali na ba LEDs ya RGB oyo ekozwama na ndenge moko, oyo ekoki kozala na contrôle mpo na kolakisa ba couleurs ebele. Chaque LED ekoki kopelama to kozimama mpe kozwa couleur nyonso na nzela ya ligne ya données moko, mpe yango esalaka ete ezali malamu mpo na ba effets ya lumière dynamique. Broker ya MQTT esalaka facilitateur ya communication kati na ba clients ndenge na ndenge, mpe epesaka bato nzela ya kopublier mpe kos'abonner na ba sujets oyo contrôle ba couleurs ya LED.
Détails ya Datasheet
| Fabricant | Adafruit |
|---|---|
| Numéro ya pièce | WS2812B |
| Tension ya Logic/IO | 3.5 - 5.5 V |
| Tension ya alimentation | 5 V |
| Courant ya sortie (na canal) | 20 mA |
| Courant ya pointe (na canal) | 60 mA |
| Guidance ya fréquence PWM | 400 Hz |
| Seuils ya logique ya entrée | 0.2Vcc (bas), 0.7Vcc (haut) |
| Chute ya tension / RDS(on) / saturation | 0.5 V |
| Limites thermiques | Température ya fonctionnement: -25 to 85 °C |
| Package | 5050 SMD moko na moko |
| Notes / variantes | Ezali na ba longueurs mpe ba configurations ndenge na ndenge |
- Kokanisa ete alimentation ezali ya kokoka mpo na bande ya WS2812 mpo na kokima ba chutes ya tension.
- Salela terre commune kati na ESP32 mpe bande ya LED.
- Kokanisa ete ba lignes ya données ezali ya mokuse mpo na kopekisa dégradation ya signal.
- Kokanisa kosalela condensateur (1000μF) na nzela ya alimentation mpo na kokitisa ba pointes ya tension.
- Salela ba résistances ya malamu na ligne ya données mpo na kopekisa réflexion ya signal.
- Keba na courant total oyo bande ya LED ezali kosala; salela alimentation ya libanda soki esengeli.
Instructions ya Câblage
Mpo na kokɔta na câblage ya ESP32 na bande ya LED WS2812, banda na kokɔta na alimentation. Kɔta na fil ya motane oyo euti na bande ya LED na source ya 5V mpe fil ya moi-nda na terre. Na sima, kɔta na ligne ya données (fil ya jaune) oyo euti na bande ya WS2812 na pin 14 na ESP32. Kanisa ete ESP32 mpe ezali connecté na terre moko na bande ya LED mpo na kokanisa référence commune.
Nsima ya kosala ba connexions ya alimentation mpe données, kɔta na ESP32 na ordinateur na yo na nzela ya câble micro USB mpo na programmation. Esengeli ete ESP32 ezala na courant ntango ozali ko-programmer mpo na kosala connexion. Ntango câblage esili, okoki kopusa code mpe komeka mise en place.

Ba Exemples ya Code & Explication
Code ebandi na kosangisa ba bibliothèques ya liboso mpo na fonctionnalités ya Wi-Fi mpe MQTT. Ba identifiants ssid mpe password basalelami mpo na kobomba ba identifiants ya Wi-Fi na yo, ntango mqtt_server ezali na adresse ya broker ya MQTT.
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt.cheerlights.com";
Na sima, tozali kopesa ba couleurs ya CheerLights oyo esungami mpe ba valeurs ya RGB na bango na nzela ya ba tableaux. Oyo esalaka ete programme ekoka kozwa ba réglages ya couleur na mpiko kolandana na oyo moto akoti.
String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};
int colorRGB[][3] = { 255, 0, 0, // "red"
255, 192, 203, // "pink" ...};
Fonction setup() ebandisaka communication série, esalaka connexion ya Wi-Fi, mpe ebongisaka client ya MQTT. Ebendaka mpe bande ya LED.
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
pixels.begin();
pixels.show();
}
Boucle principale ezalaka na ntango nyonso kotala connexion ya MQTT mpe kosala ba messages oyo ezali kokɔta mpo na contrôle ya ba couleurs ya LED. Fonction callback() ebandisamaka ntango message ezali kozwa na sujet oyo tos'abonni.
Démonstration / Nini Okokanisa
Ntango nyonso esili kobongisama mpe code epusi, okoki kobongola couleur ya ba LEDs ya WS2812 na kotinda ba messages na sujet ya MQTT. Soki moto mosusu abongoli couleur, ba appareils nyonso oyo ezali connecté ekolakisa mbongwana na mbala moko. Keba na ba problèmes oyo ekoki kozala lokola polarité oyo ebaloli to ba connexions oyo ezali malamu te, oyo ekoki kopekisa ba LEDs ete esala malamu (na vidéo na mm:ss).
Ba Timestamps ya Vidéo
- 00:00 Ebandeli
- 2:00 Maloba ya liboso
- 3:48 Lokasa ya mikanda
- 6:33 Ndimbola ya bobongisi ya singa
- 7:35 Ndimbola ya code ya Arduino
- 15:03 Kopona board ya ESP32 mpe port ya COMP na Arduino IDE
- 16:46 Emanzeli ya CheerLighs
/*********
:ref: https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
https://docs.sunfounder.com/projects/kepler-kit/en/latest/iotproject/5.mqtt_pub.html
*********/
#include <WiFi.h>
#include <PubSubClient.h>
//#include <Wire.h>
#include <Adafruit_NeoPixel.h>
// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";
// Add your MQTT Broker address:
const char* mqtt_server = "mqtt.cheerlights.com";
const char* unique_identifier = "sunfounder-client-sdgvsasdda";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
int value = 0;
// Define the supported CheerLights colors and their RGB values
String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};
int colorRGB[][3] = { 255, 0, 0, // "red"
255, 192, 203, // "pink"
0, 255, 0, // "green"
0, 0, 255, // "blue"
0, 255, 255, // "cyan"
255, 255, 255, // "white"
255, 223, 223, // "warmwhite"
255, 223, 223, // "oldlace"
128, 0, 128, // "purple"
255, 0, 255, // "magenta"
255, 255, 0, // "yellow"
255, 165, 0}; // "orange"
// init rgb strip
#define LED_PIN 13
#define NUM_LEDS 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
// wifi default settings
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
// rgb strip begin
pixels.begin();
pixels.show();
}
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
// If a message is received on the topic, you will check this message.
// Changes the output state according to the message
if (String(topic) == "cheerlights") {
Serial.print("Changing color to ");
Serial.println(messageTemp);
setColor(messageTemp);
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(unique_identifier)) {
Serial.println("connected");
// Subscribe
client.subscribe("cheerlights");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setColor(String color) {
// Loop through the list of colors to find the matching color
for (int colorIndex = 0; colorIndex < 12; colorIndex++) {
if (color == colorName[colorIndex]) {
// Set the color of each NeoPixel on the strip
for (int pixel = 0; pixel < NUM_LEDS; pixel++) {
pixels.setPixelColor(pixel, pixels.Color (colorRGB [colorIndex][0], colorRGB [colorIndex][1], colorRGB [colorIndex][2]));
}
pixels.show();
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
Common Course Links
Common Course Files
Mokili na bisika
-
DokumentasiESP32 Tutorial 47/55- SunFounder doc page for cheer lightdocs.sunfounder.com
Fichiers📁
Aucun fichier disponible.