Skocz do zawartości
Masterpc96

Sterownik led RGBW (lub osobno) zgodny z homebridge

Pomocna odpowiedź

Witam po opisaniu jak zainstalować homebridge na rpi przyszedł czas aby pokazać jak ma to wyglądać ze strony ESP8266. Jest to sterownik led RGBW, można go wykorzystać jako sterownik RGB, tylko jednej barwy lub właśnie jako RGBW (pasek led posiada dodatkowo diody czystej barwy, zimnej białej lub ciepłej). Do wykonania tego projektu potrzebowałem:

  • ESP8266
  • Konwerter USB-UART (należy pamiętać że esp działa na napięciu 3.3V nie 5V)
  • Przetwornicę która zbije nam 12V na 3.3V
  • Mosfet a03400
  • rezystor 10k Ω smd
  • rezystor 200 Ω smd
  • Złącze ark 2.54 5 pinów ja wybrałem takie 3 pin 2 pin
  • Kabel z gniazdem dc (około 10 cm)

Gotowa płytka wygląda tak:

IMG_0779.thumb.jpg.33066ddcc55de5f72b4a7494a0826f60.jpgIMG_0780.thumb.jpg.aac84171bcb51e3257f5e6ecc276a9b3.jpg

Z racji tego że mam drukareczkę 3d nie mogłem sobie odpuścić zrobienia obudowy 🙂 

IMG_0781.thumb.jpg.f9291c0b0d1d9d9b1f7fd6fc0c8b4c64.jpg IMG_0782.thumb.jpg.c91adc47b32a9846b64bba09110e1c07.jpg IMG_0783.thumb.jpg.a2065305b95310df5b54795bd9e0b5d3.jpg

Wieczko się drukuje ale będzie montowane na klika. Cała płytka trzyma się dzięki dwóm bolcą. Dzięki temu że kabel jest przylutowany do pcb zaoszczędziłem sporo miejsca na gniazdo dc 😄 

Całość składa się z dwóch części konfiguracji homebridge oraz oprogramowania na ESP, żeby zacząć tworzyć kod na ESP musimy wiedzieć jakie metody musimy stworzyć aby "mostek" mógł rozmawiać z naszym kontrolerem. Aby móc sterować oświetleniem led za pomocą homebridge wybrałem plugin homebridge-better-http-rgb, z racji tego że korzystam z dodatku config-ui to pokażę jak w nim dodać nowe urządzenie i skonfigurować. Po zalogowaniu się do panelu przechodzimy do zakładki plugins, w wyszukiwarce wpisujemy homebridge-better-http-rgb i instalujemy.

1074588987_Screenshot2019-07-25at22_46_18.thumb.png.3a0fc623bb3ae45ca47a34fda0e5b919.png

Po zainstalowaniu przechodzimy do zakładki config. Na stronie twórcy pluginu możemy zobaczyć podstawową konfigurację. Plugin ten możemy wykorzystać do sterowania rgb lub pojedynczej barwy

"accessories": [
    {
        "accessory": "HTTP-RGB",
        "name": "Single Color Light",
        "service": "Light",

        "switch": {
            "status": "http://localhost/api/v1/status",
            "powerOn": "http://localhost/api/v1/on",
            "powerOff": "http://localhost/api/v1/off"
        },

        "brightness": {
            "status": "http://localhost/api/v1/brightness",
            "url": "http://localhost/api/v1/brightness/%s"
        }
    }
]

Jest to przykład dla pojedynczej barwy (źródło: strona dewelopera). Za localhost podajemy oczywiście adres ip naszego ESP. Widzimy tutaj że sterowanie odbywa się za pomocą włączenia/wyłączenia, ustawienia jasności oraz otrzymania od ESP statusu oraz poziomu jasności (możemy zrobić wersję bez sterowania jasnością wtedy nie potrzebujemy bloku brightness).

Przechodzimy zatem do kodu na naszym esp. Nie będę tutaj przedstawiał całego kodu gdyż mam tam również inne metody niż wymagane, skupię się tylko na tych najpotrzebniejszych 🙂 Bardzo dobrze sprawuje się u mnie w urządzeniach web server oparty o ESPAsyncWebServer

#define _on 1;
#define _off 0;

#include <ESPAsyncWiFiManager.h>
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
  
  
int brightness = 0;

int state = _off;

