Go Down

Topic: Datenübernahme aus einer Webseite (Read 3517 times) previous topic - next topic

Gsibiar

#30
Sep 06, 2015, 01:49 pm Last Edit: Sep 06, 2015, 01:50 pm by Gsibiar

Quote
PHP sendet an Arduino "GET /blink/700 HTTP1.1" (oder logischer "POST /blink/700 HTTP1.1")
Arduino wertet den Request aus und setzt Blink Intervall
Wie sieht das codemäßig aus - mir ist nicht klar wie man das umsetzt.
Wie kann ich via PHP "senden"?

Gruß Gsb

combie

Quote
PHP sendet an Arduino "GET /blink/700 HTTP1.1"
PHP Code:
Code: [Select]
$intervall = 700; // Daten aus dem Formular
file_get_contents("HTTP://arduino.local/blink/$intervall");
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Gsibiar

#32
Sep 06, 2015, 02:37 pm Last Edit: Sep 06, 2015, 02:38 pm by Gsibiar
Hallo,

bei Netzwerktechnik hapert es bei mir noch - das korrigiere ich ab Herbst.
Wäre es möglich mir das kurz zu erörtern: file_get_contents("http://HTTP://arduino.local/blink/$intervall");
Ist hier ein Framework erforderlich - und/oder geht das auch unter Java!?

Danke und Gruß

Gsb

combie

Von Java habe ich keine Ahnung.

Das ist PHP Code.
Und nein, das ist genau so mit PHP Bordmitteln möglich, kein Framework nötig.
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Gsibiar

#34
Sep 06, 2015, 02:47 pm Last Edit: Sep 06, 2015, 03:09 pm by Gsibiar
Hallo,

dass es PHP ist war mir schon klar - die Variable hat es verraten.

http://HTTP://arduino.local - ist mir nicht klar. Wie kommt diese Adressierung zustande - ist diese default für einen Arduino! ?

Gruß Gsb
 
 

ElEspanol

#35
Sep 06, 2015, 04:01 pm Last Edit: Sep 06, 2015, 04:02 pm by ElEspanol
Aufgrund des Threadverlaufs kann ich dir nur empfehlen, zumindest die Arduino Basics durchzuarbeiten, was Ethernet betrifft, und erst weiter zu machen, wenn du sie auch zu 98% verstanden hast. Wichtig dabei ist blockierungsfreies programmieren.

Wichtig ist, verstanden zu haben, was Client und Server idZ bedeuten.

Wenn unbdingt ein "richtiger" Server dabei sein muss, solltest du dich danach mit php etwas auseinander setzen. Wenn dir hier was vorgekaut wird, und du die Basics nicht drin hast, bringt dir das nicht wirklich viel. Es sei denn, du willst eine bestimmte Aufgabe lösen und hast kein weiteres Interesse am Thema. Dann schreibt dir bestimmt jemand den Sketch.

Gsibiar

#36
Sep 06, 2015, 04:08 pm Last Edit: Sep 06, 2015, 04:09 pm by Gsibiar
Gibt es ev eine Literaturempfehlung - mit viel Arduino-Ethernet-Bezug?
Habe schon nach Büchern gesucht, aber bisher ......
Ich möchte nicht wirklich dass mir jemand ein Sketch schreibt, verstehe und tue das lieber selbst.
Allerdings bin ich mehr in Java als in PHP "zu Hause".

Gruß Gsb

combie

arduino.local - ist mir nicht klar
Vereinfacht:
Ersetze arduino.local durch die IP des Arduinos.
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

qualidat

Also ich versuche es einmal (rudimentär):
User gibt Daten in eine Webseite ein. In dieser Seite ist ein Eingabefeld vorhanden und es wird ein Int entgegengenommen. Int gibt an, wie oft eine LED blinken soll.
Die Daten werden beim Absenden in einer Datenbank abgelegt - mit einer ID, ...
Aus didaktischen Gründen würde ich erstmal damit anfangen, einfach nur die letzte Eingabe in einer simplen Datei zu sichern. Wenn die Kette Webseite -> Webserver -> Arduino funktioniert, kann man das Projekt immer noch verfeinern ...

Ich würde mich sogar bereiterklären, ein simples Beispielskript (HTML und PHP) hier noch heute abend hinzuschreiben ... :-)

Gsibiar

Hallo qualidat,

ein einfaches Beispiel wäre eine tolle Sache.
Damit wäre einmal der Einstieg geebnet. Ich kenne das von anderen Programmiereinstiegen. Ein einfaches Beispiel Schritt für Schritt weiter auszubauen bringt große Lernfortschritte mit sich.

Danke und Gruß

Gsb
 

qualidat

