Controlul LED-urilor aRGB cu ESP32

Controlul LED-urilor aRGB cu ESP32

Timp de citit: 4 minute

Ce prezinta articolul?

De la backlight-ul noilor televizoare si pana la computerele de noua generatie, toate device-urile folosesc LED-uri RGB pentru a lumina si a creea efecte vizuale interesante.

Acest proiect va explica in detaliu cum va puteti face o instalatie personalizata de LED-uri aRGB (nu RGB) care va putea fi controlata de la distanta folosind placa de dezvoltare ESP32.

Care este diferenta dintre RGB si aRGB?

Diferenta dintre aceste doua tipuri de benzi consta in faptul ca fiecare LED al benzii aRGB poate fi controlat individual in timp ce benzile RGB aprind LED-urile doar sincron.

Materiale necesare

  • Placa de dezvoltare ESP32. Se poate folosi orice placa de dezvoltare, dar trebuie ajustat codul pentru aceasta. In cazul in care intampinati dificultati in adaptarea codului lasati un comentariu in care scrieti ce placa de dezvoltare doriti sa folositi, iar noi va voi raspunde cu codul adaptat pentru aceasta.
  • Banda led WS2812. Puteti folosi cati metri doriti, atat timp cat veti ajusta variabila din cod. De asemenea, verificati tensiunea de alimentare a benzii LED. Este recomandat ca aceasta sa fie sa fie de 5V.
  • Letcon / pistol de lipit. Este necesar pentru a realiza conexiunile dintre placa de dezvoltare si banda LED.
  • O sursa de 5V care sa fie capabila sa debiteze un curent constant suficient cat sa alimenteze fara probleme banda LED.

Conexiuni necesare

  • 5V (alimentator) -> 5V (placa de dezvoltare);
  • GND (alimentator) -> GND (placa de dezvoltare);
  • 5V (alimentator) -> VCC/5V (banda LED);
  • GND (alimentator) -> GND (banda LED);
  • D2 (placa de dezvoltare) -> DIN (banda LED)-> Atentie sa nu confundati cu pinul DOUT;

Instructiuni software

Pentru inceput trebuie sa deschideti Arduino IDE si sa instalati driver-ul pentru banda led aRGB.

Pentru a face acest lucru este nevoie sa navigati catre Sketch -> Include Library -> Manage Libraries (sau folositi combinatia de taste CRTL + Shift + I) si cautati WS2812.

Dupa ce gasiti libraria din poza de mai jos, aplasati pe "Install" si asteptati pana se finalizeaza instalarea.

Codul necesar

#include "Freenove_WS2812_Lib_for_ESP32.h"
#include "WiFi.h"
#include "WiFiClient.h"
#include "WebServer.h"
#include "ESPmDNS.h"
#define LEDS_COUNT 30
#define LEDS_PIN 2
#define CHANNEL 0
#define Lightlevel1 250
#define LightLevelDecrease 50
TaskHandle_t Task1;
bool animation = 0;
int currentlevel = Lightlevel1;

const char* ssid = "*"; //numele retelei dvs de wifi

const char* password = "****"; // parola retelei dvs de wifi

WebServer server(80);

void handleNotFound() {
}
Freenove_ESP32_WS2812 strip = Freenove_ESP32_WS2812(LEDS_COUNT, LEDS_PIN, CHANNEL, TYPE_GRB);

u8 m_color[5][3] = { {255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 255}, {0, 0, 0} };
int delayval = 100;

void Task1code( void * parameter) {
while(true){
if(animation==0){
Serial.println("animation1");
for (int j = 0; j < 255; j += 2) {
for (int i = 0; i < LEDS_COUNT; i++) {
strip.setLedColorData(i, strip.Wheel((i * 256 / LEDS_COUNT + j) & 255));
}
strip.show();
delay(5);
}
}
if(animation==1){
Serial.println("animation2");
for (int j = 0; j < 5; j++) {
for (int i = 0; i < LEDS_COUNT; i++) {
strip.setLedColorData(i, m_color[j][0], m_color[j][1], m_color[j][2]);
strip.show();
delay(delayval);
}
delay(500);
}
}
}
}

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp32")) {
Serial.println("MDNS responder started");
}
server.onNotFound(handleNotFound);
server.on("/schimbaanimatie", []() {
server.send(200, "text/plain", "animatia s-a schimbat ");
animation=!animation;
Serial.print("animation has changed to ");
Serial.println(animation);
});
server.begin();
Serial.println("HTTP server started");
strip.begin();
strip.setBrightness(254);

