Forum: Mikrocontroller und Digitale Elektronik Einführungstutorial Ultrapico-Webserver


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 Stefan L. (stefanl38)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kann ganz gut Delphi, SPIN und etwas assembler programmieren. Nur 
HTML sagt mir noch fast gar nix.

Zur Zeit bastle ich mit und nodeMCU (ESP8266)/Lua.

Da gibt es hier und da Beispielcode für superklitzekleine 
ultrapico-Webserver. Ich verwende hier sehr bewusst die Bezeichnung 
ultrapico.

Der "Webserver" soll ja auf dem ESP8266 laufen und nicht auf einem PC.
folglich muss der auch kein PHP, SQL, Perl, Java und wie die PC-Sachen 
sonst noch alle heißen sondern nur ein ganz kleines bisschen auf 
Mausklicks reagieren und Strings mit vielleicht 4-20 Zeichen in Empfang 
nehmen oder auf den Bildschirm schreiben.

Ein KISS-Webinterface um einige Status/Meßwerte anzuzeigen und Parameter 
einzustellen. Mehr nicht. Daher der Name Ultra-pico.
Ich hoffe das war jetzt genug der Vorrede das mir niemand mit 
Appache-Server oder dergleichen ankommt.

Wo gibt es im Web ein Tutorial, dass die ganz elementaren Grundlagen 
erklärt?

