Forum: Mikrocontroller und Digitale Elektronik HTML Button Status mit Arduino abfragen


von Jack (Gast)


Lesenswert?

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

von Elektrox (Gast)


Lesenswert?

Als Interrupt oder ob er dauerhaft gesetzt ist?

von Jack (Gast)


Lesenswert?

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

von Mirco C. (Firma: s@Td) (mcontroller)


Lesenswert?

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.

von Jack (Gast)


Lesenswert?

Danke.

wo kann ich mir das anschauen?

von Daniel F. (df311)


Lesenswert?

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

von Markus (Gast)


Lesenswert?


von Jack (Gast)


Lesenswert?

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

von Reiner O. (elux)


Lesenswert?

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

von Jack (Gast)


Lesenswert?

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

von innerand i. (innerand)


Lesenswert?

> 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
von Jack (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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.

von Mirco (Gast)


Lesenswert?

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)

von Jack (Gast)


Lesenswert?

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!!

von Jack (Gast)


Lesenswert?

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

von hi (Gast)


Lesenswert?

hi

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
Noch kein Account? Hier anmelden.