[PROJEKT] Odczyt danych z ESP8266 za pomocą aplikacji Blynk
W artykule przedstawiono prosty projekt, w którym dane z czujnika temperatury podłączonego do płytki WeMos D1 są wyświetlane w aplikacji stworzonej przy pomocy środowiska Blynk.
Do realizacji projektu potrzebne są:
- Płytka z modułem ESP8266 np. WeMos D1
- Analogowy czujnik temperatury LM35DZ
- Przewód microUSB <> USB
- Niewielka płytka stykowa
- Przewody męsko-meskie
- Smartfon z systemem Android lub iOS
Rysunek 1. Płytka WeMos D1
Płytka WeMos D1 została wyposażona w układ ESP8266, który zapewnia łączność WiFi. Swoim kształtem oraz złączami przypomina Arduino UNO, więc możliwa jest współpraca z shieldami Arduino. Na płytce oprócz modułu ESP8266 znalazły się konwerter UART <> USB (układ CH340G), stabilizator itd.
Uwaga!
Maksymalne dozwolone napięcie na liniach układu ESP8266 wynosi 3,3 V. Należy upewnić się, że dołączany do płytki moduł dodatkowy nie wymusza na liniach układu ESP8266 napięcia wyższego niż dozwolone.
Rysunek 2. Moduł z czujnikiem temperatury LM35DZ
Kolejnym elementem będzie moduł z termometrem analogowym LM35DZ, który pozwala na pomiar temperatury w zakresie od 0°C do +100°C z rozdzielczością 0,5°C. Wyjściem czujnika jest sygnał analogowy która zmienia się liniowo o 10 mV/°C.
Połączenie układu jest bardzo proste – wystarczy umieścić moduł z termometrem na płytce stykowej, a następnie przewodami męsko-męskimi podłączyć zasilanie 3,3 V oraz sygnał analogowy do płytki Wemos D1. Należy to zrobić zgodnie z poniższą tabelą:
Pin WeMos D1 | Pin czujnika temperatury/strong> |
+3,3V | + |
GND | – |
A0 | SIG |
Zmontowany układ prezentuje się następująco:
Rysunek 3. Czujnik temperatury podłączony do modułu WeMos D1
Gdy układ jest już zmontowany, można przejść do napisania prostego programu w środowisku Arduino. Jeżeli nie mamy zainstalowanych bibliotek do obsługi płytek opartych o układ ESP8266, należy je dodać. Proces ten został pokazany w artykule p.t. „NodeMCU – przykład użycia aplikacji Blynk”
Teraz należy uruchomić odpowiedni przykład, wybierając z menu Plik >> Przykłady >> Blynk >> Board_WiFi >>ESP8266_Standalone.
Rysunek 4. Otworzenie przykładu, który będzie stanowił bazę do napisania programu
Należy teraz wprowadzić niezbędne modyfikacje (zmodyfikowany kod jest dostępny w sekcji do pobrania na końcu artykułu). Na początku programu znajdują się niezbędne deklaracje oraz załączane są odpowiednie biblioteki. Następnie w zmiennej auth należy podać kod autoryzujący dla naszego projektu (można go znaleźć w skrzynce e-mail lub w ustawieniach projektu, projekt aplikacji zostanie stworzony w dalszej części artykułu). W polach ssid oraz pass należy podać nazwę naszej sieci domowej oraz hasło.
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> // You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "Auth_z_aplikacji"; // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "Nazwa_Sieci"; char pass[] = "Haslo_Sieci;
Następnie należy zainicjować działanie timera (BlynkTimer timer). Po tym trzeba stworzyć funkcję void Wyslij_Dane(). Jej zadaniem jest odczytywanie wartości z portu analogowego A0, a następnie przeliczanie tej wartości na wartość temperatury w stopniach Celsjusza. Zmienna Pin_A0 przechowuje wartość z wejścia analogowego A0. Do przesyłania danych służą piny wirtualne. Aby przypisać wartość do takiego pinu należy użyć funkcji Blynk.virtualWrite. Wymaga ona podania dwóch argumentów: nazwy portu wirtualnego oraz nazwy zmiennej przypisanej do tego wyjścia wirtualnego. Do kilku portów wirtualnych (np. V1, V2, V3 itp.) mogą być przypisane dane z jednej zmiennej.
BlynkTimer timer; void Wyslij_Dane() { int Pin_A0 = 0; float temp = 0; Pin_A0 = analogRead(A0); temp = ((Pin_A0 * 3.3)/1024.00)*100; Serial.println(temp); Blynk.virtualWrite(V4, temp ); Blynk.virtualWrite(V6, temp ); Blynk.virtualWrite(V5, temp ); }
W funkcji konfiguracyjnej setup() ustawiana jest prędkość portu szeregowego oraz uruchamiana jest funkcja inicjalizująca Blynk.begin (z danymi sieci podanymi wcześniej). Na końcu uruchamiany jest timer który co 1 sekundę będzie uruchamiał funkcję Wyslij_Dane().
void setup() { Serial.begin(9600); Blynk.begin(auth, ssid, pass); timer.setInterval(1000L, sendSensor); }
W pętli głównej loop() następuje uruchomienie Blynk oraz timera.
void loop() { Blynk.run(); timer.run(); }