Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Najtańszy uC z Ethernetem (obecnie uC+ WRT54G (linux)

Myrek1 22 Nov 2007 21:35 2156 12
  • #1
    Myrek1
    Level 23  
    Mam problem z routerami w domu. Mam ich 2, jeden jest z modemem, drugi do VoIP, trzeci to AP. Czasem bywa, że któryś się zawiesi. Muszę zrobić coś co będzie restartowało je w wypadku zawieszenia.
    Wpadłem na pomysł, że zmontuje coś na uC z TCP/IP i podłączę pod ostatnie urządzenie (w tym przypadku AP). uC będzie pingował np co kilka minut jakiś serwer www. Jeśli nie otrzyma odpowiedzi to zrestartuje przez przekaźniki wszystkie urządzona.
    Pomysł prosty i dobry.
    Pytanie tylko jakiego proca wybrać. Z tego co widziałem najtańsze z Ethernetem (ARMy) są po 50zł, to trochę za dużo. Są jakieś małe i tańsze z tym portem?
  • #2
    marenc
    Level 24  
    Nie taniej AVR + ENC28J60(na przykład)? Co prawda trzeba samemu zrobić stos IP, ale poza tym to chyba będzie dużo taniej ;)

    //A może by pingować sam ruter(ten najdalszy)? Bo co będzie gdy stracisz połączenie lub DSN padnie :P
  • #3
    Myrek1
    Level 23  
    No w sumie można, wyjdzie ok 30zł i kupa roboty przy stosie, chyba że weźmie się gotowy.

    Do ostatniego będzie podłączony uC. Można zrobić tak, że pinguje kilka IP. Wtedy odpada lipa z DNSami. Dodatkowo jeśli będzie brak odpowiedzi zrobi restart routera i znów pinguje. Jeśli nic nie będzie to czeka jakiś tam czas i znów...
    Można też pingować router z modemem.
    Rozwiązań jest kilka, ważny jest tylko dobór jak najtańszego uC, żeby miało to sens.

    Tak się składa, że AP to linksys na linuksie (tomato). Dorobił bym do tego szeregówkę i do uC. Tylko nie wiem jak wygląda sterowanie portem szeregowym wna tym sofcie, nigdy nie bawiłem się na linuksie.
  • #4
    marenc
    Level 24  
    No ja bym poszedł na gotowca ... są projekty stosu IP na ATmega48/88/168 z przykładami echa. Przerobienie polegało by tylko i wyłącznie na odczekiwaniu na echo oraz kontrolowanie jednym I/O. Mało ambitne zadanie, ale jaka prostota wykonania ... a chyba i to oprócz ceny się liczy ;)
  • #5
    migod
    Level 21  
    Jakie to sprzęty ? Linksys ? Jeśli tak, to można sporo w nich pozmieniać (hardware + software)..
    BTW: są gotowe urządzenia do tego, ale koszt chyba > 100,-
  • #6
    Myrek1
    Level 23  
    WRT54GL, wpadłem na to przy drugim poście. Mam tam tomato. Muszę dowiedzieć się jak za pomocą uC pingować IP przy użyciu tego softu przez port szeregowy

    Tu nie chodzi o ambicję, ją pokazuje w innym projekcie;) Chodzi mi o sprawnie działające rozwiązanie bo denerwują mnie telefony z domu, że tel nie działa (VoIP). Jak się okazuje router często się wiesza. Trzeba wymienić router ale i zrobić zabezpieczenie dla świętego spokoju.
  • #7
    migod
    Level 21  
    To masz zapewne urzadzenie /dev/tts/0 i 1. Polecenie cat > /dev/tts/0 wysyła znaki z klawiatury poprzez port COM0 na płytce WRT54GL.

    Można dopisać do plików startowych w /etc/init.d/S<wysoki numerek>UARTPing.sh cos w stylu:
    Code:

    #!/bin/sh
    cat /dev/urandom > /dev/tts/0

    i jeżeli ATmega zapięta po drugiej stronie przestanie odbierać dane (i zgłosi timeout), to zresetuje całą instalację.

    Dystrybucji tomato nie znam. Pozostawiam rozkminianie Tobie :)

    Oprócz tego można napisać własny kawałek kodu w C (to tak na wypadek, gdybyś nie programował jeszcze w Linux), typu
    Code:

    FILE* pFile = fopen("/dev/tty/0", "rb");
    fwrite(...., pFile);
    fread(..., pFile);

    ale cat wydaje się doskonałym i sprawdzonym narzędziem :)

    Wszystko piszę per analogia do dystrybucji OpenWRT, z której sam korzystam.

    BTW: u mnie w tandemie router WRT54GS i WAP54G wiesza się zawsze ten ostatni. Z VoIPem Linksysa nie ma nigdy problemów.

    Powodzenia!
  • #8
    Myrek1
    Level 23  
    Ja mam tek, że jest adsl>router z modemem>fritz!box>AP WRT54GL i ma być za WRT54GL uC. Chce, żeby ten uC (Atmega) przez szeregowca pingował za pomocą tomato w AP jakieś IP w necie. Dopiero jak braknie pinga to wtedy naspuje restart wszystkiego.
    Więc chyba to co napisałeś, nie przejdzie, bo linksys jest na samym końcu, nie na początku. Działało by gdyby linksys sam pingował IP i odpowiedź wysyłała do uC.
    Ale bardziej interesuje mnie sterowanie z uC, nie z linksysa, bo wtedy magę sprawdzić więcej IP, np nie zgłasza się ping z neta to pinguje modem i sprawdzam czy jest odpowiedź. Jak jest to najprawdopodobniej jest zerwane połączenie (wina dostawcy neta).

    W linuxie się nie bawiłem, ale szybko się uczę ;)
  • #9
    migod
    Level 21  
    Nie wiem, ile mozesz zwojowac z tomato, ale ja bym odpalil na tym APie skrypt (pod OpenWRT jest to dosc proste), ktory robi w petli zestaw pingow, analizuje wyniki i periodycznie raportuje to na COM0 do podpietej tam ATmegi. Zwisa AP lub siec jest niedostepna - ATmega robi reset calosci. Byc moze malo eleganckie, ale o niebo prostsze niz uruchamianie stosu TCP/IP na ATmega..
  • #10
    Myrek1
    Level 23  
    A czy nie da się napisać skryptu (nie musi być na tomato, może być na openWRT), który na odpowiednią komendę z ATmegi wykona ping dowolnego IP i odpowie ATmedze wynikiem?
  • #11
    migod
    Level 21  
    Ooo.. myślę, że dość lajtowo

    Code:

    # to jest proces wczytujący non stop zawartość portu COM0 i przekierowującego go na stdin naszego skryptu

    cat /dev/tts/0 | <moj_skrypt.sh>


    a w <moj_skrypt.sh>
    Code:

    #!/bin/sh

    #nieskonczona petla, ktora wczytuje adres IP (linia po linii) z stdin, a nastepnie robi ping-a, ktorego wynik trzeba pozniej potraktowac np. grep-em i wyłapać obecnosc słów kluczowych.
    #Brak slow kluczowych - wyslac Err do procka, lub OK jesli sie powiodlo.

    while true; do
    while read line; do {
       result=`ping $line | <kod do weryfikacji wynikow>`;
       if(result=....) then echo "OK" > /dev/tts/0;
       else echo "Err" > /dev/tts/0;
       end if;
    } done;
    done;


    czy jakoś tak. Nie pamietam, czy nie wkradła się tu składnia Perla, ale z grubsza tak bym to zrobił.

    Jak dla mnie układ jest prostszy w utrzymaniu, jeśli cała konfiguracja jest na AP (np. lista adresów do pingu), a ATmega jest tylko "biernym" obserwatorem. Ale to szczegół techniczny :)
  • #12
    Myrek1
    Level 23  
    Wielkie dzięki. Na razie mało mi to mówi ale posiedzę nad tym.
    Adresy do pingu może być np 3, 2 IP zewnętrzne np onet i wp a jeden wewnętrzny do weryfikacji połączenia. I było by tak, że Atmega wysyła rozkaz sprawdzenia jednego, otrzyma błąd, drugiego, otrzyma błąd, sprawdza wewnętrzny - otrzyma błąd - restart systemu. Jak przy wewnętrznym otrzyma ok - czeka np 5 minut. Jeśli dalej błąd to restart i dalej sprawdza. Jeśli dalej błąd czeka dłużej.

    Myślę że pomysł jest dobry i będzie działał znakomicie. I też da się to zrobić na tomato bo obsługuje on skrypty. Do tego można sobie go samemu skompilować.
  • #13
    migod
    Level 21  
    Ok, dziś odpaliłem prosty projekcik - ATmega8 mierzy napięcie na ogniwach słonecznych i śle te dane do WRT54GS (via serial oczywiście), a ten loguje to wszystko na kartę SD. Cały układ jest zasilany wprost z WRT.

    Czyli masz duże szanse powodzenia w swoim projekcie :)