Forum: PC Hard- und Software Webserver Alternative auf µC


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tom (Gast)


Lesenswert?

Hallo zusammen,

folgende Aufgabenstellung: mein µC Projekt (ATMega128) soll mit der Welt 
sprechen, sprich ich will via (lokalem) Netzwerk Parameter einstellen 
und abfragen. Als Interface wird ein ESP8266 genutzt und soll via AT 
Befehle kommunizieren. Das Ganze soll am Ende auf einer Website 
dargestellt und zum interagieren einladen.

Soweit, so gut.

Es stellt sich nun die Frage, wie am besten realisieren.
1. Webserver auf µC
 - "hart programmierte" Webseiten sind sehr unschön, da schnell der RAM 
auf dem ATMega ausgeht
 - alternativ auf SD KArte eine Webseitenvorlage ablegen?
2. Script oder ähnliches
 - evtl können per GET/POST Variablen übergeben und weiterverarbeitet 
werden, sodass am Ende eine Website ensteht (vom PHP Script generiert).
3. andere Möglichkeiten?

Seitens PHP/Script bin ich absoluter Neuling, frage mich daher, welches 
meine Optionen sind und was ich dazu bräuchte? Einen Webserver (nicht 
µC) um PHP laufen zu lassen ist klar, aber sonst? Lässt sich das 
überhaupt mit mittelmässigem Aufwand umsetzten? Kennt dazu vielleicht 
jemand ein Tutorial o.ä. anhand dem man sich soweit wie nötig 
einarbeiten kann?

Die Daten vom/zum µC müssen auch aufbereitet werden, sind also nicht in 
Klartext sondern Datenpaketen organisiert. Bis jetzt mache ich das per 
VB Programm über die serielle Schnittstelle.

Bin für jede Hilfestellung dankbar!


Gruß

Tom

von Pandur S. (jetztnicht)


Lesenswert?

>Seitens PHP/Script bin ich absoluter Neuling, frage mich daher, welches
meine Optionen sind und was ich dazu bräuchte? Einen Webserver (nicht
µC) um PHP laufen zu lassen ist klar, aber sonst?

Das ist etwas wenig, resp reicht nicht. Du musst in HTML, Javascript und 
PHP fit sein. Die Webseite sollte man in einem Flash spechern, in einem 
externen flash. Und php brauchst du in diesem Fall nicht. Php wird auf 
dem Server ausgefuehrt. Was du brauchst ist ein paar Anfragen in ein 
paar Antworten umzuwandeln. Sprich einen Trivialstinterpreter. Die 
Anfrage kommt als GET /index.html?write=Port3.5, dann macht man das 
eben. Die Menge an Befehlen kannst du ja festlegen da du ja auch die 
Webseite machst.
Ich hab das mal fuer einen Mega32 geschrieben.

von Peter II (Gast)


Lesenswert?

Die Webseite selber könnte man auch wo anders ablegen (irgend ein 
webhoster), damit kann man auch Bilder usw. einbinden.

Die Webseite selber ruft dann mit JavaScript die Daten von deinem µC ab. 
Der µC liefert also nur Daten aus, sinnvoll ist da z.b. das json Format.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Tom schrieb:
> Als Interface wird ein ESP8266 genutzt und soll via AT
> Befehle kommunizieren.

Genau da bin ich auch gerade dran. Einen ESP per AT-Kpmmandos als 
Webserver zu benutzen, ist irgendwie vergleichbar damit, einen Flur 
durch einen Briefkastenschlitz zu tapezieren:

http://www.witze-fun.de/witze/witz/1174

Martin schrieb am November 15, 2014:
> I’ve decided not to use external MCU and utilize the chip itself
> for a proof-of-concept project.
http://harizanov.com/2014/11/esp8266-powered-web-server-led-control-dht22-temperaturehumidity-sensor-reading/

Langfristig macht das vermutlich mehr Sinn, aber derzeit werde ich das 
auch erstmal mit einem einfachen AT-Protokoll machen.

Frank hat einen "Network Listener (UDP) zum Fernsteuern über WLAN" 
umgesetzt, siehe 
Beitrag "Re: Minutengenaue 24 Stunden-Wortuhr - wer will mitbauen?" .

Für ein Proof-of-concept warte ich erstmal auf "+IPD", parse die 
nächsten 3..17 Zeichen und mehr werde ich durch diesen 
Briefkastenschlitz^^ voraussichtlich nicht umsetzen. Bist Du Dir sicher, 
dass Du das so machen willst?