In einem Beispielcode den ich bisjetzt zum lernen verwende kommt da zum 
Beispiel vor

  srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
      local buf = "";
      local _, _, method, path, vars = string.find(request, "([A-Z]+) 
(.+)?(.+) HTTP");
      if(method == nil)then
          _, _, method, path = string.find(request, "([A-Z]+) (.+) 
HTTP");
          print("string.find(request..)")
      end

      local _GET = {}

      if (vars ~= nil)then
          for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
              _GET[k] = v
          end
      end

      buf = buf.."(h1) ESP8266 Web Server(/h1)";
      buf = buf.."(p)GPIO0 (a h 
ref=\"?pin=ON1\")(button)ON(/button)(/a) (a h 
ref=\"?pin=OFF1\")(button)OFF(/button)(/a)(/p)";
      buf = buf.."(p)GPIO2 (a h 
ref=\"?pin=ON2\")(button)ON(/button)(/a) (a h 
ref=\"?pin=OFF2\")(button)OFF(/button)(/a)(/p)";


Dazu würde ich gerne ein Tutorial lesen um im Detail zu verstehen was da 
abgeht.

Was ich bis jetz vermute ist folgendes
  srv:listen(80,function(conn)
    conn:on("receive", function(client,request)

starte einen "Server" der auf Port 80 (http) "hört"
Wenn ein Client einen "request" sendet dann empfange den request-string

Aber was genau machen die Code-Zeilen
      if(method == nil)then
          _, _, method, path = string.find(request, "([A-Z]+) (.+) 
HTTP");
          print("string.find(request..)")
      end
???
Den empfangen String nach bestimmten Zeichenketten durchsuchen??

Da habe ich noch eine Menge Fragezeichen wie das abläuft.
Meine Fragen betreffen den Datenaustausch zwischen aufrufendem Browser 
und Server. Da weiß ich noch nicht mal mit was für Stichworten ich 
danach googeln sollte.

Wäre ganz große Klasse wenn mir da jemand Tips geben könnte.

viele Grüße

Stefan

von Andreas S. (igel1)


Bewertung
0 lesenswert
nicht lesenswert
Hi Stefan,

die Antwort auf Deine Frage würde ich zweiteilen:

1.)  Um zu verstehen, wie ein Webserver mit einem Browser
     kommuniziert, solltest Du Dir das HTTP-Protokoll genauer
     anschauen. Dazu gibt es 1 Mio. Tutorials im Netz.

     Anschließend kann es nicht schaden, wenn Du Dir das HTTP-
     Protokoll einmal "live" auf Deinem PC mit einem Netzwerk-
     Sniffer (z.B. wireshark) anschaust, während Du durch die
     Gegend surfst.

2.)  Dein o.g. Beispiel ist in der Skriptsprache "LUA" geschrieben.
     Nachdem Du die Grundlagen von HTTP verstanden hast,
     würde ich mir an Deiner Stelle ein LUA-Tutorial vornehmen.
     Wenn Du schon etwas programmieren kannst, so ist LUA
     recht einfach zu erlernen. Auch dazu gibt es 10.000
     Tutorials im Netz.

Good luck

Andreas

von Stefan L. (stefanl38)


Bewertung
0 lesenswert
nicht lesenswert
Hi Andreas,

vielen Dank fürs antworten.

Andreas S. schrieb:
> Hi Stefan,
>
> die Antwort auf Deine Frage würde ich zweiteilen:
>
> 1.)  Um zu verstehen, wie ein Webserver mit einem Browser
>      kommuniziert, solltest Du Dir das HTTP-Protokoll genauer
>      anschauen. Dazu gibt es 1 Mio. Tutorials im Netz.
>
>      Anschließend kann es nicht schaden, wenn Du Dir das HTTP-
>      Protokoll einmal "live" auf Deinem PC mit einem Netzwerk-
>      Sniffer (z.B. wireshark) anschaust, während Du durch die
>      Gegend surfst.
Ich habe eine Menge Erfahrung damit Tutorials im Netz zu lesen. 98% 
dieser Tutorials sind von bescheidener Qualität.

Beispiel zum Flashen einer Firmware:
Man versetzt das nodeMCU-Board in den flashmode und startet den 
Flashvorgang.

Ja schön. WIE versetzt man das Board in den Flashmode???
Da fehlt dann ganz oft die Sorgfalt noch die Details hinzuzuschreiben.

Reset-Taster gedrückt halten. Dann Flashtaster drücken, zuerst 
Resettaster loslassen dann Flashtaster loslassen. Status-LED blinkt kurz 
auf.
Das gäbe bei mir Schulnote 2

Schulnote 1 für das Tutorial gäbe es nur dann wenn jetzt auch noch 
erklärt würde Welcher Pin am board ist der Reset-Pin, welcher ist der 
"flash"-pin auf welches Spannungsniveau low/high wird der beim Drücken 
gezogen und bei welchem Spannungswechsel wird der Flashmode aktiviert.
Dann könnte man die Informationen sogar für abweichende Boards benutzen.


Dieser Thread ist mein Versuch den Suchprozess nach den 2% Tutorial die 
von guter Qualität sind abzukürzen, dadurch das jemand der ein 
hochwertiges Tutorial kennt mir einen entsprechenden Link postet.
>
> 2.)  Dein o.g. Beispiel ist in der Skriptsprache "LUA" geschrieben.
>      Nachdem Du die Grundlagen von HTTP verstanden hast,
>      würde ich mir an Deiner Stelle ein LUA-Tutorial vornehmen.
>      Wenn Du schon etwas programmieren kannst, so ist LUA
>      recht einfach zu erlernen. Auch dazu gibt es 10.000
>      Tutorials im Netz.
>
Das Problem mit den Lua-Tutorials ist, das sie sich auf Lua 
konzentrieren. Wenn dann müsste es ein Tutorial sein das speziell die 
nodeMCU-Firmware-module "net", und evtl. "http" anhand von Beispielen 
erklärt und nicht nur eine dürre Referenz. Die Referenz habe ich 
natürlich gelesen aber da bleiben immer noch eine Menge Fragen offen. 
Die könnte ich jetzt natürlich durch eine Menge Versuch und Irrtum 
klären aber das macht mir keinen Spaß mehr. Die Phase das mir nahezu 
blindes herumtinkern Spaß gemacht hat ist vorbei.
Und ich will auch das Verhalten der Befehle nicht durch Austesten aller 
erdenklichen Varianten mit naturwissenschaftlicher Gründlichkeit 
ergründen.

> Good luck
>

Das Glück die 2% gute Tutorials zu finden war mir bisher nicht 
beschieden. Daher hier die Frage.


Vielleicht ist jetzt klarer geworden was mein Ziel ist und wie ich 
vorgehen möchte. Also wenn jemand weder Lust hat es selbst zu erklären 
noch links zu wirklich guten Tutorials kennt vielleicht auch mal nicht 
antworten.

Trotzdem vielen Dank an Andreas. Deine Antwort hat mir geholfen genauer 
beschreiben zu können was mein Ziel ist und wie ich vorgehen möchte.

viele Grüße

Stefan

von Andreas S. (igel1)


Bewertung
0 lesenswert
nicht lesenswert
Stefan L. schrieb:

> Das Problem mit den Lua-Tutorials ist, das sie sich auf Lua
> konzentrieren.

Liegt ein wenig in der Natur der Sache ;-)

> Wenn dann müsste es ein Tutorial sein das speziell die
> nodeMCU-Firmware-module "net", und evtl. "http" anhand von Beispielen
> erklärt und nicht nur eine dürre Referenz.

Die hier kennst Du vermutlich(?) :

http://nodemcu.readthedocs.io/en/master/
http://www.luafaq.org/
http://lua-users.org/wiki/LearningLua

Leider liegt mein kleiner ESP-LUA-Ausflug schon 2 Jahre zurück und ich 
habe inzwischen alles wieder vergessen.

Ich kann Dir nur meine Links von damals hier auflisten - ob Sie Dir 
zusagen, ist natürlich Geschmackssache:

