Skocz do zawartości

ESP32 + OLED + strona WWW


Pomocna odpowiedź

Napisano

Witam,

Tworzę projekt stacji pogodowej na ESP32, która wyświetla dane z czujnika temperatury na stronie WWW z użyciem phpMyAdmin. Tą część mam już za sobą i wszystko działa tak jak należy. Teraz postanowiłem dodać ekran OLED, aby móc odczytywać pomiary z czujnika(BME280), gdy ESP nie ma dostępu do Internetu (chodzi tylko o wyświetlanie ostatniego zmierzonego pomiaru). W jaki sposób się za to zabrać? Czy wystarczy zrobić warunek typu:


while(WiFi.status() != WL_CONNECTED) { 
    delay(500);
    ---- wyświetlanie na OLED pomiaru z czujnika-----
  }
 ----tutaj co się stanie jak się połączy z Internetem, czyli wysyłanie do bazy danych itd.----

Osobiście wydaje mi się to trochę zbyt proste, żeby było prawdziwe stąd moje pytanie do Was.

Z góry dzięki za odpowiedzi 😄 

@matilc witam na forum 🙂 Tylko pytanie skąd układ ma znać ten ostatni pomiar? Wystarczy Ci informacja zmierzona podczas włączania układu, czy chodzi Ci o zapamiętywanie danych, które były zmierzone przed restartem (bo zakładam, że brak WiFi będzie po przeniesie i ponownym włączeniu układu).

  • Lubię! 1

Nie wiem, czy da się tak zrobić , że po włączeniu ESP odczytywane są pomiary z BME i wyświetlane na OLEDzie i w tym samym czasie (co jakiś interwał czasowy) wyszukiwanie dostępnej sieci i łączenie się z nią, jeśli jest dostępna i wtedy zapis do bazy danych.

@matilc no to pewnie, że tak się da 🙂 Najprościej zrobić to tak, że masz zmienną, w której trzymasz pomiar do wyświetlenia na ekranie. Na początku kodu przypisujesz do tej zmiennej odczytane informacje i wyświetlasz je na ekranie. Później w pętli łączysz się z serwerem i pobierasz "coś". Jeśli odebrałeś poprawne dane to aktualizujesz zmienną, a jeśli nie pobrałeś danych (lub są błędne) to nie robisz nic. Przy kolejnym obiegu pętli na wyświetlaczu pojawi się aktualna wartość tej zmiennej, czyli albo poprzednio zapamiętamy pomiar, albo nowa wartość z sieci. To tak w dużym skrócie 🙂

Okej, wygląda to spoko 😀.

A co sądzisz o zrobieniu funkcji, która sprawdza połączenie i w zależności od stanu, albo łączy się z bazą danych , albo wyświetla na OLEDzie? To chyba prostsze rozwiązanie, aczkolwiek nie wiem, gdzie jest "haczyk" 😁

@ethanak w sumie to mogłoby być nawet lepsze rozwiązanie 😀 Teraz mój kod wygląda tak, że po uruchomieniu ESP czeka aż połączy się z siecią. Teraz chcę dodać ekran OLED, żeby wyświetlić pomiary nawet bez dostępu do sieci. Chcesz dodać jakiś pomysł od siebie jak to zrobić ? Jakiś pseudo warunek(ki)? 

Po prostu nie czekaj w setup na połączenie. Przecież w loop() i tak uzależniasz połączenie z bazą od WiFi.status(). Czyli coś takiego:

void setup()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(cośtam);
  WiFi.config(cośtam); // jeśli trzeba
  //i tak dalej
}

void loop()
{
  pomierz();
  wyświetl();
  if (WiFi.status() == WL_CONNECTED) {
    wrzuć_do_bazy();
  }
  delay(ile trzeba);
  // albo lepiej coś w stylu: vTaskDelayUntil(cośtam, cośtam)
}

 

  • Lubię! 1

Dobra, okej. Rzeczywiście w tym momencie mam w setup ten WiFi.status(), a potem znów w loop. Postaram się to zrobić i dam znać jak pojawią się problemy, albo jak wszystko będzie działać poprawnie. 🙂 
Mam jeszcze jedno małe pytanko. Obecnie, aby połączyć się z siecią muszę wcisnąć button reset. Czy mogę ten pin EN podłączyć do dowolnego pinu GPIO i za jego pomocą sterować resetem? Dzięki za podpowiedzi 🙂

(edytowany)
4 minuty temu, matilc napisał:

Obecnie, aby połączyć się z siecią muszę wcisnąć button reset

A to dlaczego? Bo WiFi.begin() przykleił się do setupa zębami i pazurami i nie da się go stamtąd wyjąć?

Bo jeśli tak, to zamiast kombinować z pinami możesz po prostu wywołać ESP.restart() - ale to jakieś takie brzydkie jest 😞

 

Edytowano przez ethanak

Jutro sprawdzę czy wyrzucenie WiFi.begin poza setup niczego nie popsuje i dam znać jakie są efekty 😅. Co do mojego pomysłu z pinem podłączanym pod EN... Wynikał on z tego, że chcę wydrukować płytkę PCB i mam ją już w 95% zaprojektowaną, więc poprowadzenie jednej ścieżki łączącej piny wydawało mi się dość zapobiegawczym pomysłem, aczkolwiek rozsądnym, ale jeśli da się inaczej to czemu nie skorzystać 😄 Niestety, moje doświadczenie jest jeszcze małe, stąd ten chaos...

21 minut temu, matilc napisał:

poprowadzenie jednej ścieżki łączącej piny wydawało mi się dość zapobiegawczym pomysłem

Nieśmiało chciałbym przypomnieć, że wywołanie ESP.restart() nie potrzebuje zmian w płytce tylko w programie...

22 minuty temu, matilc napisał:

Jutro sprawdzę czy wyrzucenie WiFi.begin poza setup niczego nie popsuje

Pokaż ten kod wreszcie, bo coś tu mieszasz. Nie chodzi o to gdzie ten begin siedzi tylko kiedy go wywołujesz.

9 minut temu, ethanak napisał:

Nieśmiało chciałbym przypomnieć, że wywołanie ESP.restart() nie potrzebuje zmian w płytce tylko w programie..

Tak wiem o tym 😄 Ale mój pierwotny pomysł zakładał połączenie z jakimś GPIO.

image.thumb.png.755a048783c894722aafdf58f7d2429a.png To jest jedyne miejsce, w którym pojawia się WiFi.begin w kodzie.

Hm... dlaczego zrobiłeś wszystko, aby ten kawałek kodu był nieczytelny? Czy widziałeś, żeby ktoś na forum wstawiał kod w ten sposób? Czy kontrolka z napisem "Wstaw kod" służy Twoim zdaniem do smarowania chleba masłem czy może to zapalnik od bomby?

A co do jedynego miejsca... owszem, zgadzam się, WiFi.begin powinien siedzieć w jednym miejscu - mianowicie w tym, w którym łączysz się z siecią. Przy czym nie musi być to akurat setup.

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...