Je nach Ziel des Projektes könnte es auch sein, später weitere Exemplare 
aufzubauen, dann muss man neue ESPs nachkaufen und der AT-Befehlssatz 
verändert sich. Ich würde mich nicht auf Abwärts-Kompatibilität 
verlassen. Irgendwann fliegt z.B. das "no that fun" bestimmt raus. ;-)

Falls man eh FW flashen muss, könnte man auch gleich 'ne eigene flashen.

Aber das kann man diskutieren, ich bin gespannt.

SD-Karte finde ich gut, die kosten ja nur 3..4€ incl. Slot. Aber …

Peter II schrieb:
> Die Webseite selber könnte man auch wo anders ablegen (irgend ein
> webhoster), damit kann man auch Bilder usw. einbinden.

Um "die niedrig hängenden Früchte zuerst zu ernten" ist das zumindest 
für den Anfang sicher besser. Je nach Anwendung reicht ja auch eine 
Fritz!box oder ein ausgedienter Windows- oder Linux-PC.

: Bearbeitet durch User
von Tom (Gast)


Lesenswert?

Hallo zusammen,

zunächst gilt es (für meine Anwendung) drei Info's nachzuschieben
1. Ich greife hier auf eine bestehende HW (Haussteuerung zu), 
Modifikationen seitens SW sind möglich, seitens HW beschränkt
2. Webserver in Form einer Netzwerkplatte, die einen kleinen "Service" 
dahingehend offeriert, ist vorhanden.
3. der Datenverkehr hält sich in Grenzen, momentan sind dies ca bis zu 
500 Byte reine Daten, die übermittelt werden (nicht optimiert)

@Jetzt Nicht
gibt es eine Möglichkeit, Deinen umgesetzten Code einzusehen?

@Peter II
Daten ablegen klingt gut, da kann mein NAS WebServer herhalten. Trotzdem 
(oder erst recht) muß jetzt mit irgend einer Scriptsprache der 
Datenverkehr zu einer Website aufbereitet werden

@Torsten C
wenn ich das richtig verstehe, plädierts Du für den kompletten Webserver 
im ESP - sicher langfristig das sinnvollste, dazu muss mann sich aber in 
das SDK zum ESP einarbeiten mit allen Tricks/Kniffs/Problemen die dran 
hängen - das ist eine Baustelle für sich.
Der Network Listener klingt interessant, muss ich mal in Ruhe ansehen.
Die SD-Karten Option würde (zumindest für mich) wahrscheinlich auch 
durch den Breifkasten reichen, da die finale Website sicher überschaubar 
bleiben wird.

von M. S. (nickfisher)


Lesenswert?

Tom schrieb:
> @Torsten C
> wenn ich das richtig verstehe, plädierts Du für den kompletten Webserver
> im ESP - sicher langfristig das sinnvollste, dazu muss mann sich aber in
> das SDK zum ESP einarbeiten mit allen Tricks/Kniffs/Problemen die dran
> hängen - das ist eine Baustelle für sich.
> Der Network Listener klingt interessant, muss ich mal in Ruhe ansehen.
> Die SD-Karten Option würde (zumindest für mich) wahrscheinlich auch
> durch den Breifkasten reichen, da die finale Website sicher überschaubar
> bleiben wird.

flashe einfach die nodemcu firmware.
hier ein simpler webserver.
1
srv=net.createServer(net.TCP) 
2
  srv:listen(80,function(conn) 
3
    conn:on("receive",function(conn,payload) 
4
      print(payload) 
5
      conn:send("<h1> Hello, NodeMcu.</h1>")
6
    end) 
7
  conn:on("sent",function(conn) conn:close() end)
8
end)

die daten die er schlussendlich anzeigen soll kannst du dir dann per 
uart vom mega holen

von Peter II (Gast)


Lesenswert?

Tom schrieb:
> @Peter II
> Daten ablegen klingt gut, da kann mein NAS WebServer herhalten. Trotzdem
> (oder erst recht) muß jetzt mit irgend einer Scriptsprache der
> Datenverkehr zu einer Website aufbereitet werden

nein. auf deinem NAS liegt alle Resourcen (Bilder, CSS und Javascript). 
Das Javascript wird dann im Browser ausgeführt und lädt die Daten von 
deinem µC. du brauchst also keinen Webserver dir irgendwelche scripte 
ausführt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Tom schrieb:
> dazu muss mann sich aber in
> das SDK zum ESP einarbeiten mit allen Tricks/Kniffs/Problemen die dran
> hängen - das ist eine Baustelle für sich.

Das musst Du gar nicht, denn
Martin^^ schreibt ja:
> The application source code is available here: app, includes the
> binaries so you can directly flash those without having to set up
> the SDK environment

