Ansteuerung eines Arduino über die serielle Schnittstelle aus PHP

Für das WebControlledCar wird ein Arduino von einem Raspberry Pi aus angesteuert, der wiederum das Fahrzeug steuert. Hierf muss über PHP der Wert aus der WebGUI abgefragt und an den Arduino weiter gegeben werden.

Quellcode zur Ansteuerung aus PHP

Um die Ansteuerung der seriellen Schnittstelle aus PHP zu ermöglichen mussdie Library php_serial.class.php zur Hilfe genommen werden. Diese muss heruntergeladen und im entsprechenden Verzeichnis des Webservers abgelegt werden. Hier im Beispiel liegt sie direkt bei der index.php.

https://www.phpclasses.org/package/3679-PHP-Communicate-with-a-serial-port.html  

Außerdem muss die serielle Schnittstelle des Rasperry Pi aktiviert werden. Hierfür über das hauseigene Tool raspi-config die Schnittstelle aktivieren. Andernfalls lässt sich die Schnittstelle nicht wie gewünscht ansprechen.

Der verwendete Quellecode ließt über eine WebGUI Fahrtrichtung, Geschwindigkeit und Lenkwinkel ein. Die Daten werden anschließend in der Form MOVXMSPYYYMSTZZZ ausgegeben, wobei X die Fahrtrichtung überträgt, YYY die Geschwindigkeit und ZZZ den Lenkwinkel.

Quellcode der index.php :


 <?php
if (empty($_POST["movement"])) { 
    $movement = "0"; 
  } else { 
    $movement = $_POST["movement"]; 
  } 
if (empty($_POST["speed"])) { 
    $speed = "0"; 
  } else { 
    $speed = $_POST["speed"]; 
  } 
if (empty($_POST["steering"])) { 
    $steering = "90"; 
  } else { 
    $steering = $_POST["steering"]; 
  } 
?> 
<form method="post"> 
  <input name="steering" type ="range" min ="30" max="150" step ="10" value = <?php echo $steering; ?>  /> Lenkwinkel 
  <br/> 
  <input name="speed" type ="range" min ="0" max="150" step ="10" value = <?php echo $speed; ?> /> Geschwindigkeit 
  <br/> 
  <input type="radio" name="movement" value="1" <?php if (isset($movement) && $movement=="1") echo "checked";?> > Vorwärts <br> 
  <input type="radio" name="movement" value="2" <?php if (isset($movement) && $movement=="2") echo "checked";?> > Rückwärts <br> 
  <input type="radio" name="movement" value="0" <?php if (isset($movement) && $movement=="0") echo "checked";?> > Stop 
  <br/> 
  <input type=submit value=Submit /> 
<form/> 
<?php 
  echo "<br/>"; 
  echo ("MOV" . str_pad($movement, 1 ,'0', STR_PAD_LEFT) . "MSP" . str_pad($speed, 3 ,'0', STR_PAD_LEFT) . "MST" . str_pad($steering, 3 ,'0', STR_PAD_LEFT)) ; 
  $string_out = ("MOV" . str_pad($movement, 1 ,'0', STR_PAD_LEFT) . "MSP" . str_pad($speed, 3 ,'0', STR_PAD_LEFT) . "MST" . str_pad($steering, 3 ,'0', STR_PAD_LEFT)); 
?> 
<?php 
  error_reporting(E_ALL); 
  ini_set('display_errors', '1'); 
  include "php_serial.class.php";   
  $serial = new phpSerial; 
  $serial->deviceSet("/dev/ttyAMA0"); 
  $serial->confBaudRate(9600); 
  $serial->confParity("none"); 
  $serial->confCharacterLength(8); 
  $serial->confStopBits(1); 
  $serial->deviceOpen(); 
  $serial->sendMessage($string_out); 
  $serial->deviceClose(); 
?>

 

 

 

Wir benutzen Cookies

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.