Forum: Mikrocontroller und Digitale Elektronik Welche Hardware für Webserver


von Mathias O. (m-obi)


Lesenswert?

Hallo,

ich würde jetzt gerne mal auf Erfahrungswerte einiger User 
zurückgreifen.
Ich hab schon öfters mit einem ENC28J60 rumgespielt in Verbindung mit 
Mega8 und 16.
Nun möchte ich gerne mal einen Webserver zusammenstellen, der html-, 
css- und js-Dateien in normaler Geschwindigkeit bereitstellt und man 
nicht auf jede Kleinigkeit warten muss.
Muss es da schon 100 Mbit sein oder reichen da noch 10 Mbit? Muss es da 
schon ein ARM Cortex sein oder reicht ein AVR?
Es soll keine Highend-Anwendung werden. Ich will nur erstmal vom UART 
Parameter (Baud, Parity, Databits, ...) einstellen und natürlich IP und 
so.
Und als Protokoll noch Modbus implementieren, das läuft auch schon auf 
einem AVR.

von Karl H. (kbuchegg)


Lesenswert?

Mathias O. schrieb:

> Muss es da schon 100 Mbit sein oder reichen da noch 10 Mbit?

Das kommt drauf an, wie umfangreich du die HTML Seiten gestaltest. Um 
ein paar Texte in einem Fomular auf einer HTML Seite anzuzeigen bist du 
HTML-Textmässig klein unterwegs. Dann braucht es auch keine riesige 
Bandbreite. Ob ein Benutzer 3 Zehntel Sekunden warten muss oder doch 4 
Zehntel, kann er nicht unterscheiden.
Wenn du natürlich deine Seiten mit Grafiken spickst, dann sieht das 
wieder anders aus.

> Muss es da
> schon ein ARM Cortex sein oder reicht ein AVR?

Dein Hauptproblem wird eher sein: Wo kommen die auszuliefernden HTML 
Seiten samt Zubehör wie CSS File und/oder Grafiken eigentlich her? Das 
muss ja alles irgendwo gespeichert sein. Da wirds dann auf einem Mega16 
ganz schnell ganz eng. Je umfangreicher deine Seiten, desto schneller.

von MaWin (Gast)


Lesenswert?

Mathias O. schrieb:
> Muss es da schon 100 Mbit sein

Na wie viele tausend Kunden greifen denn drauf zu ?

Mathias O. schrieb:
> Ich will nur erstmal vom UART
> Parameter (Baud, Parity, Databits, ...) einstellen

Ich würde mir über den Stromverbrauch Gedanken machen, wenn das Ding 
dauernd laufen soll, vielleicht ein RPi ?

von Robert N. (metrux)


Lesenswert?

Auf jede Kleinigkeit wirst du rechnerisch nicht warten müssen, nur 
mindestens 1s/1,25MB bei 10Mbps. Es hängt also davon ab welche 
Datenmenge du ausliefern möchtest.

Allerdings ist Durchsatz nicht alles.

Gehen wir mal davon aus, dass du nur eine CPU in deinem Projekt hast.
Dann passiert nicht wirklich gleichzeitig, sondern wird durch Puffer 
zeitlich entzerrt. Einfach gesagt je mehr gleichzeitig stattfinden soll, 
desto länger dauert es.

Solltest du nur einen Messwert hübsch anzeigen wollen, dann überleg dir 
einen geschickten Softwareaufbau. Erstmal alles statische ausliefern. 
Per AJAX nur noch dynamische Kleinigkeiten übertragen und den rest im 
Browser.

Wenn du allerdings noch groß auf dem µc rumrechnen möchtest dann wird 
deine Latenz schlimmer werden.

Das ganze gilt für einen Client. Bei mehreren wird's wild.

Warten ist relativ.

: Bearbeitet durch User
von Mathias O. (m-obi)


Lesenswert?

Karl H. schrieb:
> Da wirds dann auf einem Mega16
> ganz schnell ganz eng.

Also entweder einen ext. Flash dazu oder gleich nen Cortex M3?

MaWin schrieb:
> Na wie viele tausend Kunden greifen denn drauf zu ?

