na płytce z ESP8266 .... wybrałem więc :
-- RoundBoard --> zawiera ona ESP-03
-- Taśma z diodami WS2812 --> do testu odcinek z 23 diodami
-- Zasilacz 5V 2A

Połączenia to żaden kłopot i każdy foreste da sobie radę ...
Jako wyjście do sterowania Diodami wybrałem GPIO14
No i git ,.... czas na walkę z programem , w sumie teoretycznie prosta sprawa ....
Ale ...
Jest pewien problem ... wiecie Supla potrafi sobie poradzić z diodami RGBW zaś inne już nie do końca mają swoje miejsce
ale zawsze można spróbować ....
Na początek jako że pod suplę używam ardupinowej biblioteki ale w cywilizowanym środowisku VS +VM możemy sobie załadować
projekt example dla node z supli i zmodyfikować ....

Pierwszą rzeczą będzie dodanie biblioteki Adafruit_NeoPixel -- tak będzie nam łatwiej dręczyć ledy , ale niesie to też za sobą pewien kłopot
na tą chwilę ilość diod musimy sztywno zdefiniować w programie ....

- .
- .
- .
- #include <Adafruit_NeoPixel.h>
- #define LICZBADIOD 23
- #define PIN 14
- Adafruit_NeoPixel pixels = Adafruit_NeoPixel(LICZBADIOD, PIN , NEO_RGB + NEO_KHZ400);
- .
- .
- .
teraz parę zmennych i ustawień nic trudnego wystarczy pokopać w gotowcach z libsa neopixel
- void set_rgbw()
- {
- _ring = map(_color_brightness, 0, 100, 0, 7);
- pixels.setBrightness(100);
- }
- // ----------------------------------------------------------------------------------------------------------------------
- // -- Nazwa urządzenia i wersja oprogramowania
- // ----------------------------------------------------------------------------------------------------------------------
- const char* nazwa = "SunWS2812";
- const char* wersja = "0.1";
- unsigned char _red = 0;
- unsigned char _green = 255;
- unsigned char _blue = 0;
- unsigned char _color_brightness = 0;
- unsigned char _brightness = 0;
- int _ring = 0;
- int _rg = 0;
- int _rb = 0;
- int i = 0;
- int j = 0;
- int k = 0;
- int l = 0;
- int jj = 0;
- void setup()
- {
- pixels.begin();
- Serial.begin(115200);
- delay(10);
- set_rgbw();
- SuplaDevice.setRGBWCallbacks(&get_rgbw_value, &set_rgbw_value);
- //---------------------------------------------------------------------------------------------------------------------
- // GUID dla urządzeń supla https://www.supla.org/arduino/get-guid pobierz i wklej:
- char GUID[SUPLA_GUID_SIZE] = { 0x0C,0x11,0x96,0xA9,0xEE,0x0A,0xE8,0x2D,0xE7,0x77,0x58,0xF9,0x1F,0x8E,0x33,0x85 };
- uint8_t mac[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 }; // MAC adres -- wymyśl sobie :P
- // ---------------------------------------------------------------------------------------------------------------------------------------------
- // -- Ustawienia kanałów
- // --
- // -- UWAGA !! Jeśli posiadasz podłaczone urządzenie do SUPLI i chcesz
- // -- zmienić w oprogramowaniu Obsługę kanałów należy zalogować się
- // -- do supli i usunąc urządzenie !
- // -- Jeśli tego się nie zrobi może wystąpić Konflikt kanałów Co może zaowocować
- // -- brakiem możliwości dołączenia urządzenia o nowych właściwościach.
- // ---------------------------------------------------------------------------------------------------------------------------------------------
- // ----------------------------------- CHANNEL0 - RELAY ------------------------------------------------------------------------------
- //SuplaDevice.addRelay(12, false); // 4 - Pin number where the relay is connected
- // False lub true odwraca polaryzację
- //SuplaDevice.addRelay(13, false); // 5 - Pin number where the relay is connected
- //SuplaDevice.addRelay(0, true);
- //SuplaDevice.addRelay(2, true);
- //-------------------------------------CHANNEL2 - TWO RELAYS (Roller shutter operation)-------------------------------
- // SuplaDevice.addRollerShutterRelays(12, 13, false); // Ustawienia dla płytek SunRoundedBoard
- //------------------------------------ CHANNEL3 - Opening sensor (Normal Open) -------------------------------------------
- //SuplaDevice.addSensorNO(16); // A0 - Pin number where the sensor is connected
- // Call SuplaDevice.addSensorNO(A0, true) with an extra "true" parameter
- // to enable the internal pull-up resistor
- //SuplaDevice.addSensorNO(14); // A1 - Pin number where the sensor is connected
- // ------------------------------------ CHANNEL4 - DHT22 Sensor -----------------------------------------------------------------
- // SuplaDevice.addDHT11();
- // SuplaDevice.addAM2302();
- // SuplaDevice.addDHT22();
- // ------------------------------------ CHANNEL5 - Kontrola RGB/RGBW -----------------------------------------------------------------
- SuplaDevice.addRgbController();
- //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- // -- UStawienia parametrów dostępu do supla
- //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- SuplaDevice.setName(nazwa); // Nazwa Urządzenia
- SuplaDevice.setWers(wersja); // wersja oprogramowania
- SuplaDevice.begin(GUID, // Global Unique Identifier
- mac, // Ethernet MAC address
- "svr.supla.org", // SUPLA server address
- XXXX, // Location ID
- "YYYY"); // Location Password
- }
- void loop()
- {
- SuplaDevice.iterate();
- switch (_ring)
- {
- case 0:
- for (int i = 0; i < LICZBADIOD; i++)
- {
- pixels.setPixelColor(i, 0, 0, 0);
- }
- break;
- case 1:
- CylonBounce(0xff, 0, 0, 4, 10, 50);
- break;
- case 2:
- SnowSparkle(0x10, 0x10, 0x10, 20, random(100, 1000));
- break;
- case 3:
- colorWipe(0x00, 0xff, 0x00, 50);
- break;
- case 4:
- //Sparkle(0xff, 0xff, 0xff, 0);
- break;
- case 5:
- RunningLights(0xff, 0xff, 0xff, 50); // white
- break;
- case 6:
- colorWipe(0xff, 0xff, 0xff, 50);
- break;
- default:
- for (int i = 0; i < LICZBADIOD; i++)
- {
- pixels.setPixelColor(i, 0, 0, 0);
- }
- break;
- }
- pixels.show();
- }
- //-------------------------------------------------------------------------------------------------------------------------------------------------------
- // Dodatkowe funkcje ....
- void showStrip()
- {
- #ifdef ADAFRUIT_NEOPIXEL_H
- // NeoPixel
- pixels.show();
- #endif
- #ifndef ADAFRUIT_NEOPIXEL_H
- // FastLED
- FastLED.show();
- #endif
- }
- void setPixel(int Pixel, byte red, byte green, byte blue)
- {
- #ifdef ADAFRUIT_NEOPIXEL_H
- // NeoPixel
- pixels.setPixelColor(Pixel, pixels.Color(red, green, blue));
- #endif
- #ifndef ADAFRUIT_NEOPIXEL_H
- // FastLED
- leds[Pixel].r = red;
- leds[Pixel].g = green;
- leds[Pixel].b = blue;
- #endif
- }
- void setAll(byte red, byte green, byte blue)
- {
- for (int i = 0; i < LICZBADIOD; i++) {
- setPixel(i, red, green, blue);
- }
- showStrip();
- }
- void CylonBounce(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay)
- {
- for (int i = 0; i < LICZBADIOD - EyeSize - 2; i++) {
- setAll(0, 0, 0);
- setPixel(i, red / 10, green / 10, blue / 10);
- for (int jj = 1; jj <= EyeSize; jj++) {
- setPixel(i + jj, red, green, blue);
- }
- setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
- showStrip();
- delay(SpeedDelay);
- }
- delay(ReturnDelay);
- for (int i = LICZBADIOD - EyeSize - 2; i > 0; i--) {
- setAll(0, 0, 0);
- setPixel(i, red / 10, green / 10, blue / 10);
- for (int jj = 1; jj <= EyeSize; jj++) {
- setPixel(i + jj, red, green, blue);
- }
- setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
- showStrip();
- delay(SpeedDelay);
- }
- delay(ReturnDelay);
- }
- //=========================================
- void SnowSparkle(byte red, byte green, byte blue, int SparkleDelay, int SpeedDelay) {
- setAll(red, green, blue);
- int Pixel = random(LICZBADIOD);
- setPixel(Pixel, 0xff, 0xff, 0xff);
- showStrip();
- delay(SparkleDelay);
- setPixel(Pixel, red, green, blue);
- showStrip();
- delay(SpeedDelay);
- }
Oczywiście więcej fajnych znajdziecie na stronie https://www.tweaking4all.com/hardware/ ... p-effects/
Cały program to Qpa , bo jest zlepkiem śmieci ... działą , ale nędznie ...na moje oko ....
W aplikacji uruchamiacie efekty wewnętrznym pierścieniem ... można zrobić jakiś bajer na choinkę ....
i to tyle .... jak ktoś będzie chciał dostanie cały plik .ino .... i miłej zabawy
Szkoda że tak daremnie jest to obsługiwane w samej supli , ale niestety ...