SMOG i ESP8266 - cz. 3: Ochrona czujnika, wysyłanie danych do własnej chmury

SMOG i ESP8266 - cz. 3: Ochrona czujnika, wysyłanie danych do własnej chmury

W poprzedniej, drugiej części dodaliśmy do naszego czujnika wyświetlacz, oraz dodatkowy czujnik warunków w jakich dokonujemy pomiaru. Pamiętajmy, że przy wilgotności powyżej 70% – pomiary samego SMOGu mogą być zawyżone!
Teraz czas na dodanie ochrony czujnika smogu, oraz zapisanie danych w chmurze.

Dlaczego trzeba chronić SMOGU czujnik i czy można to robić lepiej?

Czujnik smogu – laserowy – ma ograniczoną żywotność. Zarówno wentylator, ale i dioda nie powinny pracować ciągle – powoduje to ich zużycie i zapyla wnętrze czujnika. Będziemy więc go włączać tylko wtedy, kiedy jest to naprawdę potrzebne – na czas pomiaru. SDS011 obsługuje tryb uśpienia – programowego wyłączenia i jest to oczywiście najlepszy i naturalny sposób jego ochrony. Postanowiłem go nie stosować, ponieważ nie ma jeszcze w ESP Easy 2.0-dev-12 jego obsługi, ale także ponieważ przekaźnik daje możliwość w przyszłości włączenia dodatkowego elementu – ogrzewacza wchodzącego powietrza, tak aby uniknąć błędów pomiaru przy wilgotności > 70%, pomysł na przyszłą modyfikację projektu.

Czego będziemy potrzebować?

Sprzęt

  • nasz działający czujnik smogu z poprzedniego wpisu, uzupełniony o OLED i BME280– SDS011

  • przekaźnik – w przykładzie wykorzystuję dedykowany przekaźnik dla Wemos D1 mini, ponieważ pozwala to na zredukowanie potrzebnego miejsca oraz połączeń. Oraz dlatego, że miałem go po prostu :), może to być jednak dowolny przekaźnik aktywowany stanem wysokim 3,3V i zasilany 5V.

  • dodatkowe kable jumper – czerwony, pomarańczowy

    Software

  • ESP Easy – mamy już zainstalowane na ESP8266, które kontroluje nasz czujnik

    Do dzieła!

    Ponownie należy wszystko razem połączyć. Znamy już schemat – zasilanie VCC na czerwonych kablach, niebieski – GND. Tym razem należy nałożyć lub połączyć nasz przekaźnik.
    Łączymy zgodnie ze schematem – tym razem – zmieniamy połączenia, ze względu na użycie przez przekaźnik D1. UWAGA – nie łączmy zasilania +5V dopóki nie dokonamy zmian w ESP Easy (poniżej):
    wemos_ssd1306_bme280_SDS011_relay_bb
    Tak prezentuje się nasz nowy układ po złożeniu – konkursu na miss domowej elektroniki by nie wygrało, ale przynajmniej zgadzają się kolory! 😉
    20171119_213116
    Ponieważ mamy dodatkowy element, który pobiera prąd – sprawdźmy ile mA potrzebujemy, aby zasilić działające rozwiązanie:
    20171119_231201
    Rejestrujemy 200mA podczas działania wsystkich elementów i wysyłania danych przez sieć WiFi. 50mA gdy przekaźnik i SDS011 jest wyłączony, a ESP nie nadaje wtedy danych.
    Zmiany w konfiguracji ESPEasy:

  • zmieniamy piny do komunikacji z szyną I2C, oraz ustawiamy stan niski przy uruchomieniu dla przekaźnika (na wszelki wypadek)
    easy_esp_inne_i2c

  • w zakładce Tools -> Advanced, włączamy Rules
    easy_esp_rules_on
    Zmieniamy port GPIO naszego sensora na GPIO-15 (D8) – jak na schemacie połączenia
    easy_esp_new_gpio_port
    Usuwamy informację o pyle zawieszonym z SSD1306, będziemy teraz inaczej wyświetlać te dane (zakładka Devices):
    easy_esp_new_ssd_1306

    Rules

    Czas na nowość – konfiguracja Rules na ESP Easy. Jest to między innymi sposób aby wykonywać cykliczne działania, które mogą zależeć od różnych parametrów. Użyjemy ich do:

  • włączenia po 30 sekundach od startu czujnika

  • „rozpędzeniu” go przez 120 sekund

  • dokonania zapisu pomiaru na ekran oraz do chmury – do w tym przykładzie znanego Wam domoticza i podobnie InfluxDB, co wyświetlimy w Grafanie

  • wyświetlenie na OLED

  • wyłączenia czujnika i odczekaniu 12 minut (720 sekund)

  • powtórzenia całego cyklu

Jak? Wpisując ten kod skryptu do Rules:

On System#Boot do //To wydarzy sie po uruchomieniu ESP8266
   timerSet,1,30  //Ustaw zegar do pierwszego pomiaru na 30 sekund
 endon
On Rules#Timer=1 do     //Gdy czas Timer 1 uplynie to:
  GPIO,5,1              //Wlacz SDS011
  timerSet,2,120        //Poczekaj 120 sekund az SDS011 sie rozkreci
endon
On Rules#Timer=2 do  //Gdy czas Timer 2 uplynie to:
  SendToHTTP 10.20.30.40,8080,/json.htm?type=command&param=udevice&idx=11&nvalue=0&svalue=[SDS011#PM25] //Wysylam PM2,5 do Domoticza
  SendToHTTP 10.20.30.40,8080,/json.htm?type=command&param=udevice&idx=12&nvalue=0&svalue=[SDS011#PM10] //Wysylam PM10 do Domoticza
  OLED,2,1,PM2.5: [SDS011#PM25] //Wyswietlaj na OLEDzie
  OLED,3,1,PM10:  [SDS011#PM10] //Wyswietlaj na OLEDzie
  GPIO,5,0                      //Wylacz SDS011
  timerSet,1,720                //Ustaw nastepny pomiar za 720 sekund
endon

Skrypt powinien wyglądać następująco po wpisaniu:
easy_esp_rules
Zauważmy, że linie skryptu będą wyświetlać zmierzone wartości na ekranie OLED – tylko te, które zostaną zmierzone (inaczej przy czasowo wyłączanym – mielibyśmy na ekranie 'nan’).
20171119_213452
Teraz należy stworzyć w Domoticzu (polecam wpis o tworzeniu czujników „dummy”) wirtualne sensory – osobno dla PM 2,5 i PM 10. Jako typ – sugeruję „Custom Sensor” z rozwijanej listy. To ich wartości w skrypcie – przykładowe 11 i 12 należy zmienić, podobnie jak adres IP i port domoticza. Uruchamiamy nasz czujnik i obserwujemy po 16 minutach pierwsze dane:
domoticz_pm
Pozostaje w domoticzu skonfigurować wysyłanie danych – tak jak robiliśmy to we wpisie o InfluxDB i Grafanie. Możemy oczywiście dodać wysyłanie do domoticza w klasyczny sposób danych z czujnika BME280 – ale wtedy nie tak często – najlepiej co pięć minut. Nasz nowy czujnik jest gotowy!
grafana-pm

Previous Post Next Post