Naja immer nur einer, eben um Einstellungen vorzunehmen. Beim Modbus 
maximal 2.

MaWin schrieb:
> Ich würde mir über den Stromverbrauch Gedanken machen, wenn das Ding
> dauernd laufen soll, vielleicht ein RPi ?

Da würde ich mir eher Gedanken machen um meinen Kühlschrank, Staubsauger 
oder Fernseher. Und ich brauch kein HDMI, CSI oder MMC-Slot.

Also werde ich dann eher beim ENC bleiben. So ein Durchsatz und riesige 
Datenmengen werden es nun nicht werden. Wie gesagt, das wird erstmal ein 
kleines Projekt werden, sozusagen eine private Machbarkeitsstudie - was 
ist möglich.

von Karl H. (kbuchegg)


Lesenswert?

Karl H. schrieb:

> Da wirds dann auf einem Mega16
> ganz schnell ganz eng.

Ich bin mir jetzt gar nicht mal so sicher, ob ein Mega16 da überhaupt 
reicht. Auf dem AVR-NetIO ist jedenfalls ein Mega32 verbaut und wenn ich 
so zurückdenke, dann geht da der Radig-Server gerade noch so lala drauf. 
Wahnsinnig viel Platz bleibt da nicht übrig.

: Bearbeitet durch User
von Mathias O. (m-obi)


Lesenswert?

Ja das denk ich auch. Es hat gerade mal der TCP, IP, ARP, ICMP und UDP 
Platz gehabt bei mir. Eigentlich könnte ich auch nen Mega1280 oder 
Mega2560 nehmen.

von c.m. (Gast)


Lesenswert?

Mathias O. schrieb:

> Nun möchte ich gerne mal einen Webserver zusammenstellen, der html-,
> css- und js-Dateien in normaler Geschwindigkeit bereitstellt und man
> nicht auf jede Kleinigkeit warten muss.

hört sich fast schon nach einer RIA an ;)
für was soll das JS denn sein? AJAX? willst du vielleicht auch noch 
Werte in Datenbanken verwalten, und eventuell den traffic per (self 
signed) SSL verschlüsseln?
warum sich dann mit einem kleinen µC das leben schwer machen - nimm 
einen dicken mit mehr dampf, mit OS und entsprechender Software. ein RPi 
z.b.

von Mathias O. (m-obi)


Lesenswert?

Mit Datenbanken hat das recht wenig zutun. Und SSL brauch ich auch 
nicht. Es soll lediglich erstmal ein Gateway werden für Modbus-TCP auf 
RTU. Und ein RPi ist dafür zu oversized.

von Rolf M. (rmagnus)


Lesenswert?

Mathias O. schrieb:
> Und ich brauch kein HDMI, CSI oder MMC-Slot.

Dann benutze sie nicht.

> Also werde ich dann eher beim ENC bleiben. So ein Durchsatz und riesige
> Datenmengen werden es nun nicht werden. Wie gesagt, das wird erstmal ein
> kleines Projekt werden, sozusagen eine private Machbarkeitsstudie - was
> ist möglich.

Die Frage ist halt, ob's dir da mehr um's Basteln an sich geht oder ob 
das Ergebnis im Vordergrund steht. In letzterem Fall würde ich nicht mit 
AVR und ENC anfangen, sondern auf was Linux-basiertes setzen.

von Martin (Gast)


Lesenswert?

Hallo.

Ein RPi ist aber fast schön günstiger als ein mega + ethernet frontend. 
Und etwas mehr Leistung hat er auch.


Martin

von min (Gast)


Lesenswert?

Ich würde wie Martin auch den neuen Quadcore Raspberry pi empfehlen und 
einen Apache-Server darauf einrichten.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Hier wurde bereits mehrfach auf das Thema Grafiken eingegangen, deren 
Dateivolumen ja naturgemäß etwas größer ausfällt. Die meisten 
technischen Grafiken lassen sich genau so gut als Vektorgrafik statt 
Pixelgrafik darstellen (Diagramme, "Messgeräte", Icons ...) - also in 
dem Zusammenhang möchte ich auf den Gebrauch von SVG verweisen, welches 
wesentlich sparsamer ausfällt (XML-Text)!

