Elektroda.pl
Elektroda.pl
X
Elektroda.pl
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ESP8266][Arduino, LUA] UDP i deep.sleep

29 Sie 2016 12:53 2589 15
  • Poziom 8  
    Witam,
    Używam ESP12E i Arduino v.1.6.8

    Może ktoś z kolegów umie znaleźć wytłumaczenie mojego problemu. Otóż, gdy w programie uaktywniam przejście do trybu głębokiego uśpienia, to po wybudzeniu nic nie dostaję po UDP. Gdy jednak zaremuję usypianie, to program śmiga jak ta lala. Wszystkie dane po UDP dochodzą.
    Dodam, że po wybudzeniu z deep.sleep dane po uarcie przychodzą prawidłowo.
    Nie mam pojęcia co jest nie tak. Przeszukałem chyba już wszystkie linki co wujek google wypluł i nic. Dalej nie wiem jak to ugryźć...

    Oto kod:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Może ktoś spotkał się z podobnym problemem...

    ps. Program testowałem na dwóch różnych ESP12E oraz modułach WROOM-02 - zachowanie identyczne.

    Pozdrawiam
    Korteksik
  • PCBway
  • Poziom 8  
    Kurczę, nikt nie pomoże? Nikt nie spotkał się z podobnym problemem????

    Może jakaś wskazówka?
  • PCBway
  • Poziom 8  
    Dzięki za odpowiedź piotr411,
    rozumiem, że sugerujesz LUA?
  • Poziom 22  
    korteksik napisał:
    Dzięki za odpowiedź piotr411,
    rozumiem, że sugerujesz LUA?


    Nie sugerowałem LUA, a jedynie odstąpienie od środowiska do testownia predefiniowanych modułów. Dla ESP jest dostępne C,Basic,Phyton, LUA. Arduino jest ultra wysoko poziomowym środowiskiem dla ultra początkujących. Taka jest filozofia panów z Italii.

    Ponieważ Arduino jest dla bardzo początkujących,a Twoje pytanie dotyczy już średnio zaawansowanych, dlatego nie dostałeś odpowiedzi. Początkujący nie pomogą Tobie, a Ci co coś wiedzą nie interesują sie Arduino ;-)
  • Poziom 8  
    No więc po wstępnym zapoznaniu się z LUA spłodziłem program testujący UDP:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    I program działa jak powinien - po każdorazowym uruchomieniu łączy się z siecią WiFi i wysyła jedną paczkę po UDP. Na 100 prób - 100 udanych.
    Gdy odremuję instrukcję node.dsleep to ESP prawidłowo się usypia i po 3s się resetuje - ale nic nie dostaję po UDP...
    Ale zauważyłem jedną ciekawą rzecz - przy aktywnej instrukcji usypiania - nawet po resecie sprzętowym nic nie dochodzi po UDP - a przecież powinno, bo wejście w tryb uśpienia następuje po wykonaniu wcześniejszych instrukcji... Czyli powinienem przynajmniej dostać jeden pakiet po UDP zanim ESP pójdzie spać w kolejnej instrukcji...
    Działa dokładnie tak jak przy Arduino...
    Nic z tego nie rozumiem, może teraz są jakieś pomysły???

    ps. ESP ma taki wsad:
    NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4

    ps.
    Po ponad godzinnej pracy z uśpieniem dotarł 1 (jeden) pakiet. Ale nadal nie wiem co o tym sądzić...
    Przez 2 godziny pracy z usypianiem dotarł tylko ten 1 pakiet.
  • Poziom 8  
    Ponieważ nadal nie znalazłem rozwiązania swojego problemu, a i chętnych do pomocy nie ma za wielu - mam pytanie - czy ktokolwiek testował wysyłanie danych po UDP z wykorzystaniem trybu głębokiego uśpienia ESP?
    Teoretycznie mogę obejść swój problem dodając zewnętrzny układ sterujący zasilaniem ESP, ale nie o to chodzi...
  • Użytkownik usunął konto  
  • Poziom 22  
    Problem nie dotyczy bezpośrednio usypiania i wysyłki po uśpieniu. ESP wysyła swoje czasem puste pakiety.
    Mam pewne zastępcze rozwiązanie napisane na Androidzie do pobierania danych z pamięci Flash ESP. Występuje podobny problem. Losowo ESP wysyła paczki i to potrafi trochę namieszać.
    Mogę Tobie dać przykład jaki wykorzystuję w pewnych urządzeniach, gdzie Android wymiana dane z ESP
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 22  
    Piotrus_999 napisał:
    piotr411 napisał:
    Losowo ESP wysyła paczki i to potrafi trochę namieszać.


    Ten przykłd jest niewiarygodnie prymitywnie napisany - i do tego podejrzewam, że jest w dużej części "zwinięty" z internetu - widać to po mikście języków : raz mamy "dane pobrane" a raz "wait....."

    A kolegi autora problem to zbyt wczesne usypianie.


    "Wait" jest chwilowo wyświetlany 300ms, to czas na ponowienie transmisji i sprawdzenie czy pakiet nie przyszedł pusty.

    <ciach>

    Moderowany przez dondu:

    Zbędne wyciąłem.

  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 8  
    Piotrus_999 napisał:


    @korteksik W każdym praktycznie procesorze musisz sprawdzić czy wykonały się operacje, które zleciłeś zanim przejdziesz w trym takiego uśpienia. Jezeli "ubijesz" proceosr i peryferia w trakcie to oczywiście transmisje się nie powiodą.


    Dziękuję za podpowiedzi! Okazało się, że dodanie sporych opóźnień rozwiązało problem. Teraz wysyłanie po UDP po wybudzeniu działa prawie w 100% - prawie, bo po 4 godzinach testów nie doszły chyba ze 2 pakiety ( a były wysyłane co 5s) - więc nieźle.
    Na wszelki wypadek dodałem wysyłanie powtórne pakietu.
    W LUA dodałem opóźnienie na timerze:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Przetestowałem również program w Arduino, po dodaniu opóźnień - tez działa :)
    Metodą prób i testów najpewniej działa opóźnienie delay(1000); przed instrukcją uśpienia.

    Nie wiem, czy tak powinno się robić - ale działa.

    Dziękuję wszystkim za pomoc, a w szczególności dlaPiotrus_999

    Korteksik
  • Użytkownik usunął konto  
  • Poziom 8  
    Piotrus_999 napisał:
    zobacz jeszcze z yield()


    Dzięki, ale zostałem przy arduino. Jakoś nie czuję LUA :) Po dodaniu opóźnień wszystko działa jak powinno :)
    Temat zamykam dziękując wszystkim za zainteresowanie tematem.

    Pozdrawiam
    Korteksik