Abonnement aux commentaires

S'abonner pour recevoir les commentaires suivants par email

まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Rpi-pi_EYE -Mise à jour-

Suite de l'épisode précédent :
demopieye.jpg

  • Et vlan, un nouveau billet sur le sujet, alors que c'était pourtant terminé… non ?

En fait mon système est tombé en panne, de trop nombreuses erreurs de lecture/écriture sur la carte SD ont eut raison du système Raspbian, j'ai donc formaté la carte et entrepris de réinstaller tout ça…

  • Sauf qu'après avoir installé le dernier Raspbian, je me suis rendu compte que la librairie RPIO que j'utilisais jusqu'alors pour piloter les servos n'était plus supportée, et qu'il fallait alors me reporter sur une autre solution.

En plus de ça, mes notes étant éparpillées par les expérimentations diverses, je me suis dit que c'était l'occasion ici de faire un récapitulatif d'installation de A à Z.

  • Voici donc le plan d'action :

1 - Installer le Raspbian.
2 - Installer un serveur web.
3 - Configurer un stream vidéo MJPG-Streamer de la picamera.
4 - Installer la librairie pigpio.
5 - Installer la librairie wiringPi.
6 - Configurer le site Web.
7 - Configurer son routeur pour sortir en publique le stream vidéo et le site web.


1 - Installer le Raspbian :

Il existe actuellement 2016-05-10-raspbian-jessie-lite.zip, une version qui est entièrement en ligne de commande, sans environnement de bureau, donc très légère, idéale pour une petite carte SD (environ 800Mio une fois installé)

  • Déployer l'image sur une carte SD depuis un système GNU/Linux, avec la commande DD

