Ressources::RaspberryPi

Source (url) http://curlybraces.be/wiki/index.php/Ressources::RaspberryPi
Site satellite Curlybraces
Date 2018-07-27 15:17:27

De {}

Aller à : navigation, rechercher

Sommaire[modifier]

Notes d'introduction[modifier]

Objectif de cette page[modifier]

Cette page a pour objectif de rassembler différentes "recettes" techniques propres à l'utilisation d'un Raspberry Pi. Elle constitue un support pour les cours et formations relatifs aux Raspberry Pi donnés notamment à l'ERG (Ecole de Recherche Graphique, Bruxelles) et à iMAL (Center for digital cultures and technology). Si beaucoup de ces recettes peuvent convenir à d'autres appareils et d'autres systèmes d'exploitation, cette page se focalise sur des manipulations précises liées à une version précise d'un appareil précis (qui utilise un système d'exploitation précis), en l'occurence l'appareil et le système d'exploitation énoncés ci-dessous.

Spécificités techniques[modifier]

Les recettes présentes sur cette page sont liées au Raspberry Pi 3B ou 3B+, avec le système d'exploitation Raspbian Stretch.

Configurer le Raspberry Pi[modifier]

Préparer la carte SD[modifier]

Flasher la carte en utilisant l'outil Etcher avec Linux, Mac OS ou Windows[modifier]

Flasher la carte en utilisant l'outil dd avec Linux ou Mac OS[modifier]

lsblk
dd bs=4M if=2018-04-18-raspbian-stretch.img of=/dev/mmcblk0 status=progress conv=fsync

Configurer le Raspberry Pi pour une connexion distante[modifier]

