serial.write an php senden und in php auslesen

Hi,
wenn ich per serial.write etwas sende, wie kann ich das dann in php auslesen?
serial. write beinhaltet ja keinen variablen namen den ich dann anspreche.
irgendwie hab ich einen knoten im hirn

Danke :slight_smile:

Viele Grüße KK

Du könntest die Daten JSON codiert senden.

Und wenn dein PHP auf einem WIN PC läuft, wäre ich sehr erfreut, wenn du mir mitteilen könntest, WIE du überhaupt Daten vom Arduino ins PHP bekommst....... :sunglasses:

Hi,
json?
win und überhaupt in php?
Ich verstehe beides nicht!
Ich kann aus php heraus den Arduino ansprechen, egal ob von Win aus, oder Linux, aber umgekehrt
schaffe ich das nicht.
per php werte lesen die über den seriellen port gesendet werden.

Gruß KK

Google nach "PHP serial" hat nicht geholfen? Da gibt es zig Links. Auch speziell für den Arduino.

Allgemein hast du bei sowas zwei Möglichkeiten:
1.) Daten Binär mit Serial.write() senden. Das ist einfach, aber es fehlt eventuell die Zuordnung. Das bietet sich aber an wenn die Daten immer gleich sind.
2.) Daten als String senden und dann Parsen und in Zahlen wandeln. Gut wenn die Daten unterschiedlich, da man sie dadurch leicht identifizieren kann. Erzeugt natürlich etwas Overhead, aber das ist meistens egal.

combie:
Und wenn dein PHP auf einem WIN PC läuft, wäre ich sehr erfreut, wenn du mir mitteilen könntest, WIE du überhaupt Daten vom Arduino ins PHP bekommst....... :sunglasses:

Ja, unter Windows ist es schon etwas komplizierter. Die meisten Beispiele beziehen sich auf Linux oder die eingebundenen Klassen verwenden exec() oder `` ticks Befehle um die COM Schnittstelle einzustellen. Dies ist auf einem abgesicherten Web-Server-System gar nicht erlaubt bzw. blockiert.

Kurz und knapp (PHP liest auf COM5)

<?php


 try {

  $fp = fopen('COM5:9600,8,N,1','r+');

 } catch (Exception $e) {
    echo 'Fehler: ',  $e->getMessage(), "\n";
 }


 while($fp) {

  $read = fread($fp,100);

  if ($read) {

    echo $read;

  }


 }


?>

Arduino sendet

void setup() {

  Serial.begin(9600,SERIAL_8N1); // open a serial connection to your computer
 
}

void loop() {
  

    // write = binär notwendig!
    Serial.write(" test ");
    Serial.flush();
    // Serial.print(iValue);    
    
    delay(1000);

}

Wenn man auf dem selben PC testet, blockiert PHP und die Arduino IDE (Serial Monitor) sich gegenseitig. Dann kommen so Meldungen wie "Access denied.." und ähnliches. Also entweder das PHP Skript stoppen oder am Besten nach dem Upload die Arduino IDE schliessen.

Grüße
Thomas

..gelöscht... (doppelt gesendet)

Hey,
danke für den ersten Ansatz :slight_smile:
Bei mir läuft alles auf einen Paspberry Pi B+ (Debian) (Webserver)
Der Arduino ist per USB mit dem Rasp verbunden
$fp = fopen('/dev/ttyACM0','r+');
müsste ja dann auch klappen, oder?
Mir ist noch nicht klar, wie ich wann sende und wann auslese.
Der Arduino sendet an den seriellen Port, bleibt dann der gesendete Wert dor erhalten, in irgendeinem Puffer und kann jederzeit ausgelesen werden?
Das php Script liest entsprechend irgendwann aus, oder zugleich?

hmmm

Gruß KK

Wenn ich zumindest eine Textdatei im gleichen Verzeichnis anlegen könnte, wäre mir ja schon geholfen. aber Tutorials darüber finde ich nicht, lediglich auf SD Karten speichern ist zu finden.
Noch toller wäre es, wenn ich aus dem Arduino heraus in eine Datenbank speichern könnte (MySQL), aber auch dazu finde ich nicht wirklich was geeignetes (für mich geeignetes :slight_smile: )

Du spricht hier eine Menge aufwändiger Themen an. Je nach Kentnisstand hat Du noch eine Menge vor Dir:

RS232

MySQL

PHP

Ich kenne keine Möglichkeit vom Arduino direkt mit MySQL zu kommunizieren.

[Arduino] <=> (RS232 / COM) <=>

 <=> (API-Treiber) <=> [MySQL]


Dein [b]$fp = fopen('/dev/ttyACM0','r+');[/b] ist aus der *nix Welt. Da kenne ich mich nicht aus.


Es gibt viel zu tun (lernen) vermute ich mal   ;) 

Grüße
Thomas

P.S. Ich weiß dass ich nichts weiß

KeithKeith:
Wenn ich zumindest eine Textdatei im gleichen Verzeichnis anlegen könnte, wäre mir ja schon geholfen. aber Tutorials darüber finde ich nicht, lediglich auf SD Karten speichern ist zu finden.
Noch toller wäre es, wenn ich aus dem Arduino heraus in eine Datenbank speichern könnte (MySQL), aber auch dazu finde ich nicht wirklich was geeignetes (für mich geeignetes :slight_smile: )

Ich hab ein Setup mit einem RasPi gebaut, Arduino spricht via SerialUART (USB ADAPTER -> kein Spannungsteiler notwendig) mit dem RasPI. Dort läuft ein Processing Sketch welches den Seriellen Datenstrom zerpflückt und die einzelnen Werte in eine MySQL DB am RasPI schreibt. Das Ganze funktioniert natürlich auch in die andere Richtung, sprich Processing liest Werte aus der DB und baut sich daraus den Datenstrom für die Serielle und schickt das an den Arduino. (siehe meinen Blog! Ist natürlich alles noch early ALPHA! FEEDBACK ERWÜNSCHT!!!)

Bezügl. direktes schreiben vom Arduino in die DB.
Ich kann mich wage daran erinnern, dass ich da mal was gelesen habe. Das wurde mit einem ETH Shield gelöst und einem MySQL Library für Arduino. Leider kann ich dazu keinen LINK mehr abliefern.

SerialQ:
Ich kann mich wage daran erinnern, dass ich da mal was gelesen habe. Das wurde mit einem ETH Shield gelöst und einem MySQL Library für Arduino. Leider kann ich dazu keinen LINK mehr abliefern.

Wenn's über Ethernet sein darf:
glaskugelsehen.wordpress.com

Du solltest dir allerdings das vollständige Tutorial (ab Teil 1) ansehen.

Gruß
Reinhard