Kontroler WiFi dla taśm LEDowych

Kontroler WiFi dla taśm LEDowych

Czołem majsterkowicze!

Dzisiaj chciałbym Wam pokazać jak zrobiłem internetowy sterownik do taśm LEDowyh.

Wstępu słów kilka…

Ostatnimi czasy nabyłem drogą kupna taśmę LEDową. Zamontowałem ją na szafkach i po pierwszym tygodniu użytkowania stwierdziłem występowanie dwóch problemów, chodzi o sposób sterowania kolorami taśmy. Sterownik, który umieściłem pod szafką nie zawsze wyłapuje polecenia wydawane pilotem, przez co często trzeba się nagimnastykować, żeby np. wyłączyć taśmę. Będąc przy temacie pilota to on jest drugim problemem. Zazwyczaj, gdy jest mi potrzebny leży gdzieś w drugim końcu pokoju przykryty książkami.

Postanowiłem coś z tym zrobić. Zainspirowany artykułem Łukasza o analogowym liczniku majsterkowiczów, wyciągnąłem z szuflady ESP-8266, które kiedyś dawno temu kupiłem żeby zobaczyć jego możliwości (z resztą takim sposobem uzbierała się cała skrzynia modułów do Arduino). Założenia były proste. Postawić na ESP-8266 stronę, która by sterowała LEDami.

A więc , co wykorzystałem? 

Część 1: Projekt i testy

Krok 1

Sprawdziłem, czy NodeMCU nie ma problemów z wysyłaniem kodów za pomocą podczerwieni. Z tego co kojarzę oryginalna biblioteka IRremote z Arduino nie działała poprawnie. Na szczęście jakiś mądry człowiek przygotował wersję kompatybilną z ESP-8266, jest tutaj.

Krok 2 

Sprawdziłem w jaki sposób można wydawać polecenia do mikrokontrolera za pomocą strony oraz czy NodeMCU nie ma problemów z hostowaniem stron HTML + CSS. Co do drugiej części ostatniego zdania, to nie mam zapisanych żadnych szkiców, którymi to sprawdziłem. Musicie mi uwierzyć na słowo, że działa. A wracając do tego wydawania poleceń to tutaj jest odpowiedni przykład (pozwolę sobie wkleić kod, który pochodzi z tej strony).

To jest kod na którym budowałem swój projekt. 

Chciałbym wyjaśnić jak okodować sterowanie Arduino za pomocą strony www. Poniższy przykład prezentuje dokładnie tę samą zasadę działania co kod wyżej, różni się nazwami zmiennych.

Powiedzmy że mamy kod HTML’a

Tworzy on przycisk z napisem “Wciśnij mnie”. Po jego kliknięciu przenosimy się do podstrony /klikniety

Od strony Arduino mechanikę witryny kodujemy dla każdej podstrony osobno dla /klikniety będzie to wyglądało tak:

W wypadku naciśnięcia przycisku zostaniemy przeniesieni na podstronę /klikniety, która zawiera napis “kliknąłeś przycisk”.

Krok 3

Przygotowałem stronę, która służy do sterowania LEDami. Zamysł był taki, żeby wyglądała prawie jak oryginalny pilot do tej taśmy. Może to nie jest odwzorowanie 1:1, ale uważam że nie jest źle. 

Tak prezentuje się jej kod

a tak sama strona po załadowaniu w przeglądarce.

Zrzut ekranu (72)

Krok 4

Teraz trzeba zorganizować kody IR pasujące do sterownika. Po szybkim googlowaniu przed zabraniem się do jakiejkolwiek pracy związanej z tym projektem znalazłem tę stronę. Jakiś bardzo dobry ludek wstawił na nią odczytane kody z pilota. Tak one wyglądają (idealnie przygotowane do wrzucenia do Arduino).

Aby nadać je z poziomu ESP-8266 trzeba mieć odpowiednią wersję biblioteki IRremote. W celu nadania któryś z kodów należy użyć takiego zapisu (może to nie jest prawda, że należy. Ja takiego użyłem. Jak jest jakiś inny sposób to korzystajcie z którego chcecie ;) )