#40
Sep 06, 2015, 11:14 pm Last Edit: Sep 06, 2015, 11:23 pm by qualidat
Diesen Code schreibst du z.B. als "arduweb.php" in einen Unterordner auf deiner Domain, in den Webserver auf einem NAS oder in "htdocs" unter XAMPP (Webserver-Installation für Entwickler) auf deinem PC bzw. Mac.

Dabei musst du sicherstellen, dass das Script im gleichen Ornder Schreibrechte hat, was mitunter ein wenig "anstrengend" ist. Ich habe unter Mac OS X das Tool "BatChmod" benutzt, um kuzerhand den gesamten Dokumentenordner unter XAMPP mit Schreibrechten für alle zu versehen - sonst wird das nix mit dem Erstellen der Datei.

Vom Aufbau her handelt es sich um ein sog. "Affenformular", ein HTML-Formular, was sich selber aufruft (siehe "action"-Option im Form-Tag).

Der Aufruf lautet dann: http://deine_domain.xyz/ordner/arduweb.php
Auf einem NAS setzt du statt "deine_domain.xyz" deren IP-Adresse ein, bei einem lokalen XAMPP "127.0.0.1" oder "localhost".

Mach' das erstmal und schreib, ob das geklappt hat. Das siehst du daran, dass nach jeder Eingabe die zuletzt eingegebene Zahl im oberen Feld erscheint, auch nachdem du den Browser mal geschlossen und dann wieder geöffnet hast.

Code: [Select]
<html>
 <head>
 <?php //--------- PHP Funktionen -----------
 
 
 //--- den vom Formular übermittelten Wert behandeln ---
 
 
$data=@$_POST["act"]; //Wert vom Formular auslesen
 
 
if (is_numeric($data)) //prüfen, ob Zahl
 
{$data=round($data,0);} //wenn ja, rundet auf ganze Zahl
 
else
 {
$data=1;} //wenn nein, setze 1
 
 
 //-- den aktuellen Wert in Datei schreiben und merken ---
 
$datei=@fopen("ardudat.txt","w");
 if (
$datei//Datei konnte zum Schreiben angelegt werden
 
{
 
fwrite($datei,$data);
 
fclose($datei);
 }
 
 
?>

 </head>
 <body>
 <hr>Aduino und Webserver - Eingabeformular<hr>
 aktueller Wert:<br>
 <input name="last" type="text" size="20"
 value="<?php echo $data ?>" readonly><br>
 
 
 <form action="arduweb.php" method="post">
 neuer Wert:<br>
 <input name="act" type="text" size="20" value="" autofocus><br><br>
 <input type="reset" value="l&ouml;schen">
 <input type="submit" value="senden">
 </form>
 </body>
</html>


Die @ vor manchen Funktionen dienen dazu, Fehlermeldungen zu unterdrücken.

qualidat

Im Prinzip ist der Rest (Arduino-Seite) ganz einfach: Gehe mal vom Beispiel "Web-Client" (unter "Ethernet") in der Arduino-IDE aus. Ändere die Zeilen 58 und 59 entsprechend deinen Gegebenheiten, also z.B.

58  client.println("GET /ordner/arduweb.txt HTTP/1.1");
59  client.println("Host: www.deine_domain.xyz"); oder die IP-Adresse, ohne www

Dann erhält der Arduino die gespeicherte Zahl als Zeichenkette übertragen ... fertig

Man benötigt also nichtmal ein zusätzliches Skript auf dem Server (bei der Datei-Methode). Kommen die Daten aus einer Datenbank, sieht das anders aus, ist aber auch keine Hexerei :-)

ElEspanol

Wenn du jetzt noch nach dem Speichern der Datei noch die Daten per GET an den Arduino schickst, spart der sich sein dauerndes Pollen. Nach einem Reset/Stromausfall kann er ja mal pullern, um die letzten Werte zu haben

qualidat

Wenn du jetzt noch nach dem Speichern der Datei noch die Daten per GET an den Arduino schickst, spart der sich sein dauerndes Pollen. Nach einem Reset/Stromausfall kann er ja mal pullern, um die letzten Werte zu haben
Ja, das würde gehen, aber was passiert, wenn die Verbindung mal nicht zustande kommt? Nach einigen Sekunden bricht das Skript ab und Ende ist. Es passiert frühstens etwas bei der nächsten Eingabe ...

Der Arduino ist da mit seinem Pollen da viel agiler und probierts eben nach einigen Sekunden einfach wieder.  Und wen störts? Der Arduino "frisst kein Brot" (wie meine Oma sagen würde) und das Internet wird dadurch sicher auch nicht wesentlich belastet :-)

ElEspanol

Kommt auch darauf an, wie zeitnah du die Daten im Arduino haben willst. Kannst ja das mit GET machen und sicherheitshalber parallel alle 10 Sek pollen.

Go Up