wtorek, 1 marca 2016

ESPBLYNK #05 Prosty termometr

Dziś zrobimy w końcu coś praktycznego.

 

Choć może zrobimy to za dużo powiedziane - podczas pisania tej części miałem problem z obsługą DHT11 i przeglądając internet znalazłem dokładnie taki poradnik jaki chciałem napisać :/ Nie pozostaje mi więc odkrywać koła na nowo, więc go tutaj podlinkuje: http://www.instructables.com/id/ESP8266-12-blynk-wireless-temperature-e-humidity-D/?ALLSTEPS
Przerobiłem go jednak na wersję timera taką jak używaliśmy poprzednio oraz DHT11 podłączyłem do pinu GPIO14.

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 14
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "e7f4e49f7df64e96bd856a55f738d50e";
bool ledState = 0;
unsigned long previousMillis = 0;
const long interval = 1000;
unsigned long czas_dzialania = 0;
unsigned int zmienna_V4 = 0;
void setup()
{
  pinMode(12, INPUT); 
  Serial.begin(9600);
  Blynk.begin(auth, "costam", "czteryslowawszystkoduzymiliterami");
}

void loop()
{
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= interval) 
  {
     czas_dzialania++;
     zmienna_V4++;
     previousMillis = currentMillis;   
     if (ledState == LOW)
     {
       ledState = HIGH;
       Blynk.virtualWrite( 1, 1023 );
     }
     else
     {
        ledState = LOW;
        Blynk.virtualWrite( 1, 0 );
     }
     if( digitalRead( 12 ) == LOW )
     {
        Blynk.virtualWrite( 2, 1023 );
     }
     else
     {
        Blynk.virtualWrite( 2, 0 );
     }

     Blynk.virtualWrite( 3, czas_dzialania );
     Blynk.virtualWrite( 4, zmienna_V4%11 );

     // wykonanie pomiaru
     DHT.read(DHT11_PIN);
     Blynk.virtualWrite(10, DHT.temperature); //virtual pin
     Blynk.virtualWrite(11, DHT.humidity); // virtual pin 
   }
  Blynk.run();
}
Od teraz mamy do dyspozycji temperaturę pod zmienną v10 i wilgotność w v11 - mozemy je wyświetlić np w "value display" lub "gauge". A co gdybyśmy chcieli mieć termometr za oknem i mieć pseudo stację pogodową z historią? Tu pomogą nam 2 elementy - "graph" oraz "history graph". Zajmijmy się tym pierwszym. Najpierw jednak skasujmy wszystkie komponenty z naszego programu w Blynku oprócz wskaźnika analogowego. Dodajmy "display value" dla temperatury i wilgotności, a następnie przypiszmy im odpowiednie zmienne.
 
Teraz wybierzmy "Graph". Dla niego dostępnymi parametrami jest nazwa, kolor, przypisana zmienna, wartości jakie może przyjmować (głównie chodzi tu o skalowanie na wykresie), częstość pomiarów oraz typ BAR/LINE. Zeby ładnie zobaczyć zmiany będziemy wyświetlać na nim zmienną, którą wcześniej przygotowaliśmy dla wskaźnika analogowego.



Niestety tu czeka nas przykra niespodzianka - nie możemy wykorzystać tej samej zmiennej do kilku gadgetów. Można to obejść ładując tą samą wartość w ESP do V4 i V5, na tą chwilę to jedyne wyjście z sytuacji, jednak muszę przyznać, że średnio mi się to podoba. Przypisujemy więc do wykresu zmienną v5 i ustawiamy jej przedział od 0 do 15. Musimy dodać w kodzie linijkę przesyłającą naszą dodatkową zmienną z czym już sobie każdy zapewne poradzi. Efekt naszego działania na filmiku:
https://youtu.be/glzdoAURqlQ
Jak widać ma on jedną małą wadę - przy restarcie aplikacji pomiary w nim zawarte się kasują. Wykres nie prezentuje się zbyt ładnie w ustawieniu BAR, dla temperatury polecam ustawiać liniowy, wygląda tak:
History Graph pozwala nam na zbieranie i analizowanie danych ze znacznie szerszego okresu - nawet 3 miesięcy i można na nim wyświetlać aż 4 zmienne. I tu fajna rzecz - w jego przypadku można wykorzystywać zmienne używane w innych obiektach i w przeciwieństwie do zwykłego nie odświeża się po uruchomieniu aplikacji przez co wykresy są ciągłe. Filmik prezentujący to:

Dziś zrobiliśmy termometr z historią pomiarów co jest już małym fajnym projekcikiem. Możemy dać w ESP jakąś małą logikę i zrobić na nim sterownik CO, a wykresy mamy już załatwione.


8 komentarzy:

  1. Pytanko:
    Skąd wziąłeś bibliotekę dht11.h ? ( #include )

    OdpowiedzUsuń
  2. Nie jest możliwe skompilowanie programu.

    OdpowiedzUsuń
  3. Wszystko jest w podanym linku - trzeba kliknąć na krok nr 4 i mamy opis kodu z bibliotekami dostępnymi do pobrania.

    OdpowiedzUsuń
  4. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  5. Z przykrością stwierdzam, że dodanie jakiegokolwiek czujnika (zespołu czujników) DS18B20, DHT22 czy BMP180 do układu powoduje duże problemy z połączeniem z serwerem. Non stop restarty połączenia. To nie jest tylko moja teza, ale jest ona wielokrotnie potwierdzona na różnych (również zagranicznych) forach. Bez czujników układ pracuje poprawnie.

    OdpowiedzUsuń
    Odpowiedzi
    1. Mi także zdarzyło się to kilka razy, ale jako pojedyncze błędy dostępu. A sprawdzałeś może jak to wygląda wykorzystując arduino z modułem WiFi/Ethernet? Podejrzewam, że to kwestia jakiejś małej niezgodności bibliotek.

      Usuń
  6. Niestety nie sprawdzałem, gdyż nie mam wskazanych modułów. Może programiści z Blynk-a znajdą i naprawią problem. Zrobili ostatnio 2 poprawki: jedna finansowa - ograniczono kredyty do 2000 (sic) z 5000, a ostatnio dodali jakiś kolejny bajer. Problem z ESP nadal ten sam. Poczekam i mam nadzieję na poprawkę.

    OdpowiedzUsuń
  7. Świetny artykuł. Bardzo praktyczny :) Spróbuję ten Termometr.

    OdpowiedzUsuń