Zapis “IR_BPLUS” możemy oczywiście zmienić na inny z listy wrzuconej wyżej. Oczywiście potrzebny jest cały szkic, żeby to zadziałało, a tak się składa, że mam takowy zapisany. Taki jakby “Blink” tylko na taśmie LEDowej ;)

Zapomniałem, że jeszcze trzeba podłączyć diodę IR. Tutaj jest łopatologiczny “schemat”.

led ir

Krok 5

Zostało tylko złożenie tych kodów “do kupy” i wszystko powinno śmigać. Tak wygląda napisany przeze mnie kod. Są przy nim ładne komentarze, więc myślę, że nie muszę się rozpisywać.

Jest tylko jeden fragment, który bym chciał omówić. Chodzi o to:

Jest to uruchamianie usługi MDSN, która pozwala na dostęp do stronki za pomocą np. led.local/ . Jej konfiguracja ogranicza się do podania pierwszego członu adresu, czyli w tym wypadku led. Schowany jest on w zmiennej device_name.

Po wgraniu tego kodu do ESP-8266 wszystko nam się powinno ładnie uruchomić. Na serial monitorze dostaniemy adres IP do “pilota”. Prócz tego możemy wejść za pomocą adresu lokalnego (chyba tak to się nazywa) w tym (domyślnym) wypadku led.local/

Tak się kończy część pierwsza.

Część 2: Wykończenie projektu

W tej części pokażę Wam w jaki sposób sfinalizowałem ten projekt. 

Moimi głównymi celami w momencie kończenia tego projektu były:

  • zintegrowanie zasilania modułu z zasilaniem taśmy 
  • kompaktowe rozmiary 
  • bezpieczna obudowa czyli obudowa, która ochroni cienkie kable przed odkurzaczem.

Zacznijmy od zasilania.

Taśma działa na 12 voltach, ESP-8266 na 3.3 voltach, a moduł NodeMCU ma wbudowany regulator napięcia. Najłatwiej byłoby podłączyć taśmę pod złącze VIN na NodeMCU, ale nie znalazłem żadnej informacji jaki regulator napięcia posiada mój klon. Dlatego postawiłem na nieco bezpieczniejsze rozwiązanie, chodzi o zewnętrzny regulator napięcia. Jako że w moim pięknym mieście nie znalazłem regulatora napięcia 12V do 5V postanowiłem wykorzystać prostą ładowarkę samochodową. Tak oto się prezentuje po rozebraniu. 

_DSC3270-min

Tutaj bardzo “piękna” grafika przedstawiająca miejsca występowania napięć w MOJEJ ładowarce/przetwornicy.

zasilacz

Tak wygląda schemat podziału zasilania, jak i gotowej konstrukcji. Nie znalazłem we Fritzingu żadnej przetwornicy, więc zrobiłem prosty regulator napięcia.

led ctrl_bb

Jeżeli ktoś nie zrozumiał podziału zasilania to już spieszę z wyjaśnieniem. Do gniazda DC podłączamy zasilacz do LEDów. Podłączona jest do niego wtyczka DC, dzięki której podłączamy zasilanie sterownikowi LEDów. Z gniazdka wyprowadzony jest też kabel do przetwornicy. Tak to się prezentuje w moim wykonaniu.

_DSC3309-min

Obudowa 

W miejscowych sklepach elektronicznych, nie znalazłem żadnej podobnej rozmiarowo obudowy do płytki NodeMCU, dlatego musiałem coś samemu wykombinować.  W ręce wpadło mi pudełko po dużych TicTac’ach. Jak widać na załączonym zdjęciu rozmiarowo pasuje idealnie. (dla porównania wielkości kontroler do taśmy). 

_DSC3297-min

Naklejki zdjąłem ogrzewając je nad parą. Następnie zrobiłem dwa otwory. Jeden w górnej części, drugi od spodu. Ten większy specjalnie “wzbogaciłem” o wycięcie w stronę  jednego z boków. Właśnie przez nie będzie wychodził kabel z wtyczką. 

