Ẹkọ ESP32 47/55 - WS2812 CheerLights pẹ̀lú lílo MQTT lórí Internet | SunFounder's ESP32 IoT kit
Nínú ẹ̀kọ́ yìí, a óò ṣẹ̀dá ètò iná tí ó ṣiṣẹ́ pọ̀ nípa lílo ESP32 àti WS2812 LEDs tí a lè ṣàkóso láti ọ̀nà jíjìn nípasẹ̀ MQTT. Ètò yìí jẹ́ kí ọ̀pọ̀lọpọ̀ àwọn olùṣàmúlò yí àwọ̀ iná padà ní ìgbà kan náà, tí ó ń dá ìrírí ìsopọ̀ pẹ̀lú ara wọn láìka ibi tí wọ́n wà sí. Iṣẹ́-ọwọ́ yìí ń lo SunFounder ESP32 IoT kit, tí ó ní ẹ̀rọ alágbára pẹ̀lú agbára Wi-Fi, tí ó jẹ́ dídára fún àwọn ohun èlò IoT.
Nínú fídíò náà, a óò ṣàlàyé ìmúrasílẹ̀ tí a nílò, ìsopọ̀, àti ìmúṣe kóòdù láti ṣàṣeyọrí èyí. Bí o bá nílò àlàyé síwájú sí i, rí i dájú pé o wo fídíò náà ní àwọn àkókò pàtó (nínú fídíò ní mm:ss).
Àlàyé Ohun Èlò
Àwọn ohun àkọ́kọ́ tí a ń lò nínú iṣẹ́-ọwọ́ yìí ni ESP32 microcontroller, WS2812 LED strip, àti MQTT broker. ESP32 jẹ́ microcontroller tí ó ní ọ̀pọ̀lọpọ̀ ìlò pẹ̀lú agbára Wi-Fi àti Bluetooth tí a kọ́ sínú rẹ̀, tí ó jẹ́ kí ó lè sopọ̀ mọ́ Íńtánẹ́ẹ̀tì ní ìrọ̀rùn. Ó jẹ́ ọpọlọ fún iṣẹ́-ọwọ́ wa, tí ó ń ṣàkóso ìbánisọ̀rọ̀ àti ṣíṣàkóso LED strip.
WS2812 LED strip ní àwọn RGB LEDs tí a lè ṣàkóso ọ̀kọ̀ọ̀kan, tí a lè ṣàkóso láti fi hàn ọ̀pọ̀lọpọ̀ àwọ̀. Ọ̀kọ̀ọ̀kan LED ni a lè tan án tàbí pa á, àti ṣètò rẹ̀ sí àwọ̀ èyíkéyìí nípa lílo laini data kan ṣoṣo, tí ó mú un dára fún àwọn ipa iná tí ń yí padà. MQTT broker ń ràn wá lọ́wọ́ nínú ìbánisọ̀rọ̀ láàárín àwọn olùṣàmúlò, tí ó jẹ́ kí wọ́n lè tẹ̀ jáde àti ṣàmúlò àwọn kókó ọ̀rọ̀ tí ń ṣàkóso àwọ̀ LED.
Àwọn Àlàyé Datasheet
| Olùṣe | Adafruit |
|---|---|
| Nọ́mbà apá | WS2812B |
| Fóltì Logic/IO | 3.5 - 5.5 V |
| Fóltì ìpèsè | 5 V |
| Ìwọ̀n ìjàde (fún ikanni) | 20 mA |
| Ìwọ̀n tí ó ga jùlọ (fún ikanni) | 60 mA |
| Ìtọ́sọ́nà ìgbohùnsáfẹ́fẹ́ PWM | 400 Hz |
| Àwọn ìpele ìwọ̀n ìwọlé | 0.2Vcc (rẹ̀lẹ̀), 0.7Vcc (ga) |
| Ìdìndì fóltì / RDS(on) / ìkún | 0.5 V |
| Àwọn ìwọ̀n ooru | Ìwọ̀n ìṣiṣẹ́: -25 sí 85 °C |
| Ìpako | 5050 SMD kọ̀ọ̀kan |
| Àwọn àkíyèsí / àwọn oríṣiríṣi | Wà ní ọ̀pọ̀lọpọ̀ gígùn àti àwọn ìtòlẹ́sẹẹsẹ |
- Rí i dájú pé ìpèsè agbára tí ó tọ́ wà fún WS2812 strip láti yẹra fún ìdìndì fóltì.
- Lo ilẹ̀ tí ó wọ́pọ̀ láàárín ESP32 àti LED strip.
- Jẹ́ kí àwọn laini data kúrú láti ṣèdíwọ́ fún ìbàjẹ́ àmì.
- Rò nípa lílo capacitor (1000μF) kọjá ìpèsè agbára láti dẹ̀rọ̀ àwọn ìgbòkègbodò fóltì.
- Lo àwọn resistor tí ó tọ́ lórí laini data láti ṣèdíwọ́ fún ìtúmọ̀ àmì.
- Ṣàkíyèsí iye ìwọ̀n tí LED strip ń fa; lo agbára ìta nígbà tí a bá nílò rẹ̀.
Àwọn Ìtọ́sọ́nà Ìsopọ̀
Láti sopọ̀ ESP32 pẹ̀lú WS2812 LED strip, bẹ̀rẹ̀ nípa sísopọ̀ ìpèsè agbára. Sopọ̀ okun pupa láti LED strip sí orísun agbára 5V àti okun dudu sí ilẹ̀. Nígbà tí o bá ṣe èyí, sopọ̀ laini data (okun ofeefee) láti WS2812 strip sí pin 14 lórí ESP32. Rí i dájú pé ESP32 náà ti sopọ̀ sí ilẹ̀ kan náà pẹ̀lú LED strip láti ṣetọ́jú ìtọ́kasí tí ó wọ́pọ̀.
Lẹ́yìn tí o bá ti ṣètò àwọn ìsopọ̀ agbára àti data, sopọ̀ ESP32 sí kọ̀ǹpútà rẹ nípa lílo okun micro USB fún ìṣètò. O ní láti rí i dájú pé ESP32 ti tan án nígbà tí o ń ṣètò rẹ̀ láti fi ìsopọ̀ kalẹ̀. Nígbà tí o bá ti sopọ̀, o lè tẹ̀ síwájú láti gbé kóòdù sílẹ̀ àti ṣàyẹ̀wò ìṣètò náà.

