Forum: Mikrocontroller und Digitale Elektronik Webclient mit AVR-NET-IO


von Sebastian W. (sebastian_w29)


Lesenswert?

Liebe Leute,

ich möchte in einem Wochenendhaus die Temperatur überwachen, inklusive 
einer Email falls die Temperatur (z.B wegen Heizungsausfall) unter 10°C 
fällt. Dazu soll ein Gerät minütlich eine URL aufrufen und die aktuellen 
Werte als Parameter in der URL mit übergeben. Ich habe schon für meine 
Heizung hier zuhause ein CGI-Skript laufen, dass solche Werte dann in 
eine MySql-Datenbank schreibt; eine Email auszulösen ist damit ein 
leichtes.

Die jetzige Lösung ist ein RasPi Typ A über WLAN. Das WLAN ist 
allerdings sehr fragil, fällt häufig aus und startet dann nicht mehr 
korrekt neu.

Ich habe mir nun einen AVR-NET-IO von Pollin besorgt, und suche nun "nur 
noch" nach einer Ethernet-Bibliothek für Atmega32/Enc28j60 mit DNS- und 
TCP-Client-Funktionalität.

Darüber bin ich schier am Verzweifeln. uIP, Radig, und die diversen 
Abkömmlinge scheinen alle nicht out-of-the-box zu funktionieren. 
Webserver wohin man schaut, aber meine heutigen Versuche, das TCP-Client 
Wetterbeispiel z.B. in der Radig-Lib zum Laufen zu bringen waren nicht 
von Erfolg gekrönt. Auch mein Versuch, einen Enc28j60-Treiber an die 
uIP-Lib zu flanschen, bringt mich vom Hölzchen zum Stöckchen und ein 
Ende ist nicht abzusehen.

Inzwischen ärgere ich mich fast, nicht für denselben Preis einen Arduino 
Uno plus W5100 Ethernet Shield gekauft zu haben -- die Arduino 
Ethernet-Bibliothek funktioniert wenigstens.

Kennt jemand eine zuverlässige und gepflegte Ethernet-Bibliothek mit DNS 
und TCP-Client für AVR Studio/Atmega32/Enc28j60?

Oder sollte ich mich noch einmal an die Radig-Lib trauen? Kann mir in 
dem Fall jemand verraten, was der Code in http_get.c hinter 
tcp_port_open genau macht? Wofür ist der tmp_counter gut, wenn 
tcp_port_open doch eh schon einen Eintrag in tcp_entry belegt hat? Und 
warum wird auf app_status zugegriffen wenn index = MAX_ARP_ENTRY ist? 
Und wieso wird first_ack = 1 gesetzt?
1
            tcp_port_open (WEATHER_SERVER_IP,HTONS(80),HTONS(my_http_cp));
2
               
3
            unsigned char tmp_counter = 0;
4
            while((index >= MAX_ARP_ENTRY) && (tcp_entry[index].app_status != 1))
5
            {
6
                index = tcp_entry_search (WEATHER_SERVER_IP,HTONS(80));
7
                if (tmp_counter++ > 30)
8
                {
9
                    HTTPC_DEBUG("TCP Eintrag nicht gefunden (HTTP_CLIENT)!\r\n");
10
                    return;
11
                }
12
            }
13
             
14
            HTTPC_DEBUG("TCP Eintrag gefunden (HTTP_CLIENT)!\r\n");
15
            tcp_entry[index].first_ack = 1;

LG, Sebastian

von c-hater (Gast)


Lesenswert?

Sebastian W. schrieb:

> Ich habe mir nun einen AVR-NET-IO von Pollin besorgt, und suche nun "nur
> noch" nach einer Ethernet-Bibliothek für Atmega32/Enc28j60 mit DNS- und
> TCP-Client-Funktionalität.

Ethersex.

Ist zwar das übliche, wenig durchdachte Open-Source-C-Gebastel, aber in 
diesem Vergleichsfeld doch als ziemlich stabil einzustufen. Ich benutze 
den Kram immerhin selbst als Basis für Eigenentwicklungen im 
Hobby-Bereich. Das will für einen bekennenden C-Hasser schon was heißen.

