La Platine Beaglebone, Tutoriels, Trucs et Astuces.

Linear Feedback Shift Register with VHDL.

Installation du serveur Lighttpd.

Notre première application web.

Une deuxième application web.


Installation du serveur Lighttpd.

Nous allons installer un serveur HTTP aussi appelé serveur Web sur notre Beaglebone. Selon Wikipédia, Lighttpd semble être un serveur HTTP parfait pour notre platine favorite.

Déjà il nous faut libérer le port par défaut 80 utilisé par le protocole HTTP, et donc désactiver le serveur web par défaut qui est en fonction sur la platine.

root@beaglebone:~# systemctl disable bone101.service
root@beaglebone:~# systemctl disable cloud9.service

Nous sommes prêts à installer Lighttpd et le module PHP en fastcgi. Voici la séquence de commandes recommandée.

root@beaglebone:~# opkg update
root@beaglebone:~# opkg upgrade
root@beaglebone:~# opkg install php php-cgi
root@beaglebone:~# opkg install lighttpd lighttpd-module-fastcgi
Tout a dû bien se passer, quelques minutes se sont écoulées. Il nous reste à éditer le fichier de configuration /etc/lighttpd.conf. Editer avec vim le fichier et assurez vous que sous le champs server.modules, les lignes mod_access, mod_fastcgi et mod_accesslog sont "décommentés", ce qui signifie que le signe "#" ne figure pas devant ces lignes.

Il nous reste à ajouter les quelques lignes suivantes sous le champs fastcgi module pour activer le module fastcgi. Si vous avez un doute, vous pouvez consulter mon fichier lighttpd.conf.

fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/bin/php-cgi",
                     "socket" => "/tmp/php.socket"
                 )))

Il est temps de rédémarrer le serveur en utilisant cette commande.

root@beaglebone:~# /etc/init.d/lighttpd restart

Il nous reste plus qu'à vérifier que tout fonctionne. Tapez dans le navigateur de votre PC ou de l'un des autres PCs connectés à votre box l'adresse IP de votre Beaglebone et vous devriez voir le message "It Works" apparaître ! C'est tout simplement le fichier index.html créé lors de l'installation qui est affiché par le navigateur.

Par la suite si vous éteignez et rallumez votre platine, le serveur devrait démarrer automatiquement sinon entrez cette commande.

root@beaglebone:~# /etc/init.d/lighttpd start

Testons avant de passer à la suite si PHP est bien installé en entrant ce script shell d'une ligne.

root@beaglebone:~# echo "<?php phpinfo(); ?>" > /wwww/pages/index.php

Enlever/effacer le fichier index.html qui figure dans le dossier /www/pages, il doit vous rester le fichier index.php qui vient d'être créer à la volée par le script d'une ligne du dessus. Entrez dans le navigateur de votre PC ou de l'un des autres PCs connectés à votre box l'adresse IP de votre Beaglebone, vous devriez alors voir les informations PHP venant du fichier phpinfo() apparaître.

Vous pouvez aussi paramétrer votre livebox ou neufbox pour pouvoir faire suivre votre adresse IP (qui peut peut être varier chaque jour selon votre FAI) à travers le port libre de votre choix vers l'adresse locale de votre platine Beaglebone. Ainsi vous pourrez accéder à votre platine Beaglebone depuis le PC d'un ami par exemple, votre tablette tacile ou smartphone. (Si vous avez un problème pour le routage de port, écrivez moi car cela est simple mais varie selon les FAI).

Bien sûr vous pouvez aussi installer le module Mysql pour gérer une ou des bases de données mais nous n'en aurons pas besoin dans nos exemples donc cela ne servirait pas à grand chose dans l'immédiat.

Notre première application web.

Je voudrais attirer l'attention des lecteurs sur le fait que PHP est un langage simple et pratique, que son interaction avec le Shell Linux est très facile, mais qu'il est très important de se pencher sur la sécurité des scripts et applications que vous développerez. Les exemples proposés ici sont ludiques mais simplistes et ne sont donc pas sécurisés.

Nous allons reprendre la lecture analogique sur la patte P9_39 (AIN0) de la valeur renvoyée par notre photorésistance et nous utiliserons le langage PHP pour générer des pages dynamiques qui évoluent selon l'information reçue...

Tout d'abord un petit peu théorie: nous allons utiliser une fonction du langage PHP shell_exec() qui permets d'éxécuter une commande via le Shell Linux et qui retourne le résultat sous forme de chaîne de caractères. L'argument à passer à cette commande est aussi une chaîne de caractère (type string). Voici un exemple tout simple, enregistez le sous le nom index.php et placer ce fichier dans le répertoire /www/pages en vous assurant que ne figurent plus d'autres fichiers du type index.html ou index.htm.

<?php
$output = shell_exec('uname -r');  
echo "<pre>$output</pre>";  
?>

Allez maintenant dans le navigateur de l'un des PCs de votre réseau et tapez l'adresse IP de votre Beaglebone (pour rappel elle doit être du type 192.168.1.X). Vous devriez voir s'afficher sur l'écran de votre PC la valeur du Kernel de votre distribution Ansgtrom.

Revenons à notre photorésistance connectée sur l'entrée analogique P9_39, nous allons écrire un script PHP qui affiche dans le navigateur la valeur en % de l'intensité lumineuse, cette valeur sera réactualisée toutes les 2 secondes. Si la valeur passe sous les 10% alors le script PHP nous redirigera vers une nouvelle page qui à son tour, selon l'intensité lumineuse reçue, nous redigera à nouveau vers la page initiale si la luminosité repasse au dessus des 10%.

