Live streaming motorisé

Ancienne version !

Matériel nécessaire

Ce qui donne une fois les servo-moteurs montés dans le pan tilt :

montage

Et le montage complet :

montage-fini

montage-fini

La méthode la plus efficace et la plus simple pour le streaming que j'ai testé est celle utilisant MJPG-Streamer, nous allons donc télécharger ce programme et le dépendances, et le construire.

Considérons que le Raspberry est à jour et le ssh activé, sinon suivez ce tuto en premier.

Le programme de l'Arduino

Le Raspberry étant multitâche (micro-processeur), il ne consacre pas 100% de son temps à votre programme en python, ce qui cause certaines irrégularités dans le signal PWM transmis au servomoteur.

On utilise donc un Arduino pour contrôler les servo-moteurs ou un chipset type Attiny ou autre, Adafruit a sortie ceci pour le Raspberry.

J'utilise un Arduino car j'en ai sous la main, et pour 2 servos c'est suffisant, sinon la carte Adafruit permet de contrôler 12 servos par I2C.

Voici le programme à téléverser dans l'Arduino :

servocam.ino

Il est simple, dés que le programme servo.py sur le Raspberry pi envoi une commande par la com série, il la lit et exécute l'action en fonction de la commande, ici 0, 1, ... ou 5.

Si vous ne savez pas comment téléverser le programme dans l'arduino, regarder ce tuto, le principe est le même.

Installation de MJPG-Streamer sur le Raspberry Pi :

Dans un premier temps on installe subversion et les dépendances pour MJPG-Streamer, pour cela on tape dans le terminal:

sudo apt-get install subversion libjpeg8-dev imagemagick libv4l-dev -y

Puis on crée le lien symbolique manquant:

sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h

Ensuite on télécharge MJPG-Streamer :

svn co https://svn.code.sf.net/p/mjpg-streamer/code/

on se rend dans le dossier :

cd code/mjpg-streamer

on construit le programme :

make mjpg_streamer input_file.so output_http.so

puis

sudo cp mjpg_streamer /usr/local/bin

et

sudo cp output_http.so input_file.so /usr/local/lib/

et enfin

sudo cp -R www /usr/local/www

Voilà pour l'installation de MJPG-Streamer.

Pour tester tout ça, dans votre terminal, vous tapez la commande suivante qui lance la prise de photo (dans le dossier tmp pour le moment):

raspistill --nopreview -w 1024 -h 760 -q 40 -o /tmp/pic.jpg -tl 100 -t 600000 -th 0:0:0

puis dans un second terminal, lancez le server MJPG-Streamer avec la commande suivante :

LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp -n pic.jpg" -o "output_http.so -w /usr/local/www"

Maintenant ouvrez dans votre navigateur cette adresse : http://192.168.XXX.XXX:8080 (remplacez par l'adresse ip de votre Raspberry pi) si vous êtes en SSH ou http://localhot:8080 si vous êtes en local.

Vous tombez sur la page d'accueil du serveur MJPG-Streamer comme ceci :

image non dismonible

Vous pouvez tester sur cette page les différentes méthodes, le dossier se trouve sur le pi dans /usr/local/www/, il y a les exemples des pages HTML.

si tout est ok, on va supprimer le dossier d'installation :

cd /home/pi

et

sudo rm -r /home/pi/code

On va également copier une page web d'exemple et la renommer en : cam.html

sudo cp /usr/local/www/stream_simple.html /usr/local/www/cam.html

Installation des outils et lidrairies pour Python et de git

On tape:

sudo apt-get install python-dev python-openssl python-pip git -y

puis

sudo pip install psutil && sudo pip install pyserial

Installation d'Apache et PHP

sudo apt-get install apache2 php5 libapache2-mod-php5 php5-mysql -y

Puis on se rend dans le dossier html:

cd /var/www/html/

On enlève la page d'accueil d'apache

sudo rm index.html

On va donner les droits au dossier web à l'utilisateur pi: (pour un site en local, sinon faut passer par des liens symboliques et sécuriser apache)

sudo chown www-data:pi /var/www/html/

Puis

sudo chmod 770 /var/www/html/

Mise en place de la page web

on va télécharger la page web:

cd /home/pi

puis

git clone https://github.com/weedmanu/Camera-pi-LiveStream-width-control.git

On copie le dossier qui contient les scripts marche arret dans /home/pi

mv Camera-pi-LiveStream-width-control/stream -t /home/pi/

Puis on copie le dossier du site web dans /var/www/html

mv /home/pi/stream/LiveStream -t /var/www/html/

Et on supprime le dossier :

sudo rm -r /home/pi/Camera-pi-LiveStream-width-control

On ajoute les programmes cam.py et servo.py au démarrage du pi, ils écoutes les boutons et agissent en fonction.

sudo nano /etc/rc.local

Puis ajoutez ces lignes avant exit :

python /home/pi/stream/servocam.py &

comme ceci :

image non disponible

on donne les droits en écriture :

sudo chown -R www-data:pi /var/www/html/

sudo chmod -R 770 /var/www/html/

Puis on redémarre le pi:

sudo reboot

Maintenant tapez cette adresse dans votre navigateur :

http://192.168.XXX.XXX/LiveStream/

Bien sur, on remplace 192.168.XXX.XXX par l'adresse ip de son Raspberry pi.

Voila ce que cela donne :

Quand le livestreaming n'est pas activé :

pageweb

Quand le livestreaming est activé :

pageweb

Quand on prend une photo :

pageweb

Le fonctionnement

les boutons sur la page web écrivent un chiffre dans les fichiers cam.txt pour play/stop, servo.txt pour les flèches et photo.txt pour prendre les photos.

Le programme servocam.py qui est lancé au démarrage du pi, lit toutes les secondes les fichiers txt.

Par défaut il y a écrit 0 dans ces fichiers

Le programme servocam.py :

Les codes sont consultable sur mon github si vous voulez les consulter.