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.
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:
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.
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