Voici donc les 3 fichiers nécéssaires, index.php, ain1.sh et index_1.php à placer dans le répertoire /www/pages. N'oubliez pas de rendre le script ain1.sh exécutable dans ce répertoire. Allez ensuite dans votre navigateur, entrez l'adresse IP de votre Beaglebone et vous devriez voir cet écran (Copie de mon écran).

<?php

// Fichier index.php.

$command_1 = './ain1.sh';
$output_1 = exec($command_1);

if ( $output_1 < 10 ) {
	header('refresh: 3 url=index_1.php');
	echo "<u>PAGE DE JOUR ;)</u></br></br>";
	echo "Il commence à faire nuit !</br>";
	echo "Luminosité (<10%) : ".$output_1." %";
	echo "</br></br>Vous allez être rediriger dans 3 secondes vers la page de nuit !";	
} else {	
	header('refresh: 2 url=index.php');
	echo "<u>PAGE DE JOUR ;)</u></br></br>";
	echo "Il fait <b>jour</b> !</br>";
	echo "Luminosité (>10%) : ".$output_1." %";	
}

?>
#!/bin/sh

# Fichier ain1.sh.

let duty=$(cat /sys/devices/platform/tsc/ain1)*100/4095

echo $duty
<?php

// Fichier index_1.php.

$command_1 = './ain1.sh';
$output_1 = shell_exec($command_1);

if ( $output_1 > 10 ) {
	header('refresh: 3 url=index.php');
	echo "<u>PAGE DE NUIT ;)</u></br></br>";
	echo "Il fait jour !</br>";
	echo "Luminosité (>10%) : ".$output_1." %";
	echo "</br></br>Vous allez être rediriger dans 3 secondes vers la page de jour !";	
} else {	
	header('refresh: 2 url=index_1.php');
	echo "<u>PAGE DE NUIT ;)</u></br></br>";
	echo "Il fait <b>nuit</b> !</br>";
	echo "Luminosité (<10%) : ".$output_1." %";	
}

?>

Une deuxième application web.

Voici maintenant une application qui va lire une valeur à travers un petit formulaire présenté sur votre navigateur. En fonction de la valeur saisie entre 0 et 100 (en %), notre Led s'allumera proportionnellement. Si vous avez paramétré votre box internet pour faire suivre l'adresse IP de votre Beaglebone à travers le port de votre choix vers votre adresse IP résidentielle, vous pourrez contrôler avec votre smartphone l'intensité lumineuse de la Led. J'ai testé avec Iphone 4 et Samsung Galaxy sous Android.

Voici donc les 3 fichiers nécéssaires, index.php, analogique_serveur.sh et stopPWM.sh à placer dans le répertoire /www/pages. N'oubliez pas de rendre les scripts exécutables dans ce répertoire. Allez ensuite dans votre navigateur, entrez l'adresse IP de votre Beaglebone et vous devriez voir cet écran (Copie de mon écran).

<!-- Fichier index.php !-->

<html> 
<head>
<title>Application Beaglebone</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<h3>Application Ecriture Analogique</h3>
<p>1- Saisissez votre valeur (0-100) et cliquez sur <i>Envoyer</i> pour allumer la Led.
</br>2- Ou bien cliquez sur <i>Terminer</i> pour l'éteindre et libérer la sortie PWM.
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
Valeur (%) <input type="text" name="valeur">
<input type="submit" name="submit" value="Envoyer">
<input type="submit" name="terminer" value="Terminer">
</form>
<p>
<?php

if (!empty($_POST['valeur'])) {
	echo "Valeur saisie: <b>".$_POST['valeur']."</b>";	
	$command_1 = './analogique_serveur.sh '.$_POST['valeur'].'';
	$output_1 = shell_exec($command_1);
} else {
	if ($_POST['valeur'] == "0" ) {
	echo "Valeur saisie: <b>".$_POST['valeur']."</b>";	
	$command_1 = './analogique_serveur.sh '.$_POST['valeur'].'';
	$output_1 = shell_exec($command_1);	
	} else {
		if ($_POST['terminer']) {
		$command_1 = './stopPWM.sh';
		$output_1 = shell_exec($command_1);
		echo "Application terminée. Saissisez une valeur pour recommencer.";
		} else {
		echo "Le champs Valeur est vide, remplissez le.";
		}
	}
}

?>
</body>
</html>
#!/bin/sh

# Fichier analogique_serveur.sh

# On paramètre le mode 6 pour pouvoir utiliser EHRPMW1A
echo 6 > /sys/kernel/debug/omap_mux/gpmc_a2

# Activation du module PWM.
echo 1 > /sys/class/pwm/ehrpwm.1:0/request

# On démarre le module PWM
echo 1 > /sys/class/pwm/ehrpwm.1:0/run

# on fixe la fréquence à 100Hz.
echo 0 > /sys/class/pwm/ehrpwm.1:0/duty_percent
echo 100 > /sys/class/pwm/ehrpwm.1:0/period_freq

# On écrit sur la sortie PWM de la Led.

echo $1 > /sys/class/pwm/ehrpwm.1:0/duty_percent
#!/bin/sh

# Fichier stopPWM.sh

# Stoppe et libère le module PWM
echo 0 > /sys/class/pwm/ehrpwm.1:0/run
echo 0 > /sys/class/pwm/ehrpwm.1:0/request