http://benlo.com/esp8266/esp8266QuickStart.html

https://www.allaboutcircuits.com/projects/guts-of-the-iot-part-1-building-nodemcu-from-source-for-the-esp8266/

https://www.allaboutcircuits.com/projects/how-to-make-an-interactive-tcp-server-nodemcu-on-the-esp8266/

https://github.com/marcoskirsch/nodemcu-httpserver

Und gaaanz wichtig: schau Dir unbedingt das Repository der 
nodemcu-firmware an - dort findest Du genau das, was Du suchst - nämlich 
schöne Beispiele mit LUA für ESP:

https://github.com/nodemcu/nodemcu-firmware

Auch Kolban's book on ESP8266 habe ich teilweise in guter Erinnerung 
(ich hatte allerdings nur die ersten Seiten mit den Anschlußbelegungen 
gelesen):
https://leanpub.com/ESP8266_ESP32

Ach ja - und das ESP8266-Forum solltest Du ebenfalls nicht missen.
Ist recht gut besucht. Dort gibt es auch ein nodemcu - Unterforum:

http://www.esp8266.com/

An mehr kann ich mich leider nicht erinnern.
Nur noch daran, dass man in der Tat ein bißchen wurschteln mußte und 
dass mein SMTP-Beispiel aus dem o.g. Repository leider ziemlich buggy 
war.

Insgesamt schien mir die ESP-Geschichte sowieso weitaus weniger 
ausgereift als die meisten Dinge im Umfeld ATmega oder gar ARM.

Ich habe z.B. viele Stunden versenkt um festzustellen, dass das 
WLAN-Modul im ESP die Ergebnisse des AD-Moduls im ESP beeinflußt und man 
daher durch irgendwelche Klimmzüge verhindern muß, dass dieses 
WLAN-Modul in Schlafmodi geht, weil diese Sleepmodes die 
AD-Genauigkeiten schrotten.

> Die Referenz habe ich natürlich gelesen

Oh weh - da bist Du vermutlich schon schlauer als ich.

> aber da bleiben immer noch eine Menge Fragen offen.
> Die könnte ich jetzt natürlich durch eine Menge Versuch und Irrtum
> klären aber das macht mir keinen Spaß mehr.  Die Phase das mir nahezu
> blindes herumtinkern Spaß gemacht hat ist vorbei.
> Und ich will auch das Verhalten der Befehle nicht durch Austesten aller
> erdenklichen Varianten mit naturwissenschaftlicher Gründlichkeit
> ergründen.

Kann ich verstehen - in diesem Fall würde ich persönlich Dir vom ESP8266 
abraten, denn Dich erwartet genau das, was Du nicht willst.

>
>> Good luck
>>
>
> Das Glück die 2% gute Tutorials zu finden war mir bisher nicht
> beschieden. Daher hier die Frage.

Entscheide selbst, ob einer meiner Links Deinen 2%-Ansprüchen genügt.

> Vielleicht ist jetzt klarer geworden was mein Ziel ist und wie ich
> vorgehen möchte. Also wenn jemand weder Lust hat es selbst zu erklären
> noch links zu wirklich guten Tutorials kennt vielleicht auch mal nicht
> antworten.

Ich hab's trotzdem gewagt :-)

> Trotzdem vielen Dank an Andreas. Deine Antwort hat mir geholfen genauer
> beschreiben zu können was mein Ziel ist und wie ich vorgehen möchte.

Hab's verstanden, aber so richtig gute Doku, wie ich sie aus dem Umfeld 
ATmega, ARM, 8086, Z80 oder UNIX kenne, konnte ich im ESP8266-Umfeld bei 
meinen LUA-Versuchen ebenfalls nicht auftun.

>
> viele Grüße
>
> Stefan

Dito

Igel1

: Bearbeitet durch User
von Stefan L. (stefanl38)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

vielen Dank für deine Links. Ich kannte noch nicht alle. Werde die jetzt 
mal ansurfen....

Viele Grüße und Frohe Ostern

Stefan

von Stefan L. (stefanl38)


Bewertung
0 lesenswert
nicht lesenswert
HTML-Crash-Kurs für microcontroller HTML4µC einfache simple WEB-GUIs

Hallo Leute,

also jetzt habe ich einen geeigneten HTML-Crashkurs gefunden.

https://www.webmaster-crashkurs.de

Webmaster hört sich ja etwas hochtrabend an aber der Kurs ist gut.
Gute Reihenfolge der Grundlagen. Nicht zu ausführlich. Erscheinungsbild 
der Webseiten und des HTML-codes direkt nebeneinander.
gefällt mir gut. Hätte ich unter dem Namen aber nicht vermutet.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.