_DSC3328-min

Pozostało jeszcze wszytko zlutować.

(Wstawiam zdjęcie LEDa podczerwonego, żeby było ciekawiej.)

_DSC3313-min

Tak wygląda układ po przylutowaniu wszystkich modułów do mikrokontrolera.

_DSC3331-min

Zostało tylko włożenie tego do obudowy i chyba gotowe. Od strony gniazda zasilania wszystko wygląda bardzo ładnie.

_DSC3332-min

Trochę gorzej jest od strony pokrywki.

_DSC3334-min

Znalazłem na to szybki patent. Przeciąłem w jednym miejscu oprawkę do LEDów i założyłem na kabel, następnie wcisnąłem do obudowy. Wygląda znacznie lepiej i nawet trochę ogranicza ruch przewodu. 

_DSC3340-min

I to by było tyle, gdyby nie jeden mankament jaki odkryłem. Płytka z mikrokontrolerem bardzo się w środku obudowy ruszała. Nie chciałem zostawić tak tego na pastwę losu, bo zaraz któryś z kabli byłby oderwany, albo by coś się spaliło od zwarcia. Nie chciałem też jej przyklejać, bo myślę nad rozbudową tego o dodatkowe możliwości. Dlatego zwinąłem w rurkę kawałek elastycznego plastiku (takiego ze sztywnej okładki do dokumentów) i włożyłem między NodeMCU, a obudowę. W ten sposób mikrokontroler jest dociśnięty do ścianek, a to uniemożliwia mu poruszanie się. 

_DSC3341-min

Na sam koniec wypadało by to pomalować, ale całość jest ukryta za szafką, więc tego nie widać jak wygląda. 

Na tym gif’ie widać przykładowe działanie. (W niedługim czasie postaram się dodać film z efektem działania)

ikona2

 

Update 27.12.2016

Postanowiłem zmienić dynamiczne przydzielanie adresu IP na jeden, statyczny. Dodałem również automatyczne uruchomienie taśmy po załadowaniu strony startowej. To wszystko zmiany jakie wprowadziłem po 3 miesiącach użytkowania :D.

Macie tutaj nowy kod!
 

 

Dzięki za uwagę i do następnego!

(Jakbyście znaleźli jakieś błędy, to w komentarzach pod spodem, możecie mnie poprawić ;) )

Ocena: 4.85/5 (głosów: 13)

Podobne posty

