(modifié le 22 avril 2016 à 21:58)

Un peu plus d'un an après vous avoir présenté le Raspberry Pi B+ c'est au tour de son remplaçant.

raspberry-pi2

C'est donc le Raspberry Pi 2 (B) qui est arrivé à la maison. Et c'est le premier produit qui profite de clichés réalisés avec mon Honor 7, à vous de me dire si c'est mieux.

L'original

Si l'on trouve de nombreuses copies chinoises sur la toile rien ne vaut l'original. C'est donc un Raspberry Pi 2 à 38€ (Modèle B v1.1) distribué par Element14 via le site GearBest chez qui j'ai choisi également un boitier et quelques dissipateurs en alu pour moins de 2€ :

dissipateurs

Seuls 2 dissipateurs sont utiles.

L'avantage du Pi 2 c'est qu'il reste totalement compatible avec les accessoires du B+ que j'ai déjà, comme le boitier mais aussi la connectique. Pas de changement non plus du côté du GPIO et c'est tant mieux. Mon B+ est dans un boitier basique avec une finition un peu légère (plastique cassant). Ce qui est essentiel pour moi avec un boitier c'est qu'il laisse accessible les entrées sorties sans trop de prise de tête.

J'ai opté pour un boitier en ABS bicolor pour environ 8€, un peu au hasard. Et à la réception c'est une belle surprise ! Le design est sympa et la qualité de plastique est excellente. Mais surtout sa conception est géniale, le boitier est modulaire.

boitier-pi2

Il est possible de retirer seulement des parties du boitier. On trouve 5 parties dont une qui accueil le Raspberry qui se pose dessus. Tout est parfaitement bien aligné, des E/S jusqu'aux 2 leds. Comme sur une voiture on peut retirer le capot pour accéder aux entrailles de la framboise. Sans surprise ce boitier est estampillé element14, gage de qualité.

Connexion sans fil

Pour le connecter sans fil j'ai choisi un dongle WiFi EDUP pour 6€. Il est nativement compatible avec le Raspberry Pi car basé sur le chipset RTL8188CU(S), très proche de mon ancien dongle il supporte le WiFi N à 150 mbps.

dongle-wifi-pi2

Attention à bien configurer le mode d'alimentation sinon vous aurez des problèmes pour communiquer avec votre framboise qui passera en mode d'économie d'énergie.

Stockage

Côté stockage j'ai choisi une microSD de 32g  samsung pour 10€. Attention là où vous commandez une grande quantité de fausses cartes circulent sur le web (avec GearBest je n'ai jamais reçu de contrefaçon pour l'instant).

Pour distinguer une fausse carte d'une originale il faut utiliser H2testw. Ce logiciel gratuit va écrire sur la totalité de la carte puis vérifier l'intégrité des fichiers écrits :

H2testw

Cela m'a pris environ 1h pour une carte de 32 go. S'il y a la moindre erreur alors n'utilisez pas cette carte elle est foireuse, ce qui peut aussi arriver dans une bien moindre mesure avec des cartes originales.

Une fausse carte aura également un débit d'écriture plus proche d'une disquette que d'une carte mémoire. Ma carte Samsung encaisse 15 mo/s en lecture et 19 mo/sec en écriture, pour une classe 10 rien à redire car nous sommes au dessus de 10 mo/s.

Vérification des GPIO

Quoi de mieux qu'un montage basique avec 2 leds qui s'allument par intermittence pour vérifier que la framboise fonctionne bien.

montage-led

J'ai donc connecté sur ma breadboard deux led de couleur différente, chacune protégée d'une résistance de 100 ou 200 ohms.

Pour les fils :

  • GPIO 5 (PIN 29) : orange
  •  GPIO 6 (PIN 31) : jaune arrivent des /22 (PIN 29/31 ou BCM 5/6), puis on traverse la résistance, puis la led par l'anode (côté long = positif)  et enfin on arrive sur la masse (gnd 0v).

Attention : il ne faut pas confondre les notations wiringPi, BCM et board (PIN). La notation BCM (broadcom) correspond aux numéros de GPIO, à ne pas confondre avec la notation wiringPi. En cas de doute voir ici et ici.

Petit schéma qui va bien que j'ai crée pour l'occasion :

rpi-pinout

Voici le script python pris chez geekland :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO # bibliothèque pour utiliser les GPIO
import time # bibliothèque pour gestion du temps

GPIO.setmode(GPIO.BCM) # mode de numérotation des pins
GPIO.setup(5,GPIO.OUT) # pin réglée en sortie (output)
GPIO.setup(6,GPIO.OUT) # pin réglée en sortie (output)


while True: # boucle répétée jusqu'à l'interruption du programme
 GPIO.output(5,GPIO.HIGH) # sortie au niveau logique haut (3.3 V)
 GPIO.output(6,GPIO.LOW)  # sortie au niveau logique bas (0 V)
 time.sleep(0.1) # on ne change rien pendant 1 seconde
 GPIO.output(5,GPIO.LOW)  # sortie au niveau logique bas (0 V)
 GPIO.output(6,GPIO.HIGH) # sortie au niveau logique haut (3.3 V)
 time.sleep(0.1) # on ne change rien pendant 1 seconde

