Tutorial ESP32 47/55 - WS2812 CheerLights iyadoo la isticmaalayo MQTT internetka | Qalabka ESP32 IoT ee SunFounder
Cashiggani, waxaan ku abuuri doonnaa nidaam iftiin oo isku xidhan iyadoo la adeegsanayo ESP32 iyo WS2812 LEDs kuwaas oo laga maamuli karo meel fog iyadoo la adeegsanayo MQTT. Nidaamkani wuxuu u oggolaanayaa isticmaalayaal badan inay isku mar beddelaan midabka nalalka, iyagoo abuuraya khibrad isku xidhan iyadoon loo eegin goobta ay ku sugan yihiin. Mashruucu wuxuu adeegsadaa qalabka SunFounder ESP32 IoT kit, kaas oo ay ku jiraan microcontroller awood badan oo leh awoodaha Wi-Fi, taasoo ka dhigaysa mid ku habboon codsiyada IoT.
Inta lagu jiro fiidiyowga, waxaan ku soo qaadi doonnaa habka loo habeeyo, xiriirinta, iyo hirgelinta koodka si loo gaaro saameyntan. Haddii aad u baahan tahay caddayn dheeri ah, hubi inaad fiirisid fiidiyowga waqtiyada gaarka ah (fiidiyowga mm:ss).
Qalabka La Sharxay
Qaybaha ugu muhiimsan ee mashruucan waxaa ka mid ah microcontroller-ka ESP32, xariijinta LED-ka WS2812, iyo dhexdhexaadiyaha MQTT. ESP32 waa microcontroller kala duwan oo leh awoodaha Wi-Fi iyo Bluetooth ku dhex jira, taasoo u oggolaanaysa inay si fudud ugu xidhmaanto Internetka. Waxay u shaqeysaa sidii maskaxda mashruuceena, iyadoo maamulaysa isgaarsiinta iyo xakamaynta xariijinta LED-ka.
Xariijinta LED-ka WS2812 waxay ka kooban tahay LED-yada RGB ee si gaar ah loo cinwaan karo, kuwaas oo la xakameyn karo si ay u muujiyaan midabyo kala duwan. LED kasta waa la shidi karaa ama la damin karaa oo loo dejin karaa midab kasta iyadoo la adeegsanayo hal xariiq oo xog ah, taasoo ka dhigaysa mid ku habboon saameynta iftiinka firfircoon. Dhexdhexaadiyaha MQTT wuxuu fududeeyaa isgaarsiinta u dhaxaysa macaamiisha kala duwan, isagoo u oggolaanaya isticmaalayaasha inay daabacaan oo ay iska qoraan mawduucyada xakameynaya midabada LED-ka.
Faahfaahinta Xogta
| Soo saaraha | Adafruit |
|---|---|
| Nambarka qaybta | WS2812B |
| Danabka Logic/IO | 3.5 - 5.5 V |
| Danabka sahayda | 5 V |
| Qulqulka wax soo saarka (kanal kasta) | 20 mA |
| Qulqulka ugu sarreeya (kanal kasta) | 60 mA |
| Hagaha soo noqnoqoshada PWM | 400 Hz |
| Heerarka xadka gelinta | 0.2Vcc (hoose), 0.7Vcc (sare) |
| Hoos u dhaca danabka / RDS(on) / dheregsanaanta | 0.5 V |
| Xadka kulaylka | Heerkulka shaqada: -25 ilaa 85 °C |
| Baakad | 5050 SMD oo gaar ah |
| Xusuusin / noocyo kala duwan | Waxaa laga heli karaa dherer iyo qaabab kala duwan |
- Hubi inaad siiso sahayda koronto oo ku filan xariijinta WS2812 si aad uga fogaato hoos u dhaca danabka.
- Isticmaal dhul (ground) wadaag ah oo u dhexeeya ESP32 iyo xariijinta LED-ka.
- Ka dhig xariiqyada xogta kuwa gaagaaban si looga hortago xaalufinta signal-ka.
- Tixgeli inaad isticmaasho capacitor (1000μF) oo ku xidhan sahayda korontada si loo simo kororka danabka.
- Isticmaal resistors ku habboon oo ku yaal xariiqda xogta si looga hortago milicsiga signal-ka.
- Ka warqab wadarta qulqulka korontada ee xariijinta LED-ka; isticmaal koronto dibadeed marka loo baahdo.
Tilmaamaha Xiriirinta
Si aad ugu xiriirto ESP32 iyo xariijinta LED-ka WS2812, waxaad ku bilaabaysaa isku xirka sahayda korontada. Ku xir fiilada cas ee xariijinta LED-ka ilaa ilo koronto 5V ah iyo fiilada madow dhulka. Marka xigta, ku xir xariiqda xogta (fiilada jaalaha ah) ee xariijinta WS2812 ilaa pin-ka 14 ee ESP32. Hubi in ESP32 sidoo kale uu ku xidhan yahay dhulka isku midka ah ee xariijinta LED-ka si loo ilaaliyo tixraac wadaag ah.
Ka dib markaad dejiso xiriirrada korontada iyo xogta, ku xir ESP32 kombuyutarkaaga iyadoo la adeegsanayo fiilada micro USB si loo barnaamijiyo. Waxaad u baahan doontaa inaad hubiso in ESP32 uu shidan yahay inta lagu jiro barnaamijyada si xiriir loo sameeyo. Marka la xiriiro, waxaad sii wadi kartaa inaad soo gudbiso koodka oo aad tijaabiso dejinta.

