Ẹkọ ESP32 52/55 - WS2812 CheerLights MQTT Àgbáyé Ìmúṣọ̀kan pẹ̀lú LCD | SunFounder ESP32 IoT kit
Nínú ẹ̀kọ́ yìí, a ó ṣẹ̀dá àkànṣe CheerLights kan ní lílo ESP32, èyí tí yóò mú àwọn àwọ̀ ṣiṣẹ́ pọ̀ ní àgbáyé nípasẹ̀ MQTT. Àkànṣe yìí kì í ṣe pé yóò yí àwọ̀ padà nípa àwọn ìfidánilẹ́yìn láti ọ̀dọ̀ àwọn olùṣàmúlò mìíràn nìkan, ṣùgbọ́n yóò tún fi àwọ̀ tí ó wà lọ́wọ́lọ́wọ́ àti iye ìgbà tí a ti mú un túnṣe hàn lórí iboju LCD. Àbájáde rẹ̀ jẹ́ ìfihàn ìgbádùn kan ti agbára IoT, tí ó ń fi bí àwọn ẹ̀rọ ṣe lè ní ìbáṣepọ̀ àti bí wọ́n ṣe lè mú àwọn olùṣàmúlò wà ní ìsopọ̀ kọjá àwọn ọ̀nà jíjìn. Fún ìṣàlàyé àfikún, wo fídíò náà (nínú fídíò ní 00:00).
Àlàyé Ohun Èlò
Láti kọ́ àkànṣe yìí, o nílò ẹ̀rọ aláṣàkóso ESP32 kan, okùn LED WS2812 kan, àti iboju LCD kan. ESP32 ṣiṣẹ́ gẹ́gẹ́ bí ọpọlọ iṣẹ́ náà, ní lílo agbára Wi-Fi tí ó wà nínú rẹ̀ láti sopọ̀ mọ́ ayélujára àti láti gba àwọn ifiranṣẹ́ MQTT. Èyí ń gba àwọn ìmúdójúìwọ̀n àkókò gidi lórí àwọn àwọ̀ LED nípa ìfidánilẹ́yìn àgbáyé láti ọ̀dọ̀ àwọn olùṣàmúlò mìíràn.
Okùn LED WS2812 jẹ́ yíyan tí ó gbajúmọ̀ fún àwọn àkànṣe tí ó nílò àwọn LED RGB tí a lè ṣàkóso. A lè ṣàkóso LED kọ̀ọ̀kan lọ́tọ̀ọ̀tọ̀, tí ó ń gba àwọn ìfihàn àwọ̀ ọ̀lọ́pọ̀lọ́pọ̀. LCD yóò pèsè ìfidánilẹ́yìn ojúrán kan ti àwọ̀ tí ó wà lọ́wọ́lọ́wọ́ àti iye ìgbà tí a ti yí i padà, tí ó ń mú ìbáṣepọ̀ olùṣàmúlò pọ̀ sí i.
Àwọn Àlàyé Data Sheet
| Olùṣe | SunFounder |
|---|---|
| Nọ́mbà apá | ESP32 |
| Folti Logic/IO | 3.3 V |
| Folti ìpèsè | 5 V |
| Ìṣàn jáde (fún ikanni kọ̀ọ̀kan) | 20 mA |
| Ìṣàn tó pọ̀ jù (fún ikanni kọ̀ọ̀kan) | 60 mA |
| Ìtọ́sọ́nà ìgbohùnsáfẹ́fẹ́ PWM | 400 Hz |
| Àwọn ìpele ìṣàkóso ìfidánilẹ́yìn | 0.15 V (rẹ̀lẹ̀), 0.8 V (ga) |
| Ìdìndì folti / RDS(on) / ìkún | 0.2 V |
| Àwọn ààlà ooru | 85 °C |
| Àpótí | ESP32 module |
| Àwọn àkíyèsí / àwọn oríṣiríṣi | Ó ní Wi-Fi àti Bluetooth tí a kọ́ sínú rẹ̀ |
- Rí i dájú pé ìpèsè agbára tí ó tọ́ wà fún ESP32 (5 V) àti okùn WS2812 (5 V).
- Lo ilẹ̀ tí ó wọ́pọ̀ kan láàárín ESP32 àti okùn LED.
- Ṣe ìmúṣẹ alárinà MQTT tí ó tọ́ fún ìṣàjọpọ̀ àwọ̀.
- Fiyè sí ìsopọ̀ pin data fún WS2812 (pin 14 gẹ́gẹ́ bí kódù náà).
- Ṣọ́ra pẹ̀lú iye àwọn LED; bí ó bá ti kọjá àwọn ààlà agbára, ó nílò àwọn orísun agbára àfikún.
Àwọn Ìtọ́sọ́nà Ìsopọ̀


