Skocz do zawartości
Ważne ogłoszenie » Kliknij i sprawdź informacje o nowym forum! Czytaj dalej... ×
PierwiastekZdwa

Komunikacja ESP - ESP (za pośrednictwem Arduino)

Recommended Posts

Witam,
chciałbym połączyć ze sobą 3 moduły ESP8266. Moduły te miałby by być połączone ze sobą w taki sposób, że jeden z nich pracowałby jako serwer a pozostałe dwa wysyłałyby do niego dane pochodzące z czujników. Wszystkie trzy ESP miałyby swoje Arduino, które w przypadku tych wysyłających odpowiedzialne by było za przyjmowanie sygnałów z czujników, odpowiednie ich przetworzenie i przekazanie do ESP, a w przypadku serwera za odebranie danych, przetworzenie i wyświetlanie pomiarów na wyświetlaczu (ewentualnie wysyłanie w sieć). Ponieważ nigdy czegoś takiego nie robiłem to nie bardzo wiem w jaki sposób w ogóle mam skonfigurować poszczególne moduły, stąd ten temat. Będę bardzo wdzięczny za wszelkie wskazówki. ESP programuję podłączone do Arduino za pomocą Serial Monitora komendami AT, i o ile komunikacja jest i da się to robić to niezależnie od wybranego baud rate zawsze w jakimś stopniu pojawiają się "krzaczki" lub pozmieniane znaki. Czym to może być spowodowane? Zauważyłem też, że moduły które mam lubią się czasami "posypać". Oznaką tego jest lekko przygaszona czerwona dioda zasilania i chwilowy brak komunikacji. Czasami jest tak, że gdy się "posypią" na serialu leci ciąg różnych krzaczków, który po jakimś czasie ustępuje i ESP znowu działa normalnie. Jaki może być tego powód? Z góry dziękuję za odpowiedzi ;)

Udostępnij ten post


Link to post
Share on other sites

A nie próbowałeś postawić wszystkiego na samych ESP? Jeżeli nie są to jakieś kosmiczne ilości danych do przetworzenia to o wiele łatwiej będzie wykorzystać same moduły. Jeżeli boi się że będzie za słabe zerknij na ESP32. Osobiście nie lubię korzystać z komend AT, jeżeli muszę coś przekazać z Arduino wolę napisać kawałek kodu do odpowiedniej interpretacji komunikatów (dalej jest to komunikacja po UART Arduino <--> ESP, ale mam wrażenie że działa mniej zawodnie) no i cześć funkcji wtedy przechodzi na ESP i nie musimy sie tym martwić.

Odnośnie krzaków i "posypania się", ESP lubi zrobić czyszczenie własnej pamięci (nie wiem jak to lepiej nazwać) jeżeli przestaje wyrabiać. Co do przygasania diody, na pewno ma wystarczającą ilość prądu? Pamiętaj że przy próbach łączenia się z netem, itp. dosyć mocno skacze zapotrzebowanie.

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za zainteresowanie ;)

Jeżeli nie są to jakieś kosmiczne ilości danych do przetworzenia to o wiele łatwiej będzie wykorzystać same moduły.
Ogólnie jak na razie w planie mam używanie 20 cyfrowych pinów, nie wykluczam, że będę chciał używać więcej stosując PCF8574. Program miałby mi wszystko ładnie "pokuładać" i gotowe wyniki wysłać do serwera.
wolę napisać kawałek kodu do odpowiedniej interpretacji komunikatów
Jak wygląda taki kod do interpretacji komunikatów? Niestety w świecie programowania jestem bardzo świeży ;)
Odnośnie krzaków i "posypania się", ESP lubi zrobić czyszczenie własnej pamięci (nie wiem jak to lepiej nazwać) jeżeli przestaje wyrabiać. Co do przygasania diody, na pewno ma wystarczającą ilość prądu? Pamiętaj że przy próbach łączenia się z netem, itp. dosyć mocno skacze zapotrzebowanie
Myślałem o tym, jednak dioda przygasała zarówno przy zasilaczu o wydajności 1A jak również przy 2,5A.

Zauważyłem kolejną ciekawą rzecz. Włączyłem moduły będąc u kolegi i jego sieć WIFI przestawała działać aż do momentu ich wyłączenia. U mnie nic takiego się nie dzieje jednak moduły sypały się czasem gdy np. na jednym z nich chciałem wyszukać dostępne sieci. Czy chodzi tutaj o pracę na tym samym porcie?

Udostępnij ten post


Link to post
Share on other sites

Takie dane pociągnie bez problemu :) U mnie sypało się dopiero przy mnożeniu tablic float 8x8 kiedy miało 5 takich już w pamięci (w sumie może była słaba optymalizacja kodu). W tym wypadku jedynym ograniczeniem jest ilość pinów, niestety ESP8266 jest ubogie i kłopotliwe ze względu na 2 albo 3 (zależnie od wersji) piny funkcyjne których niby można używać, ale czasami daje to ciekawe rezultaty. W takiej sytuacji lepiej nada się ESP32, posiada do 32 pinów cyfrowych.