Tusaalooyinka Koodka & Sharaxaada
Koodku wuxuu ku bilaabmaa inuu ku daro maktabado lagama maarmaan ah oo loogu talagalay shaqada Wi-Fi iyo MQTT. Aqoonsiyada ssid iyo password waxaa loo isticmaalaa in lagu kaydiyo aqoonsigaaga Wi-Fi, halka mqtt_server uu haysto cinwaanka dhexdhexaadiyaha MQTT.
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt.cheerlights.com";
Marka xigta, waxaanu qeexaynaa midabada CheerLights ee la taageeray iyo qiyamkooda RGB ee u dhigma iyadoo la adeegsanayo arrays. Tani waxay u oggolaanaysaa barnaamijka inuu si fudud u helo dejimaha midabka iyadoo ku saleysan gelinta isticmaalaha.
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" ...};
Shaqada setup() waxay bilaabaysaa isgaarsiinta serial-ka, dejisa xiriirka Wi-Fi, oo diyaarisa macmiilka MQTT. Sidoo kale waxay bilaabaysaa xariijinta LED-ka.
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
pixels.begin();
pixels.show();
}
Loop-ka ugu weyn wuxuu si joogto ah u hubinayaa xiriirka MQTT oo uu ka shaqeeyaa farriimaha soo gala ee xakameynaya midabada LED-ka. Shaqada callback() waxaa la kiciyaa marka farriin la helo mawduuca la iska qoray.
Muuqaal / Waxa Laga Filan Karo
Marka wax walba la dejiyo oo koodka la soo gudbiyo, waxaad awood u yeelan doontaa inaad beddesho midabka LED-yada WS2812 adoo u soo dira farriimo mawduuca MQTT. Haddii isticmaale kale uu beddelo midabka, dhammaan qalabka ku xidhan waxay ka tarjumayaan isbeddelka isku mar. Ka digtoonow arrimaha suurtagalka ah sida rogaanshaha danabka ama xiriirrada aan habboonayn, kuwaas oo ka hortagi kara in LED-yadu si sax ah u shaqeeyaan (fiidiyowga mm:ss).
Waqtiyada Fiidiyowga
- 00:00 Bilow
- 2:00 Hordhac
- 3:48 Bogga dukumeentiga
- 6:33 Xidhiidhka korontada oo la sharaxay
- 7:35 Koodhka Arduino oo la sharaxay
- 15:03 Doorashada guddiga ESP32 iyo dekedda COMP ee Arduino IDE
- 16:46 Tusaale 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
Kheyraadka & Tixraacyada
-
DukumentiESP32 Tutorial 47/55 - SunFounder doc page for cheer lightdocs.sunfounder.com
Faylasha📁
Fayl la'aan.