Láti sopọ̀ àwọn ẹ̀yà náà, bẹ̀rẹ̀ nípa síso okùn LED WS2812 pọ̀. Sopọ̀ pin ilẹ̀ (tí ó sábà jẹ́ dúdú) ti okùn LED sí pin ilẹ̀ lórí ESP32. Nígbà tí o bá ṣe èyí, sopọ̀ pin VCC (tí ó sábà jẹ́ pupa) ti okùn LED sí ìjàde 5V lórí ESP32. Níkẹyìn, sopọ̀ pin data (tí ó sábà jẹ́ ofeefee) sí GPIO pin 14 lórí ESP32.
Fún LCD, sopọ̀ pin ilẹ̀ (tí ó sábà jẹ́ dúdú) sí ilẹ̀ lórí ESP32. Pin VCC (tí ó sábà jẹ́ pupa) yẹ kí a sopọ̀ sí ìjàde 5V. Pin SDA (tí ó sábà jẹ́ grẹy) sopọ̀ sí GPIO pin 21, nígbà tí pin SCL (tí ó sábà jẹ́ funfun) sopọ̀ sí GPIO pin 22. Ìtòlẹ́sẹẹsẹ yìí ń gba ESP32 láyè láti bá LCD ṣe ìbánisọ̀rọ̀ àti láti fi àlàyé hàn bí a ti nílò rẹ̀.
Àwọn Àpẹẹrẹ Kódù & Ìṣàlàyé
Nínú iṣẹ́ ìtòlẹ́sẹẹsẹ, a bẹ̀rẹ̀ LCD àti sopọ̀ sí Wi-Fi. Kódù tí ó wà nísàlẹ̀ ń fi hàn bí a ṣe lè ṣàlàyé àwọn ilé-ìkàwé tí a nílò àti bí a ṣe ṣètò LCD:
#include
#include
LiquidCrystal_I2C lcd(0x27, 16,2); // ṣètò àdírẹ́sì LCD
void setup() {
Serial.begin(115200);
lcd.init(); // bẹ̀rẹ̀ LCD
lcd.backlight(); // Tan ìmọ́lẹ̀ ẹ̀yìn LCD.
}
Èyí bẹ̀rẹ̀ LCD fún ìlò, tí ó ń gba á láyè láti fi àwọn ifiranṣẹ́ hàn. Ìyọkúrò tí ó tẹ̀lé e ń fi hàn bí a ṣe fi ìsopọ̀ Wi-Fi múlẹ̀:
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
lcdConnect(); //fún LCD
delay(500);
}
Serial.println("WiFi ti sopọ̀");
}
Iṣẹ́ yìí fi ìsopọ̀ kan múlẹ̀ sí nẹ́tíwọọkì Wi-Fi tí a yàn, tí ó ń fi ifiranṣẹ́ kan hàn lórí LCD nígbà tí ó ń sopọ̀. Níkẹyìn, ìṣàkóso ìyípadà àwọ̀ ni a ṣe nínú iṣẹ́ callback:
void callback(char* topic, byte* message, unsigned int length) {
String messageTemp;
for (int i = 0; i < length; i++) {
messageTemp += (char)message[i];
}
if (String(topic) == "cheerlights") {
setColor(messageTemp);
}
}
Iṣẹ́ yìí ń tẹ́tí sí àwọn ifiranṣẹ́ tí ń wọlé lórí kókó "cheerlights" àti ó ń mú àwọ̀ túnṣe ní ìbámu. Kódù kíkún rẹ̀ ń jáde nísàlẹ̀ àpilẹ̀kọ náà, nítorí náà rí i dájú pé o ṣe àtúnyẹ̀wò rẹ̀ fún ìmúṣẹ kíkún.
Ìfihàn / Ohun Tí O Lè Retí
Nígbà tí àkànṣe náà bá parí, o lè retí pé okùn LED yóò yí àwọ̀ padà nípa àwọn ìfidánilẹ́yìn láti ọ̀dọ̀ ìkànnì MQTT àgbáyé kan. LCD yóò fi orúkọ àwọ̀ tí ó wà lọ́wọ́lọ́wọ́ àti iye ìgbà tí a ti yí i padà hàn. Bí o bá gé ìsopọ̀ ayélujára kúrò, LCD yóò fi "Ṣíṣopọ̀..." hàn títí tí a ó fi tún ìsopọ̀ kan múlẹ̀ (nínú fídíò ní 12:30).
Àwọn ìdìbò tí ó wọ́pọ̀ ní pípèsè pé àwọn pin tí ó tọ́ ni a lò fún àwọn ìsopọ̀ data àti pé àwọn ìdánimọ̀ Wi-Fi jẹ́ deede. Bí àwọn àìṣedéédéé kan bá wà nínú SSID tàbí ọ̀rọ̀ìbanijẹ́, ESP32 yóò kùnà láti sopọ̀, àti LCD yóò máa fi ifiranṣẹ́ ìsopọ̀ hàn.
Àwọn Àkókò Fídíò
- 00:00 Bẹ̀rẹ̀
- 1:59 Ìfihàn sí iṣẹ́-ìdásílẹ̀ náà
- 6:16 Àlàyé nípa ìsopọ̀ oníná
- 8:13 Àlàyé kóòdù Arduino
- 14:26 Yíyàn bọ́ọ̀dù ESP32 àti ibùdó COM lórí Arduino IDE
- 16:07 Ìfihàn CheerLight pẹ̀lú LCD
/*********
This is the origianl code from Examples->iot_5_cheerlight of SunFounder
full video instrucions https://youtu.be/xEqmxMiF-E8
📚⬇️ Download and resource page https://robojax.com/RJT685
I have added LCD to display:
1-Color name
2-Count the number of times the color is updated
3-Showon LCD if wifi is connected
4-Show connecting if not connected or disconnected
Written by Ahmad Shamshiri
www.Robojax.com
Dec 29, 2023
: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 <Wire.h>
#include <LiquidCrystal_I2C.h>
//SDA->21,SCL->22
LiquidCrystal_I2C lcd(0x27, 16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int colorCount = 0;
int lastColor=0;
byte connected[] = {
B00001,
B00001,
B00011,
B00111,
B00111,
B01111,
B01111,
B11111
};
#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 = "dars";
const char* password = "5152535455";
// 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);
lcd.init();// initialize the lcd
lcd.backlight(); // Turns on the LCD backlight.
// 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) {
lcdConnect();//for LCD
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()) {
lcdConnect();
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]) {
lastColor = colorIndex;//remeber the last color
colorCount++;//increment the count
// 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]));
delay(100);
}
pixels.show();
}
}
}
void lcdConnect()
{
lcd.clear();
lcd.setCursor(0, 0); //line 0
lcd.print("Connecting...");
lcd.setCursor(0, 1);
lcd.print("SSID:"); //line 1
lcd.print(ssid);
}
void loop() {
lcd.clear();
if (!client.connected()) {
reconnect();
}else{
lcd.createChar(0, connected);
lcd.setCursor(15, 0);
lcd.write(byte(0));
}
client.loop();
//first row
lcd.setCursor(0, 0);
lcd.print("Color: ");
lcd.print(colorName[lastColor]);
//second row
lcd.setCursor(0, 1);
lcd.print("Changed ");
lcd.print(colorCount);
lcd.print(" times");
delay(1000);//we must have delay to able to read the display
}
Common Course Links
Common Course Files
Orisun & itọkasi
-
Iwe-ẹriESP32 Tutorial 52/55- SunFounder doc page for CheerLightdocs.sunfounder.com
Fáìlìs📁
Ko si awọn faili ti o wa.