W Arduino IDE są przykłady na komunikację dwukierunkową po UART, wystarczy przerobić i rozbudować kod wg potrzeb. Najprościej napisać to jako "wyślij do serwera to co dostaniesz po UART", do tego możesz wtedy dodać komunikaty zwrotne czy udało się dane pobrać i przekazać, czy coś nie poszło i jakoś na nie reagować. Wykorzystując własny kod na ESP8266 możesz dodatkowo część funkcji na stałe mu przypisać, jak łączenie z serwerem/siecią/itp. Zamiast słać komendy AT po włączeniu zasilania ESP8266 samo postawi serwer, połączy się z WiFi i z serwerem.

A jak zasilasz ESP? Pobierasz z Arduino czy masz oddzielnie zrobione zasilanie? Masz podciągnięte wszystkie piny które powinny być? Wstawiłeś dzielnik/konwerter poziomów między ESP8266 a Arduino? Która wersje ESP8266 wykorzystujesz?

Wbrew pozorom ESP8266 ma dosyć mocny nadajnik, więc może zagłusza jeżeli kolega ma jakiś słabszy sprzęt.

Czy chodzi tutaj o pracę na tym samym porcie?

Jak to na tym samym porcie? Miałeś dwa ESP8266 do jednego Arduino, czy na jednym kablu USB?

Zainteresuj się ESP32, może to rozwiązać sporo twoich problemów (i stworzyć nowe).

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
Takie dane pociągnie bez problemu

Tak jak wspominałem, ja nowy w tych kwestiach :D

W tym wypadku jedynym ograniczeniem jest ilość pinów

Stąd właśnie pomysł połączenia ESP z Arduino.

W takiej sytuacji lepiej nada się ESP32, posiada do 32 pinów cyfrowych.

Moduł bardzo fajny ale z tego co widzę to dosyć drogi. Nie ukrywam, że wolałbym zrobić to taniej ponieważ bardzo możliwe, że zwiększę liczbę klientów. W cenie jednego ESP32 kupiłem 4 ESP8266 :D Chyba, że jest to najbardziej niezawodny sposób?

A jak zasilasz ESP? Pobierasz z Arduino czy masz oddzielnie zrobione zasilanie? Masz podciągnięte wszystkie piny które powinny być? Wstawiłeś dzielnik/konwerter poziomów między ESP8266 a Arduino? Która wersje ESP8266 wykorzystujesz?

Zrobiłem oddzielne zasilanie. Do zasilania ESP wykorzystuję stabilizatory na 3,3V. Piny CH_PD oraz RST są podciągnięte do zasilania rezystorami 4,7k. Używam konwertera poziomów logicznych z 4 kanałami. Posiadam ESP w wersji 01.

Jak to na tym samym porcie? Miałeś dwa ESP8266 do jednego Arduino, czy na jednym kablu USB?

Tutaj zaszła pomyłka, chodziło mi o kanał Wi-Fi.

Udostępnij ten post


Link to post
Share on other sites

Chodzi o to aby całość opierała się na ESP32, bez Arduino. Poczytaj dokumentacje tego modułu dokładnie, jest mocniejszy chyba od każdego Arduino. Programujesz go w taki sam sposób więc to nie jest jakoś kosmicznie trudne, jedynie doinstalowanie płytki jest trochę kłopotliwe. Dzięki temu pomijasz komendy AT, masz pełną kontrolę na komunikacją i ostatecznie wychodzi jednak taniej niż Arduino+ESP8266 (ceny zaczynają się w Polsce od 35zł, z Chin od 4$).

Zasilanie ESP8266 raczej masz ok, czasami mi też dioda przygasała, ale wtedy była to wina zasilania że prąd mi gdzieś usiekał. Więc nie mam pomysłu.

Teoretycznie dwa modułu ESP (w sumie routery też) działające na tym samym kanale mogę się wzajemnie zagłuszać jeżeli są blisko siebie.

Udostępnij ten post


Link to post
Share on other sites

Połączenie ESP8266 + Arduino wyjdzie drożej niż ESP32.

BTW. piszesz że kupiłeś cztery ESP8266 w cenie jednego ESP32 - gdzie dostałeś ESP-01 po 7 złotych?

Udostępnij ten post


Link to post
Share on other sites

Ciekawe którą płytkę patrzył. Najtańsze są chyba LOLIN32 LITE, ale maja ok. 20 GPIO tylko.

Udostępnij ten post


Link to post
Share on other sites

Finalnie chciałem to przenieść na Atmegę328 - takie krótkie wyjaśnienie czemu tak się uczepiłem tego pomysłu :D

Dzięki temu pomijasz komendy AT, masz pełną kontrolę na komunikacją i ostatecznie wychodzi jednak taniej niż Arduino+ESP8266 (ceny zaczynają się w Polsce od 35zł, z Chin od 4$).