int gpio = 12;
  
 void setup() {
  Serial.begin(115200);

  pinMode(gpio, OUTPUT);
  digitalWrite(gpio, LOW);

  AsyncWiFiManager wifiManager(&server, &dns);


  wifiManager.autoConnect("led controller");

  Serial.println("connected...yeey :)");
  Serial.println(WiFi.softAPIP());


  server.on("/on", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(gpio, HIGH);
    Serial.println("ON");
    state = _on;
    brightness = 100;
    request->send(204);
  });

  server.on("/off", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(gpio, LOW);
    Serial.println("OFF");
    state = _off;
    brightness = 0;
    request->send(204);
  });

  server.on("/brightness", HTTP_GET, [](AsyncWebServerRequest * request) {
    int level = atoi((request->getParam("level")->value()).c_str());
    Serial.println(level);
    analogWrite(gpio, 10.24 * level);
    brightness = level;
    if (level == 0){ state = _off;}
    else {state = _on;}
    request->send(204);

  });

  server.on("/status", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(200, "text / plain", String(state));
  });

  server.on("/statusBrightness", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(200, "text / plain", String(brightness));
  });

  server.begin();

  Serial.println("HTTP server started");
}

void loop() {
}

Aby móc podłączyć ESP do sieci korzystam z biblioteki ESPAsyncWiFiManager (zwykła biblioteka ESPWiFiManager nie współpracuje z asynchronicznym serwerem). Gdy Esp nie może się podłączyć do wcześniej wybranej sieci lub nie wie do jakiej ma się połączyć, zostanie wystawiona strona konfiguracyjna na której wprowadzimy ssid oraz hasło sieci do której ma się przyłączyć. Wszystkie metody są metodami GET (niektóre pluginy wymagają innych np. POST).

Autorzy pluginów często opisują jaki kod ma zwracać nasza metoda. Dla statusu oraz poziomu jasności jest to kod 200, oraz zwracamy wartości jako zwykły tekst. Teraz czas na metody on/off to od nas zależy co tam się będzie znajdować z racji tego że ja korzystam z jasności muszę zapisać że gdy światło jest włączone to jasność wynosi 100% oraz aktualny status to ON. Gdybyśmy nie chcieli sterować jasnością to ta metoda mogła by tylko włączać światło i zmieniać aktualny status. Gdy chcemy móc sterować jasnością to należy pamiętać że homebridge wysyła wartość z zakresu 0-100% a pin w ESP działa w zakresie 0-1024 dlatego otrzymaną wartość musimy pomnożyć razy 10.24, otrzymaną wartość wysyłamy na odpowiedni pin. W przypadku metod on/off oraz brightness deweloper nie sprecyzował jaki ma być kod wykonania, ja zadecydowałem że będę zwracał kod 204.

No i dobiegliśmy do końca wpisu mam nadzieję że wyjaśniłem Wam co to jest homebridge oraz jak należy stworzyć urządzenie zgodne z mostkiem 🙂 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

@Masterpc96, właśnie zaakceptowałem opis. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum 😉

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Też robię sterownik do ledów, ale na arduino i pilota ir. Może warto zrobić to na esp i z telefonu sterować? A PCB widzę zamówiłeś chyba, czy robiłeś sam? I pytanie, czy sprawdzałeś ile metrów paska uciągnie ten sterownik (zastosowałeś małe mosfety smd, jak pamiętam to chyba do 2A)

Udostępnij ten post


Link to post
Share on other sites

@Leoneq zacznę od końca 😛 pcb sam projektowałem i zamówiłem na pcbway. Mosfety to a03400 kupowane w tme i wg. noty wytrzymują do 5.7A, ścieżki robiłem maksymalnie grube i krótkie a 12v jest jako poligon na połowie płytki. Dzięki esp projekt mogłem maksymalnie zminiaturyzować. Atmega plus kwarc plus kondensatory zajmą więcej miejsca. Musisz się zastanowić czy aby na pewno chcesz to robić na pilota. To samo co zrobisz pilotem zrobisz aplikacją na telefon i możesz zrobić o wiele więcej niż pilotem, np. planowanie włączania oświetlenia o danej porze, tak jak ja to zrobiłem dzięki podpięciu pod homekit. Nie sprawdzałem ile metrów uciągnie gdyż to zależy od tego jakiej wielkości będą diody led (5050, 3528) oraz ile diod na metr będzie. Przed podpieciem diod do mojego sterownika sprawdzam ile amper pobierają, uważam ze bezpiecznie do 4A można sterować na mosfet.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Hmm, filtrowanie do swoich płytek zawsze robię bez względu czy z atmegą czy nie, taka profilaktyka 🙂 Muszę faktycznie przemyśleć czy nie zrobić tego na esp, bo faktycznie jest więcej możliwości. 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...