Habe gerade eine Rollladen-Steuerung per Arduino Uno und Handy-App in 
Arbeit, was bestimmt als Webserver grenzwertig ist.

Durch den konsequenten Einsatz von SVG und sogar deren weitere Zelegung 
in sich wiederholende Bestandteile (XML-Header, einzelne grafische 
Elemente) und Zusammenbau per Javascript im Browser, kann ich nun mit 6 
verschiedenen Icons arbeiten (davon sogar eines blinkend), ohne dass die 
Verbindung (ein etwas holpriges Gemisch aus LAN, PLC und WLAN) merklich 
stockt ... lohnt sich!

von Mathias O. (m-obi)


Lesenswert?

Rolf M. schrieb:
> Die Frage ist halt, ob's dir da mehr um's Basteln an sich geht oder ob
> das Ergebnis im Vordergrund steht. In letzterem Fall würde ich nicht mit
> AVR und ENC anfangen, sondern auf was Linux-basiertes setzen.

Natürlich geht mir auch ums basteln. Hab ich ja bis jetzt auch gemacht.
Aber das Ergebnis steht natürlich auch im Vordergrund, warum sollte ich 
sonst was machen.

Martin schrieb:
> Ein RPi ist aber fast schön günstiger als ein mega + ethernet frontend.
> Und etwas mehr Leistung hat er auch.

Die Rechnung würde ich gerne mal sehen. Einen ENC auf Breakout-Board hab 
ich schon längst hier und den großen AVR muss ich nur noch besorgen. 
Adapterplatine kostet auch nicht die Welt.

min schrieb:
> Ich würde wie Martin auch den neuen Quadcore Raspberry pi empfehlen und
> einen Apache-Server darauf einrichten.

Mir ist schon klar, wie ich das mit einem RPi lösen kann. Da weiß ich 
auch, dass es funktioniert.

Und extra Linux am laufen haben, nur um die Datenpakete durchzureichen 
und das ganze über ne kleine Weboberfläche einstellen zu können, ist 
schon übertrieben.

von Mathias O. (m-obi)


Lesenswert?

Frank E. schrieb:
> Hier wurde bereits mehrfach auf das Thema Grafiken eingegangen

Grafiken? Eigentlich nicht. Aber trotzdem danke für deinen Beitrag.

von 7856ujtzuitzu (Gast)


Lesenswert?

ich habe schon ein Projekt gemacht mit Cortex M3 + MODBUS Gateway
MODBUS RTU und MODBUS RTU over TCP
over TCP ist ja nur das RTU ohne CRC mit anderem header
ohne IP schnickschnak geht das in 10-15k flash locker rein

ein M3 reicht dafür locker.
der ENJ sollte das auch schaffen

für webseiten  wolltest du beim IP stack aufpassen.
viele IP stacks können keine segmentierung( uIP... )

der LwIP 1.4.1 kann das schon recht gut( sliding window )
er sendet dann mehrere Pakete raus ohne auf die ACKs zu warten
das steigert die Datenrate deutlich.
so sind auch mehere kB webseite in gefühlt 0sek übertragen

von ./. (Gast)


Lesenswert?

Ein Webserver auf einem STM32F107 mit einer STE100P-PHY (100 MBit),
ist subjektiv in der Geschwindigkeit bei der Auslieferung
statischer Inhalte nicht von einem x86/rPi-basierten zu unterscheiden.
Das gleiche gilt fuer die Kombination LPC1768 und LAN8720-PHY.
Oder wenns von TI sein soll: LM3S96 oder TM4C1294 mit integrierter PHY.

Das Gefrickel mit einem ENC28J60 wuerde ich mir nicht antun.

Und die Leistungsaufnahme duerfte wohl auch geringer sein.

von Horst (Gast)


Lesenswert?

min schrieb:
> Ich würde wie Martin auch den neuen Quadcore Raspberry pi empfehlen und
> einen Apache-Server darauf einrichten.

