Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ESP8266 konfiguracja server UDP

heyka 09 Mar 2019 14:12 4080 78
Tespol
  • #31
    heyka
    Level 17  
    Szanowni koledzy jestem wdzięczny za Waszą pomoc i cierpliwość.

    Ale do mnie jakoś nie dociera, że chcąc zrobić z modułu AP UDP trzeba wklepywać aż tyle kodu.
    Za pomocą komend AT ustawiam:
    - tryb pracy AP
    - transmisja UDP
    - nr IP
    - nr portu do nasłuchu
    - szybkość przesyłu danych na RS232
    oraz to aby wszystko co przyleci do modułu wysyłał na RS232.
    Natomiast programując moduł przez Arduino dochodzi tyle dodatkowych rzeczy.

    Dodano po 18 [minuty]:

    chodzi mi ot to czy ten ustawiony adres IP jest adresem modułu pracującego jak stacja czy jest adresem modułu kiedy pracuje jako serwer UDP.
  • Tespol
  • #32
    khoam
    Level 41  
    heyka wrote:
    Natomiast programując moduł przez Arduino dochodzi tyle dodatkowych rzeczy.

    Czy odnosisz się to jakiegoś konkretnego już kodu, który testujesz? Jeżeli tak, to proszę opublikuj ten kod tutaj - daj szansę sobie pomóc.

    heyka wrote:
    chodzi mi ot to czy ten ustawiony adres IP jest adresem modułu pracującego jak stacja czy jest adresem modułu kiedy pracuje jako serwer UDP.

    Jest adresem IP interfejsu sieciowego urządzenia, które może pełnić jednocześnie rolę klienta i serwera.
  • #33
    kaczakat
    Level 33  
    Tak jest łatwiej dla mnie, niekoniecznie dla Ciebie. Komendy AT robią dokładnie to samo co polecenia w Arduino. Niestety raczej nie osiągniesz tego co pisałeś komendami AT, bo ich wykorzystanie jest ograniczone do tego co zostało przewidziane przez autora tamtego firmware. No chyba, że nie potrzebujesz tego, że moduł odpowie raz tym co dostał na UART, a w innym wypadku tym samym komunikatem. Tak samo soft polecony przez @khoam nie robi dokładnie tego co chcesz, ale tu już masz do niego dostęp, drukuje IP skąd przyleciał komunikat? Nie potrzebujesz tego, to pyk w komentarz. Komendy AT też nie wpadły gdzieś do głowy, musiałeś się ich nauczyć.
  • #34
    heyka
    Level 17  
    Myślę, że źle się za to wszystko zabrałem, kluczem jest poznanie bibliotek i poleceń w nich zawartych

    Code: c
    Log in, to see the code


    Czy polecicie mi jakąś stronę z dokumentacją do nich?
  • Tespol
  • #35
    khoam
    Level 41  
    heyka wrote:
    Czy polecicie mi jakąś stronę z dokumentacją do nich?


    Na początek możesz przejrzeć podręcznik w załączeniu. Jest tam dużo więcej niż potrzebujesz, ale na pewno wiele rzeczy się wyjaśni. Podręcznik jest napisany pod kątem użycia ESP8266 z Arduino HAL.
  • #37
    heyka
    Level 17  
    Kupiłem do programowania ESP taki moduł https://opiniolog.com/pl/read/3636/, ale coś nie mogę wgrać programu do płytki, komendy AT przyjmuje moduł odpowiada, a programu z Adruino nie chce, dolutowałem przełącznik w celu połczenia GPIO z GND.
  • #38
    khoam
    Level 41  
    heyka wrote:
    a programu z Adruino nie chce, dolutowałem przełącznik w celu połczenia GPIO z GND.


    Rozumiem, że chodzi o GPIO-0? Jaką płytkę masz wybraną w Arduino IDE? Powinno być dla "Generic ESP8266 Module". Flash Mode powinien być ustawiony jako QIO, Flash Size jako 1M (no SPIFFS).
    W przypadku ręcznego wchodzenia w tryb programowania poprzez zwarcie GPIO-0 do masy, parametr Reset Method powinien być ustawiony jako "none".

    Najlepiej, jakbyś dał zrzut z ekranu, z menu "Narzędzia" :)
  • #40
    heyka
    Level 17  
    Nie mogę zrobić zrzutu bo mi się zwija okno narzędzia.
  • #41
    kaczakat
    Level 33  
    heyka wrote:
    Kupiłem do programowania ESP
    Niestety ktoś Cię wprowadził w błąd, te dongle widziałem w dwóch rodzajach, bez przełącznika jest tylko do trybu komunikacji, taki z przełącznikiem z boku może pracować jako programator (łączy to GPIO 0 do GND) lub jako mostek UART-USB. Jest to zresztą opisane poniżej w Twoim linku. Przy okazji mogłeś kupić moduł NODE MCU lub WEMOS mini, przynajmniej przesyłka nie podwoiłaby kwoty zamówienia, a programuje się je bez banglowania jakimiś przełącznikami. Do portu USB podłączasz po zwarciu 0 z GND, można też zrobić zwarcie, reset, po 1s jest w trybie programowania.
  • #44
    khoam
    Level 41  
    heyka wrote:
    Kupiłem programator dokładnie z tej strony https://nettigo.pl/products/adapter-usb-do-modulow-esp8266-01,, dołożyłem przycisk tyle tylko że włączyłem z nim w szereg rezystor 470.


    W wypadku programowania ESP-01 lepiej jest nabyć zwykły konwerter USB-UART i dorobić sobie układ auto-resetu, jak poniżej na schemacie (przycisk RESET jest potrzebny tylko w wypadku zawieszenia się układu) Wtedy ESP-01 będziesz mógł automagicznie programować tak, jak w wypadku standardowych płytek Arduino (reset w trybie ck i automatyczne wejście/wyjście w tryb programowania). Działa bez zarzutu z różnymi konwerterami UART-USB.

    ESP8266 konfiguracja server UDP
  • #46
    khoam
    Level 41  
    heyka wrote:
    potrzebny jest pewnie jeszcze konwerter poziomów logicznych 3,3V na 5V.


    Nie jest potrzebny. W tym konwerterze USB-UART można wybrać za pomocą zworki logikę 3V3 lub 5V.
  • #47
    heyka
    Level 17  
    Mam taki kod

    Code: c
    Log in, to see the code


    Kod działa, z tym że moduł ESP działa w trybie ST łączy się z komputerem przez router, a teraz jak to przerobić żeby ESP działał w trybie AP?
  • #49
    heyka
    Level 17  
    Code: c
    Log in, to see the code


    Wymyśliłem coś takiego, AP działa, po podłączeniu komputera do sieci utworzonej przez moduł ESP, został nadany komputerowi nr IP, więc połączenie jest, ale jak coś wysyłam z tego komputera na adres modułu to nic nie pojawia się na porcie.
  • #50
    khoam
    Level 41  
    heyka wrote:
    ale jak coś wysyłam z tego komputera na adres modułu to nic nie pojawia się na porcie.

    Co konkretnie wysyłasz? Twój program tylko informuje o odebranych pakietach UDP.
  • #51
    heyka
    Level 17  
    Działa :)

    Zapomniałem dać:

    Code: c
    Log in, to see the code


    Pierwsza bitwa wygrana.

    Dodano po 1 [minuty]:

    khoam wrote:
    heyka wrote:
    ale jak coś wysyłam z tego komputera na adres modułu to nic nie pojawia się na porcie.

    Co konkretnie wysyłasz? Twój program tylko informuje o odebranych pakietach UDP.


    Próbowałem wysłać jakieś stringi do modułu z komputera i napisanego przeze mnie programu ze smartfona.

    Dodano po 16 [minuty]:

    Nie do końca pojmuję ten kawałek kodu

    Code: c
    Log in, to see the code
  • Helpful post
    #52
    khoam
    Level 41  
    Po wczytaniu danych do bufora znaków 'incomingPacket', wpisuje znak '0' za ostatnim wczytanym znakiem - jest to tzw. terminator łańcucha tekstowego.
  • #53
    heyka
    Level 17  
    Code: c
    Log in, to see the code


    Tego nie mogę pojąć, Udp.read zapisuje do bufora odebrane dane, ale jak jest obliczana ilość elementów bufora len?
    len jest typu int czyli np

    int len = "test";

    w tym przypadku len = 4 ?

    Dodano po 8 [minuty]:

    A teraz następny etap.

    Moduł ESP łączę przez Uart z płytką Arduino, arduino wysyła mi dane ( stringi) przez Uart, jak wysłać je za pomocą ESP przez WiFi pod konkretny adres, port korzystając z UDP, podejżewam, że trzeba skorzystać z poniższego kodu, tylko jak "złapać" do replypacket dane odebrane przez UART?

    Code: c
    Log in, to see the code
  • #55
    khoam
    Level 41  
    heyka wrote:
    Udp.read zapisuje do bufora odebrane dane

    i zwraca wartość int, która równa jest ilości wczytanych danych (pojedynczych bajtów).

    Dodano po 7 [minuty]:

    heyka wrote:
    Moduł ESP łączę przez Uart z płytką Arduino, arduino wysyła mi dane ( stringi) przez Uart, jak wysłać je za pomocą ESP przez WiFi pod konkretny adres, port korzystając z UDP, podejżewam, że trzeba skorzystać z poniższego kodu, tylko jak "złapać" do replypacket dane odebrane przez UART?


    Sądzę, że powinieneś się szczegółowo zapoznać z metodami klasy WiFiUDP: Link
  • #56
    heyka
    Level 17  
    kaczakat wrote:
    Ja Ci parę dni temu wrzuciłem już działający kod, tylko wstawiłem delay(5000) bo odpowiedzi wpisywałem z palca.



    Faktycznie, tylko że parę dni temu to była dla mnie czarna magia, a teraz zaczynam rozumieć ten kod.

    Dodano po 11 [godziny] 17 [minuty]:

    Witam wszystko działa tak jak chciałem, mam pytanie odnośnie poniższej części kodu:

    Code: c
    Log in, to see the code

    czy dobrze to pojmuję
    - sprawdzanie czy coś przyleciało przez uart
    - jeżli tak to do pierwszego elementu bufora wpisuję pierwszy odebrany znak
    - jeżeli bufor jest dostatecznie duży to zwiększam indeks i2
    - odczytuję do drugiego elementu bufora odebrany znak, dlaczego jest to drugi odebrany znak a nie znowu pierwszy, czy po odczycie pierwszego znaku z odebranego stringa pierwszy znak jest automatycznie kasowany?

    Jeszcze jedno potrzebuję w kodzie do modułu ESP8266 zrobić:
    - wysyłam komendę z smartfona np ON wystawia mi się stan 1 na GPIO ale na powiedzmy 5 minut a następnie stan GPIO zmienia się na 0, ale w czasie kiedy trwa to 5 minut chciałbym przerwać ten czas np komendą OFF. Delay odpada bo jest to funkcja blokująca
  • #57
    khoam
    Level 41  
    heyka wrote:
    - jeżeli bufor jest dostatecznie duży to zwiększam indeks i2

    A gdzie jest zerowana oraz ustawiana początkowa wartość 'i2'? Zakładam, że w jakkiś sposób kontrolujesz zakres indeksu dla bufora 'buf2'.

    heyka wrote:
    wysyłam komendę z smartfona np ON wystawia mi się stan 1 na GPIO ale na powiedzmy 5 minut a następnie stan GPIO zmienia się na 0, ale w czasie kiedy trwa to 5 minut chciałbym przerwać ten czas np komendą OFF. Delay odpada bo jest to funkcja blokująca

    Do odliczania czasu w pętli możesz użyć millis().
  • #59
    heyka
    Level 17  
    khoam wrote:

    A gdzie jest zerowana oraz ustawiana początkowa wartość 'i2'? Zakładam, że w jakkiś sposób kontrolujesz zakres indeksu dla bufora 'buf2'.



    Code: c
    Log in, to see the code


    Zmienna jest I2 jest zerowana po wysłaniu buf 2.

    Dodano po 4 [godziny] 39 [minuty]:

    ESP8266 konfiguracja server UDP

    Mam taki problem, wysyłam stringa z kompa do modułu i ma on 9 bajtów, wysyłam identycznego stringa z smartfona do modułu i ma on 11 bajtów, podejżewam że program na smartfona dokleja niewidoczne znaki do wysyłanego stringa pewnie CR i LF, w jaki sposób dokonać porównania:
    Code: c
    Log in, to see the code


    gdzie incomingPacked przylatuje jako btnW1_OFF plus znak CR plus znak LF?

    Dodano po 40 [minuty]:

    khoam wrote:

    heyka wrote:
    wysyłam komendę z smartfona np ON wystawia mi się stan 1 na GPIO ale na powiedzmy 5 minut a następnie stan GPIO zmienia się na 0, ale w czasie kiedy trwa to 5 minut chciałbym przerwać ten czas np komendą OFF. Delay odpada bo jest to funkcja blokująca

    Do odliczania czasu w pętli możesz użyć millis().


    Nie bardzo wiem jak to zrobić :(
  • #60
    khoam
    Level 41  
    heyka wrote:
    dokleja niewidoczne znaki do wysyłanego stringa pewnie CR i LF, w jaki sposób dokonać porównania:

    if (!strcmp(incomingPacket,"btnW1_OFF"))

    gdzie incomingPacked przylatuje jako btnW1_OFF plus znak CR plus znak LF?


    Możesz użyć funkcji strncmp():
    Code: c
    Log in, to see the code

    Jak nie będą doklejane, to też powinna zadziałać ;)

    Dodano po 2 [minuty]:

    heyka wrote:
    Nie bardzo wiem jak to zrobić

    No to może zajrzyj tutaj?