Académique Documents
Professionnel Documents
Culture Documents
- Préparation de la carte SD
Télécharger Raspbian
Première étape, télécharger le système d’exploitation Raspbian. C’est totalement gratuit !
Pour ce faire, il suffit de se rendre sur le site officiel du Raspberry Pi dans la rubrique dédiée aux
téléchargements.
Dans « image file », sélectionnez le fichier image de Raspbian que vous avez téléchargé. Dans
« device », choisissez la lettre correspondant à votre lecteur de carte SD.
Cliquez sur Write et attendez quelques instants. Le logiciel va installer Raspbian sur votre carte SD.
Un message de confirmation apparaîtra une fois l’opération terminée.
Vous pouvez retirer la carte SD du lecteur. Raspbian est installé sur votre carte !
- Démarrage et authentification :
Brancher son Raspberry Pi
Ensuite, il est nécessaire de préparer les branchements de son Raspberry Pi afin qu’il puisse fonctionner.
Il a besoin d’alimentation électrique, d’une carte SD et d’autres périphériques facultatifs : clavier, souris,
réseau…
Pour certaines versions du Raspbian il faut taper au cours du démarrage: startx pour travailler en mode
graphique
Utilisateur : pi
Password : raspberry
Configurer Raspbian
Lorsque vous arrivez ici, normalement votre ordinateur a dû démarrer et afficher l’écran de
paramétrage de Raspbian.
Enfin, si vous souhaitez retrouver l’écran de paramétrage de Raspbian, il suffit de saisir cette
commande dans un terminal :
sudo raspi-config
- Clavier
Par défaut, le clavier (keyboard layout) est configuré pour les claviers UK (anglais/américain) sur les
différentes distributions pour Pi.
Il faut donc modifier le layout utilisé par le système. Les claviers Azerty se décline en deux layouts
très proches: le layout (FR) et le Layout (BE).
Pour modifier le layout:
Dans le fichier, Remplacez le "gb" par "fr" de façon à avoir la ligne suivante:
XKBLAYOUT="fr"
Réglage de l’heure :
sudo reboot
Apt-get est un outil logiciel à utiliser en ligne de commande. Il permet d'effectuer l'installation et
la désinstallation de paquets en provenance d'un dépôt APT (serveurs qui contiennent un ensemble
de paquets).
L'option update met à jour la liste des fichiers disponibles dans les dépôts APT présents dans le
fichier de configuration /etc/apt/sources.list. L'exécuter régulièrement est une bonne pratique,
afin de maintenir à jour votre liste de paquets disponibles.
L'option upgrade met à jour tous les paquets installés sur le système vers les dernières versions
(couramment utilisé).
Code :
Compilation et exécution :
sudo ./blink
Montage : Code :
Votre Raspberry Pi doit être connecté à Internet pour installer le logiciel mais la connexion n'est pas
nécessaire pour lancer ScratchGPIO.
sudo /boot/install_scratch_gpio.sh
Cela va installer tous les logiciels supplémentaires requis et quelques exemples simples.
Vous pouvez maintenant lancer l'i cône Scratch spéciale (Scratch GPIO) de votre bureau. C'est en fait
une version normale de Scratch, elle lance juste un petit programme Python en arrière-plan pour
communiquer avec le GPIO. Si d'autres programmes Python accédant au GPI O tournent déjà,
l'ouverture de Scratch GPIO peut planter votre Pi . Pour éviter cela, ouvrez une fenêtre LX Terminal et
lancez :
Pour tester l'accès au GPIO dans Scratch, cliquez sur Fichier>Ouvrir et sélectionnez blink11 dans
/home/pi /Scratch. Une fois le programme chargé, cliquez sur le drapeau vert et votre LED devrait
clignoter : allumée 1 seconde, éteinte 2 secondes.
Maintenant changer la touche pour activer le clignotement de la LED en cliquant sur « space »
TP3: Gestion des entrées/sorties analogiques de Raspberry
Analogue input :
Le Pi n'inclus pas de convertisseur Analogique/Digital mais un convertisseur ADC externe tel que le
MCP3008 peut être utilisé avec du code Python pour faire une lecture analogique en utilisant le
protocole SPI Serial Peripheral Interface.
Voici une liste de quelques entrées analogiques qui peuvent être lue avec ce montage:
Un potentiomètre
Une Photorésistance
Un FSR (résistance sensible à la force) voir notre FSR et Flex Sensor.
Un senseur de température comme le TMP36
Montage :
Les connexions entre le MCP3008 et le Raspberry Pi sont les suivantes:
- PWM
La modulation de largeur d'impulsions (MLI ; en anglais : Pulse Width Modulation, soit PWM), est une
technique couramment utilisée pour synthétiser des signaux continus à l'aide des circuits à
fonctionnement tout ou rien, ou plus généralement à états discrets.
Remarque :
Pour raspberry il y’a deux types de PWM : Hardware PWM et Software PWM
- Hardware PWM : pin GPIO12
- Software PWM : avec programmation de n’importe quel pin à travers la bibliothèque RPi.GPIO
- Controller un moteur DC
Les ponts en H
Pour quoi l'utiliser ?
Les fonctions du pont en H sont :
fournir de forts courants aux moteurs en permettant leur contrôle par le microcontrôleur.
pouvoir inverser la tension aux bornes du moteur pour inverser le sens de rotation.
Controller un moteur pas à pas (stepper motor)
Code :
- Servo motors
Le principe
Pour commander un servomoteur, il faut lui envoyer une impulsion comprise entre 1 ms et 2 ms, répéter
cette impulsion toutes les 20 ms pour maintenir l'axe du servomoteur en position.
La position neutre du servomoteur correspond à une impulsion de 1,5 ms.
- 1ms : -90° en angle de sortie
- 1.5ms : 0° en angle de sortie
- 2ms : +90° en angle de sortie
Le déplacement angulaire total est de 180°.
Montage et code
- Exécuter plus d'un programme de contrôle au même temps
Code1 : Code2 :
Exécuter les deux programme en ajoutant le symbole & à la fin de chaque ligne
Étape 2: Ajoutez le nom et le chemin de votre script suivit de & à la fin du fichier
Exemple : Programme_1.sh
#!/bin/sh
cd home/pi/
sudo python your_python_sript.py &
exit 0
cd /
Matériel
Raspberry Pi
Un capteur de temperature et humidité DHT11
Un afficheur LCD 16x2
Un potentiomètre
Montage :
Le code
import sys
import time
import Adafruit_DHT
import Adafruit_CharLCD as LCD
# Define DHT sensor type and RPi pin connected to data pin of
the sensor.
sensor = Adafruit_DHT.DHT11
pin = 17
lcd.set_cursor(3,0)
lcd.message("hello Nejmeddine")
print "hello pi"
time.sleep(1)
while 1:
# Try to grab a sensor reading. Use the read_retry method
which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds
between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor,
pin)
- Interface RS-232 :
Les UART (Universal Asynchronous Receiver Transmitter) assurent l’émission et la réception
asynchrone.
Sur le Raspberry Pi, les niveaux sont 0v, 3.3v, TXD : Port GPIO14, RXD : Port GPIO15
Par défaut l’UART du Raspberry Pi sert de port de débug pour Linux.
Libérer l’UART du mode debug
1ère méthode:
Executer la commande sudo raspi-config et aller vers advanced options -> serial. Choisir disabled.
/dev/ttyAMA0 est maintenant un port Linux libre
2ème méthode:
Supprimer :
console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
Enregistrer et redémarrer :
sudo reboot
Test de connexion
import serial
while True:
port.write("\r\nEcrire quelque chose:")
rcv = port.read(10) # lit 10 caracteres
port.write("\r\nVous avez ecrit :" + repr(rcv))
# l’appel de la function repr() n’est pas indispensable
Raspberry Pi,
Module Bluetooth HC05
Smartphone
Application Android
led et resistance
Le programme:
import serial
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.OUT)
while True:
data = serialPort.read(1) #lire 1 octet
if (data == "0"):
GPIO.output(40, 0)
print("led eteinte\n")
if (data == "1"):
GPIO.output(40, 1)
print("led alumee\n")
Associez votre appareil au module Bluetooth HC05 et par la suite appuyer sur ON/OFF au niveau de
l'application Android. L'état de la Led branchée sur la pin 40 doit être changé.
- Utilisation du module Bluetooth intégré pour Raspberry Pi3 :
La carte Raspberry PI3 intègre un module Bluetooth intégré. Dans ce cas, HC05 ou HC06 ne sera plus
utile. On peut directement travaille avec le Bluetooth intégré.
Le programme
import bluetooth
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.OUT)
GPIO.setwarnings(False)
server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
port = 1
server_socket.bind(("", port))
server_socket.listen(1)
finally:
print("Cleaning Up!")
GPIO.cleanup()
client_socket.close()
server_socket.close()
L'application Android BlueTerm
1. Télécharger l'application Android BlueTerm et l'installer sur votre Smartphone à partir de Play
store
2. Associez votre appareil avec le Bluetooth de Raspberry
Lancer l'exécution en écrivant au niveau de l'application le caractère '1' ou '0' pour allumer ou éteindre la
Led branchée sur la pin 40 de la carte Raspberry.
TP6: Computer Vision avec Raspberry
Computer Vision
- Utilisation d’une USB webcam standard:
Tout d'abord, installez le paquet fswebcam:
Entrez la commande de fswebcam suivi par un nom de fichier, et une photo sera prise avec la webcam,
et enregistré dans le fichier spécifié:
fswebcam image.jpg
Préciser la résolution
La webcam utilisée dans cet exemple a une résolution de 1280x720. Afin de spécifier la résolution que
je veux, utilisez l'option -r:
Pas de bannière :
Modifiez motion.conf en fonction de vos besoins. Pour ma part, j'ai modifié uniquement ces lignes :
daemon on
process_id_file /home/pi/motion/motion.pid
width 640
height 480
webcam_quality 75
webcam_motion on
webcam_localhost off
sudo reboot
# motion
La mise en service de base est faite, le flux de la webcam se fait en pointant sur http://ip_du_RPi:8081
- OpenCV
(Open Computer Vision) est une bibliothèque graphique libre, spécialisée dans le traitement d'images et
vidéos, calculs matriciels et les algorithmes d’apprentissage etc.
L'installation d'OpenCV pour Python
Résultat:
import numpy as np
import cv2,cv
port=0
capture = cv2.VideoCapture(port) #read the video
#capture = cv2.VideoCapture('output3.avi') #read the video
capture.set(3,320.0) #set the size
capture.set(4,240.0) #set the size
capture.set(5,15) #set the frame rate
#define the codec and create video writer object
fourcc=cv2.cv.FOURCC(*'XVID')
out=cv2.VideoWriter('output.avi',fourcc,20.0,(320,240))
while (capture.isOpened()):
flag, frame = capture.read() #read the video in frames
if flag==True:
th_max,th_img=cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.T
HRESH_OTSU)
th_min=0.5*th_max
edge=cv2.Canny(gray,th_max,th_min)
#frame=cv2.flip(frame,0) #inverser l'image
cv2.imshow('frame_rgb',frame) #show video
cv2.imshow('grayscale',gray) #show video
cv2.imshow('filter',blur) #show video
cv2.imshow('edges',edge) #show video
out.write(frame) #save video
cv2.waitKey(1)
else:
capture.release()
out.release()
cv2.destroyAllWindows()
TP6: Raspberry et l'Internet des objet: IOT
Installation
wget http://sourceforge.net/projects/webiopi/files/WebIOPi-
0.7.0.tar.gz
tar xvzf WebIOPi-0.7.0.tar.gz
cd WebIOPi-0.7.0
sudo ./setup.sh
Démarrer/Arrêter le service :
cd /etc/webiopi/config
Première utilisation
Ouvrez un navigateur sur une machine de votre réseau, tapez l'URL http://[IP]:8000/webiopi/, ou utilisez
localhost sur votre Pi si vous avez un clavier et un écran connectés dessus. Vous serez alors invité à vous
connecter, l'utilisateur par défaut est webiopi et le mot de passe est raspberry.
Vous devriez alors accéder à la page suivante :
Une fois sur l’interface web, il vous suffit de choisir le lien d’en-tête GPIO sur la page principale:
Avec cet écran par défaut, vous pouvez modifier les fonctions du GPIO d'entrée à sortie, et changer l'état
des broches. Il suffit de cliquer sur les boutons IN/OUT, et sur chaque broche pour changer son état
lorsqu' elle est réglée en sortie.
- SERVEUR WEB
L’ordinateur Raspberry Pi est connecté en réseau par un connecteur Ethernet et/ou une liaison WIFI. Il
peut devenir un serveur WEB permettant le contrôle distant de processus ou la transmission à distance
des données à travers Internet.
Exemple1 : Commander des LED connectées sur Raspberry Pi via une page
web en utilisant le serveur web Apache
Ceci permettra de facilement administrer les sites. Pour cela, lancez les commandes suivantes :
Exemple2 : Commander une LED branchée sur le gpio4 du Raspberry Pi via une page
web en utilisant le module webpy
cd / (racine)
mkdir webpyserver (le dossier du serveur)
cd /webpyserver
mkdir templates (contiendra les pages html dont index.html
mkdir static (feuille de style CSS éventuelle)
Le dossier webpyserver contiendra le fichier Python à exécuter; le dossier webpyserver/templates
contiendra une page HTML et le dossier webpyserver/static contiendra une feuille de style au format
CSS.
Réalisation du site WEB
Dans le dossier webpyserver, créér le fichier gpio4.py
Ce programme récupère les données des GPIO et gère l’interface homme-machine de la page Web.
#!/usr/bin/env python
import web
import RPi.GPIO as GPIO
from web import form
# definit GPIO4 en sortie
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
# definit la page de nom index pour le site web
urls = (‘/’, ‘index’)
dossier_web = web.template.render(‘templates’)
app = web.application(urls, globals())
# definit les boutons a afficher
ma_forme = form.Form(
form.Button("btn", id = "btnon", value = "on", html = "On", class_ = "bouton_on"),
form.Button("btn", id = "btnoff", value = "off", html = "Off", class_ = "bouton_off")
)
# definit l action a effectuer quand la page index est appelee
class index:
# utilise quand la page est demandee
def GET(self):
forme = ma_forme()
return dossier_web.index(forme, "Raspberry Pi control GPIO4")
# utilise quand une forme web est soumise
def POST(self):
userdata = web.input()
if userdata.btn == "on":
GPIO.output(4,True) # Allume la LED
if userdata.btn == "off":
GPIO.output(4,False) # Eteind la LED
# recharge la page web
raise web.seeother(‘/’)
# programme
if __name__ == ‘__main__’:
app.run()
Dans le sous dossier templates créer le fichier index.html C’est la page html d’accueil du site Web, elle
est ici simplifiée au maximum.
<body>
<br />
<form class="form" method="post">
$:form.render()
</form>
</body>
</html>
Maintenant il suffit de lancer la commande python gpio4.py pour démarrer le serveur Web, puis à partir
d’un navigateur, taper l’adresse IP du Raspberry en utilisant le port 8080
ip : XXX.XXX.XXX.XXX :8080
; voilà le résultat
- Firebase
Firebase est une plate-forme de développement d' applications Web et mobiles développée par
Firebase en 2011, puis acquise par Google en 2014.
Firebase fournit une base de données en temps réel et un backend en tant que service. Le service
fournit aux développeurs d'applications une API qui permet aux données d'application d'être
synchronisées entre les clients et stockées sur le cloud de Firebase.
Cette base de données temps réel peut être exploitée dans le domaine de l'IOT pour lire/écrire l'état
des capteurs/actionneurs ainsi que stocker en temps réel des grandeurs physiques telles que la
température, l'humidité, la pression etc...
NB: Il faut avoir un compte Gmail pour s'inscrire et avoir un compte sur cette base.
sensor = Adafruit_DHT.DHT11
pin = 17
firebase = firebase.FirebaseApplication('https://smarthome-b93d0.firebaseio.com/', None)
while True:
else:
print('Failed to get reading. Try again!')
sys.exit(1)
Pour commander les lampes, l'utilisateur peut modifier la base en changeant le 0 par 1 et le 1 par 0 pour
chaque lampe.
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
print led1,led2,led3
GPIO.output(11,led1)
GPIO.output(12,led2)
GPIO.output(13,led3)