Skocz do zawartości

ESP32 + OLED + strona WWW


matilc

Pomocna odpowiedź

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 😄 

Link do komentarza
Share on other sites

@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
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

@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 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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" 😁

Link do komentarza
Share on other sites

@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)? 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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 🙂

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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...

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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.

 

Link do komentarza
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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.