(attention, of=/dev/sdx à adapter pour la cible de votre carte SD, en cas d'erreur risque d'effacement d'un disque dur non désiré)

dd bs=4M if=2016-05-10-raspbian-jessie-lite.img of=/dev/sdx; sync
  • Placer la carte SD dans le Raspberry, et le mettre sous tension.

raspi-config s'exécute tout seul au premier démarrage, configurer tous les trucs comme on veut, et surtout activer la prise en charge de la camera !
Pour exécuter raspi-config plus tard, simplement :

raspi-config

Après le reboot, pour rappel :

Login : pi
Pass : raspberry

  • Effectuer les mises à jour :
sudo apt-get install rpi-update
sudo rpi-update
sudo apt-get update
sudo apt-get upgrade
  • Mettre les fichiers temporaires en ram pour économiser sur la durée de vie la la carte SD.
sudo nano /etc/fstab
tmpfs      /tmp		tmpfs	defaults,size=256M	0    0
tmpfs      /var/tmp	tmpfs	defaults,size=256M	0    0
tmpfs      /var/lock	tmpfs	defaults,size=256M	0    0



2 - Installer un serveur web. :

sudo apt-get install apache2 php5



3 - Configurer un stream vidéo MJPG-Streamer de la picamera :

  • Installer MJPG-Streamer raspicam
sudo apt-get install libjpeg8-dev imagemagick libv4l-dev libjpeg62-dev cmake
git clone https://github.com/jacksonliam/mjpg-streamer.git ~/mjpg-streamer
cd ~/mjpg-streamer/mjpg-streamer-experimental
make clean all
sudo mv ~/mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer
sudo rm -rf ~/mjpg-streamer
  • Créer le script stream.sh avec la commande pour streamer :
nano ~/stream.sh
#!/bin/bash

LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 25 -q 10 -x 640 -y 480" -o "output_http.so -p 9000 -w /opt/mjpg-streamer/www" &
  • Rendre le script exécutable :
chmod+x ~/stream.sh
  • Pour exécuter le script à chaque démarrage, éditer le fichier /etc/rc.local et avant la ligne exit 0, inscrire ces deux lignes :
sleep 8
su -l pi -c "/home/pi/stream.sh &"
  • Pour sortir sur le web, il faudra bien entendu ouvrir le port 9000 (ou autre au choix) sur le routeur ou la machin-box.
  • Pour intégration à un site web, créer la page de visualisation du flux stream.html :
<img src="http://IP-Publique:9000/?action=stream" />

Et voici le code à intégrer à sa home page pour avoir une vignette cliquable vers la page de visualisation du flux :

<a href="http://DOMAINE.com/stream.html"><img src="http://IP-Publique:9000/?action=snapshot"  width="270" height="190" /></a>



4 - Installer la librairie pigpio :

  • La librairie pigpio présente le gros avantage de ne pas nécessiter les droits root pour exécuter du code python, ce qui est un gain de sécurité fort appréciable !

Pour l'installer :

wget abyz.co.uk/rpi/pigpio/pigpio.tar
tar xf pigpio.tar
cd PIGPIO
make -j4
sudo make install
  • Pour exécuter le démon pigpiod à chaque démarrage, éditer le fichier /etc/rc.local et avant la ligne exit 0, inscrire ces deux lignes :
sudo pigpiod



5 - Installer la librairie wiringPi :

sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build



6 - Configurer le site Web :

  • J'ai donc réécris les scripts python, le reste reste pareil qu'avant; Le site web est disponible en pièce jointe à ce billet, je vais décrire ici son fonctionnement :

Plusieurs scripts en python :

  • Dans chaque scripts, ce qu'il faut pour faire bouger l'œil dans une seule position.

Ici le script centreH.py :

#!usr/bin/env/ python

import time
import pigpio

#connect to pigpiod daemon
pi = pigpio.pi()

# setup pin as an output
pi.set_mode(17, pigpio.OUTPUT)
pi.set_mode(18, pigpio.OUTPUT)

pi.set_servo_pulsewidth(17, 1250)
pi.set_servo_pulsewidth(18, 1650)
time.sleep(0.5)

#cleanup
pi.set_mode(17, pigpio.INPUT)
pi.set_mode(18, pigpio.INPUT)
#disconnect
pi.stop()


Plusieurs scripts en php :

  • Chaque script contient une commande système permettant d'appeler le script python.

Ici le script centreH.php :

<?php
system ("python python/centreH.py");
?>


  • Le script pour allumer la lumière est un peu différent, il appelle directement des commandes système liées à l'utilisation classique du logiciel WiringPi.
<?php
// allume la led connectée en 2
system ( "gpio mode 2 out" );
system ( "gpio write 2 1" );
sleep(10); // attend 10 secondes
system ( "gpio write 2 0" ); // éteint la led connectée en 2
?>


Un script en JavaScript :

  • Le script va permettre de gérer des actions sur des cliques de souris, sans recharger la page web !

Ici un morceau du script qui permet d'appeler le script centre.php.

function centre()
{
var requestC = new XMLHttpRequest();
requestC.open( "GET" , "centre.php" );
requestC.send(null);
}


La page html du site :

  • L'index.html va donc contenir le code JavaScript, l'image de la vidéo de la picamera et des zones cliquables définies par des coordonnées sur cette image.
<!DOCTYPE html>
<html>
	<head>
        	<meta charset="utf-8" />
	        <title>Amy-Channel =^.^=</title>
	</head>

<script type="text/javascript">
function gaucheB()
{
var requestGB = new XMLHttpRequest();
requestGB.open( "GET" , "gaucheB.php" );
requestGB.send();
}

function gaucheH()
{
var requestGH = new XMLHttpRequest();
requestGH.open( "GET" , "gaucheH.php" );
requestGH.send();
}

function centreB()
{
var requestCB = new XMLHttpRequest();
requestCB.open( "GET" , "centreB.php" );
requestCB.send(null);
}

function centreH()
{
var requestCH = new XMLHttpRequest();
requestCH.open( "GET" , "centreH.php" );
requestCH.send(null);
}

function droiteB()
{
var requestDB = new XMLHttpRequest();
requestDB.open( "GET" , "droiteB.php" );
requestDB.send(null);
}

function droiteH()
{
var requestDH = new XMLHttpRequest();
requestDH.open( "GET" , "droiteH.php" );
requestDH.send(null);
}

function leds()
{
var requestL = new XMLHttpRequest();
requestL.open( "GET" , "leds.php" );
requestL.send(null);
}

</script>

	<body>
        	<center>
			<img src="http://85.69.5.218:9000/?action=stream" usemap="#panneaux" />
			<map name="panneaux">
				<area shape="rect" coords="0,0,150,150" onclick="gaucheH()" alt="Haut-Gauche"  />
				<area shape="rect" coords="490,0,640,150" onclick="droiteH()" alt="Haut-Droite"  />
				<area shape="rect" coords="246,0,395,150" onclick="centreH()" alt="Haut-Centre"  />
				<area shape="rect" coords="0,325,150,480" onclick="gaucheB()" alt="Bas-Gauche"  />
				<area shape="rect" coords="490,330,640,480" onclick="droiteB()" alt="Bas-Droite"  />
				<area shape="rect" coords="246,330,395,480" onclick="centreB()" alt="Bas-Centre"  />
				<area shape="circle" coords="320,240,50" onclick="leds()" alt="LEDon" />
			</map>
	        </center>
    	</body>
</html>


7 - Configurer son routeur pour sortir en publique le stream vidéo et le site web :

  • Je laisse ici le soin à chacun de se démerder :)

  • Voilà, normalement j'ai rien oublié, voici la démo vidéo :


Ressources :

- http://rpitips.com/python-libraries-pigpio/
- http://rpitips.com/python-libraries-rpi-gpio/
- http://rpitips.com/python-libraries-wiring-pi/

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet