Un version 4 est en cours de réalisation pour Raspbian-stretch et Raspberry pi 3
Matériel nécessaire
- un Raspberry Pi (le pi3 dans mon cas) avec son alim et sa carte micro sd :
- un Arduino nano :
- une camera pi :
- un pan tilt 2 axes :
- Deux servo-moteur :
- Dcâbles dupont mâle/femelle :
Ce qui donne une fois les servo-moteurs montés dans le pan tilt :
Et le montage complet :
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.
Programmer l'Arduino :
On le programme par le port série (port USB d’un pc). on le branche donc sur notre pc.
Commençons par télécharger l’ IDE Arduino, une fois installé lancez le, vous devriez avoir ceci :
Allez dans « Outils »
Puis « Type de carte », et choisissez Arduino nano :
Toujours dans « Outils » vérifiez ou choisissez le port sur lequel est branché l'Arduino:
Maintenant on supprime tout ce qu'il y a dans la fenêtre de l'IDE et on y copie le code suivant:
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 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 :
Puis on téléverse le programme en cliquant sur la flèche :
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 , 1, 2, ... ou 5.
Quand cela est fait, on peut débrancher l'Arduino du pc et le rebranché au Raspberry pi. passons au Raspberry maintenant
*************************************************************************************************************************
Une fois le programme de l'Arduino téléversé, vous pouvez passer au step 9 pour une installation automatique, sinon on continue ...
*************************************************************************************************************************
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 :
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/
Le fonctionnement
les boutons sur la page web envoient une commande au programme servocam.py par un socket TCP (par le réseau)
Le programme servocam.py qui est lancé au démarrage du pi, écoute le port attribué au socket et exécute les instructions envoyées par la page web .
Les codes sont consultable sur mon github si vous voulez les consulter
Mise en place de la page web
on va télécharger le site web depuis github :
cd /home/pi
puis
git clone https://github.com/weedmanu/Camera-pi-LiveStream-width-control-NEW.git
Puis on copie le dossier du site web dans /var/www/html
mv /home/pi/Camera-pi-LiveStream-width-control-NEW/LiveStream -t /var/www/html/
Et on supprime le dossier :
sudo rm -r /home/pi/Camera-pi-LiveStream-width-control-NEW
On ajoute le programme servocam.py au démarrage du pi, il écoute les boutons et agit en fonction.
sudo nano /etc/rc.local
Puis ajoutez ces lignes avant exit :
python /var/www/html/LiveStream/prog/servocam.py
comme ceci :
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é :
Quand le livestreaming est activé :
Quand on prend une photo :
Installation automatique
Vous avec fait les steps 1, 2 et 3 alors on y va :
on créer le fichier install.sh :
cd /home/pi
puis
nano install.sh
on copie ( click sur le script, Ctrl a puis Ctrl c ) le script suivant et on le colle dans nano (clic droit et coller) cela prend quelques secondes quand le script est long, Ctrl X pour quitter et enregistrer.
install.sh
On le rend exécutable :
chmod +x install.sh
Et on le lance :
sudo ./install.sh
Et on patiente ....