xTaskCreatePinnedToCore{

Task1code, /* Function to implement the task */

"Task1", /* Name of the task */

10000, /* Stack size in words */

NULL, /* Task input parameter */

0, /* Priority of the task */

&Task1, /* Task handle. */

0); /* Core where the task should run */

}

void loop() {
server.handleClient();
}

Dupa ce ati copiat acest cod selectati placa de dezvoltare corecta din meniul "Tools" si inlocuiti variabila "ssid" cu numele retelei dvs. de WiFi, variabila "password" cu parola retelei dvs. de WiFi, iar variabila "LEDS_COUNT" modificati-o cu numarul dvs. de LED-uri (de exemplu: schimbati 30 cu 25).

Dupa ce ati uploadat acest cod cu success, deschideti serial monitor-ul integrat in Arduino IDE si resetati placa de dezvoltare. Daca ati introdus corect datele de conectare la reteaua WiFi ar trebui sa va apara adresa IP a placii. Daca apar doar puncte ("…"), revizuiti datele de conectare.

Pentru a schimba animatia pe care banda LED o afiseaza, accesati cu ajutorul unui browser adresa IP indicata in serial monitor-ul din Arduino IDE. De asemenea, puteti da refresh la pagina pentru a modifica din nou animatia.

Pentru a intelege mai bine cum functioneaza acest proiect, am atasat mai jos doua materiale video:

Surse:

Programming WS2812 LEDs from ChiliPeppr ESP32

5 comentarii

  1. As avea cateva chestii de comentat: Legat de legaturi/schema: nu am vazut link sau mentiune despre ce pui intre placa si LED-uri. Conform recomandarilor datasheet-ului, LED-urile trebuie sa fie decuplate, cu 0.1uF pe LED. Daca banda vine fara condensatori la fiecare LED, se recomanda un condensator de 1000uF la minim 6.3V la intrarea alimentarii in banda; intre 5V si GND. Intre pinul de iesire al placutei cu ESP si banda daca datele sunt pe nivelul logic 5V se pune o rezistenta de 300-500 ohmi. Daca e de 3.3V merge direct, dar eu as face o translatie de nivel logic la 5V inainte (inclusiv cu divizor rezistiv). Iar masa recomand sa o legi si intre placa si banda. La curent mare o sa fie diferenta prea mare intre referinta placii si cea a benzii. De asemenea as filtra alimentarea la intrarea pe placa ESP. LED-urile o sa bage interferente, placa o sa mearga bine la inceput apoi o sa moara.

  2. De obicei banda led WS2812 vine cu acei condensatori de decuplaj pe PCB (doar daca se foloseste o banda led de proasta calitate sau este homemade si nu s-au pus condensatori de decuplaj este recomandat sa se puna condensatorul amintit de dvs. in comentariu.) In al doilea rand placile de dezvoltare esp 32 /8266 lucreaza cu tensiuni logice de 3.3V, deci acel rezistor nu este necesar la placile de dezvoltare esp deoarece ar reduce tensiunea semnalului prea mult. Iar despre partea de filtraj, ce spuneti este adevarat daca nu se foloseste o sursa de calitate. Pana acum acest proiect ruleaza de aproximativ 216 de ore non stop din care mai mult de jumatate de timp in full brightness si nu am observat probleme de functionare.

  3. Atunci e bine. Legat de rezistenta, am spus ca daca e logica de 5V… stiam ca ESP are logica de 3.3V… de aceea am mentionat ca as pune un divizor rezistiv sau alta metoda de a trece nivelul logice la 5V. Din experienta mea, la 3.3V, se intampla sa se corupa datele.

  4. La aia nu m-am gandit… o sa o incerc la urmatoarea tentativa cu ESP. Deocamdata la ce lucrez cu WS2812 implica un FPGA, deci nu voi avea problema asta.

Adauga un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

The maximum upload file size: 2 Mo. You can upload: image, audio, video, document, spreadsheet, interactive, text, archive, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here