Àwọn Àpẹẹrẹ Kóòdù & Ìṣàlàyé
Kóòdù náà bẹ̀rẹ̀ nípa fífi àwọn àkójọpọ̀ tí a nílò fún Wi-Fi àti MQTT sí inú. Àwọn idámọ̀ ssid àti password ni a ń lò láti fi àwọn ìwé-ẹ̀rí Wi-Fi rẹ pamọ́, nígbà tí mqtt_server ń di àdírẹ́sì MQTT broker mú.
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt.cheerlights.com";
Nígbà tí a bá ṣe èyí, a ń ṣàlàyé àwọn àwọ̀ CheerLights tí a ṣètìlẹ́yìn àti àwọn iye RGB wọn nípa lílo àwọn àkójọpọ̀. Èyí jẹ́ kí ètò náà lè wọlé sí àwọn ètò àwọ̀ ní ìrọ̀rùn nípa ìwọ̀n olùṣàmúlò.
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" ...};
Ìṣiṣẹ́ setup() ń bẹ̀rẹ̀ ìbánisọ̀rọ̀ serial, ṣètò ìsopọ̀ Wi-Fi, àti múra MQTT client. Ó tún bẹ̀rẹ̀ LED strip.
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
pixels.begin();
pixels.show();
}
Lupu àkọ́kọ́ ń ṣàyẹ̀wò ìsopọ̀ MQTT nígbà gbogbo àti ń ṣiṣẹ́ lórí àwọn ifiranṣẹ́ tí ń wọlé tí ń ṣàkóso àwọ̀ LED. Ìṣiṣẹ́ callback() ni a ń mú nígbà tí ifiranṣẹ́ kan bá gbé wọlé lórí kókó ọ̀rọ̀ tí a ti ṣàmúlò.
Ìṣàfihàn / Ohun Tí O Lè Retí
Nígbà tí ohun gbogbo bá ti ṣètò àti tí a ti gbé kóòdù sílẹ̀, o yẹ kí o lè yí àwọ̀ WS2812 LEDs padà nípa fífi àwọn ifiranṣẹ́ ránṣẹ́ sí kókó ọ̀rọ̀ MQTT. Bí olùṣàmúlò mìíràn bá yí àwọ̀ padà, gbogbo àwọn ẹ̀rọ tí ó ti sopọ̀ yóò fi ìyípadà náà hàn ní ìgbà kan náà. Ṣọ́ra fún àwọn ìṣòro tí ó lè wáyé bíi ìyípadà polarity tàbí àwọn ìsopọ̀ tí kò tọ́, tí ó lè ṣèdíwọ́ fún àwọn LED láti ṣiṣẹ́ dáradára (nínú fídíò ní mm:ss).
Àwọn Àkókò Fídíò
- 00:00 Bẹ̀rẹ̀
- 2:00 Ìfihàn
- 3:48 Ojú-ewé ìwé àkọsílẹ̀
- 6:33 Àlàyé nípa ìsopọ̀ oníná
- 7:35 Àlàyé kóòdù Arduino
- 15:03 Yíyàn bọ́ọ̀dù ESP32 àti èbúté COMP nínú Arduino IDE
- 16:46 Ìfihàn 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
Orisun & itọkasi
-
Iwe-ẹriESP32 Tutorial 47/55 - SunFounder doc page for cheer lightdocs.sunfounder.com
Fáìlìs📁
Ko si awọn faili ti o wa.