Koyarwar ESP32 52/55 - WS2812 CheerLights MQTT Aiki na Duniya tare da LCD | SunFounder ESP32 IoT kit
A cikin wannan koyawa, za mu ƙirƙiri aikin CheerLights ta amfani da ESP32, wanda zai daidaita launuka a duniya ta hanyar MQTT. Wannan aikin ba kawai zai canza launuka bisa ga abubuwan da wasu masu amfani suka shigar ba, amma kuma zai nuna launin na yanzu da sau nawa aka sabunta shi akan allon LCD. Sakamakon shi ne nuni mai daɗi na iyawar IoT, wanda ke nuna yadda na'urori za su iya mu'amala da kuma kiyaye masu amfani da haɗin kai a kan nisa. Don ƙarin bayani, kalli bidiyon a (a cikin bidiyo a 00:00).
Bayanin Kayan Aiki
Don gina wannan aikin, kana buƙatar microcontroller na ESP32, igiyar LED ta WS2812, da allon LCD. ESP32 yana aiki a matsayin kwakwalwar aikin, yana amfani da damar Wi-Fi da ke cikinsa don haɗawa da intanet da karɓar saƙonnin MQTT. Wannan yana ba da damar sabunta launukan LED a lokaci guda bisa ga shigarwar duniya daga wasu masu amfani.
Igiyar LED ta WS2812 zaɓi ne sananne don ayyukan da ke buƙatar LEDs na RGB masu adireshi. Kowane LED za a iya sarrafa shi da kansa, yana ba da damar nunin launuka masu yawa. LCD zai ba da tabbaci na gani na launin na yanzu da adadin sau da aka canza shi, yana haɓaka mu'amalar mai amfani.
Bayanan Datasheet
| Mai ƙirƙira | SunFounder |
|---|---|
| Lambar sashi | ESP32 |
| Wutar Logic/IO | 3.3 V |
| Wutar samarwa | 5 V |
| Fitarwa na yanzu (kowane tashar) | 20 mA |
| Kololuwar yanzu (kowane tashar) | 60 mA |
| Jagorar mitar PWM | 400 Hz |
| Ƙofofin shigar da dabaru | 0.15 V (ƙasa), 0.8 V (sama) |
| Ragewar wutar / RDS(on) / cikawa | 0.2 V |
| Iyakokin zafi | 85 °C |
| Kunshin | Modul na ESP32 |
| Bayanan kula / bambance-bambance | Ya haɗa da Wi-Fi da Bluetooth na ciki |
- Tabbatar da samar da wutar da ta dace ga ESP32 (5 V) da igiyar WS2812 (5 V).
- Yi amfani da ƙasa guda tsakanin ESP32 da igiyar LED.
- Aiwatar da broker na MQTT mai dacewa don daidaita launuka.
- Kula da haɗin fil ɗin bayanai na WS2812 (fil 14 bisa ga lambar).
- Yi hattara da adadin LEDs; wuce iyakokin wutar yana buƙatar ƙarin tushen wutar.
Umarnin Haɗin Waya


Don haɗa kayan aikin, fara da haɗa igiyar LED ta WS2812. Haɗa fil ɗin ƙasa (yawanci baƙi) na igiyar LED zuwa fil ɗin ƙasa akan ESP32. Na gaba, haɗa fil ɗin VCC (yawanci ja) na igiyar LED zuwa fitarwar 5V akan ESP32. A ƙarshe, haɗa fil ɗin bayanai (sau da yawa rawaya) zuwa fil ɗin GPIO 14 akan ESP32.
Don LCD, haɗa fil ɗin ƙasa (sau da yawa baƙi) zuwa ƙasa akan ESP32. Fil ɗin VCC (yawanci ja) ya kamata a haɗa shi zuwa fitarwar 5V. Fil ɗin SDA (yawanci launin toka) yana haɗawa zuwa fil ɗin GPIO 21, yayin da fil ɗin SCL (yawanci fari) yana haɗawa zuwa fil ɗin GPIO 22. Wannan saitin yana ba da damar ESP32 ya sadarwa da LCD kuma ya nuna bayanai kamar yadda ake buƙata.
Misalan Lamba & Jagora
A cikin aikin saitin, muna fara LCD kuma mu haɗa da Wi-Fi. Lambar da ke ƙasa tana nuna yadda za a ayyana ɗakunan karatu da suka dace da saita LCD:
#include
#include
LiquidCrystal_I2C lcd(0x27, 16,2); // saita adireshin LCD
void setup() {
Serial.begin(115200);
lcd.init(); // fara LCD
lcd.backlight(); // Kunna hasken baya na LCD.
}
Wannan yana fara LCD don amfani, yana ba da damar nuna saƙonni. Ɗan gajeren abu na gaba yana nuna yadda ake kafa haɗin Wi-Fi:
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
lcdConnect(); //don LCD
delay(500);
}
Serial.println("WiFi an haɗa");
}
Wannan aikin yana kafa haɗi zuwa cibiyar sadarwar Wi-Fi da aka ƙayyade, yana nuna saƙo akan LCD yayin haɗawa. A ƙarshe, ana sarrafa dabilar canza launi a cikin aikin kira:
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);
}
}
Wannan aikin yana sauraron saƙonni masu shigowa akan taken "cheerlights" kuma yana sabunta launi daidai da haka. Cikakken lambar yana sauka a ƙarƙashin labarin, don haka tabbatar da duba shi don cikakken aiwatarwa.
Nuni / Abin da za ka Yi Tsammani
Bayan kammala aikin, za ka iya tsammanin igiyar LED za ta canza launuka bisa ga abubuwan da aka shigar daga ciyarwar MQTT ta duniya. LCD zai nuna sunan launin na yanzu da sau nawa aka canza shi. Idan ka yanke intanet, LCD zai nuna "Ana haɗawa..." har sai an sake kafa haɗi (a cikin bidiyo a 12:30).
Matsalolin gama gari sun haɗa da tabbatar da cewa an yi amfani da filaye masu dacewa don haɗin bayanai da kuma tabbatar da cewa bayanan shiga Wi-Fi daidai ne. Idan akwai wasu bambance-bambance a cikin SSID ko kalmar sirri, ESP32 zai kasa haɗawa, kuma LCD zai ci gaba da nuna saƙon haɗawa.
Lokutan Bidiyo
- 00:00 Fara
- 1:59 Gabatarwa ga aikin
- 6:16 Bayanin wayoyi
- 8:13 Bayanin lambar Arduino
- 14:26 Zaɓin allo na ESP32 da tashar COM akan Arduino IDE
- 16:07 Nunin CheerLight tare da 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
Albarkatun da kuma shafukan da za a duba
-
TakarduESP32 Tutorial 52/55- SunFounder doc page for CheerLightdocs.sunfounder.com
Fayiloli📁
Babu fayiloli da ake da su.