Serielle Kommunikation zwischen php und Arduino

Hallo,

ich habe einen Arduino über seriell mit meinem Linux Webserver verbunden. Die Kommunikation zwischen php und seriell funktioniert mit folgendem Beispielprogramm. Die Datei php_serial.class.php kommt von hier http://www.phpclasses.org/browse/file/17926.html

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
include "php_serial.class.php";

$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->deviceOpen();
$serial->sendMessage("Hello!");
// usleep(50);
$read = $serial->readPort();
echo "read_data ##- ".$read." -##
";

$serial->deviceClose();

echo "Message gesendet! \n\r";
?>

Momentan echo’ed der Arduino jedes Zeichen. Das funktioniert und die Antwort wird korrekt auf der Webseite dargestellt.

Jetzt möchte ich den Fehler abfangen, wenn der Arduino nicht angeschlossen ist, also die Schnittstelle /dev/ttyACM0 nicht existiert. Dazu finde ich keine Beispiele mit der php_serial.class.php. (über fopen bekomme ich das hin, aber das ist nicht das Ziel)
Wer kann helfen?

Gruß
Reinhard

Puh, da ist Jomelo ne super Hilfe. Nur mit der Zeit happerts bei den hier :D Ich hab mit php viel (würd ich sagen) gemacht, krabbel mal in der alten Kiste rum und schau was ich da für dich finden kann...

Super, hört sich gut an. Zusatz noch: das Ganze funktioniert nur wenn vorher die Arduino IDE die stty Einstellungen verändert hat. -ixon, -icanon und -echo scheinen die entscheidenden Einstellungen zu sein. Muss mal sehen, ob ich das mit der Klasse setzen kann.

skorpi08: Puh, da ist Jomelo ne super Hilfe. Nur mit der Zeit happerts bei den hier :D

Da hast du recht, aber in einer Woche werde ich die Masterarbeit abgeben, dann ist wieder mehr Zeit zum Basteln und ich glaube ich hab dann auch mal wieder ein Wochenende, dass einfach frei ist ;-)

Zum Thema: Von PHP aus habe ich noch nie direkt auf die Serielle Schnittstelle zugegriffen, nur über Umwege, z.B: mit einer Datenbank und Python oder C++ Programmen. Oder mit einem Seriell Ethernet-Wandler und dann per Socket.

Hilft dir dieses Projekt weiter? https://github.com/JanStevens/ArduinoPi-Controller https://bitbucket.org/hoeschle/homedomotics/src

mmh ... irgendwie scheint das hier drin zu stecken, aber ich verstehe die Programmierung nicht. (https://github.com/JanStevens/ArduinoPi-Controller/blob/master/api/arduino_pi.class.php)

 public function __construct($device)
{
// Setup the serial connection, call the parent constructor
try {
parent::__construct();
$this->deviceSet("/dev/rfcomm0");
$this->confBaudRate(115200);
$this->confParity("none");
$this->confCharacterLength(8);
$this->confStopBits(1);
$this->_setDevice($device);
} catch (phpSerialException $e) {
$this->_jsonError($e->getMessage());
die();
} catch (Exception $e) {
$this->_jsonError($e->getMessage());
die();
}
}

In Bezug auf das andere Beispiel: leider habe ich keine Ahnung von json

Was scheint darin zu stecken und was genau verstehst du am Code nicht ?

Was scheint darin zu stecken

Na, das, was meine Frage war.

Jetzt möchte ich den Fehler abfangen, wenn der Arduino nicht angeschlossen ist, also die Schnittstelle /dev/ttyACM0 nicht existiert.

Nach dem Öffnen der Schnittstelle wird ein Fehlercode abgefragt

catch (phpSerialException $e) {
$this->_jsonError($e->getMessage());
die();
} catch (Exception $e) {
$this->_jsonError($e->getMessage());
die();
}

und was genau verstehst du am Code nicht ?

wie ich die Abfrage in meinen Code integrieren kann. Wär super, wenn du weiterhelfen kannst.