Nen Pi und darauf auch noch den fetten Apache? Wenn dann eher etwas 
Richtung nginx, sprich einen schlankeren Webserver. Gibt da aber auch 
noch bessere Alternativen.

Aber ganz ehrlich, es gibt guten Webspace mit dem man seine Seite 
umsonst bzw. fast umsonst hosten kann (z.B. Uberspace 12€ min. im Jahr 
sind Peanuts), da würde ich eher so etwas nehmen und meine Daten über 
z.B. eine REST API übertragen und die Nutzer auf einen performant 
angebundenen Server zugreifen zu lassen.

Mit einem AVR und ENC usw. würde ich da gar nicht anfangen zu frickeln, 
höchstens noch mit einem Pi oder sonst was mit Linux, die paar Euro 
machen den Braten auch nicht mehr fett.

von Frank K. (fchk)


Lesenswert?

Ich habe mal einen LM3S6911 (Cortex M3) mit lwIp und einen PIC18F67J60 
mit dem Microchip-Stack getestet. Der PIC war viel flüssiger zu 
bedienen.

Zudem ist der PIC18F67J60 die mit Abstand kleinste, billigste und auch 
einfachste Möglichkeit, einen Ethernet-Knoten zu realisieren. Das ist 
nachher nämlich eine Ein-Chip-Lösung, wo nur ein 25 MHz-Quarz, ein paar 
passive Bauteile und noch ein Spannungsregler dazu kommen. Weniger 
Hardware-Aufwand geht einfach nicht. Und die Software gibts fertig von 
Microchip.

fchk

von Axel S. (a-za-z0-9)


Lesenswert?

min schrieb:
> Ich würde wie Martin auch den neuen Quadcore Raspberry pi
> empfehlen und einen Apache-Server darauf einrichten.

Apache? Möglicherweise. Quadcore? Wohl kaum.

Meine Empfehlung wäre ein Raspi B+ (wenn das Netzwerk wired sein soll) 
oder A+ mit WLAN-Dongle. Kostenmäßig und stromverbrauchsmäßig ist das 
etwa die gleiche Liga wie ein fetter ATmega + ENC28J60 + externer Flash. 
Allerdings ist es wesentlich angenehmer im Operating.

Man hat nicht nur einen vollständigen(!) und sehr gut getesteten(!) 
TCP-Stack, man kann auch einen richtigen Webserver drauf laufen lassen. 
Ob das nachher nginx, lighttpd oder Apache wird, ist erstmal egal.

Außerdem kann man das Doc-Root in ein richtiges Filesystem legen und man 
kann die SD-Karte auch mal an einen PC stecken und da die Daten drauf 
spielen. Das heißt wenn man nicht ohnehin die Möglichkeit benutzen will, 
daß der Raspi Daten per NFS oder SMB exportiert. Oder daß man per FTP 
oder SSH drauf zugreift.

Obiges natürlich alles unter der Maßgabe, daß es darum geht einen 
funktionierenden Webserver zu haben. Wenn natürlich der Weg das Ziel 
ist, dann kann man auch rumbasteln. Wobei sich mir nicht erschließt, was 
man großartig lernt wenn man einen TCP-Stack und einen HTTP-Server aus 
dritter Hand zusammenklebt.

von Mathias O. (m-obi)


Lesenswert?

7856ujtzuitzu schrieb:
> ch habe schon ein Projekt gemacht mit Cortex M3 + MODBUS Gateway
> MODBUS RTU und MODBUS RTU over TCP
> over TCP ist ja nur das RTU ohne CRC mit anderem header
> ohne IP schnickschnak geht das in 10-15k flash locker rein

Vielen Dank. Endlich jemand der versteht was ich vorhab.
Quasi das was es von Wachendorff, Phoenix, Weidmüller, ..., schon gibt.

Horst schrieb:
> Aber ganz ehrlich, es gibt guten Webspace mit dem man seine Seite
> umsonst bzw. fast umsonst hosten kann (z.B. Uberspace 12€ min. im Jahr
> sind Peanuts), da würde ich eher so etwas nehmen und meine Daten über
> z.B. eine REST API übertragen und die Nutzer auf einen performant
> angebundenen Server zugreifen zu lassen.