21 komentarzy do “Kontroler WiFi dla taśm LEDowych

  • Leci 5tka.
    Najbardziej przypadła mi gustownie wykonana strona do sterowania wyglądająca jak pilot. Sam jakiś czas temu stałem przed wyzwaniem zrobienia czegoś podobnego i skończyło się na zwykłych, prostokątnych przyciskach [*]. Powiedz mi, w jaki sposób ją wykonałeś i czy można to zrobić przez jakiś program, creator itd?

    Odpowiedz
    • woysz: za dużo pana Zelenta się naoglądałem to taki wynik jest :P
      a tak na serio to wrzuciłem kod HTMLa (razem z CSS) w artykule, więc jak chcesz więcej szczegółów to sobie go skopiuj i wklej do jakiegoś edytora i przeanalizuj. A tak z grubsza to postawiłem sobie cel: strona bardzo podobna do pilota. Zacząłem kodować, na początku były prostokątne przyciski w ramce, ale powoli krok po kroku stronka nabierała obecnych kształtów. Nie wiem co ci więcej powiedzieć. Próbowałem kiedyś korzystać z creatora od Googl’a ale jakoś szybko się poddałem.

      Odpowiedz
  • Witam. Projekt ciekawy i wymagał trochę pracy. Większość projektów tego typu realizowana jest z wykorzystaniem serwera www, ok wiem dlaczego, ale dlaczego by nie wykorzystać UDP? Jest szybsze i mniej obciąża esp8266. Dlaczego wysyłasz kod ir Neca aż 3 razy po sobie? Kiedy wystarczyło raz, sam korzystam z kodów neca i wystarczy tylko raz. Dlaczego nie ma zaimplementowanego ustawiania nazwy sieci i hasła po za przeprogramowaniem? Dlaczego pozbyłeś się sterowania orginalnym pilotem? Implementacja odbiornika podczerwieni banalnie prosta. I czego mi tu najbardziej brakuje, można było dołożyć jakieś efekty.

    Odpowiedz
    • krisp74: Postaram się jakoś szybko obronić:
      1) serwer – bo to pierwszy projekt na ESP, nie znałem wtedy (i dalej UDP nic mi nie mówi) innych technologii
      2) wysyłam tylko w dwóch konkretnych przypadkach: przyciski jaśniej i ciemniej. Korzystając ze zwykłego pilota kody są wysyłanie cały czas od wciśnięcia do puszczenia, na tak napisanej stronie jak tu, nie ma możliwości takiej możliwości, więc chcą przyśpieszyć proces rozjaśniania/ściemniania kody wysyłam po prostu kilka razy
      3)bo tego nie potrzebuję, projekt stworzyłem na własne potrzeby, opisałem jak go tworzyłem dla potomnych, a zmieniać ustawień sieci WiFi nie zamierzam, prędzej zmienię coś w elektronice niż nazwę sieci i hasło
      4)nie pozbyłem się sterowania oryginalnym pilotem. Sterownik od LEDów (ten oryginalny) może być sterowany jednocześnie poprzez tą przystawkę WiFi jak i poprzez standardowego pilota. Myślałem nad tym ale ostatecznie zrezygnowałem. Teraz zastanawiam się czy w wersji 1.1 nie dodać tego feature’a
      5)efekty – mi są kompletnie niepotrzebne. Dla mnie oryginalny pilot i tak już oferuje za dużo ;)
      6)dzięki za docenienie

      Odpowiedz
  • Dzięki za wyjaśnienia, to jeszcze dorzucę kilka uwag. Ten zapis pinów “const int irPin = 4;” generalnie tak się nie powinno robić, wiem że NODEMCU ma sporo pamięci, ale warto pisać oszczędzając pamięć ten zapis jest lepszy #define irPin 4 oszczędzasz 2 bajty pamięci. Druga sprawa, w tym projekcie akurat korzystasz tylko ze sterowania po wifi i ok, a co będzie jak będziesz chciał w innym projekcie z korzystać dodatkowego np. sterowania, i wtedy okaże się że dopóki nie połączy się z twoją siecią nic nie zrobisz. Bo w tym fragmencie kodu while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(“.”);
    }
    będzie próbował do skutku łączyć się z siecią, która akurat będzie nie osiągalna.
    I trzy, nie wiem czy wiesz ale obciążalność wyprowadzeń esp to zaledwie 12 mA, Diodę ir podpina się tak jak ty to zrobiłeś ale dużo lepszym połączeniem jest wykorzystanie tranzystora.
    A co do UDP to jest to jeden z protokołów sieciowych tzw bezpołączeniowy. Do szczęścia w tym protokole potrzeba adresu urządzenia i portu. I ma jeszcze jedną zaletę, te informacje można wysyłać po tzw brodcascie, czyli do wszystkich urządzeń które muszą ją np otrzymać. Na tym protokole zrobiłem sterownik oświetlenia akwarium, właściwie jest to podwójny bo steruje dwoma akwariami ze światłem dziennym i nocnym.

    Odpowiedz
  • Motocyklista :D Jaros
    w kodzie użyłeś kodowania UTF-8
    Próbowałeś może korzystać z polskich znaków?
    U mnie pomimo ustawienia odpowiedniego kodowania cały czas na stronie wyświetlało krzaczki, zamiast ładnych polskich liter
    Też tak jest u Ciebie i/lub wiesz jak sprawić, by polskie znaki wyświetlały się prawidłowo przy użyciu tych bibliotek?

    A co do projektu, to bardzo mi się podoba – w zasadzie jest to prosty pilot IR, który może być wykorzystany do sterowania TV czy wzmacniaczem poprzez WiFi :)
    Leci 5 ;)

    Odpowiedz
    • Krapi: Dzięki za 5 ;)
      A co do twojego pytania, to szczerze powiedziawszy nie próbowałem tego na Arduino, nie spotkałem się z tym problemem i nie wiem jak go rozwiązać. Spróbuj poszukać w google coś w stylu “latin extended ESP8266WebServer”

      Odpowiedz
  • Witam
    A czy jest możliwość pominięcia całkowicie transmisji IR ??
    Ja mam ten sam sterownik i diody za telewizorem i pozostałe piloty wchodzą w interakcje ze sterownikiem LED
    Czyli ściszam telewizor diody zaczynaja mrugac i podobne akcje:)

    Odpowiedz
    • @Michał: jasne, że jest. Można kabel z Arduino wpiąć bezpośrednio do sterownika, z pominięciem odbiornika ir. Nie chciałem tego robić bo urządzenie byłoby skazane tylko na jeden sterownik, a nie chciałem go tak ograniczać.

      Odpowiedz
    • Inna opcja? Pominąć całkowicie sterownik ledów i sterować z ESP8266. Wymaga podpięcia trzech tranzystorów dla każdego z kolorów i jakiegoś zasilacza 12V (choć ja bym proponował 9V; będą świecić ciemniej, ale tak szybko taśma się nie wypali; szczególnie ważne gdy nie ma możliwości chłodzenia, np. gdy listwa jest przyklejona do płyty biurowej). Uprości to elektrykę, ale wymaga dodatkowego kodu do obsługi ledów. Polecam do tego bibliotekę pololu.

      Odpowiedz
  • Siema majsterkowicze, podoba mi się bardzo projekt, który stworzył MateuszxD, chciałbym spróbować samodzielnie wdrożyć ten projekt w swoim mieszkaniu i w związku z tym mam kilka pytań, a mianowicie:
    – czy muszę stworzyć kilka bliźniaczych sterowników aby kontrolować oświetlenie w mieszkaniu czy istnieje jakiś sposób połączenia wszystkiego z jedną centralką? W razie co jak to ogarnąć? Logicznym następstwem gdybym stworzył kilka bliźniaczych sterowników było nadanie kliku pomieszczeniom/sterownikom różnych adresów IP. – takie myślenie na bieżąco.
    – czy do powyższego schematu mogę zastosować obojętnie jaką taśmę led, byle była z programatorem?
    Jak zacznę kombinować to na pewno wrzucę tu co z tego wyszło. Pozdrawiam Wojtek no i gratulacje dla autora za świetny projekt.

    Odpowiedz
    • Siemanko :D
      1) możesz zrobić to na wiele sposobów. Ja bym się skusił na zrobienie jednego modułu master, a resztę slave. W modułach slave pominąłbym całą stronę www, zostawiłbym tylko reakcje pod wejściu na podstronę, czyli to:
      server.on(“/on”, []() {
      irsend.sendNEC(IR_ON, 32);
      });
      oraz ustawił statyczne IP

      Do modułu master zapakowałbym stronę z wieloma pilotami (czyli np 4 obok siebie), podpisał je i już ze strony wysyłałbym zapytanie GET np do 192.168.1.111/on

      no i to jest moja logika

      2) nie za bardzo wiem o co ci chodzi, ale jeżeli taśma będzie działać z takim sterownikiem to powinna też i zadziałać z moim urządzeniem :)

      3) nie wiem co to jest Qnap, sorka

      Dzięki za pochwałę, sorry, że odpisałem po miesiącu. Chętnie zobaczę twoją wersję ;)

      Odpowiedz
  • Właśnie usiadłem, poskładałem iwrzuciłem kod do IDE ale niestety wciąż wywala mi błąd:
    exit status 1
    ‘IRsend’ does not name a type
    Jakieś pomysły ?

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?