Supla i diodki WS2812

Miejsce na nasze Supełki nieoficjalne i suplowe przemyślenia
ODPOWIEDZ
Awatar użytkownika
SunRiver
Administrator
Posty: 778
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Supla i diodki WS2812

Post autor: SunRiver » 13 paź 2019, 19:10

Jak wiadomo idą święta, a że trzeba sobie jakoś radzić postanowiłem nieco poszaleć , wczoraj i coś roboczego zmotać
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

Obrazek

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ć ....

Obrazek

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 .... :(
  1. .
  2. .
  3. .
  4. #include <Adafruit_NeoPixel.h>
  5.  
  6. #define LICZBADIOD 23
  7. #define PIN 14
  8.  
  9. Adafruit_NeoPixel pixels = Adafruit_NeoPixel(LICZBADIOD, PIN , NEO_RGB + NEO_KHZ400);
  10. .
  11. .
  12. .
Nio jakoś tak by to wyglądało ... zatem dalej ...
teraz parę zmennych i ustawień nic trudnego wystarczy pokopać w gotowcach z libsa neopixel
  1. void set_rgbw()
  2.  {
  3.     _ring = map(_color_brightness, 0, 100, 0, 7);
  4.     pixels.setBrightness(100);
  5. }
  6.  
  7. // ----------------------------------------------------------------------------------------------------------------------
  8. // -- Nazwa urządzenia i wersja oprogramowania
  9. // ----------------------------------------------------------------------------------------------------------------------
  10.  
  11. const char* nazwa = "SunWS2812";
  12. const char* wersja = "0.1";
  13.  
  14.  
  15. unsigned char _red = 0;
  16. unsigned char _green = 255;
  17. unsigned char _blue = 0;
  18. unsigned char _color_brightness = 0;
  19. unsigned char _brightness = 0;
  20.  
  21. int _ring = 0;
  22. int _rg = 0;
  23. int _rb = 0;
  24. int i = 0;
  25. int j = 0;
  26. int k = 0;
  27. int l = 0;
  28. int jj = 0;
  29.  
I w funkcji Setup ustawiamy , UID , PASWORD , ostęp do lan Mac i takie tam ....

  1.  
  2. void setup()
  3. {
  4.     pixels.begin();
  5.  
  6.     Serial.begin(115200);
  7.     delay(10);
  8.  
  9.     set_rgbw();
  10.  
  11.     SuplaDevice.setRGBWCallbacks(&get_rgbw_value, &set_rgbw_value);
  12.  
  13.     //---------------------------------------------------------------------------------------------------------------------
  14.     // GUID dla urządzeń supla https://www.supla.org/arduino/get-guid  pobierz i wklej:
  15.  
  16.     char GUID[SUPLA_GUID_SIZE] = { 0x0C,0x11,0x96,0xA9,0xEE,0x0A,0xE8,0x2D,0xE7,0x77,0x58,0xF9,0x1F,0x8E,0x33,0x85 };
  17.     uint8_t mac[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };   // MAC adres  -- wymyśl sobie :P
  18.  
  19.     // ---------------------------------------------------------------------------------------------------------------------------------------------
  20.     // -- Ustawienia kanałów
  21.     // --
  22.     // -- UWAGA !!   Jeśli posiadasz podłaczone urządzenie do SUPLI i chcesz
  23.     // --            zmienić w oprogramowaniu Obsługę kanałów należy zalogować się
  24.     // --            do supli i usunąc urządzenie !
  25.     // --            Jeśli tego się nie zrobi może wystąpić  Konflikt kanałów Co może zaowocować
  26.     // --            brakiem możliwości dołączenia urządzenia o nowych właściwościach.
  27.     // ---------------------------------------------------------------------------------------------------------------------------------------------  
  28.     // ----------------------------------- CHANNEL0 - RELAY ------------------------------------------------------------------------------
  29.  
  30.     //SuplaDevice.addRelay(12, false);             // 4 - Pin number where the relay is connected      
  31.                                              // False lub true  odwraca polaryzację
  32.     //SuplaDevice.addRelay(13, false);             // 5 - Pin number where the relay is connected
  33.     //SuplaDevice.addRelay(0, true);
  34.     //SuplaDevice.addRelay(2, true);
  35.  
  36.     //-------------------------------------CHANNEL2 - TWO RELAYS (Roller shutter operation)-------------------------------
  37.  
  38.     // SuplaDevice.addRollerShutterRelays(12, 13, false);             // Ustawienia dla płytek SunRoundedBoard                                                              
  39.  
  40.     //------------------------------------ CHANNEL3 - Opening sensor (Normal Open) -------------------------------------------
  41.  
  42.     //SuplaDevice.addSensorNO(16);                             // A0 - Pin number where the sensor is connected
  43.                                                                // Call SuplaDevice.addSensorNO(A0, true) with an extra "true" parameter
  44.                                                                // to enable the internal pull-up resistor
  45.     //SuplaDevice.addSensorNO(14);                             // A1 - Pin number where the sensor is connected
  46.  
  47.  
  48.     // ------------------------------------ CHANNEL4 - DHT22 Sensor -----------------------------------------------------------------
  49.  
  50.     // SuplaDevice.addDHT11();
  51.     // SuplaDevice.addAM2302();
  52.     // SuplaDevice.addDHT22();
  53.  
  54.     // ------------------------------------ CHANNEL5 - Kontrola RGB/RGBW -----------------------------------------------------------------
  55.  
  56.     SuplaDevice.addRgbController();
  57.  
  58.     //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  59.     // -- UStawienia parametrów dostępu do supla
  60.     //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  61.  
  62.     SuplaDevice.setName(nazwa);          // Nazwa Urządzenia
  63.     SuplaDevice.setWers(wersja);         // wersja oprogramowania
  64.  
  65.     SuplaDevice.begin(GUID,              // Global Unique Identifier
  66.         mac,                             // Ethernet MAC address
  67.         "svr.supla.org",                // SUPLA server address
  68.         XXXX,                            // Location ID
  69.         "YYYY");                         // Location Password
  70. }
  71.  
  72.  
za to w loop() klasycznie switch - case , bo będzie prościej
  1.  
  2. void loop()
  3. {
  4.  
  5.     SuplaDevice.iterate();
  6.  
  7.     switch (_ring)
  8.     {
  9.     case 0:
  10.         for (int i = 0; i < LICZBADIOD; i++)
  11.         {
  12.             pixels.setPixelColor(i, 0, 0, 0);
  13.         }
  14.         break;
  15.  
  16.     case 1:
  17.         CylonBounce(0xff, 0, 0, 4, 10, 50);
  18.         break;
  19.  
  20.     case 2:
  21.         SnowSparkle(0x10, 0x10, 0x10, 20, random(100, 1000));
  22.         break;
  23.  
  24.     case 3:
  25.         colorWipe(0x00, 0xff, 0x00, 50);
  26.         break;
  27.  
  28.     case 4:
  29.         //Sparkle(0xff, 0xff, 0xff, 0);
  30.         break;
  31.  
  32.     case 5:
  33.         RunningLights(0xff, 0xff, 0xff, 50);  // white
  34.         break;
  35.  
  36.     case 6:
  37.         colorWipe(0xff, 0xff, 0xff, 50);
  38.         break;
  39.  
  40.     default:
  41.         for (int i = 0; i < LICZBADIOD; i++)
  42.         {
  43.             pixels.setPixelColor(i, 0, 0, 0);
  44.         }
  45.         break;
  46.     }
  47.     pixels.show();
  48.  
  49. }
  50.  
  51.  
  52.  
i pod spodem podprogramy efektów ....

  1.  
  2. //-------------------------------------------------------------------------------------------------------------------------------------------------------
  3. // Dodatkowe funkcje ....
  4.  
  5. void showStrip()
  6. {
  7. #ifdef ADAFRUIT_NEOPIXEL_H
  8.     // NeoPixel
  9.     pixels.show();
  10. #endif
  11. #ifndef ADAFRUIT_NEOPIXEL_H
  12.     // FastLED
  13.     FastLED.show();
  14. #endif
  15. }
  16.  
  17. void setPixel(int Pixel, byte red, byte green, byte blue)
  18. {
  19. #ifdef ADAFRUIT_NEOPIXEL_H
  20.     // NeoPixel
  21.     pixels.setPixelColor(Pixel, pixels.Color(red, green, blue));
  22. #endif
  23. #ifndef ADAFRUIT_NEOPIXEL_H
  24.     // FastLED
  25.     leds[Pixel].r = red;
  26.     leds[Pixel].g = green;
  27.     leds[Pixel].b = blue;
  28. #endif
  29. }
  30.  
  31. void setAll(byte red, byte green, byte blue)
  32. {
  33.     for (int i = 0; i < LICZBADIOD; i++) {
  34.         setPixel(i, red, green, blue);
  35.     }
  36.     showStrip();
  37. }
  38.  
  39.  
  40. void CylonBounce(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay)
  41.  {
  42.  
  43.     for (int i = 0; i < LICZBADIOD - EyeSize - 2; i++) {
  44.         setAll(0, 0, 0);
  45.         setPixel(i, red / 10, green / 10, blue / 10);
  46.         for (int jj = 1; jj <= EyeSize; jj++) {
  47.             setPixel(i + jj, red, green, blue);
  48.         }
  49.         setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
  50.         showStrip();
  51.         delay(SpeedDelay);
  52.     }
  53.  
  54.     delay(ReturnDelay);
  55.  
  56.     for (int i = LICZBADIOD - EyeSize - 2; i > 0; i--) {
  57.         setAll(0, 0, 0);
  58.         setPixel(i, red / 10, green / 10, blue / 10);
  59.         for (int jj = 1; jj <= EyeSize; jj++) {
  60.             setPixel(i + jj, red, green, blue);
  61.         }
  62.         setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);
  63.         showStrip();
  64.         delay(SpeedDelay);
  65.     }
  66.  
  67.     delay(ReturnDelay);
  68. }
  69.  
  70. //=========================================
  71.  
  72. void SnowSparkle(byte red, byte green, byte blue, int SparkleDelay, int SpeedDelay) {
  73.     setAll(red, green, blue);
  74.  
  75.     int Pixel = random(LICZBADIOD);
  76.     setPixel(Pixel, 0xff, 0xff, 0xff);
  77.     showStrip();
  78.     delay(SparkleDelay);
  79.     setPixel(Pixel, red, green, blue);
  80.     showStrip();
  81.     delay(SpeedDelay);
  82. }
  83.  
  84.  

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 ...
.... z każdym bitem serca ....
💫SunDUINO
💦GitHUB
💦Google Drive
💦Sotton

ODPOWIEDZ