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

ESP8266 Obiór pakietu UDP i sterowanie wyjściami I/O oraz PWM

adambehnke 27 Mar 2017 21:02 4089 12
  • #1
    adambehnke
    Level 24  
    Witam

    Możliwe że nie piszę w dziale w którym powinienem ale nie znalazłem lepszego miejsca.
    Otóż męczę się z modułami ESP8266.
    Wcześniej miałem połączone ten moduł poprzez Uart do Atmega.
    I komunikowałem się bez problemu. Ale że ESP posiada własny szybki kontroler i sporo pamięci to postanowiłem pozbyć się atmegi i program napisać bezpośrednio na ESP.
    Kilka dni przeglądam internet i szukam jakiegoś konkretnego tropu w czym i jak programować. Od razu zaznaczę że nie mam zamiaru korzystać z Arduino IDE.
    Nie lubię go i nie używam. Na co dzień programuję atmegi w Eclipse (GCC).
    Ale niestety nie znalałem przykładów i kursów jak programować.
    Za to znalazłem szczątkowe informacje o LUA.

    Zacznę może od szczegółów :
    W ESP mam firmware: NodeMCU 0.9.5 build 20150214 powered by Lua 5.1.4
    tak mi wyświetla w terminalu po starcie.

    Proszę o pomoc jak programować. Jakiś konkretny kurs itp.
    W mikrokontrolerach atmega jestem przyzwyczajony do pętli Main itd..

    A w LUA programowanie bardziej mi przypomina jakis "busz"...

    Moje założenia są proste i chciałbym osiągnąć taki cel:

    0.Chciałbym wykorzystać pakiety UDP



    1.Po podłączeniu zasilania ESP łączy się z siecią wifi pod ustawionym na sztywno ( w jakiejś zmiennej ) adresie IP - powiedzmy 192.168.1.200 i ma nasłuchiwać na porcie 5000

    2.Po odebraniu tekstu np "kanal1-ON" włącza mi stan niski na pinie np. GPIO_1

    3.Po odebraniu tekstu np "kanal1-OFF" włącza mi stan wysoki na pinie np. GPIO_1

    4.Po odebraniu np. "kanal2-120" ustawia mi PWM na GPIO_2 na wartość 120.

    itd.

    Zwyczajnie mam zamiar sterować taśmą ledową. Teraz steruję poprawnie ale mam do tego celu zaprzęgnięte atmegę i ESP. A chciałbym taką prostą funkcję postawić bezpośrednio na ESP.

    Dodatkowo chciałbym móc zwracać jakieś dane pod IP i port nadawcy tak aby wysyłając np. ze smatrfona polecenie "RAPORT" moduł ESP odesłał wcześniej przygotowany raport np"RAPORT_KANAL1-ON^KANAL2-120^......"

    Moje założenia są proste ale nie potrafię zabrać się za napisanie kodu w LUA.
    Zwyczajnie go nie ogarniam...

    Każda pomoc będzie na wagę złota.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Helpful post
    #2
    malcompl
    Level 13  
    W Lua jak w innym z dynamicznym typowaniem, domknięciami i kontekstami (JS etc) pisze się całkiem sympatycznie, ale trzeba się trochę przedstawić. Zawsze możesz walić strukturalno-funkcyjnie, będzie łatwiej. Chociaż nie ma to jak silne statyczne typowanie w kompilowalnych.

    Co do Twoich pytań, powinieneś zajrzeć do dokumentacji używanego firmware czyli NodeMCU Documentation. Jest on bardzo bogata z licznymi przykładami i znajdziesz tam dokładnie to co potrzebujesz.

    Swego czasu robiłem jakieś testy z Lua, JS i Pythonem pod ESP, chociaż docelowo to C++ tam widzę, to jednak do prostych rzeczy, czy prototypowania Lua daje rade ;)
  • #3
    adambehnke
    Level 24  
    Dziękuję za info. No normalnie niesamowicie trudno się przesiąść z Eclipse i C.

    Na chwilę obecną testuję sobie odbiór tak:
    Code: python
    Log in, to see the code


    i w sumie działa poprawnie.
    Ale co to ma być .. :P Gdzie jakaś pętla główna,jakaś funkcja,pętla itp.
    Niewiele rozumiem, Co prawda ten kod rozumiem z grubsza.
    ESP nasłuchuje na porcie 5000 i jeśli odbierze "on" to ustawia pin8 w stan wysoki,a jeśli odbierze coś innego to ustawia pin8 w stan niski.
    Dla testu dodałem że w terminalu wyświetla mi że odebrał polecenie i dodatkowo wyświetla co odebrał.

    Ale jak nawiązać połączenie na zadanym IP zaraz po starcie ESP. I co dalej z moimi założeniami...

    Bez pomocy to będzie droga przez mekę...
  • Helpful post
    #4
    malcompl
    Level 13  
    Skoro to skryptowy to leci jak zwykły skrypt, po kolei wykonując instrukcje i wyrażenia. Pętla zapewne jest w metodzie `Listen` z serwera, (`srv::listen()`), która w kółko nasłuchuje i przy jakieś akcji odpala konkretną podpiętą funkcję lub callback to tej akcji. To taki prawie typowy event-driven, często używane.

    Obyczaj dokładnie moduł `wifi`, pewnie to ma działać w roli typowego klienta/stacji roboczej, więc Cię interesuje wifi.sta.config i wifi.sta.setip, jesli nie chcesz adresów po dhcp.
  • #5
    adambehnke
    Level 24  
    Właśnie raczej nie mogę używać adresów jakie mi przydzieli DHCP. Gdyż w aplikacji na smartfonie muszę sztywno ustawić pod jakie IP nadawać polecenia. Taśm ledowych z ESP będzie kilka i każda będzie miała inne IP. Uprości to sterowanie. Chyba... ? Czy źle się do tego zabieram? Może można to zrealizować prościej?
  • Helpful post
    #6
    malcompl
    Level 13  
    No z dhcp jest taki problem, że później nie wiadomo jaki adres dostało ESP, chyba że są jakieś reguły w ustawianiu IP na podstawie MAC-a. To przeważnie nie jest problemem, bo chyba więcej powstaje projektów, gdzie to właśnie ESP gdzieś wysyła dane, niż przyjmuje bezpośrednio lub pracuje jako AP.

    Twoja idea wydaje się sensowna, jak chcesz mieć niezależne urządzenia. Mógłbyś nawet pomyśleć o jakimś auto-zgłaszaniu się Twoich urządzeń. Na przykład po podłączeniu się do sieci urządzenie mogłoby wysyłać na brodcasta, informacje o swojej nazwie i adresie IP lub na żądanie po wysłaniu jakiegoś requesta na brodcasta.

    Ehh... musze kiedyś dokończyć mój prototyp gniazdka sterowanego prze wifi ;)
  • #7
    adambehnke
    Level 24  
    W sumie im dłużej przeglądam dokumentację NodeMCU tym bardziej mi się ten moduł podoba. Praktycznie większość rzeczy jakie robiłem na atmegach spokojnie ,szybciej i łatwiej zrobię na ESP. A przynajmniej te funkcje jakie wymagają łączności bezprzewodowej.
    Musze jeszcze się zagłębić jak dokładnie działa wykonywanie się programu w ESP.
    Z tego co widzę to wykonuje się linia po linii ale są miejsca w których się zapętla gdyż umieściłem sobie specjalnie polecenia Print"cośtam" abym wiedział w którym miejscu program się wykonuje.
    Dodatkowo muszę znaleźć sposób w jaki wyciągnąć IP i port z jakiego nadeszły do ESP dane i aby dokładnie pod ten port i IP odesłać odpowiedź.
    Nadal proszę każdego kto ma jakąś wiedzę o wypowiedzenie się w temacie.
    Postępy z prac będę szczegółowo opisywał tak aby przydały się innym.
    Oczywiście nie chcę na tacy gotowca ale to moje początki z tym modułem więc każda pomoc jest bezcenna.
  • Helpful post
    #8
    krzbor
    Level 24  
    A dlaczego tak krytycznie podchodzisz do Arduino IDE? Przecież to język C, który znasz pisząc w GCC. Dla mnie najważniejsze były przykłady, które zostały zainstalowane w Arduino. Doceniłem także fakt, że mogę programować różne procesory w tym samym środowisku.
  • #9
    adambehnke
    Level 24  
    No właśnie tak się złożyło że w tym momencie siedzę w Arduino IDE :)
    W sumie wygląda mi na bliższy do C z Eclipse. Są pętle itp :)

    i teraz kolejno muszę przyznać IP modułowi ESP aby mi DHCP nie przydzielił oraz ustawić port na jakim nasłuchiwać będzie moduł.
    Potem muszę rozpoznać komendę jaka nadleci np. ze smartfona i ustawić dwa wyjścia PWM do sterowania ledami (poprzez tranzystory).
    Ale chcę także móc zdawać "raport" właśnie na IP z którego przyszła komenda. Czyli chcę aby ESP wysłał jakiś pakiet po UDP do smartfona .

    Jak to było w PRL.... "Pomożecie?" :P
  • #10
    malcompl
    Level 13  
    Arduino to taki C++ z niestandardowymi dodatkami… nigdy nie używałem bo pisze w standardowym C++...

    Jednym słowem RTFM! Dokumentacja, dokumentacja, dokumentacja... zgodnie z nią pełny prototyp callbacka do eventu `receive` dla UDP ma taką postać:
    Code: lua
    Log in, to see the code


    Nawet przy wysyłaniu jest example, jak zrobić proste echo:
    Code: lua
    Log in, to see the code
  • #12
    adambehnke
    Level 24  
    Obecnie działam na takim kodzie:

    Code: lua
    Log in, to see the code


    i w zasadzie działa poprawnie.

    Ale nie mogę skonfigurować tego przykładu z Echem . Wyświetla mi błąd przy createUDPSocket()

    Code: lua
    Log in, to see the code


    W sumie jak wpisuję kod i nacisnę shift+spacja to mi wyświetla podpowiedzi i nie mam tam createUDPSocket()...
    Nie wiem dlaczego. Czy może mam stary firmware w ESP? Ale raczej to nie ma wpływu. Esplorer mam najnowszy... Co może być?
    Poniżej zrzut ekranu ESP8266 Obiór pakietu UDP i sterowanie wyjściami I/O oraz PWM

    Dodano po 54 [minuty]:

    Coś mi się zdaje że jednak chyba Arduino IDE zostaje jedynym słusznym rozwiązaniem jeśli chodzi o ESP8266.