Hallo, ist es möglich und hat jemand ein Beispiel code, in dem man mit einem Arduino Webserver einen mit HTML erstellten Button abfragen kann, ob dieser Gedrückt ist? Z.B. über einen GET befehl? Aber was genau muss ich dann abfragen? Danke schonmal
Eher Interrupt. Er soll nur kurz aktoviert werden und dann einen pin auf dem arduino aktivieren. Das sollte aber auch bei mehreren Buttons möglich sein
Hi, könntest dir Ajax anschauen da kannst du dir ein Get oder Post befehl zusammenauen. Geht natürlich auch über einen einfachen Button ohne js. Die Anfage kommt dann bei dem Webserver entsprechend als get oder post an.
google kaputt? formular: z.b. http://de.selfhtml.org/html/formulare/definieren.htm server: der muss am arduino implementiert werden damit er z.b. get-parameter auswerten und entsprechend reagieren kann. wenn der arduione eh schon html ausliefert ist zumindest der netzwerk-stack schon vorhanden
So weit war ich ja auch schon mit dem form tag von HTML usw. Aber was nun was soll ich am besten aufrufen was ich mit dem arduino verknüpfen kann? Ich könnte ja ne cgi oder ne pl aufrufen aber wie füge ich diese dann in dem server ein? Und gebe ihm dem entsprechenden namen damit er weiß was er machen soll? Dabke erstmal
Jack schrieb: > Ich könnte ja ne cgi oder ne pl aufrufen aber wie füge ich diese dann in > dem server ein? Na dahin, worauf Deine
1 | <form action="/cgi-bin/mache_was.php"> |
zeigt! In obigem Fall also in das Verzeichnis /cgi-bin Deines Servers... Dort wird das (hoffendlich vorhandene) Script "mache_was.php" aufgerufen, das holt z.B. mit
1 | $meine_variable = $_GET[ 'meine_variable' ] |
Deine abgesendeten Daten ab, wertet sie aus, prüft gegen und setzt die Ports des Rasperry entsprechend Deiner Wünsche. Zumindest in PHP. Gruss aus Berlin Elux
Es geht hier um einen arduino.. ja aber wie füge ich diese datei in den bin ordner. Habe ich überhaupt ao einen? Der Webserver ist in diesem Fall der Arduino jnd kein externer.. also muss ich inprinzip wissen, wenn ich mit dem html form tag eine machwas.cgi aufrufe, wo ich diese bei dem Arduino einfüge. Sodass dieser weiß was gemeint ist. Danke trotzdem
> hat jemand ein Beispiel code, in dem man mit einem > Arduino Webserver einen mit HTML erstellten Button abfragen kann, ob > dieser Gedrückt ist? Markus schrieb: > z.B. so: > http://jleopold.de/2010/08/10/arduino-als-webserver/ Worin liegt denn jetzt noch das Problem? Jack schrieb: > Aber was nun was soll ich am besten aufrufen was ich mit dem arduino > verknüpfen kann? Was? Jack schrieb: > also muss ich inprinzip wissen, wenn ich mit dem html form tag eine > machwas.cgi aufrufe, wo ich diese bei dem Arduino einfüge. Sodass dieser > weiß was gemeint ist. Dieses Ethernet-Schield kann genau eines: Ethernet. Darüber kann man Daten senden, server.write(), oder Daten empfangen, client.read(). Den Webserver an sich gibt es da nicht, den muss man selbst bauen.
:
Bearbeitet durch User
innerand innerand schrieb: > Markus schrieb: >> z.B. so: >> http://jleopold.de/2010/08/10/arduino-als-webserver/ > > Worin liegt denn jetzt noch das Problem? Sorry übersehen, aber so direkt verstehe ich den Code auch nicht so ganz.. Mir geht es im moment ja auch mehr, wie ich dem Arduino sage, wo TuWas.cgi liegt. Sprich ich habe einen HTML form Tag:
1 | client.print("<form method='post' action='TuWas.cgi'>"); |
2 | client.print("<p id='buttons'><input type='radio' name='buttons' value='Steckdose An' checked/></p>"); |
3 | client.print("Steckdose An"); |
4 | client.print("</form>"); |
z.B.: Diesen hier ist zwar jetzt ein Radio Button, spielt aber erstmal keine Rolle. Jetzt ist dieser Button aktiviert, also sendet er doch, dass TuWas.cgi geöffnet bzw ausgeführt werden soll oder nicht? Und das muss ich doch jetzt mit dem Arduino empfangen und dann Ausführen und das über GET oder nicht? Und genau hier scheiter ich momentan noch. Hoffe ihr versteht mein Problem. Danke nochmal
Jack schrieb: > Mir geht es im moment ja auch mehr, wie ich dem Arduino sage, wo > TuWas.cgi liegt. Das ist doch letzten Endes ziemlich egal. Du scheinst ein Missverständnis zu haben. Der WEb-Server und der Browser kommunizieren miteinander, in dem sie Texte hin und her schicken. Im Prinzip baust du in dein Formular beim Button ein: Wenn der Benutzer da drauf drückt, dann schick mir eine GET-Aufforderung und als Zusatztext schickst du mir bitte den Text "TuWas.cgi" im action Feld. Ein normaler Web-Server ist eben so programmiert, dass er diesen Text als den Namen eines Programms auffasst, das er starten soll. Du hast aber keinen normalen Web-Server. Du kriegst in deinem Web-Server diesen Text (hoffe ich zumindest) auch so zu Gesicht und kannst dann mit einem String-Vergleich entscheiden, was im Server passieren soll. So etwas wie CGI gibt es bei dir ja nicht. > Jetzt ist dieser Button aktiviert, also sendet er doch, dass TuWas.cgi > geöffnet bzw ausgeführt werden soll oder nicht? Der Button, also der Browser, kann überhaupt nichts entscheiden. Der schickt einfach nur eine GET-Aufforderung in der ein bestimmter Text anthalten ist. Was dein Server dann damit macht, das entscheidet immer noch der Server. > Und das muss ich doch jetzt mit dem Arduino empfangen und dann Ausführen Müssen tut dein server gar nichts. Wenn du dich an den GET drann hängst und den kompletten Text vom GET anlysierst und feststellst, dass im action-Teil der Text "TuWas.cgi" drinnen steht und du als Folge davon (wegen Stringvergleich) eine LED einschaltest, dann kann dir deswegen keiner was an. Am allerwenigsten der Browser. Da musst du halt mal die Doku von deiner Web-Server Klasse studieren, wie sich der Programmierer das so vorgestellt hat, auf Formulare zu reagieren.
:
Bearbeitet durch User
Jack schrieb: >>> http://jleopold.de/2010/08/10/arduino-als-webserver/ >> > Sorry übersehen, aber so direkt verstehe ich den Code auch nicht so > ganz.. Der Zusammenhang ist hier. Im HTML Code, der vom Server ausgeliefert wird, steht zb
1 | client.println("<td align='center' bgcolor='#222222'>" |
2 | "<form method=get><input type=submit name=3 value='einschalten'></form></td>");> |
Für den Button gibt es also eine form, und wenn der Benutzer auf den Button drückt, soll der Browser einen GET beim Server machen, wobei er ihm als 'name' die '3' mitgibt und als 'value' den Text 'einschalten'. Etwas weiter oben im Source Code steht:
1 | if(readString.indexOf("3=einschalten") > -1) { |
2 | digitalWrite(Pin3, HIGH); |
3 | Serial.println("Pin 3 eingeschaltet!"); |
4 | Pin3ON = true; |
5 | }
|
da wird also genau darauf reagiert. Wenn in der GET Anfrage vom Browser der Text "3=einschalten" vorkommt, dann wird die LED eingeschaltet. Ein bischen Code Studium musst du schon machen und ein wenig Wissen darüber, wie die Dinge funktionieren schadet auch nicht. Schliesslich hast du es nicht mit einem Apachee zu tun, sondern du schreibst dir den HTML-Server selber bzw. hast eine fertige Klasse dafür. Aber auf dem Arduino funktionieren die Dinge nun mal ein bischen anders als auf einem PC mit 2 Gigabyte Hauptspeicher. Auf dem Ardunion ist alles ein wenig einfacher und primtiver. Das macht aber nichts - denn Server und Browser kommunizeren nur dadurch, dass Texte hin und her geschickt werden. Und die Texte kann man mittels Textverarbeitung analysieren. Und ja: da wirst du selber ran müssen.
Kleiner Tipp um zu verstehen wie das funktioniert: Lade dir Wireshark herunter und schau dir mal an was da geschickt wird. (Z.B. wie eine GET Anfrage ausschaut)
Das Stichwort Stringvergleich hat meine Denkblockade gelöst.... Jetzt sollte ich den Rest selber schaffe denke ich wenn nicht melde ich mich ;-) nur noch eins, wieso steht dort immer:
1 | if(readString.indexOf("3=einschalten") > -1) |
indexOf? Was genau bedeutet das habe im Code sonst nichts dazu gefunden... @Mirco ich benutze HttpFox ein cooles Addon von FireFox, ist für diesen Anwendungszweck vielleicht sogar passender nur halt nicht ganz so Umfangreich wie Wireshark Danke an Alle!!
Funktioniert alles soweit Danke. wäre nur nett wenn mir das noch einer mit dem indexOf erklärt, damit ich den Code bis ins kleinste Detail beherrsche ;-) Danke nochmal für eure Hilfe
Beitrag #5199557 wurde von einem Moderator gelöscht.
Beitrag #5199558 wurde von einem Moderator gelöscht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.