Le but ici est de pouvoir accéder au raspberry via un terminal sur un ordinateur connecté au même réseau wifi, en indiquant simplement le nom du raspberry sans préciser son adresse ip. Pour que la reconnaissance du nom fonctionne, il faut que le paquet avahi-daemon soit installé sur le raspberry (c'est le cas par défaut pour les versions les plus récentes de raspbian). Et que "bonjour" (windows) ou avahi-daemon (linux) soit installé sur l'ordinateur.

Avec un écran hdmi, un réseau wifi et un clavier[modifier]

cd /etc/wpa_supplicant
ls

Le fichier wpa_supplicant.conf devrait apparaitre.

sudo nano wpa_supplicant.conf
network={
  ssid="réseau wifi"
  psk="mot de passe wifi"
}
cd /media/utilisateur/root/etc/
sudo nano hosts
127.0.1.1       raspberrypi

par

127.0.1.1       lenomdevotreraspberry
sudo nano hostname
raspberrypi

par

lenomdevotreraspberry
sudo reboot

(Linux ou Mac OS) Sans écran, sans clavier, avec un réseau wifi et un ordinateur[modifier]

cd /media/utilisateur/boot/
sudo touch ssh
cd /media/utilisateur/rootfs/etc/wpa_supplicant
ls

Le fichier wpa_supplicant.conf devrait apparaitre.

sudo nano wpa_supplicant.conf
network={
  ssid="réseau wifi"
  psk="mot de passe wifi"
}
cd /media/utilisateur/root/etc/
sudo nano hosts
127.0.1.1       raspberrypi

par

127.0.1.1       lenomdevotreraspberry
sudo nano hostname
raspberrypi

par

lenomdevotreraspberry

(Windows) Sans écran, sans clavier, avec un cable ethernet, un réseau wifi et un ordinateur[modifier]

cd /etc/wpa_supplicant
ls

Le fichier wpa_supplicant.conf devrait apparaitre.

sudo nano wpa_supplicant.conf
network={
  ssid="réseau wifi"
  psk="mot de passe wifi"
}
cd /etc/
sudo nano hosts
127.0.1.1       raspberrypi

par

127.0.1.1       lenomdevotreraspberry
sudo nano hostname
raspberrypi

par

lenomdevotreraspberry
sudo reboot

Mettre à jour les logiciels[modifier]

sudo apt-get update

La commande met à jour la base de données locale des logiciels disponibles en téléchargeant les bases de données de paquets dont les adresses se trouvent dans le fichier /etc/apt/sources.list

sudo apt-get upgrade

pour mettre à jour tous les logiciels installés sur le raspberry.

sudo apt-get dist-upgrade

pour mettre à jour la version de Raspbian si nécessaire.

Changer le mot de passe de l'utilisateur [facultatif][modifier]

L'utilisateur par défaut se nomme "pi". Pour changer son mot de passe, taper dans le terminal la commande

passwd

et suivre les instructions.

Installer et configurer Samba [facultatif][modifier]

Samba va permettre de partager les dossiers du raspberry sur le réseau pour pouvoir y accéder via le navigateur de fichiers de votre ordinateur.

sudo apt-get install samba samba-common-bin
sudo nano /etc/samba/smb.conf
wins support = no

en

wins support = yes
[pihome]
   comment=home pi
   path=/home/pi
   browseable=Yes
   writeable=Yes
   only guest=no
   create mask=0775
   directory mask=0775
   public=no
sudo smbpasswd -a pi

Installer et configurer un bureau à distance [facultatif][modifier]

Installer le serveur du bureau à distance sur le raspberry[modifier]

sudo apt-get install tightvncserver
tightvncserver

Entrer un mot de passe demandé. Le bureau distant a normalement été créé à l'adresse :1, :0 étant l'adresse du bureau par défaut sur le raspberry.

service lightdm stop
vncserver -kill :1

où :1 est l'adresse du bureau que vous désirez arrêter.

(Linux) Se connecter via l'ordinateur client[modifier]

(Mac OS) Se connecter via l'ordinateur client[modifier]

(Windows) Se connecter via l'ordinateur client[modifier]

Lire une vidéo[modifier]

Le lecteur vidéo par défaut installé sur Raspbian se nomme omxplayer. Il peut être exécuté à distance, sans nécessairement de session de bureau active sur le raspberry. Pour lire une vidéo, taper dans le terminal:

omxplayer --loop --no-osd lefichier.mp4

Créer des scripts bash et automatiser leur exécution[modifier]

Créer un script de base qui s'exécutera à chaque démarrage du raspberry[modifier]

Le script bash que nous allons réaliser envoie du texte dans un fichier à chaque exécution.

Insérer du texte dans un fichier[modifier]

touch messages
echo "test" >> messages
cat messages

Créer un fichier contenant la commande d'insertion du texte[modifier]

nano hello.sh
#!/bin/bash
 
echo "hello" >> /home/pi/messages
exit 0
chmod +x hello.sh
./hello.sh

Exécuter le script créé à chaque démarrage du raspberry[modifier]

sudo nano /etc/rc.local
/home/pi/hello.sh &
 
exit 0

Créer un script d'envoi d'email qui s'exécutera à chaque connexion au wifi[modifier]

Le script bash que nous allons réaliser envoie un email à chaque exécution.

Installer et configurer les outils nécessaires[modifier]

sudo apt-get install mailutils mpack ssmtp
sudo nano /etc/ssmtp/ssmtp.conf

Exemple de configuration pour envoyer les mails à partir d'une adresse gmail

root=utilisateur@gmail.com
mailhub=smtp.gmail.com:587
hostname=lionel
AuthUser=utilisateur@gmail.com
AuthPass=motdepasse
FromLineOverride=YES
UseTLS=YES
UseSTARTTLS=YES

Envoyer un mail via une ligne de commande[modifier]

echo "Contenu du mail" | mail -s "Titre du mail" destinataire@gmail.com

Créer un fichier contenant la commande d'envoi d'un email[modifier]

nano email.sh
#!/bin/bash
 
echo "Contenu du mail" | mail -s "Titre du mail" destinataire@gmail.com
exit 0
chmod +x email.sh
./email.sh

Exécuter le script créé à chaque connexion au réseau wifi[modifier]

Puisque notre script a besoin de la connexion pour fonctionner, il faut qu'il s'exécute au moment où cette connexion est disponnible et non directement au démarrage du raspberry.

sudo mv email.sh /etc/network/if-up.d/email
#!/bin/bash
 
if [ "$IFACE" != "wlan0" ];then
        exit 0
fi
 
sleep 10
echo "Contenu du mail" | mail -s "Titre du mail" destinataire@gmail.com
 
exit 0

Planifier l'exécution d'un script avec crontab[modifier]

Crontab permet l'exécution planifiée d'un script, c'est à dire programmer l'exécution d'un script pour qu'elle ait lieu toutes les x minutes/x heures/x jours du mois/x mois/x jours de la semaine.

crontab -e
5 * * * * /home/pi/hello.sh

à la fin du fichier. Les règles pour écrire la planification sont indiquées au début du fichier crontab.

Convertir un script en démon avec systemd[modifier]

nano /home/pi/daemon.py

par exemple:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from time import sleep
 
try:
    while True:
        with open("test.txt", "a") as myfile:
            myfile.write("patatras ")
        time.sleep(5)
except  KeyboardInterrupt:
    print "goodbye!"
sudo nano /lib/systemd/system/daemon.service
[Unit]
Description=Test script
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python /home/pi/daemon.py

[Install]
WantedBy=multi-user.target
sudo chmod 644 /lib/systemd/system/daemon.service
sudo systemctl daemon-reload
sudo systemctl enable daemon.service
sudo reboot now

Convertir son raspberry en point d'accès wifi[modifier]

Le but est ici de transformer le raspberry pi en un point d'accès wifi accessible sur n'importe quel matériel (smartphone, tablette ou ordinateur), de partager la connexion Internet branchée sur le Raspberry et d'afficher son propre contenu dans le navigateur web de l'appareil connecté. Pour cela, il faut dédier l'interface wifi du Raspberry à la diffusion du réseau. Si l'on veut partager une connexion Internet aux appareils connectés à ce réseau, il faut utiliser une autre interface; soit une clé wifi supplémentaire, soit le port ethernet du Raspberry.

Installer et configurer hostapd et dnsmasq[modifier]

sudo apt-get install dnsmasq hostapd
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd
sudo nano /etc/dhcpcd.conf
interface wlan0
    static ip_address=10.10.0.1/24
    nohook wpa_supplicant

Où l'adresse ip 10.10.0.1 correspond à l'adresse ip de l'interface qui agira comme serveur dhcp

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo nano /etc/dnsmasq.conf
interface=wlan0
  dhcp-range=10.10.0.2,10.10.0.20,255.255.255.0,24h

Où l'on spécifie que l'interface wifi embarquée sur le Raspberry pourra distribuer des adresses ip à ses clients dans l'intervale entre 10.10.0.2 et 10.10.0.20

sudo nano /etc/hostapd/hostapd.conf

et y insérer le contenu suivant (en adaptant le nom du point d'accès et le mot de passe):

interface=wlan0
driver=nl80211
ssid=leNomDuPointDAcces
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=LeMotDePasse
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
sudo nano /etc/default/hostapd

Modifier la ligne #DAEMON_CONF="" par DAEMON_CONF="/etc/hostapd/hostapd.conf".

sudo service hostapd start  
sudo service dnsmasq start

Partager la connexion Internet entre deux interfaces réseau[modifier]

Pour que les appareils clients puissent accéder à Internet via le point d'accès créé, il faut qu'une interface réseau soit connectée à Internet et partage sa connexion avec l'interface wlan0 (qui sert au point d'accès wifi). Pour cela, on utilise un système de traductions d'adresses; le NAT (Network Address Translation). Concrètement, lorsque le client enverra une requête vers le raspberry sur l'interface wlan0, cette dernière transmettra cette requête sur wlan1 qui l'enverra à l'adresse désignée sur Internet en utilisant sa propre adresse IP. L'appareil à cette adresse enverra sa réponse sur wlan1 qui la retransmettra sur wlan0.

sudo nano /etc/sysctl.conf

Dans ce fichier, enlever le # devant la ligne

net.ipv4.ip_forward=1
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

Installer et configurer nginx[modifier]

sudo apt-get install nginx
nano /var/www/html/index.html

Exemples de scripts python[modifier]

Variables et input[modifier]

#!/usr/bin/python
# -*- coding: utf-8 -*-
name = raw_input("merci de m'indiquer votre prénom ")
print "bonjour %s" % name
nb = int(raw_input("merci de m'indiquer un chiffre "))
if nb > 5:
    print "%d c'est quand même beaucoup %s" % (nb, name)
else:
    print "%d c'est pas grand chose %s" % (nb, name)

Import d'un fichier texte et boucle sur liste[modifier]

#!/usr/bin/python
# -*- coding: utf-8 -*-
with open("data.txt", "r") as myfile:
    data = myfile.read().replace("\n", "")
 
for i, letter in enumerate(data):
    print i, letter

Capture d'images avec la raspicam[modifier]

#!/usr/bin/python
# -*- coding: utf-8 -*-
import picamera
from time import sleep
 
camera = picamera.PiCamera()
i = 0
try:
    while True:
        camera.capture("image%s.jpg"%i)
        i+=1
        sleep(5)
except KeyboardInterrupt:
    print "goodbye!"

Le Raspberry et les ports GPIO[modifier]

Contrôler une prise Chacon DIO[modifier]

Voir le schéma des ports GPIO[modifier]

L'utilitaire gpio permet de voir le schéma des ports sur la raspberry PI, ce qui permet d'identifier les numéros des ports à utiliser, chaque pin ayant un identifiant physique, un numéro de port gpio s'il s'agit d'un port gpio et un numéro "wiring pi". Qui permet de s'y adresser lorsqu'on utilise cette bibliothèque.

gpio readall

Le résultat de la commande permet de voir que le pin physique 11 correspond au port GPIO17 et au port Wiring PI 0.

Brancher un émetteur RF433MHZ au Raspberry[modifier]

Rf433-raspberry.jpeg
Pour notre exemple, nous utilisons donc la pin physique 11, GPIO17, Wiring PI 0.

Compiler le programme C++ de contrôle de la prise[modifier]

Nous allons utiliser le programme développé par Idleman voir le post du blog, et précisément une version allégée, téléchargeable ici: [3] que nous allons compiler:

g++ -o chacon_send chacon_send.cpp -lwiringPi

On obtient le fichier exécutable "chacon_send" qui va nous permettre d'allumer et d'éteindre une prise chacon.

Configurer une prise Chacon avec le programme compilé[modifier]

Les messages envoyés aux prises doivent tous comporter un code unique, mot de passe qui permet de prendre le contrôle de la prise, un identifiant allant de 1 à 3 qui permet de choisir une prise à contrôler si plusieurs prises sont accessibles par le signal, et un message "on" ou "off". Pour définir le mot de passe et l'identifiant de la prise, il faut envoyer à la prise une commande "on" et une commande "off" directement après le branchement contenant ces informations.

sudo ./chacon_send 0 12325261 1 on
sudo ./chacon_send 0 12325261 1 off

Où 0 est le numéro du port Wiring PI, 1234561 le code de la prise que l'on définit et 1 l'identifiant de la prise.

Récupérée de « http://curlybraces.be/wiki/index.php?title=Ressources::RaspberryPi&oldid=2304 »

Dernière modification effectuée le 10 septembre 2018.