Fertiges Profil für AVR-Net-IO ist dabei, DNS funktioniert, Beispiele 
für (tatsächlich funktionierende) TCP-Clients gibt's auch reichlich.

Allerdings: Eine Linux-Installation ist strengstens zu empfehlen, sonst 
wird das eher nix mit Ethersex. Installation in einer VM reicht aber 
völlig aus.

von MB (Gast)


Lesenswert?

Hallo,
ich habe nutze die Version von Ulrich Radig auf einem Mega644.
Ich sende Temperatur-Daten per URL auf eine Webseite, welche die Daten 
speichert.
Allerdings bleibt das Programm nach 4-5 Tage hängen, immer wieder...

wie ober erwähnt ist in der http_get.c der Code
1
 while((index >= MAX_ARP_ENTRY) && (tcp_entry[index].app_status != 1))
2
            {
3
                index = tcp_entry_search (WEATHER_SERVER_IP,HTONS(80));
4
                if (tmp_counter++ > 30)
5
                {
6
                    HTTPC_DEBUG("TCP Eintrag nicht gefunden (HTTP_CLIENT)!\r\n");
7
                    return;
8
                }
9
            }

In der Zeile mit HTTPC_DEBUG geht nix mehr.
Der Webserver läuft, DHCP wird ausgeführt, aber er sendet einfach keine 
Daten mehr...
Warum immer erst nach 4-5 Tagen ?

Kennt jemand das Problem ?

von Mark R. (stevestrong)


Lesenswert?

Ich würde AVR-NET-IO in "Arduino-Modus" betreiben, infos hier:
https://code.google.com/p/avr-netino/
https://code.google.com/p/avr-netino/wiki/GettingStarted
Dann einfach Arduino mit Ethercard-Lib benutzen.
Ein einfache Übersicht (Arduino+Enc28j60) findet man z.B. hier:
http://www.lucadentella.it/en/category/enc28j60-arduino/page/2/

: Bearbeitet durch User
von M. B. (freiberger77)


Lesenswert?

Hallo,

ich kam bei meinem Problem nicht mehr weiter, da die Ethernet Routine 
unerklärliche Fehler brachte.
Deshalb wollte ich das mal auf einem Arduino MEGA2560 versuchen.

Die Netzwerkkarte hat keinen Enc28j60 drin sondern einen W5100

Nachteil: ich finde keine Lib dafür.
Vorteil: der Stack soll im IC sein.

Diverse Test mit Arduino Sketch sahen in Sachen  Verbindung 
vielversprechend aus.

Jetzt mein Problem :

Wie bekomme ich die W5100 lib sowie das Netzwerk-Demo vom Sketch ins 
AVR-Studio ?

Dann konnte ich die Netzwerksache von Ulrich Radig rausschmeißen und 
gegen die Arduino Codes ersetzen.



Hat jemand nen Tip ???

von M. B. (freiberger77)


Lesenswert?

ich habe eben die Wiznet 5100 lib als Webserver probiert,
aber irgendwie komme ich damit nicht klar.

http://www.seanet.com/~karllunt/w5100_library.html

von Hubert G. (hubertg)


Lesenswert?

Hast du beim Net-IO die Hardwareverbesserungen gemacht.
Bei mir läuft der Webserver von Radig seither fehlerlos, vorher alle 
paar Tage abgestürzt.

von M. B. (freiberger77)


Lesenswert?

welche Hardwareverbesserung ?
Ich habe einen selbst gebauten Webserver, aber vielleicht ist es ja das 
gleiche Problem.!?

von Hubert G. (hubertg)


Lesenswert?

Ich dachte du hast auch den von Pollin.
Da fehlten einfach jede Menge an Abblockkondensatoren oder sie waren zu 
weit weg von den Pin.
Auch die Spannung des ENC sollte sich im unteren Bereich des erlaubten 
bewegen, er wird sonst unnötig warm.

von M. B. (freiberger77)


Lesenswert?

Ne, das ist bei mir alles IO.
Es liegt an der Software.
Manchmal geht es ne Woche, manchmal 3 Tage...

Finde das Arduino ganz nett, brauche eben nur die W5100 Software dafür

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.