Vielliecht bokommt man das ja in ein bis zwei Stunden zum laufen und mus 
gar nicht viel verändern. Ich hab's noch nicht probiert.

Vielleicht stellt ja auch "jetztnicht" seinen Source zur Verfügung. 
ansonsten findet man, wenn man nach "esp8266 webserver" googelt, noch 
andere fertige Briefkasten-Lösungen incl. Source-Code.

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

>@Jetzt Nicht
gibt es eine Möglichkeit, Deinen umgesetzten Code einzusehen?

Nein, leider nicht. Die Befehle kamen als ASCII rein, http eben.
Als GET & PUT, wobei PUT aehnlich wie POST funktioniert.

GET waren Seitenanfragen. Da war ein reelles Filesystem, mit Files auf 
einem dem Prozessor externen seriellen Flash. Das Filesystem war eine 
verlinkte Liste, sehr einfach gestaltet. Es konnten auch einfach 
Variablen abgefragt werden, dann kam ein JSON File zurueck. Durch GET 
parameter der ?/& Sorte konnten Variablen gelesen und geschrieben, und 
in eine Seite eingebaut werden.

PUT wurde fuer das Hochladen von Webseiten verwendet. Die wurden dann in 
das Filesystem im Flash geschrieben.

Die Anbindung war ueber die serielle Schnittstelle, Bus moeglich. Dann 
hat man noch einen Middleware Server auf dem lokalen PC, sofern das 
Device nur lokal verwendet werden sollte, resp einen Middleware Server 
auf einer Ethernet basierten Hardware benotigt, falls man es denn an 
einem Router haben wollte. Dieser Middleware Server (PC lokal, oder 
Hardware) hat eigentlich nur einen Socket auf die serielle Schnittstelle 
umgesetzt und etwas gecacht.

Bei solchen Projekten sollte man auf den Energieverbrauch achten. Extra 
einen lokalen Server mit einer Platte mitlaufen zu lassen ist nicht 
wirklich effizient.

von A. B. (funky)


Lesenswert?

Hast du nicht die Möglichkeit, einen RaspberryPi oder ähnliches die 
Daten von deinen Atmega(s) einsammeln zu lassen?(von mir aus auch per 
WLAN, was ja noch Aufwand genug ist)

Auf so einem System dann Webseiten zu generieren macht doch wesentlich 
mehr Spass, als damit einen Atmel zu quälen

von Pandur S. (jetztnicht)


Lesenswert?

Ein Raspi hat etwas mehr Leistung, das Problem ist aber dasselbe. 
Welchen Durchsatz moechte man denn ? Fuer ein paar Temperaturen macht 
ein Raspi keinen Sinn. fuer eine Trace wie von einem Scope, oder 
Logicanalyer in Echtzeit schon, dann muss man einen Videostream in einer 
Webseite erzeugen.

von grundschüler (Gast)


Lesenswert?

ich bin gerade an einem ähnlichen Projekt.
Alle 15 Minuten werden per uc Temperaturen gemessen und auf sd-Karte 
gespeichert. Für jeden Tag wird eine neue Datei auf der sd karte 
angelegt. Ergibt 96 x 20 x 16bit Temperaturwerte. Die uc-sd-Karte wird 
vom PC per http/Ethernet ausgelesen und gespeichert. Die gesammelten 
Dateien werden dann von einem vb.net-Programm ausgewertet. Man spart auf 
diese Weise den uc-Webserver und hat für die Auswertung die volle 
PC-Rechenleistung zur Verfügung.

Beitrag "Re: Anpassung U.Radig-Webserver mit UDP für ARM CORTEX"

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Jetzt Nicht schrieb:
> das Problem ist aber dasselbe

Auf einem Raspi kann der OP aber einen LAMP-Server laufen lassen und hat 
dazu jede Menge Tutorials. Der Raspi hat ja auch selbst ein paar GPIOs, 
vielleicht kommt der OP damit sogar ganz ohne weitere µCs aus?

: Bearbeitet durch User
von Schreiber (Gast)


Lesenswert?

Jetzt Nicht schrieb:
> Ein Raspi hat etwas mehr Leistung, das Problem ist aber dasselbe.
> Welchen Durchsatz moechte man denn ? Fuer ein paar Temperaturen macht
> ein Raspi keinen Sinn.

wiso nicht?
Auch wenn das wie Kannonen-auf-Spatzen ist, so ein Raspberry ist eine 
einfache und preiswerte Möglichkeite um Geräte mit geringem Aufwand ins 
Netzwerk zu bringen.

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.