Ähm ja. Soll, dass jetzt ernst gemeint sein? Ich denke mal nicht.

Ich glaube, so mache Leute würde auch extra einen PRi nehmen, nur um ne 
Kaffenmaschine einzuschalten.

von Daniel A. (daniel-a)


Lesenswert?

Mathias O. schrieb:
> Ich glaube, so mache Leute würde auch extra einen PRi nehmen, nur um ne
> Kaffenmaschine einzuschalten.

Nicht nötig. Handys und das Hyper Text Coffee Pot Control Protocol sind 
das einzig wahre!
https://en.m.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol

Hat sogar ne Caffé erweiterung!



(dieser Beitrag ist nicht ernst gemeint)

von Stefan F. (Gast)


Lesenswert?

Ich würde Dir auch etwas Linux basiertes empfehlen, wie dem Raspberry 
Pi.

Falls es doch ein AVR Mikrocontroller sein soll, schau Dir mal das 
CrumbX1-NET Modul an.

von Stefan F. (Gast)


Lesenswert?

> Ähm ja. Soll, dass jetzt ernst gemeint sein? Ich denke mal nicht.

Klar meint er das ernst. Und ich finde den Vorschlag keinesfall blöd.

Du wirst sehen, dass dein Mikrocontroller sehr bald von Hackern 
heimgesucht wird, sobald er im Internet hängt. Mit so wenig Speicher ein 
System sicher zu machen, ist eine echte Herausforderung.

Hingegen ist es in Enterprise völlig normal, einen Apache Server nebst 
PHP zwischen Internet und Backend zu schalten. Das schafft (wenn man es 
richtig macht) Sicherheit und trennt die die funktionalen Layer der 
Anwendung sauber.

von Mathias O. (m-obi)


Lesenswert?

Warum um Himmels willen, sollte ich mein Modbus ans Internet 
anschließen. Das ist wenn ein paar Ebenen höher. Das ist ne reine 
Sensor-/Aktorebene. Wie in der Industrie auch.

von Stefan F. (Gast)


Lesenswert?

Davon bin ich einfach ausgegangen, weil das gerade massiv in Mode ist. 
Wenn du es nicht tust: gut so. Finde ich vernünftig.

von scelumbro (Gast)


Lesenswert?

Wenn es unbedingt ein uC sein muss aber du nicht gerade Lust hast dich 
mit TCP/IP auf der Ebene einzelner Bytes herumzuschlagen, würde ich dir 
auch die WIZNET Module statt ENC28J60 empfehlen. Da gibts auch günstige 
Breakouts auf ebay und der ganze Netzwerkstack ist erledigt. Dazu noch 
ein mittelgroßer Atmega mit SD Karte und FAT und fertig ist der 
Webserver. Da gibts auch von der Arduino Seite Unmengen fertiger 
Beispiele.

Wenn es auch WLAN sein darf, gibts ja die spottbilligen ESP8266 Module 
mit unzähligen Beispielen für Webserver. Sogar billiger als die 
ENC/Atmega Kombi.

Ansonsten würde ich aber Linux empfehlen. Dort hat man einen wirklich 
etablierten und gewarteten Netzwerkstack und fertige Server. Auch Sachen 
wie Crypto (HTTPS, SSH, VPN ...) und IPv6, Fremdwörter für die 
vorherigen Lösungen, sind problemlos mit ein paar Zeilen konfiguriert. 
Dazu gibt es zum Thema Linux + Netzwerk wirklich für jedes Problemchen 
unzählige Lösungen im Netz. Wenn RPI in Größe/Stromverbrauch/Gefühl zu 
wirklich 'groß' ist, gäbe es noch unzählige Module auf Basis von 
Routerchips und OpenWRT. Häufig auch gleich mit eingebautem WLAN.

Was die Kosten angeht stellen sich bei Hobbyprojekten immer die Fragen: 
Ist der Weg das Ziel? Ist einem die eigene Arbeitszeit irgendetwas wert 
(und sei es nur die Abwägung zwischen Familie und Basteltisch)?

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.