Pour l'exécution :

python led.py

Résultat : les deux leds clignotent chacune leur tour très rapidement car le GPIO envoi 3,3v puis 0v.

Le même script en bash :

#!/bin/bash
led1=21
led2=22
st=0.1

gpio mode $led1 out
gpio mode $led2 out

while true
do
 gpio write $led1 1
 gpio write $led2 0
 sleep $st
 gpio write $led1 0
 gpio write $led2 1
 sleep $st
done

A exécuter avec :

sh led.sh

Montage d'un capteur ultrason

J'ai acheté un capteur HC-SR04 pour 2€ sur amazon, vous en trouverez un peu partout à ce tarif. Ce capteur permet de connaître une distance en cm entre le capteur et une cible grâce à des ondes sonores de très haute fréquence (ultrason non perceptible par l'humain).

Dans mon cas je compte l'utiliser pour évaluer l'accumulation de la pluie dans un zone extérieure ayant une évacuation mal dimensionnée. Quand la distance réduit c'est que le niveau de l'eau monte, alors pourquoi pas enclencher une pompe via un relai. C'est encore à l'état de projet car j'hésite à utiliser des simples flotteurs (contact sec). Bref, on s'égare.

Quelques explications de la chaine "U=RI" qui l'utilise sur un arduino :

On connecte le capteur :

  • 5V (PIN 2) : Vcc
  • GPIO 5 (PIN 18) : Trigger
  • GPIO 4 (PIN 16) : Echo
  • GND (PIN 39) : Gnd

schema-hc-sr04

J'ai utilisé une résistance de 1K entre echo et le GPIO 23 et une résistance de 2K entre ce dernier point et GND. Tout est très bien expliqué chez framboise314.

Les deux résistances servent à créer un pont diviseur de tension pour abaisser la tensin de retour à 3,3v dans le Raspberry qui n'apprécierait pas du tout le 5v : 5*(2000/(1000+2000)) = 3,3v tout juste. Si vous n'avez pas de résistance 2K vous pouvez mettre deux résistances de 1K en série (j'ai une résistance 2,2K pour ma part).

Voici le résultat (ne pas tenir compte du fil jaune) :

Le script se base sur la vitesse de pénétration du son dans l'air de 340 m/s. J'ai utilisé un script python de chez ERF :

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

print "+-----------------------------------------------------------+"
print "| Mesure de distance par le capteur ultrasonore HC-SR04 |"
print "+-----------------------------------------------------------+"

Trig = 23 # Entree Trig du HC-SR04 branchee au GPIO 14
Echo = 24 # Sortie Echo du HC-SR04 branchee au GPIO 15

GPIO.setup(Trig,GPIO.OUT)
GPIO.setup(Echo,GPIO.IN)

GPIO.output(Trig, False)

repet = input("Entrez un nombre de repetitions de mesure : ")

for x in range(repet): # On prend la mesure 5 fois

 time.sleep(1) # On la prend toute les 1 seconde

 GPIO.output(Trig, True)
 time.sleep(0.00001)
 GPIO.output(Trig, False)

 while GPIO.input(Echo)==0: ## Emission de l'ultrason
 debutImpulsion = time.time()

 while GPIO.input(Echo)==1: ## Retour de l'Echo
 finImpulsion = time.time()

 distance = round((finImpulsion - debutImpulsion) * 340 * 100 / 2, 1) ## Vitesse du son = 340 m/s

 print "La distance est de : ",distance," cm"

GPIO.cleanup()

Qui donne ce résultat :

 python distance2.py
+-----------------------------------------------------------+
| Mesure de distance par le capteur ultrasonore HC-SR04 |
+-----------------------------------------------------------+
Entrez un nombre de repetitions de mesure : 5
La distance est de : 4.9 cm
La distance est de : 4.9 cm
La distance est de : 4.9 cm
La distance est de : 5.0 cm
La distance est de : 4.9 cm

et un second plus simple chez RPi-Spy :

 python distance.py

+-----------------------------------------------------------+
| Mesure de distance par le capteur ultrasonore HC-SR04 |
| blogmotion.fr - @xhark |
+-----------------------------------------------------------+
 Distance : 4.9 cm

J'avais placé un objet à 5 cm de distance à la règle.

Ce capteur n'est pas d'une précision absolue et je vous conseille plutôt de faire une moyenne de plusieurs mesures avant de déclencher une action (trigger). C'est d'ailleurs ce que confirme Yaug sur son blog, vous pouvez aussi constater une différence d'implémentation entre un code en C ou python.

Conclusion

J'espère que ce billet bricolage vous donnera envie de vous lancer chez vous. Il faut au début se documenter un peu pour comprendre comment un Raspberry fonctionne, mais les livres et tutoriels sont très nombreux sur ce sujet. D'ailleurs je vous présenterai très prochainement un livre sur ce sujet.

Il est tout à fait envisageable d'utiliser ensuite ce capteur dans Domoticz et allumer l'ampli son quand quelqu'un s'assoit dans le canapé 🙂

Merci à GearBest d'avoir confié ce test à Blogmotion

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter