Programowanie ESP8266 z Supla, Sterowanie Led WS2812B za pomocą Supli

zibi
Posty: 10
Rejestracja: pt cze 14, 2019 6:23 pm

Programowanie ESP8266 z Supla, Sterowanie Led WS2812B za pomocą Supli

Postautor: zibi » śr lip 10, 2019 3:48 pm

Witam w tym temacie chce pokazać jak można zrobić sterowanie oswietlenia ze zmianą efektów świetlnych za pomocą telefonu wykorzystując mały moduł ESP8266 zamknięty z przekaźnikiem sterującym przez program Supla.
Najpierw musimy zaprogramować ESP8266 z Supla
Pobieramy potrzebne programy
flash download tools do programowania ESP8266 - Supla
blank do formatowania modułu ESP gdy mamy coś zaprogramowane
formatujemy wpisując w programie 00000
Link do bibliotek

https://github.com/SUPLA/ESP8266/tree/c ... SP-01/v2.0

Dalej postępujemy z opisem pliku tekstowego danej biblioteki
wczytując pliki po kolei jak w instrukcji.
Z modułami ESP8266 01S trzeba zmienić w programie SPI MODE na DOUT
Na schemacie jest przedstawiona opcja z włącznikiem monostabilnym przełączaniem zmiany trybu efektu świetlnego, lub przełączaniem efektu zdalnie z telefonu za pomocą aplikacji Supla(tryb monostabilny).
W układzie Kondensator ma zapobiec skokom napięcia zasilacza i wygładzić je, zazwyczaj mogą się pojawić w momencie odpalania zasilacza i zwłaszcza dla gorszych zasilaczy.
Ja użyłem 1000uF 16V, może być również 10V, kondensator naładuje się i tak do 5v tyle ile
podaje źródło zasilania. W przypadku kondensatorów ważne jest, aby minimalna wartość zasilania została zachowana.
Z kolei zadaniem rezystora podłączonego między pinem mikrokontrolera, a linią danych listwy jest ograniczenie przepływającego prądu przyda się w przypadku spięć lub przepięć. Rezystor nie ogranicza napięcia, a jedynie prąd. Za duży prąd mógłby także spalić pierwszą diodę.



#include <Adafruit_NeoPixel.h> // Biblioteka do sterowania diodami
#define PIN 6 // Pin do sterowania diodami ws2812
#define NUMPIXELS 30 // Ilość diod ws2812

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int licznik = 1;

void przycisk()
{
delay(200);
if (digitalRead(2)== LOW)
{
licznik++;

if (licznik > 5)
{
licznik=1;
}
}

}

void efekt_1() // Zmiana 3 kolory
{
Serial.println("Efekt 1");
for(int i=0;i <NUMPIXELS ;i++) // Zapalenie całego paska na czerwono
{
strip.setPixelColor(i, 150, 0, 0);

}
strip.show();
delay(1000);

for(int i=0;i <NUMPIXELS ;i++) // Zapalenie całego paska na niebiesko
{
strip.setPixelColor(i, 0, 0, 150);


}
strip.show();
delay(1000);

for(int i=0;i <NUMPIXELS ;i++) // Zapalenie całego paska na zielono
{
strip.setPixelColor(i, 0, 150, 0);

}
strip.show();
delay(1000);


}

void efekt_2() // Zapalanie rosnąco
{
Serial.println("Efekt 2");
for(int i=0;i <NUMPIXELS ;i++)
{
strip.setPixelColor(i, 0, 150, 0);
strip.show();
delay(20);
strip.setPixelColor(i-1, 0, 0, 0);
strip.show();
delay(20);
}

for(int i=NUMPIXELS;i >0 ;i--)
{
strip.setPixelColor(i, 150, 0, 0);
strip.show();
delay(20);
strip.setPixelColor(i+1, 0, 0, 0);
strip.show();
delay(20);
}

}


void efekt_3() // stroboskop
{
Serial.println("Efekt 3");
for(int i=0;i <NUMPIXELS ;i++) // Zapalenie całego paska na biało
{
strip.setPixelColor(i, 100, 100, 100);

}
strip.show();
delay(500);


for(int i=0;i <NUMPIXELS ;i++) // Zapalenie całego paska na biało
{
strip.setPixelColor(i, 0, 0, 0);

}
strip.show();
delay(500);
}



void efekt_4() // Zapalanie rosnąco
{

Serial.println("Efekt 4");
for(int i=0;i <NUMPIXELS ;i++) // Zapalenie stopniowo całego paska na zielono
{
strip.setPixelColor(i, 0, 150, 0);
strip.show();
delay(20);
}

for(int i=NUMPIXELS;i >0 ;i--) // Gaszenie stopniowo całego paska na zielono
{
strip.setPixelColor(i, 0, 0, 0);
strip.show();
delay(20);
}


}

void efekt_5() // Zapalanie rosnąco
{
Serial.println("Efekt 4");
for(int i=0;i <NUMPIXELS ;i++)
{
strip.setPixelColor(i, 150, 0, 0);
strip.show();
delay(20);

}

for(int i=0;i <NUMPIXELS ;i++)
{
strip.setPixelColor(i, 0, 0, 150);
strip.show();
delay(20);

}

for(int i=0;i <NUMPIXELS ;i++)
{
strip.setPixelColor(i, 0, 150, 0);
strip.show();
delay(20);

}


}




void setup()
{
Serial.begin(9600);
strip.begin(); // Uruchomienie działania biblioteki Adafruit_NeoPixel
pinMode(2, INPUT);
attachInterrupt(0, przycisk, FALLING);


}


void loop()
{


switch (licznik)
{
case 1:
efekt_1();
break;

case 2:
efekt_2();
break;

case 3:
efekt_3();
break;

case 4:
efekt_4();
break;

case 5:
efekt_5();
break;

}



}
Załączniki
schemat WS2812Bj.jpg
schemat WS2812Bj.jpg (250.8 KiB) Przejrzano 18709 razy