Marc Silanus

En php

Les ports séries asynchrones

Pour mener à bien les tests de lecture et d'écriture sur les ports séries asynchrones de la FOX Board G20, nous allons relier entre eux 2 des ports. Connectez les lignes RX du port COM4 (ttyS5) et TX du port et COM3 (ttyS4) entre elles et inversement.

Test de lecture et écriture sur port série

Connexion de tty4 sur tty5 pour tester la communication série

Sous Linux, chaque port série est représenté par un fichier de périphérique situé dans le dossier /dev.

Il peut s’avérer intéressant de pouvoir disposer d’une interface web capable d’intervenir sur un système physique (commande de la rotation ou du zoom d’une caméra IP motorisée, modifications des paramètres réseau d’un système communicant, transmission d’une chaine de caractères à afficher sur un afficheur industriel, …). Plusieurs solutions techniques sont alors envisageables :

  • les CGI (Common Gateway Interface), qui sont des programmes écrit en C/C++, Python, Perl, … et exécuter sur le serveur. Ils peuvent renvoyer du contenu HTML au client et agir directement sur le système hôte hébergeant le serveur (configuration, liaisons séries, parallèles, …).
  • Les langages web dynamiques (php, asp, aspx) qui sont des langages de script interprétés via un serveur http. Ils peuvent aussi fonctionner localement comme n’importe quel langage interprété et ainsi agir sur le système hôte.

Pour transmettre des caractères sur le port ttyS4:

<HTML>
<HEAD>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <TITLE>Page Test</TITLE>
</HEAD>
<?php
if(!isset($_POST["valider"]))
{
  echo'<h1>Chaine à transmettre sur ttyS4 :</h1>';
  echo'<form method="post">';
  echo'<br><input /><input value="Valider" />';
  echo'</form>';
}
else
{
  echo'<h1>Transmission de données sur un port série</h1>';
  echo'<br>Transmission sur ttyS4 de '.$_POST["chaine"];
  $port = fopen("/dev/ttyS4","w");
  fwrite ($port,$_POST["chaine"]);
  fclose($port);
  echo'<br><a href="serie.php">clique ici</a> pour transmettre une nouvelle chaine';
}
?>
</BODY>

Enregistrez ce fichier dans /var/www et exécutez le à partir d'un navigateur mais le résultat n'est pas celui escompté :

Erreur de droits d'accès au port série

Erreur de droits d'accès au port série

Le fichier correspondant au port série ttyS4 n'est pas accessible à l'utilisateur du serveur web (www-data). Il faut donc modifier les droits d'accès :

debarm:/dev# ls -l
...
crw-rw---- 1 root dialout   4,  67 Oct  5 18:46 ttyS4
...
debarm:/dev# chmod 666 ttyS4
debarm:/dev# ls -l
...
crw-rw-rw- 1 root dialout   4,  68 Oct  5 19:04 ttyS4
Envoie de données sur le port série en php

Envoie de données sur le port série en php