Chyba mnie do tego przekonałeś ;) W pierwszym linku który wyskakuje po wpisaniu ESP32 w wyszukiwarkę jest cena 88 zł i stąd to moje podejście do tematu. Tak, powinienem sprawdzić dokładniej - mój błąd.

BTW. piszesz że kupiłeś cztery ESP8266 w cenie jednego ESP32 - gdzie dostałeś ESP-01 po 7 złotych?

Tak jak wyżej, sugerowałem się ceną 88 zł a za tyle można kupić 4x ESP + przesyłka. Tak tylko zaznaczam, że nie poniosła mnie fantazja :D

Znalazłem ESP-WROOM-32 za 30 zł, więc cena fajna i faktycznie wychodzi taniej niż łączenie ESP nawet z ATmegą. I tutaj też nie powinno być problemu ze zwiększeniem ilości pinów przez dodatkowy układ, prawda?

Udostępnij ten post


Link to post
Share on other sites

Jeżeli nie chcesz bawić się w lutowanie, konwertery, itp. to bierz od razu jakąś płytkę z kompletnym układem, wyprowadzonym USB i wszystkimi pinami. Raczej nie będzie problemu ze zwiększeniem ilości pinów, poszukaj takich z największa ilością wyprowadzeń. ESP-WROOM-32 akurat ma ich ponad 30, więc jeżeli nie masz zamiaru przekraczać tych 20 odczytów w zupełności wystarczy.

Udostępnij ten post


Link to post
Share on other sites

Przyszły do mnie ESP32 WROOM razem z adapterami pozwalającymi wyprowadzić piny do prototypowania. Polutowałem je i podłączyłem do komputera przez konwerter USB - UART. Zainstalowałem płytkę ESP32 do Arduino i wysłałem blinka. Program bez problemu się wgrał i działa jak należy. Problem pojawia się gdy w programie użyty jest Serial Monitor, wtedy moduł cały czas wysyła:

ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:13076
entry 0x40078a58

Brownout detector was triggered

Drugi moduł robił dokładnie to samo... aż do teraz, bo wpadł w tryb programowania i nie mogę z niego wyjść. Może uszkodziłem switcha od IO0 na płytce? Czym mogą być spowodowane te błędy?

Pozdrawiam

Edit:

W czasie kilku prób programowania jednego i drugiego układu zdarzyły się łącznie 3 bluescreeny, ewidentnie związane z programowaniem ESP. Udało mi się teraz raz zaprogramować ten układ który był w trybie programowania nie używając przycisków na płytce tylko bezpośrednio kabelkami. Po wgraniu działał tak jak powinien, przy kolejnych próbach znowu był w trybie programowania i ciągle w nim pozostaje.

Udostępnij ten post


Link to post
Share on other sites

Załatw sobie jakieś porządne zasilanie. Te modułu potrzebują kilkaset mA prądu żeby poprawnie działać.

"Brownout" oznacza spadek napięcia zasilania do poziomu poniżej wymaganego.

Udostępnij ten post


Link to post
Share on other sites

Sęk w tym, że zasilanie które mam raczej mogę uznać za porządne. Mam zrobioną płytkę na której mam wyprowadzone 3,3V ze stabilizatora LD33V (kondensatory na wejściu i wyjściu). Płytkę zasilam z zasilacza 12V o wydajności 2,5A. Aby sprawdzić czy to nie wina zasilacza zmieniłem go na taki o wydajności 1A (co i tak powinno wystarczyć) i efekt wciąż jest taki sam. Próbowałem też pominąć moją płytkę i zmontować stabilizator na płytce stykowej i bezpośrednio do niego podać napięcie z zasilacza - bez zmian. Aby wykluczyć winę stabilizatorów LD33V (powinny dać do 0,8A ale kto wie...) użyłem LM317 oczywiście z odpowiednio dobranymi rezystorami i ciągle to samo. Nie mam pomysłu co innego można tutaj jeszcze zrobić. Podobna sytuacja jest na dwóch układach więc raczej wykluczam błędny montaż. Winny może być konwerter USB-UART albo konwerter poziomów logicznych?

Udostępnij ten post


Link to post
Share on other sites

"Brownout detector was triggered" oznacza, że spadło napięcie poniżej dopuszczalnego. Może masz słabe połączenia albo jakieś zwarcia?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

W sumie to mogłoby wyjaśniać czemu sypały się ESP8266... Tylko sytuacja jest taka, że kabelki zasilania zmieniałem już kilkukrotnie oraz gdzie mogłem to dałem zworki zamiast nich ale dalej na nic to nie wpłynęło. Z ESP8266 bawiłem się na drugiej płytce stykowej więc nie mam już pomysłów co tutaj zawodzi. Przynajmniej jedną rzecz sobie wyjaśniłem, bluescreeny pojawiają się gdy układ coś nadaje (w moim przypadku błąd) i podłączy się go do komputera gdy nie jest w trybie programowania.

Udostępnij ten post


Link to post
Share on other sites

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

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

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

×