ESP32 பயிற்சி 52/55 - WS2812 CheerLights MQTT உலகளாவிய ஒத்திசைவு LCD உடன் | SunFounder ESP32 IoT கிட்
இந்த டுடோரியலில், ESP32 ஐப் பயன்படுத்தி ஒரு CheerLights திட்டத்தை உருவாக்குவோம், இது MQTT மூலம் உலகளவில் வண்ணங்களை ஒத்திசைக்கும். இந்த திட்டம் மற்ற பயனர்களின் உள்ளீடுகளின் அடிப்படையில் வண்ணங்களை மாற்றுவது மட்டுமல்லாமல், தற்போதைய வண்ணத்தையும், அது எத்தனை முறை புதுப்பிக்கப்பட்டுள்ளது என்பதையும் LCD திரையில் காண்பிக்கும். இதன் விளைவு IoT திறன்களின் வேடிக்கையான ஆர்ப்பாட்டமாகும், சாதனங்கள் எவ்வாறு தொடர்பு கொள்ளலாம் மற்றும் பயனர்களை தூரங்களுக்கு இடையே இணைக்க முடியும் என்பதைக் காட்டுகிறது. கூடுதல் தெளிவுக்கு, வீடியோவைப் பார்க்கவும் (வீடியோவில் 00:00 இல்).
வன்பொருள் விளக்கம்
இந்த திட்டத்தை உருவாக்க, உங்களுக்கு ஒரு ESP32 மைக்ரோகண்ட்ரோலர், ஒரு WS2812 LED ஸ்ட்ரிப் மற்றும் ஒரு LCD டிஸ்ப்ளே தேவைப்படும். ESP32 செயல்பாட்டின் மூளையாக செயல்படுகிறது, அதன் உள்ளமைக்கப்பட்ட Wi-Fi திறன்களைப் பயன்படுத்தி இணையத்துடன் இணைந்து MQTT செய்திகளைப் பெறுகிறது. இது மற்ற பயனர்களின் உலகளாவிய உள்ளீட்டின் அடிப்படையில் LED வண்ணங்களுக்கு நிகழ்நேர புதுப்பிப்புகளை அனுமதிக்கிறது.
WS2812 LED ஸ்ட்ரிப் என்பது முகவரியிடக்கூடிய RGB LED கள் தேவைப்படும் திட்டங்களுக்கான பிரபலமான தேர்வாகும். ஒவ்வொரு LED யும் சுயாதீனமாக கட்டுப்படுத்த முடியும், இது வளமான வண்ண காட்சிகளை அனுமதிக்கிறது. LCD தற்போதைய வண்ணம் மற்றும் அது மாற்றப்பட்ட எண்ணிக்கையின் காட்சி உறுதிப்படுத்தலை வழங்கும், பயனர் தொடர்புகளை மேம்படுத்துகிறது.
டேட்டாஷீட் விவரங்கள்
| உற்பத்தியாளர் | SunFounder |
|---|---|
| பகுதி எண் | ESP32 |
| லாஜிக்/IO மின்னழுத்தம் | 3.3 V |
| வழங்கல் மின்னழுத்தம் | 5 V |
| வெளியீட்டு மின்னோட்டம் (ஒரு சேனலுக்கு) | 20 mA |
| உச்ச மின்னோட்டம் (ஒரு சேனலுக்கு) | 60 mA |
| PWM அதிர்வெண் வழிகாட்டுதல் | 400 Hz |
| உள்ளீட்டு லாஜிக் வரம்புகள் | 0.15 V (குறைந்த), 0.8 V (உயர்) |
| மின்னழுத்த வீழ்ச்சி / RDS(on) / செறிவு | 0.2 V |
| வெப்ப வரம்புகள் | 85 °C |
| பேக்கேஜ் | ESP32 தொகுதி |
| குறிப்புகள் / மாறுபாடுகள் | உள்ளமைக்கப்பட்ட Wi-Fi மற்றும் புளூடூத் அடங்கும் |
- ESP32 (5 V) மற்றும் WS2812 ஸ்ட்ரிப் (5 V) க்கு சரியான மின்சார வழங்கலை உறுதி செய்யவும்.
- ESP32 மற்றும் LED ஸ்ட்ரிப் இடையே பொதுவான தரையைப் பயன்படுத்தவும்.
- வண்ண ஒத்திசைவுக்கு சரியான MQTT ப்ரோக்கரை செயல்படுத்தவும்.
- WS2812 க்கான தரவு பின் இணைப்பில் கவனம் செலுத்துங்கள் (குறியீட்டின் படி பின் 14).
- LED களின் எண்ணிக்கையில் கவனமாக இருங்கள்; மின் வரம்புகளை மீறினால் கூடுதல் மின்சார ஆதாரங்கள் தேவைப்படும்.
வயரிங் வழிமுறைகள்


கூறுகளை இணைக்க, WS2812 LED ஸ்ட்ரிப்பை இணைப்பதன் மூலம் தொடங்கவும். LED ஸ்ட்ரிப்பின் தரை பின்னை (பொதுவாக கருப்பு) ESP32 இன் தரை பின்னுடன் இணைக்கவும். அடுத்து, LED ஸ்ட்ரிப்பின் VCC பின்னை (பொதுவாக சிவப்பு) ESP32 இன் 5V வெளியீட்டுடன் இணைக்கவும். இறுதியாக, தரவு பின்னை (பெரும்பாலும் மஞ்சள்) ESP32 இன் GPIO பின் 14 உடன் இணைக்கவும்.
LCD க்கு, தரை பின்னை (பெரும்பாலும் கருப்பு) ESP32 இன் தரையுடன் இணைக்கவும். VCC பின் (பொதுவாக சிவப்பு) 5V வெளியீட்டுடன் இணைக்கப்பட வேண்டும். SDA பின் (பொதுவாக சாம்பல்) GPIO பின் 21 உடன் இணைகிறது, அதே நேரத்தில் SCL பின் (பொதுவாக வெள்ளை) GPIO பின் 22 உடன் இணைகிறது. இந்த அமைப்பு ESP32 LCD உடன் தொடர்பு கொள்ளவும், தேவையான தகவல்களைக் காண்பிக்கவும் அனுமதிக்கிறது.
குறியீடு எடுத்துக்காட்டுகள் & விளக்கம்
செட்அப் செயல்பாட்டில், நாம் LCD ஐ துவக்கி Wi-Fi உடன் இணைக்கிறோம். கீழே உள்ள குறியீடு தேவையான நூலகங்களை வரையறுப்பது மற்றும் LCD ஐ அமைப்பது எப்படி என்பதை நிரூபிக்கிறது:
#include
#include
LiquidCrystal_I2C lcd(0x27, 16,2); // LCD முகவரியை அமைக்கவும்
void setup() {
Serial.begin(115200);
lcd.init(); // LCD ஐ துவக்கவும்
lcd.backlight(); // LCD பின்னொளியை இயக்குகிறது.
}
இது LCD ஐ பயன்பாட்டிற்காக துவக்குகிறது, செய்திகளைக் காண்பிக்க அனுமதிக்கிறது. அடுத்த பகுதி Wi-Fi இணைப்பு எவ்வாறு நிறுவப்படுகிறது என்பதைக் காட்டுகிறது:
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
lcdConnect(); //LCD க்காக
delay(500);
}
Serial.println("WiFi connected");
}
இந்த செயல்பாடு குறிப்பிட்ட Wi-Fi நெட்வொர்க்குடன் ஒரு இணைப்பை நிறுவுகிறது, இணைக்கும்போது LCD இல் ஒரு செய்தியைக் காட்டுகிறது. இறுதியாக, வண்ண மாற்ற லாஜிக் கால்பேக் செயல்பாட்டில் கையாளப்படுகிறது:
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);
}
}
இந்த செயல்பாடு "cheerlights" தலைப்பில் வரும் செய்திகளைக் கேட்டு, அதற்கேற்ப வண்ணத்தைப் புதுப்பிக்கிறது. முழு குறியீடு கட்டுரைக்கு கீழே ஏற்றப்படுகிறது, எனவே முழுமையான செயலாக்கத்திற்கு அதை மதிப்பாய்வு செய்ய மறக்காதீர்கள்.
ஆர்ப்பாட்டம் / என்ன எதிர்பார்க்கலாம்
திட்டம் முடிந்ததும், உலகளாவிய MQTT ஃபீட்டின் உள்ளீடுகளின் அடிப்படையில் LED ஸ்ட்ரிப் வண்ணங்களை மாற்றுவதை நீங்கள் எதிர்பார்க்கலாம். LCD தற்போதைய வண்ணப் பெயரையும், அது மாற்றப்பட்ட எண்ணிக்கையையும் காண்பிக்கும். நீங்கள் இணையத்தை துண்டித்தால், LCD "Connecting..." என்பதைக் காண்பிக்கும், இணைப்பு மீண்டும் நிறுவப்படும் வரை (வீடியோவில் 12:30 இல்).
பொதுவான பிழைகளில் தரவு இணைப்புகளுக்கு சரியான பின்கள் பயன்படுத்தப்படுவதை உறுதி செய்வது மற்றும் Wi-Fi சான்றுகள் துல்லியமானவை என்பதை சரிபார்ப்பது ஆகியவை அடங்கும். SSID அல்லது கடவுச்சொல்லில் ஏதேனும் முரண்பாடுகள் இருந்தால், ESP32 இணைக்கத் தவறிவிடும், மேலும் LCD தொடர்ந்து இணைக்கும் செய்தியைக் காண்பிக்கும்.
வீடியோ நேர முத்திரைகள்
- 00:00 தொடக்கம்
- 1:59 திட்டத்திற்கான அறிமுகம்
- 6:16 வயரிங் விளக்கம்
- 8:13 Arduino குறியீடு விளக்கம்
- 14:26 Arduino IDE இல் ESP32 போர்டு மற்றும் COM போர்ட்டைத் தேர்ந்தெடுத்தல்
- 16:07 LCD உடன் CheerLight செயல்விளக்கம்
/*********
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
வளங்கள் மற்றும் மேற்கோள்கள்
-
ஆவணங்கள்ESP32 Tutorial 52/55 - SunFounder doc page for CheerLightdocs.sunfounder.com
கோப்புகள்📁
கோப்புகள் கிடைக்கவில்லை.