Vous êtes sur la page 1sur 100

LE SEUL MAGAZINE ÉCRIT PAR ET POUR LA COMMUNAUTÉ RPI

RASPBERRY PI
Le magazine
officiel du
n°6 • janvier - février 2019

n°6
janvier - février 2019
www.magpi.fr Le magazine officiel du Raspberry Pi

ASSEMBLER UN
ORDINATEUR PORTABLE
LE MAGAZINE OFFICIEL DU RASPBERRY PI

le monde numérique devient nomade grâce au Raspberry Pi

GUIDE DE
DÉMARRAGE RAPIDE
pour le Raspberry Pi

JEU SPACE
INVADERS
programmé avec
Pygame Zero

REGARDER LA TÉLÉ SUR


UN RASPBERRY Pi
avec le HAT TV

LIAISON SANS FIL


À 433 MHZ
entre deux Raspberry Pi
Ajouter un sens
au Raspberry Pi :
magpi.fr

Entre autres : la VISION avec le


Module Caméra
Installer un jardin quaponique dans son salon
Étudier les activités des coraux au large de la Norvège L 15926 - 6 - F: 9,95 € - RD
LUX 10,55 € - CH 15,90 FS -
Redonner vie à une machine à tricoter des années 80 DOM/S 10,95 € - CAN 17 $ca

001_Cover_MPi_062018_FR.indd 1 20/12/2018 11:53


La maison d’édition Elektor International Media jouit depuis plusieurs décennies dans
le domaine de l’électronique d’une solide réputation. Celle-ci est basée sur la variété
et la qualité de nombreuses publications relatives à l’électronique et à la micro-
informatique.
Pour développer sa présence dans les pays francophones, les magazines Elektor
et MagPi souhaitent renforcer en France leur équipe de marketing et de forces de
vente, et recherchent activement :

leur cheville ouvrière commerciale dynamique et ambitieuse


Serez-vous le maillon essentiel entre Elektor/MagPi
et sa maison-mère sur le marché français ?

Missions Profil recherché


> Définition, élaboration et mise en pratique > Solide formation de niveau supérieur
d’une stratégie commerciale adaptée au
> Connaissance des médias et des réseaux de
marché francophone
communication de l’électronique
> Vente d’espace publicitaire (papier & en et de la micro-informatique francophones ;
ligne) pour les magazines ELEKTOR et MagPi savoir identifier leurs besoins
> Prospection et fidélisation de clients > Expérience dans la vente de services et le
(notamment sur les salons professionnels) développement commercial
> Recherche avec les annonceurs et leurs > Goût et sens du commerce, à l’aise avec les
agences de solutions inédites pour répondre chiffres
à l’évolution rapide des marchés
> Parler français et anglais, et peut-être
> Recherche de collaborateurs pour l’allemand et ou le néerlandais.
démultiplier votre activité
> Et surtout :
> Veille concurrentielle et recherche de
• Ne pas craindre de sortir des sentiers
modalités novatrices en collaboration avec la
battus pour imaginer et proposer des
rédaction et les équipes internationales
solutions inédites
• Aimer les défis et faire preuve d’imagination
et pugnacité au sein d’une entreprise pas
comme les autres.

Contact : redaction@elektor.fr

002_MagPi06_JobOffer_FR.indd 28 20/12/2018 11:54


BIENVENUE

BIENVENUE
Le MagPi fait peau neuve !

S i vous êtes un lecteur régulier du MagPi, vous aurez remarqué


que votre magazine change d’habits. Sur la forme, la taille du
magazine change, les photos sont plus grandes, la mise en
Mariline

RÉDACTRICE EN CHEF
page est plus aérée. Sur le fond, le magazine se concentre sur Thiebaut-Brodier
du concret : les projets, les tutoriels et les bancs d’essai.
Rédactrice en
Ces dernières semaines, nous avons fait beaucoup de rencontres : chef des versions
françaises des
Eben Upton au salon electronica de Munich (invité de marque sur magazines Elektor
et MagPi, elle est
le stand du magazine Elektor, grand frère du MagPi) ou encore
tombée il y a bien
Dale Dougherty à la Maker Faire de Paris. Ces salons nous ont longtemps dans
la marmite de
également permis de côtoyer nos lecteurs. Merci à tous pour vos l’électronique et de
l’informatique. Tou-
encouragements et vos observations judicieuses. tefois quand elle
en sort, elle expéri-
Dans ce numéro, vous découvrirez un nouveau membre de la mente toutes sortes
famille Raspberry Pi : le Raspberry Pi 3A+, une version plus petite et de loisirs créatifs
comme la broderie
moins chère que le 3B+. Si l’un de vos projets peut se contenter d’un à la machine élec-
tronique.
seul port USB et d’une connexion au réseau uniquement sans fil (­­Wi-
magpi.fr
Fi ou Bluetooth), alors un Raspberry Pi 3A+ suffira. Nous reviendrons
plus longuement sur cette nouvelle carte dans le prochain numéro.
En attendant, vous pouvez vous lancer dans l’assemblage d’un
ordinateur portable animé par un Raspberry Pi. Nous détaillons
plusieurs pistes de réalisation dans le premier article de la catégorie
« Coup de projecteur ». Le second article de cette catégorie vous
explique comment tirer le meilleur parti du module caméra. L’un des
tutoriels intéressera tout particulièrement les débutants, il s’agit du
« Guide de démarrage rapide du Raspberry Pi ».
Les projets de ce numéro sont comme à l’accoutumée divers et
variés. Ce sont de véritables sources d’inspiration ! Bonne lecture.

Mariline Thiebaut-Brodier rédactrice en chef

magpi.fr 03

003_MagPi06_Welcome_FR.indd 3 20/12/2018 11:55


SOMMAIRE

Sommaire
> n°6 > janvier-février 2019

Coup de projecteur

14 Assembler un
ordinateur portable 14

Actualités

06 Entretien avec Eben Upton


08 Petit tour à la Maker Faire
Paris 2018
11 Raspbian mis à jour
12 À la rencontre du Raspberry Pi 3A+

Projets

24 Jardin domestique aquaponique


28 PiCam Marine
30 Robot Friller PiCam Marine 28
32 Babyfoot
42
34 Pierre-feuille-ciseaux
36 Borne d’arcade 4D : Can’t Drive This
40 Imprimante à tricoter en réseau

Divers

02 Offre d’emploi
Pygame Zero : 4e partie – Invaders (I)
92 Raspberry Pi @Elektor

04 magpi.fr

004-005_MagPi06_contents_FR.indd 4 20/12/2018 12:41


SOMMAIRE

74 Tutoriels

42 Pygame Zero : 4e partie –


Invaders (I)
50 Pygame Zero : 5e partie –
Invaders (I) (II)
58 Détecteur de pluie -
Sauve qui pleut !
Regarder la télé en direct sur un RPi avec le HAT TV
62 Méli-mélo de projets Minecraft
en langage Wolfram
76 68 Guide de démarrage rapide
du Raspberry Pi
74 Regarder la télé en direct
sur un RPi avec le HAT TV
76 Construire un dispositif de
communication radio secret

Coup de projecteur
80 La vision en plus grâce
au module Camera

Construire un dispositif de
communication radio secret

Bancs d’essai
94 96
94 Picade
96 Cube:Bit
98 DAC+ DSP

Community

88 Interview de Dave Honess


90 Interview de Becky Stern
99 Autres trouvailles
Picade Cube:Bit intéressantes

magpi.fr 05

004-005_MagPi06_contents_FR.indd 5 20/12/2018 12:41


ACTUALITÉS

Entretien avec
Eben Upton
Eben Upton, cofondateur de la Fondation Rasp-
berry Pi, était présent au salon electronica de Mu-
nich (nov. 2018). Jan Buiting, un des rédacteurs
en chef d’Elektor (magazine d’électronique, grand
frère du MagPi), en a pro�ité pour s’entretenir avec
lui et nous vous résumons la discussion ci-après.

E
ben Upton a parlé du succès du Raspberry Pi matisation d’un processus industriel. En général,
dans le milieu industriel, de l’écosystème c’est l’inverse qui se passe dans l’industrie, les
ARM, de l’accroissement de la mémoire vive et décideurs se contentant de dire « c’est ce produit
des interfaces plus rapides, ainsi que des possibilités qu’il faut utiliser ». Ils ne sont pas familiers du
de réduire la consommation du nano-ordinateur. Raspberry Pi, mais ceux qui vont devoir réaliser le
projet le connaissent eux très bien. Ils vont donc
Le succès du Raspberry Pi est dû à des tout naturellement en promouvoir l’utilisation
amateurs inventifs et créatifs. Nous sommes auprès de leurs supérieurs.
ici dans un salon professionnel ; comment le
Raspberry Pi s’est-il retrouvé dans ce milieu ? Le Raspberry Pi est d’un abord très facile. Cela a
des avantages indéniables, mais est-ce aussi un
Il y a six ans, lorsque nous avons atteint le premier inconvénient en milieu industriel ?
million de cartes vendues, les acheteurs étaient es-
sentiellement des amateurs d’informatique, mais Oui, bien sûr ! Au début nous avons dû nous battre
pas n’importe lesquels ! C’étaient des ingénieurs pour l’image de l’appareil. C’était vraiment diffi-
qui expérimentaient chez eux, et ils ont réalisé que cile d’expliquer que le « jouet » que nous avions
le Raspberry Pi était une plateforme stable et d’un mis sur le marché était en fait bien plus fiable que
excellent rapport qualité-prix. Par la suite, lorsque bon nombre d’appareils certifiés aptes à une mise
leur patron leur a demandé de résoudre un pro- en œuvre en milieu industriel.
blème, ils se sont tout naturellement tournés vers Le fait que nous nous soyons concentrés sur des
quelque chose qu’ils savaient être fiable, comme projets éducatifs a aussi contribué au succès indus-
le Raspberry Pi. Le même phénomène s’était déjà triel du Raspberry Pi. Les enfants comptent parmi les
produit avec l’Arduino auparavant. utilisateurs les plus exigeants, et si vous pouvez ré-
aliser un appareil qui survit à une chambre d’enfant,
alors il convient certainement pour l’industrie.
Parlez-nous des concombres.
Un cofondateur de la Fondation Raspberry Pi,
C’est un de mes exemples favoris de l’emploi du Robert Mullins, a lancé le projet LowRISC, un
Raspberry Pi dans l’industrie. Les parents d’un in- système sur puce basé sur RISCV, l’architecture
génieur japonais cultivaient des concombres dans de processeur RISC à 64 bits libre. Y a-t-il un
leur ferme, et il a conçu une machine – sur la base projet similaire d’utilisation d’une architecture
du Raspberry Pi et de Google TensorFlow – pour les libre pour le Raspberry Pi ?
trier en fonction de leur taille.
Ceci illustre parfaitement l’utilisation du Rasp- Non, nous sommes des utilisateurs très satisfaits
berry Pi dans une approche ascendante de l’auto- de l’architecture ARM, dont l’écosystème est très

06 magpi.fr Entretien avec Eben Upton

006-007_MagPi06_Interview wit Eben Upton_FR.indd 6 20/12/2018 12:42


ACTUALITÉS

étendu et animé. Le cœur Cortex-A53 – mis au plateforme, et c’est une excellente opportunité
point à Cambridge – est fantastique, et il y a fort à pour rechercher un microcontrôleur qui nous per-
parier qu’on verra encore longtemps des proces- mette de réaliser certains des souhaits, comme
seurs ARM dans les Raspberry Pi. plus de RAM et une interface plus rapide.

Le MagPi a une liste de souhaits pour le


Raspberry Pi : plus de mémoire vive, des bus
L es enfants comptent parmi
USB 3.0 et SATA. Ces fonctionnalités verront- les utilisateurs les plus
elles le jour ?
exigeants.
Ce sont des souhaits qui reviennent avec chaque
nouveau modèle et nous en sommes bien Ces dernières années, les modèles de
conscients : plus de mémoire, plus rapide, plus Raspberry Pi sont non seulement devenus plus
puissant. Il y a quelques mois nous avons enfin puissants, mais ils sont aussi plus gourmands
terminé la mise au point de quelques nouveaux en énergie. Quid de la basse consommation
produits, et nous allons pouvoir examiner ces listes
de souhaits et voir ce qui est réalisable. L’accrois- Nous n’avons pas de plan particulier en ce qui con-
sement de la taille de la mémoire vive et une in- cerne la très faible consommation, de l’ordre de
terface plus rapide sont effectivement en tête des quelques milliwatts. Les aspects thermiques ont
listes, et nous devrons réfléchir au microcontrôleur été particulièrement bien étudiés sur le Raspber-
qui permettra d’implémenter ces fonctionnalités. ry Pi 3 modèle B+, et il peut tourner plus longtemps
à capacité maximale sans risque de surchauffe. La
Pensez-vous à une nouvelle plateforme, ou à solution pour diminuer la consommation est en
des coprocesseurs pour ces fonctions ? fait de diminuer la fréquence d’horloge : à 600, 300
et même 100 MHz, on a encore une puissance de
La révision de la plateforme est de toute manière traitement non négligeable !
à l’ordre du jour. Les Raspberry Pi sont réalisés (VF : Jean-Louis Mehren)
en procédé 40 nm, et la limite de ce procédé – le
nombre de transistors sur une puce – a été at-
teinte avec le 3 B+. On ne peut donc pas ajouter
des fonctions au microcontrôleur ; quant à utiliser
des coprocesseurs pour les nouvelles fonctions,
cela augmenterait le coût de la carte. Quoi que
nous fassions, il nous faudra donc une nouvelle

Entretien avec Eben Upton magpi.fr 07

006-007_MagPi06_Interview wit Eben Upton_FR.indd 7 20/12/2018 12:42


ACTUALITÉS

Petit tour à la
Maker Faire
Paris 2018
La 5e édition de la Maker Faire Paris s’est déroulée du 23 au
25 novembre 2018 à la Cité des Sciences et de l’Industrie.
Nous avons passé trois jours intenses dans une ambiance
chaleureuse. Nous en rapportons quelques images.
Merci à tous les lecteurs qui nous ont rendu visite !

« Nous ne sommes pas seuls »


La Maker Faire Paris accueillait un invité de marque :
Dale Dougherty. C’est le PDG de Maker Media, la société
américaine qui édite le magazine Make: et produit les
Maker Faire. Lors de sa conférence de clôture de ces trois
jours de fête, il a expliqué que tous les makers qu’il a ren-
contrés à travers le monde ont des points communs : ils
ont cherché ou cherchent encore à résoudre un problème
et ils osent ! Il a rappelé que le plus important c’est de
faire (peu importe comment), de tester, de se tromper…
Il a toutefois noté une différence entre les makers fran-
çais et les Américains : les Français présentent des pro-
jets plus beaux, mieux finis, alors que les Américains ne
se concentrent que sur la fonction de l’objet.
Pour lui, les événements Maker Faire sont un point
d’entrée dans la communauté des makers, il souhaite
que le mouvement soit inclusif. Les visiteurs novices en
bricolage découvrent les projets mais sont également
encouragés à apprendre grâce aux nombreux ateliers
proposés. Il prône bien évidemment le partage des
expériences. Il propose par exemple qu’à chaque fois Big Face
qu’on répare un objet (au lieu de le jeter), on publie en
ligne un tutoriel sur ce que l’on a fait. On peut appliquer
le même principe lorsqu’on détourne un objet de sa
>>https://backnumber.dailyportalz.jp/bigface/
howtomakebox.htm
fonction initiale. Vous n’êtes pas seuls, partagez !
Crédit photo : Quentin Chevrier

Il est possible de s’amuser sans électronique, ni code. Le projet


japonais Big face a eu un grand succès. Tout le monde s’est
arrêté sur ce stand pour être pris en photo après avoir enfilé sa
tête dans cette étrange boîte. Ce projet avait aussi l’avantage
de s’affranchir de la barrière de la langue. Tout le monde
comprend immédiatement de quoi il retourne.
Pour réaliser votre boîte, procurez-vous une lentille de
Fresnel (focale d’au moins 500 mm), un ruban de LED, une
batterie et un carton. Les explications (en anglais) se trouvent
en bas de la page mentionnée ci-dessus.

08 magpi.fr Petit tour à la Maker Faire Paris 2018

008-010_MagPi06_Maker-Faire Paris_FR Folder.indd 8 20/12/2018 12:44


ACTUALITÉS

ee Fablab Descartes,
Champs-sur-Marne

Mini-bornes d’arcade (77).

>>Site : www. avons trouvé le plus de projets


fablab-descartes.com
animés par un Raspberry Pi.
Un type de montage avait vrai-
Une Maker Faire réunit des ment la cote : les mini-bornes
bricoleurs de tout poil : cou- d’arcade. Il y en avait partout !
turiers, pâtissiers, forgerons, Les jeux d’antan ont eu autant
menuisiers… mais aussi des de succès auprès des petits que
informaticiens et des élec- des grands (nostalgiques d’une
troniciens. Bien évidemment époque). Voici quelques mises
c’est parmi eux que nous en boîte.

Le fablab Moebius
>>Site : www.
fablab-moebius.org

Le fablab Moebius, Barbizon


(77), partage tous les éléments
nécessaires pour réaliser sa
console rétro compacte (bar-
top). Vous trouverez sur GitHub
les schémas d’assemblage, les
fichiers d’impression 3D… :
github.com/FablabMoebius/
Bartop-project

Flex Arcade
>>flex-arcade.fr

Flex Arcade conçoit et fabrique


des machines pour redonner vie
aux plus grands classiques du jeu
vidéo (Sonic, Mario kart, Metal
Slug, Street Fighter, Mortal com-
bat…).

ee La Fabrique Numérique,
Gonesse (95), co-dev.org.

Petit tour à la Maker Faire Paris 2018 magpi.fr 09

008-010_MagPi06_Maker-Faire Paris_FR Folder.indd 9 20/12/2018 12:44


ACTUALITÉS

Crédit photo : Quentin Chevrier


Radioscope

>>Site : www.lesradioscopes.com

Coup de cœur pour Les Radioscopes, à savoir des


mises en scène musicales et animées réalisées par
Eric PERGAMENT dans de vieilles radios TSF. Si vous
n’avez pas eu la chance de découvrir son stand, allez
voir les vidéos sur son site.

Crédit photo : Quentin Chevrier

Light Painting
>>Site : www.lflp.fr

Comme tous les exposants de la Maker


Faire, nous avons participé à la séance de
light painting. Une première pour l’équipe du
MagPi ! Tous les participants placés dans les
lettres de PARIS ont allumé la torche de leur
téléphone et ont dessiné des « 8 » pen-
dant une minute en direction d’un appareil
photo placé au-dessus du parvis. Pendant
ce temps, les organisateurs déplaçaient des
bâtons lumineux rouges dans le bonhomme
« maker ». La lumière et ses mouvements
deviennent la matière première de la photo.

Make Coeur

>>Site : makecoeur.org

Le groupe Facebook Make Cœur animé par Marcel


Friboulet met à disposition des fichiers d’impression
en 3D de porte-clés et de jetons de caddies. Les
utilisateurs d’imprimantes 3D sont invités à imprimer
ces objets avec leurs restes de filament et à les envoyer
au groupe. Les objets récoltés sont ensuite vendus par
des associations (Téléthon…) pour récolter des fonds.

10 magpi.fr Petit tour à la Maker Faire Paris 2018

008-010_MagPi06_Maker-Faire Paris_FR Folder.indd 10 21/12/2018 08:48


ACTUALITÉS

RASPBIAN MIS À JOUR


La nouvelle mise à jour de l’OS du Raspberry Pi comprend VLC et Thonny version 3.
Lucy Hattersley nous en dit plus.

L
a Fondation Raspberry Pi a sorti la mise à jour
de Raspbian en même temps qu’elle lançait le
nouvel ordinateur RPi 3A+. Cette mise à jour
(13/11/2018) offre des nouvelles fonctions majeures,
ainsi qu’une foule de mises au point sous le capot.
Une nouvelle version du lecteur multimédia VLC,
accélérée par le matériel permet la lecture multi-
média sur le Raspberry Pi. C’était une « omission
flagrante » selon Simon Long, l’ingénieur logiciel
responsable de Raspbian chez Raspberry Pi.
 Grâce à une version du lecteur multimédia VLC accélérée par
« Windows propose Windows Media Player, le matériel, la lecture multimédia sur Raspberry Pi gagne en
puissance.

De nouvelles fonctions majeures, et une de VideoCore pour accélérer la lecture des vidéos
H.264, MPEG-2 et VC-1 ». Le logiciel est gratuit,
foule de réglages sous le capot. mais les utilisateurs doivent acheter des licences
additionnelles pour lire les vidéos MPEG et VC-1.
macOS QuickTime Player et iTunes, alors que nous Thonny, l’EDI (Environnement de Développe-
avions un trou béant où aurait dû se trouver quelque ment Intégré) Python standard inclus avec Rasp-
chose de similaire pour Raspbian », écrit Simon sur bian, a été mis à jour, c’est maintenant la version 3
le blog de Raspberry Pi (magpi.cc/bavZxx). (thonny.org). Cette nouvelle mouture amène des
VLC est un logiciel puissant qui peut lire (ou dif- fonctions attendues comme les points d’arrêts et
fuser) pratiquement n’importe quel fichier audio ou un assistant d’analyse de code.
vidéo. « Il utilise des codecs logiciels pour beaucoup
de formats », selon Simon, et « le moteur vidéo Logiciels recommandés
Cette fois-ci, Raspberry Pi a choisi de créer trois
images de l’OS : Raspbian Stretch avec Desktop et
Recommended Software (alias « Raspbian Full »),
Raspbian Stretch avec Desktop, et Raspbian Stretch
Lite (qui ne comporte pas l’interface de bureau).
Raspbian Full comprend en plus des programmes
familiers tels que LibreOffice, Scratch, Sonic Pi,
Thonny et Mathematica. NOOBS proposera Rasp-
bian Full comme installation par défaut. Jetez un
coup d’œil à l’article « Guide de démarrage rapide
du Raspberry Pi » (plus loin dans ce numéro) pour
la configuration d’un Raspberry Pi avec NOOBS.
Les deux images sont disponibles au téléchar-
gement depuis le site web de Raspberry Pi (rpf.io/
downloads).
Pour mettre à jour une image Raspbian existante,
ouvrez une fenêtre de Terminal et entrez :

sudo apt-get update


 La version 3 de Thonny introduit les sudo apt-get dist-upgrade
points d’arrêt et un assistant d’analyse
de code pour vous aider à déboguer
sudo apt-get install vlc
vos programmes.
(VF : Denis Lafourcade)

RASPBIAN MIS À JOUR magpi.fr 11

011_MagPi06_Raspbian-NEWS_FR.indd 11 20/12/2018 12:45


LE MONDE DU RPI

À la rencontre du Raspberry Pi 3A+


Le 3A+, un condensé de fonctions dans un format compact

SPÉCIFICATIONS

SoC :
Broadcom ‚ Connexion de périphériques
BCM2837B0 en un clin d’œil grâce à des
ports ‘écran’ (DSI) et ‘caméra’
quadri-cœur A54
(CSI) aux formats standard.
(ARMv8) 64 bits
fréq. 1,4 GHz

GPU :
Broadcom
VideoCore IV

RÉSEAU :  La radio, développée à


2,4 GHz et 5 GHz l’origine pour le 3B+, fait
du 3A+ le premier modèle A
802.11b/g/n/ac avec connexion au réseau
LAN sans-fil embarquée.

RAM :
512 Mo LPDDR2
SDRAM

BLUETOOTH :
Bluetooth 4.2,
Bluetooth Low e Le 3A+ profite du même
Energy (BLE) circuit de gestion
intelligente de l’énergie
(PMIC) que le 3B+.

GPIO :
connecteur GPIO
à 40 broches,
installé

STOCKAGE :

Guide de
micro-SD

PORTS : démarrage rapide


HDMI, 3,5 mm
jack analogique Le Raspberry Pi 3A+ est directement compatible avec
audio-vidéo, le 3B+ et tous les autres modèles de RPi. Si vous avez
1× USB 2.0, déjà une alimentation et une carte micro-SD avec
Camera Serial
une version récente de Raspbian installée (récupérez
Interface (CSI),
Display Serial la dernière image sur rpf.io/downloads), vous êtes  À la différence de la
Interface (DSI) prêts à y aller. Si le 3A+ est votre premier Raspberry famille Zero, le 3A+
comporte des sorties
Pi, lisez l’article « Guide de démarrage rapide du HDMI ainsi qu’audio-vidéo
DIMENSIONS : Raspberry Pi » (plus loin dans ce numéro). analogiques aux formats
67×56×11,5 mm standard.
(VF : Denis Lafourcade)

12 magpi.fr Raspberry Pi 3A+

012-013_MagPi06_Raspberry Pi 3A+_FR.indd 12 20/12/2018 12:47


LE MONDE DU RPI

ee Le 3A+ est animé par le


même système sur puce
(SoC) que le 3B+, sans
perte de performance.

ff La principale différence
avec le 3B+ : la
réduction du nombre de
ports USB 2.0, un seul au
lieu de quatre.

Raspberry Pi 3A+ magpi.fr 13

012-013_MagPi06_Raspberry Pi 3A+_FR.indd 13 20/12/2018 12:47


COUP DE PROJECTEUR

14 magpi.fr Assembler un ordinateur portable

014-023_MagPi06_COVER-FEATURE_FR.indd 14 20/12/2018 12:49


COUP DE PROJECTEUR

ASSEMBLER UN
ORDINATEUR
PORTABLE
Le monde numérique devient nomade grâce au Raspberry Pi.

D
La taille et la relative puissance du
Raspberry Pi lui permettent d’être à la
fois un bon ordinateur de bureau et un
ordinateur que vous pouvez glisser dans votre
poche (si vous y tenez).
Emporter votre Raspberry Pi lorsque vous
sortez est une chose ; le connecter à un
moniteur et un clavier en est une autre. Et si
vous pouviez facilement transporter le tout, à
savoir le RPi flanqué d’un écran et d’un clavier ?
Ce serait un ordinateur portable RPi.
Il y a de nombreuses façons de créer un
ordinateur portable Raspberry Pi, comme le
construire soi-même, recycler du matériel,
ou même simplement acheter un ordinateur
portable à base de RPi. Si l’idée vous intéresse,
mais que vous ne savez pas quoi choisir, vous
découvrirez dans les pages qui suivent les
tenants et aboutissants de toutes ces options.
En route pour la portabilité.

Assembler un ordinateur portable magpi.fr 15

014-023_MagPi06_COVER-FEATURE_FR.indd 15 20/12/2018 12:49


COUP DE PROJECTEUR

RÉALISER SON PROPRE ORDINATEUR PORTABLE

RASPBERRY PI
Il ne faut que très peu de composants pour créer un
Raspberry Pi à emporter partout.

S
ouvent, l’une des premières choses que
Ingrédients les gens remarquent en découvrant un
Raspberry Pi c’est sa taille, encore plus avec
> Écran tactile PiTFT le RPi Zero. Pourtant, malgré leur format réduit, les
3.5 adafru.it/eno cartes RPi peuvent être étonnamment complexes
> Clavier miniature Riii à convertir en un ordinateur portable exploitable,
magpi.cc/DVuEib principalement à cause de leur construction
> Chargeur Power- robuste et de leurs connecteurs. Nous allons
Boost 1000C surmonter ici certains des obstacles avec quelques
adafru.it/2465 astuces de conception pour créer un ordinateur
> Batterie LiPo portable utile.
de 2000 mAh/3,7 V
magpi.cc/tLqhTH Impression du boîtier
> Mini haut-parleur
01 Cette réalisation se base sur un projet
métallique d’Adafruit, qui fournit des fichiers d’impression
adafru.it/1890 en 3D pour le boîtier, téléchargeables depuis
> > Amplificateur magpi.cc/fYoDzm. Thingiverse peut les imprimer
PAM8302 pour vous, mais si vous avez une imprimante 3D
adafru.it/2130 sous la main, allez-y. Comptez environ huit heures
Préparation de l’écran PiTFT
> Imprimante 3D
(ou recours à un
d’impression pour toutes les pièces.
Ne vous occupez pas tout de suite de
02 Le PiTFT permet l’accès à nombre de
service) l’assemblage du boîtier, mais vérifiez tout. Veillez à broches GPIO du Raspberry Pi. Nous pouvons nous
> Interrupteur SPDT ce que les charnières se fixent comme des Legos® en servir pour fournir l’alimentation à notre RPi.
sur le boîtier et s’emboîtent facilement. Pliez toutes les broches de liaison au bord du PiTFT
> Vis (4-40 et 2-56)
et fils aussi à plat que possible, ou coupez-les, mais pas
jusqu’en bas. Connectez des cavaliers ou soudez
des fils sur les broches 2 (5 V) et 6 (GND). Laissez
beaucoup de longueur.

Montage de la batterie
03 Entourez la batterie avec du ruban adhésif
pour la protéger, puis placez-la à côté du RPi,
avec les fils à l’opposé des ports USB et Ethernet.
Branchez maintenant l’écran PiTFT sur le
connecteur GPIO du RPi. Vous devriez obtenir un
« sandwich » avec les fils de la batterie qui sortent
de l’assemblage. Veillez à ce que la batterie soit
bien isolée des composants du RPi.

16 magpi.fr Assembler un ordinateur portable

014-023_MagPi06_COVER-FEATURE_FR.indd 16 20/12/2018 12:49


COUP DE PROJECTEUR

Le dessin du boîtier s’inspire


de la gamme Libretto de
Toshiba, à la mode dans les
années 1990.

Accès à l’USB et l’Ethernet.

Clavier sans-fil veut


dire « pas de fil » !

ƒ Figure 1 Pas de circuiterie


compliquée à assembler
ici, juste les lignes
d’alimentation entre les
divers composants.

Installation des câbles et


04 montage du haut-parleur
Avant d’insérer l’assemblage dans le boîtier impri-
mé, passez deux fils (un pour le plus, l’autre pour
Crédit image : Adafruit

le moins) entre le RPi et le PiTFT. Ne vous inquiétez


pas pour la longueur : à ce stade, il vaut mieux en
avoir trop. Il faudra peut-être rallonger les câbles
du haut-parleur pour atteindre l’amplificateur à
l’autre extrémité du boîtier. Une fois que vous êtes
satisfait, enfoncez (délicatement !) le haut-parleur
dans son logement du boîtier et vissez le PiTFT et le
Raspberry Pi sur les quatre colonnettes autour de la té, en suivant le schéma du circuit (figure 1), soudez
découpe pour l’écran. la même paire sur les lignes ground et 5 V du char-
geur PowerBoost, en les raccourcissant si besoin.
Connectez ensuite les fils du haut-parleur à la
Branchement du son
05 Soudez les deux fils que vous avez passés au
sortie de l’amplificateur. Il faudra peut-être les
rallonger. Soudez enfin très soigneusement deux
travers du « sandwich » RPi sur les plots Vin (plus) fils depuis les lignes A+ et A- de l’amplificateur sur
et Gnd (moins) de l’amplificateur. À l’autre extrémi- la carte RPi, comme indiqué sur la figure 1.

Assembler un ordinateur portable magpi.fr 17

014-023_MagPi06_COVER-FEATURE_FR.indd 17 20/12/2018 12:49


COUP DE PROJECTEUR

Logiciel
07 Avant de poursuivre, préparez votre
système d’exploitation. Par défaut, Raspbian ne
dialogue pas avec l’écran PiTFT, alors connectez un
écran, un clavier et une souris, préparez votre carte
micro-SD avec la dernière version de Raspbian
et avec les commandes de Terminal listées dans
magpi.cc/XaeUem, installez le logiciel nécessaire
au pilotage de l’écran. Il faudra faire pivoter
l’écran de 270° et inverser la sortie HDMI. Après
redémarrage, votre PiTFT va prendre vie.

Assemblage du corps
08 principal
Fixez soigneusement l’amplificateur avec quatre
vis 4-40. Placez le fond du boîtier à côté du corps
principal et vissez-y le Powerboost. Branchez la
batterie (puis arrêtez si tout s’éveille). Insérez un
adaptateur Wi-Fi (si nécessaire) et le récepteur
USB pour le clavier. Rangez tous les fils avec soin,
en faisant attention aux courts-circuits. Enfoncez
cc L’alimentation du Alimentation
Raspberry Pi est fournie
par l’écran PiTFT. Repliez
06 Le chargeur Powerboost alimentera tout le
l’interrupteur dans les clips fournis. Placez
maintenant le fond sur le corps principal et vissez-
ou coupez les broches. système à partir de la batterie dont il gèrera aussi le avec des vis à métaux 2-56.
Puis soudez des fils
sur 5 V et GND. la charge. Comme nous allons alimenter le RPi via
l’écran PiTFT, connectez les fils que nous avons
soudés dessus plus tôt sur le Powerboost, comme
montré sur la figure 1, après les avoir raccourcis à
la mesure.
VOULEZ-VOUS UN
Soudez deux autres fils sur EN et GND sur
le Powerboost. Ils servent à la connexion de
ORDINATEUR DE POCHE ?
l’interrupteur SPDT. Amenez les fils à travers la
dd Connectez le PiTFT et le découpe pour l’interrupteur, soudez-en un sur le Il y a bien d’autres options pour construire un
Raspberry Pi ensemble
avec la batterie au milieu. picot central et l’autre sur un des côtés. ordinateur portable Raspberry Pi. Des sites tels
que Thingiverse disposent des plans pour des
assemblages plus grands, beaucoup avec l’écran
tactile officiel de 23 cm. Les possibilités varient,
aussi faites le tour et prenez celui qui correspond
parfaitement à votre besoin. Si vous voulez encore
plus petit que ce projet, le RPi2 Nano (magpi.
cc/TUULny) est tellement miniaturisé qu’il tient
confortablement dans la paume de votre main.

18 magpi.fr Assembler un ordinateur portable

014-023_MagPi06_COVER-FEATURE_FR.indd 18 20/12/2018 12:49


COUP DE PROJECTEUR

ALTERNATIVES PRÊTES À
L’EMPLOI

Si la construction de votre propre ordinateur portable


Montage final c
09
Le RPi, la batterie
Raspberry Pi ne vous séduit pas, mais que l’idée
et l’écran sont en
Il est temps de tout terminer. Enfoncez le place. Vérifiez que les d’un petit ordinateur portable à emporter partout
clavier dans le support imprimé. Après avoir vérifié composants restants vous tente, il y a deux acteurs clés sur le marché qui
sont connectés comme peuvent vous fournir un ordinateur portable (presque)
que tout s’ajuste et confirmé l’orientation, collez l’indique le schéma (fig. 1),
puis fixez-les au boîtier. complet. Pi-top est un acteur reconnu et la seconde
les charnières au corps et au support de clavier, puis version de son ordinateur portable est remarquable,
laissez sécher. Enfilez les charnières ensemble, puis élégante et pratique, avec 6 à 8 h d’autonomie sur
fixez-les avec des longues vis à métaux. batterie.
Même si ce n’est pas vraiment un ordinateur portable,
Vérifiez toutes les liaisons. Allumez le clavier,
le kit Kano Computer est remarquablement portable
basculez l’interrupteur d’alimentation et après et facile à construire pour les petites mains. Tout ce
quelques secondes l’écran devrait s’éveiller à la vie. dont vous avez besoin est fourni et assemblé dans
Félicitations, vous avez un Raspberry Pi portable le boîtier de l’écran, qui comporte une batterie, ne
rechargeable. laissant apparaître que le clavier (avec pavé tactile
intégré).

Utilisation de votre
10 ordinateur portable RPi
Bien que l’écran soit magnifique pour jouer, nous KANO
ne vous conseillons pas d’y écrire votre prochain kano.me
Prix à partir de 200 €
grand roman. Cela dit, la résolution de l’écran le
rend confortable pour un peu de navigation sur le
web ou l’utilisation du Terminal. Le bonus de l’au-
dio en fait aussi une bonne petite radio.
Vous pouvez alimenter le système via le connec-
teur habituel du RPi, mais cela ne chargera pas la bat-
terie. À la place, connectez-vous au port micro-USB
à la base de l’unité principale. N’oubliez pas que vous
devrez aussi maintenir la charge du clavier.
Si vous trouvez que le Raspberry Pi ne s’éteint
PI-TOP
pas comme il faut, ne vous inquiétez pas. L’écran www.elektor.fr/
n’est pas rafraîchi correctement au moment pi-top-v2
de l’arrêt et semble se figer. Attendez quelques Prix à partir de 300 €
secondes puis éteignez.

Assembler un ordinateur portable magpi.fr 19

014-023_MagPi06_COVER-FEATURE_FR.indd 19 20/12/2018 12:49


COUP DE PROJECTEUR

RECYCLER DE VIEUX
ORDINATEURS
PORTABLES
Il faut un peu d’assemblage, L’ORDINATEUR PORTABLE
mais on y arrive. PI-TEENSY
magpi.cc/PsLXkR

H
Vous avez un vieux machin de l’Âge de Frank Adams n’admettait pas non comme réponse.
Pierre qui traîne par-là ? Vous ne pouvez Sa solution a été de se tourner vers les générations
pas vous résoudre à le voir partir à la dé- précédentes d’ordinateurs portables, une époque
charge ? Vous vous demandez peut-être si vous où les profils étaient beaucoup plus massifs que les
pouvez le ressusciter avec un Raspberry Pi ? Après actuelles lames de rasoir. Massif signifiant espace,
tout, il y a un beau clavier, un gros disque dur et un un Raspberry Pi peut rentrer dans le boîtier. Un
superbe écran. Il suffit peut-être de les brancher Sony Vaio des origines était le candidat parfait.
pour que ça reparte. Eh bien non. Cette réalisation complexe a abordé avec créa-
tivité les problèmes typiques d’interface avec les
Comme toujours dans la ordinateurs portables. Le clavier était relié à un
microcontrôleur Teensy qui, avec un petit code
communauté RPi, les plus… tenaces pour balayer le clavier matriciel, l’a converti en cla-
d’entre nous ont relevé le défi. vier USB. Le Vaio disposant d’une interface LVDS
standard, une carte vidéo sur étagère l’a transfor-
Le principal obstacle est la conception. Les ordi- mé en HDMI. Sans s’arrêter là, Frank s’est arrangé
nateurs portables doivent être aussi compacts que pour que les divers composants comme les LED, les
possible pour plaire au marché et l’une des façons les antennes Wi-Fi et les ventilateurs soient aussi ré-
plus simples d’y parvenir est de créer des systèmes utilisés. Il a même fini par faire dialoguer la propre
propriétaires, en imposant les normes et les tailles batterie du Vaio avec le RPi pour l’alimenter. Même
requises. Un exemple classique est l’interface avec le GPIO peut encore servir.
l’écran. Les normes utilisées par les ordinateurs
portables varient selon les fabricants : certains em-
ploient le LVDS, d’autres pas. De même pour le logi-
ciel qui les pilote et la connectique. De plus, beaucoup
de pilotes sont à code source fermé, les cartes Rasp-
berry Pi ne disposent alors pas du logiciel nécessaire
pour commander les différentes parties d’un éven-
tuel ordinateur portable donneur d’organes.
Toutefois ce n’est pas si dramatique. Comme
toujours dans la communauté RPi, les plus… te-
naces d’entre nous ont relevé le défi. Les résultats
varient, avec des solutions très ingénieuses à côté
d’autres issues d’une réflexion plus originale.
Voyons quelques-unes de nos préférées.

20 magpi.fr Assembler un ordinateur portable

014-023_MagPi06_COVER-FEATURE_FR.indd 20 20/12/2018 12:49


COUP DE PROJECTEUR

LE VENTI-PI
MOTOROLA ATRIX DOCK magpi.cc/bnoiTy
magpi.cc/hnWChv
Voici une idée vraiment décalée. Si vous avez un vieux
Voici un exemple classique de recyclage pratique. mini-ordinateur portable sous la main, il suffit de
Sorti en 2011, le téléphone Androïd Atrix 4G de Mo- trouver une version de Linux qui tourne dessus avec
torola voulait être un sérieux concurrent des pro- un client VNC. Utilisez-le alors pour connecter un RPi
duits Apple. Il se différentiait par l’Atrix Dock, un fonctionnant dans… une tasse à café ? Dave Chew a
ensemble écran, clavier et batterie qui se connec- pris une tasse réutilisable Venti de Starbucks pour
tait au téléphone Atrix pour le transformer en y loger un RPi et un disque dur (1 To). Il s’est même
mini-ordinateur portable. Ce fut un échec lamen- procuré des pièces en impression 3D pour créer une
structure stable pour tout accueillir. La tasse se place
L'Atrix Dock est maintenant moins cher et ses innocemment à côté du mini-ordinateur, trahie seu-
lement par le câble d’alimentation USB.
connecteurs sont standards. Ce n’est pas une idée nouvelle (même si la réali-
sation l’est sûrement). Plutôt que de s’encombrer
table en raison du prix. Non seulement la station avec de minuscules appareils électroniques, les
d’accueil coûtait autour de 500 €, mais vous deviez mini-ordinateurs comme la série Eee d’Asus à la
ensuite aussi acheter le téléphone pour pouvoir mode à la fin des années 2000 peuvent maintenant
vous en servir. Face à des mini-ordinateurs por- servir à remplacer les anciens terminaux passifs,
tables corrects vendus autour de 300 €, il n’y avait en fournissant un écran et un clavier à votre RPi
vraiment pas de place sur le marché pour cela. dans un emballage élégant. Ils alimentent les RPi
La bonne nouvelle ? On peut maintenant trou- Zero faibles consommateurs d'énergie.
ver l’Atrix Dock pour beaucoup moins cher et ses
connecteurs sont standards : un connecteur mi-
cro-HDMI pour l’écran et un connecteur micro-USB
pour le clavier et l’alimentation. Presque parfait.
Un peu de câblage suffit pour tout brancher, et vous
avez une excellente solution avec une alimentation
par batterie. L’Atrix Dock lui-même est bien conçu
et avec un peu de créativité, vous pouvez fixer le RPi
à l’arrière ou le laisser autonome.
Le bricoleur spécialisé « thegrendel » a publié un
guide exhaustif sur les types de câbles nécessaires.
C’est une excellente alternative si la transformation
physique ne vous tente pas et si, bien sûr, vous arri-
vez à trouver un Atrix Dock en vente.

Assembler un ordinateur portable magpi.fr 21

014-023_MagPi06_COVER-FEATURE_FR.indd 21 20/12/2018 12:49


COUP DE PROJECTEUR

DANS LES
ORDINATEURS PORTABLES X86
La framboise n’est pas le seul fruit…

S
i vous voulez mordicus retrouver votre
monde Raspberry Pi sur un ordinateur
portable, il y a une autre voie à envisager.
Fin 2016, la Fondation Raspberry Pi a lancé une ver-
sion de Raspbian, y compris l’environnement com-
plet de bureau, pour les processeurs x86. Cela s’ap-
plique (probablement) à votre ordinateur portable.
Si vous possédez un ordinateur portable un peu âgé
qui a peut-être de la peine à suivre ce qu’Apple et
Microsoft peuvent offrir, vous pouvez envisager
d’installer l’OS Raspberry Pi Desktop, sans avoir du
tout besoin d’un Raspberry Pi. Pas d’impression 3D,
pas de soudage, juste démarrez et profitez.
Vous pourriez penser que le principal incon-
vénient de cette approche est l’absence de GPIO,
mais tout n’est pas perdu. Avec son interface OTG
(On-The-Go), le Raspberry Pi Zero peut servir de
« gadget » USB, ce qui inclut l’accès à distance
aux broches du GPIO (on le sait, c’est très ingé-
nieux). Ainsi, en supposant que vous utilisiez un
Raspberry Pi Zero, vous pouvez développer sur un
ordinateur portable et continuer à lire et écrire sur
le GPIO. Cela peut même fonctionner dans une
machine virtuelle sur votre ordinateur principal.
Si vous avez appris à coder sur un Raspberry Pi ou
peut-être à créer des jeux avec Scratch, cela peut
être l’option à choisir si vous avez un ordinateur
portable plus ancien. L’OS Raspberry Pi Desktop
est extrêmement léger par rapport aux systèmes
d’exploitation traditionnels et vous pourriez être
surpris par les bonnes performances de votre
« bon vieux » ordinateur portable.

Gravez et démarrez
Pour commencer, vous aurez besoin d’une copie
du dernier OS Raspberry Pi Desktop, voir magpi.
cc/2j0TqNm. Vous obtiendrez une image ISO à
écrire sur une carte micro-SD ou un CD-ROM. Ce
que vous choisirez devra être amené sur l’ordi-
nateur portable cible. Les machines les plus an-
ciennes ne savent pas démarrer depuis une carte
micro-SD et la plupart des ordinateurs portables

22 magpi.fr Assembler un ordinateur portable

014-023_MagPi06_COVER-FEATURE_FR.indd 22 20/12/2018 12:49


COUP DE PROJECTEUR

n’ont pas de lecteur de CD-ROM. Quelques expé-


rimentations peuvent être nécessaires. En règle
générale, appuyer sur F10 au démarrage de votre
ordinateur portable pour afficher un menu où vous
pourrez choisir ce que vous voulez faire.
Si vous avez déjà installé un système Linux avant,
en particulier Debian, le processus vous semble-
ra familier. Vous avez même l’option d’un « live
CD », en démarrant à partir du disque ou de la carte
micro-SD sans rien installer en interne. C’est par-
fait pour tester les choses. En utilisant une carte
micro-SD, vous pouvez même démarrer en mode
« persistant », où les changements de configura-
tion et les fichiers sont recopiés sur la carte, vous
ne perdez donc rien au redémarrage. Si vous voulez
poursuivre l’installation sur votre stockage interne,
vous serez guidé tout au long du processus. « Ajouter une extension » et sélectionnez « Pi
Une fois installé, le familier bureau Raspberry GPIO ». Les nouveaux blocs facilitent la lecture et la
Pi vous contemplera. Cela a très bien fonctionné commande des broches du GPIO. Vous avez toutes
sur notre Asus Eee 900 de test, un mini-ordinateur les fonctions d’un RPi sur votre ordinateur portable !
classique de 2012. Les
composants internes Plus important encore, l’OS Raspberry Pi Desktop
comprenant le son, le
Wi-Fi et l’USB fonc- n’est pas un « jouet » ou un système d’exploitation
tionnaient tous, nul au rabais : il repose sur Debian.
besoin de configuration
supplémentaire. Vos Alors, est-ce que ça vaut la peine de faire ça ? Eh
logiciels favoris tour- bien si vous travaillez beaucoup avec Raspberry Pi,
neront comme s’ils ce peut être une bonne façon de recycler du vieux
étaient sur un Rasp- matériel et de pouvoir travailler dans un environ-
berry Pi pour démarrer. nement familier. Vous éviterez les amas de fils tout
en profitant du GPIO d’un RPi Zero.
Plus important encore, l’OS Raspberry Pi
Pas de GPIO ? Si, GPIO ! Desktop n’est pas un « jouet » ou un OS au rabais :
Si vous voulez faire des opérations avec le GPIO, il repose sur Debian, ce qui en fait un des OS les
c’est très simple. La dernière version de l’OS mieux soutenus du domaine. La Fondation Ras-
Rasp-berry Pi Desktop pour x86 a tout ce qu’il vous pberry Pi a beaucoup travaillé pour rendre cet OS
faut. Vous aurez besoin d’un Raspberry Pi Zero convivial et puissant. La vaste gamme de logiciels
(ou Zero W) sans carte micro-SD insérée. Reliez le (presque tous gratuits) et le soutien en ligne en
port micro-USB de périphérique du Zero (marqué font un choix robuste pour tous.
« USB ») à un port USB libre sur l’ordinateur por- (VF : Denis Lafourcade)
table. Le Zero va comprendre qu’il est maintenant
un « gadget » USB et après quelques secondes le
système d’exploitation va vous demander quoi faire.
PI ZERO : MODE GADGET
Sélectionnez « GPIO expansion board » et le RPi
Zero va charger du code et redémarrer. Il utilise son Vous voulez un moyen rapide pour utiliser un RPi sur
votre ordinateur portable ? Vous pouvez connecter un
interface OTG pour devenir un périphérique du ré- RPi Zero à votre ordinateur portable via un port USB et
seau USB de votre machine. Pour dialoguer avec lui utiliser VNC pour plonger dans le système Raspbian
en Python, la bibliothèque GPIO Zero permet d'ac- qui tourne sur le RPi. Vous devez pour cela utiliser le
céder aux broches après une configuration préalable mode spécial « gadget USB », mais il vous permet de
vous servir du RPi Zero comme d’habitude depuis votre
(voir les instructions sur magpi.cc/2kvGsY5). Si
ordinateur portable. Consultez le tutoriel en anglais « PI
vous êtes adepte de Scratch, vous avez de la chance. ZERO SIDECAR », page 46 du MagPi anglais n°44.
Démarrez Scratch 2, cliquez sur « Plus de blocs »,

Assembler un ordinateur portable magpi.fr 23

014-023_MagPi06_COVER-FEATURE_FR.indd 23 20/12/2018 12:49


PROJETS

Jardin domestique
Diego
AQUAPONIQUE
MAKER

Braga
Faire pousser des légumes chez vous, en votre absence, est
Ingénieur en
informatique,
un jeu d’enfant grâce à un Raspberry Pi et un poisson-gardien.
spécialiste
du DevOps,
Rob Zwetsloot nous en dit plus.
passionné par

«
l’automatisation Vivre dans une grande ville présente dans l’eau. Même si le processus est automatisable,
et l’Internet des
des avantages et des inconvénients », il n’est pas autonome », indique Diego. « Lors de
Objets.
précise Diego Braga. « Pour moi, l’une l’exposition universelle organisée en Italie en 2015,
@braghettos
des plus grandes difficultés est de ne pas pouvoir j’ai découvert un système aquaponique où plantes
cultiver un petit jardin biologique ». et poissons cohabitaient et se nourrissaient mu-
Diego vit à Milan, dans un appartement modeste tuellement. J’ai commencé à étudier ce type de
dont il est souvent absent, qui ne possède qu’un système et c’est là que l’idée a jailli : deux écosys-
balcon des plus réduits. Ce qui ne l’a pas dissuadé tèmes différents (un aquarium contenant des pois-
d’avoir envie de cultiver quelques légumes frais et sons et des plantes poussant dans la terre) peuvent
l’a poussé à s’intéresser aux jardins hydroponiques se nourrir mutuellement. Les rejets des uns per-
pour voir si la solution était viable. « L’un des mettent de nourrir les autres. C’est exactement ce
points faibles de l’approche est l’apport d’engrais que je cherchais ».

Installé dans un coin du


salon, le jardin miniature
n’occupe qu’un
minimum d’espace.

24 magpi.fr Jardin domestique aquaponique

024-027_MagPi06_Aquaponic-SHOWCASE_FR.indd 24 20/12/2018 12:51


PROJETS

Les plantes reçoivent la


lumière des différentes
lampes placées autour
du système.

Les déjections du
poisson sont pompées
vers les plantes pour
L’ESSENTIEL
servir d’engrais.
> Diego a passé
deux ans et demi
à créer son jardin.
> Le poisson
s’appelle Qwerty.
> Chaque nuit,
Diego reçoit un
rapport sur de
l’état du sol du
jardin.
> L’une des
exigences était de
pouvoir surveiller
Un petit poisson le jardin avec un
maintient l’équilibre du téléphone.
système en contribuant
à la croissance des > Le jardin a
plantes en contrepartie été conçu
des nutriments qu’elles dans un souci
fournissent. d’esthétique,
il s’intègre au
mobilier.

Jardin domestique aquaponique magpi.fr 25

024-027_MagPi06_Aquaponic-SHOWCASE_FR.indd 25 20/12/2018 12:51


PROJETS

 our fonctionner
P
parfaitement, le
Diego a compris qu’il avait simplement à auto-
système nécessite de matiser le nettoyage de l’aquarium. Il a donc décidé
nombreux capteurs. de le faire en collectant les données des capteurs
 rototype du système
P grâce à la plate-forme IoT IBM Watson. Il lui a fallu
réalisé à l’aide
un certain temps pour trouver la solution.
d’éléments IKEA.
« J’ai d’abord étudié un moyen pour mainte-
nir la propreté de l’aquarium. Les déjections des
poissons qui se déposent au fond constituent une
nourriture parfaite pour les plantes. L’inspiration
m’est venue une nuit : il suffisait d’utiliser un tra-

ceur X-Y associé à une pompe submersible. Au lieu


de tracer sur une surface, le système collecte les
déjections et les distribue aux plantes ».

Faire remonter l’eau


 a construction des
L
Grâce à des étagères IKEA, l’aquarium est ins-
étagères nécessaires tallé en bas et le pot contenant la terre au-dessus.
pour incorporer L’eau chargée de rejets est remontée vers la plante
correctement tous
les éléments impose qui l’utilise et équilibre son pH, et les nutriments
certaines adaptations. sont redescendus par gravité vers le poisson.

26 magpi.fr Jardin domestique aquaponique

024-027_MagPi06_Aquaponic-SHOWCASE_FR.indd 26 20/12/2018 12:51


PROJETS

Semis

Tout d’abord, laissez le poisson se familiariser


01 avec son nouvel environnement pendant
trois à quatre semaines. Aucun semis n’est encore
effectué dans le pot, mais l’eau vient enrichir le sol.

 e jardin terminé dans son


L
nouvel environnement.

Pour accéder aux données produites par les cap-


teurs et les contrôler, Diego a utilisé un Raspberry
Pi : « Pour d’autres projets, j’avais déjà travaillé
Selon les plantes envisagées, effectuez
avec des cartes RPi. Mais ici, la possibilité d’utiliser 02 les semis à la profondeur et la distance
le langage de programmation graphique Node- recommandées. Le système aquaponique est
RED pour les interactions avec les broches GPIO et installé à l’intérieur de l’appartement et ne subit donc
aucune influence de la météo. Cependant, Diego
pratique ses cultures de manière saisonnière.
L e jardin fonctionne vraiment bien. Je trouve
merveilleux et rassurant de voir les plantes pousser
dans mon salon, juste à côté du sofa.
l’existence d’une bibliothèque de nœuds Watson
IoT étaient idéales pour connecter mon système
aquaponique au nuage. Le RPi est donc venu com-
pléter le puzzle de façon parfaite ».
Après tant d’années, que pense Diego de sa
création ? « Le jardin fonctionne vraiment bien. Je
trouve merveilleux et rassurant de voir les plantes
pousser dans mon salon, juste à côté du sofa.
Veillez à apporter toute la lumière nécessaire
Jusqu’ici, j’ai planté des tomates et du basilic qui 03 aux graines. Comme Diego, vous pouvez
étaient vraiment excellents. Et lorsque je suis sur
utiliser des lampes spéciales pour l’horticulture, ce
mon salon, il y a une odeur de potager ».
qui aide les graines à germer et se développer.
(VF : Pascal Godart)

Jardin domestique aquaponique magpi.fr 27

024-027_MagPi06_Aquaponic-SHOWCASE_FR.indd 27 20/12/2018 12:51


PROJETS

PiCam Marine
Le Dr Autun Purser recherchait un dispositif de petite taille pour
prendre des photos de coraux d’eau froide sur les fonds marins.
D’où le choix du RPi Zero W, comme l’a découvert David Crookes.

L
es écologues allemands déploient des cartes nano-ordinateurs RPi Zero W [et de modules de
RPi Zero W dotées de caméras, au large de la caméra RPi] pour enregistrer des vidéos des fonds
Norvège, pour en savoir plus sur les activi- marins, mais aussi d’appareils scientifiques im-
tés coralliennes. Le Dr Autun Purser fait partie de plantés sous l’eau. La miniaturisation de ces ordi-
l’équipe chargée de la technologie et de l’écologie nateurs apporte beaucoup ».
des grands fonds océaniques de l’Institut Alfred Les RPi Zero W et les caméras sont placés dans
Wegener. Cette équipe s’intéresse aux coraux des conteneurs pressurisés étanches et alimentés
d’eau froide, présents dans les mers européennes. par des batteries Li-ion, résistantes au froid des
Dr Autun « Nous savons aujourd’hui que ces coraux for- grands fonds océaniques. « La connexion Wi-Fi
MAKER

Purser ment des récifs lorsque les conditions sont appro- nous a permis de monter un routeur à bord pour
priées pour leur développement », explique Autun déclencher les caméras, et après leur remontée,
Le Dr Autun Purser. « Au cours de notre campagne dans le Ska- pour télécharger les images collectées sans avoir
Purser a effectué
gerrak, entre la Norvège, le Danemark et la Suède, à ouvrir les compartiments pressurisés », précise
des recherches
relatives aux coraux nous avons tenté de cartographier les coraux et de Autun Purser.
dans le cadre voir quand et dans quelles conditions ils s’alimen- Avec ses deux collègues, il a programmé le sys-
de son diplôme
taient de manière optimale ». tème de prises de vue en Python 3 pour déclencher
de doctorat.
Aujourd’hui, il l’éclairage à LED et prendre un cliché à la résolution
est chargé des Périodes d’alimentation maximale, à des moments précis. Le système est
essais et du L’objectif est de poursuivre le développement « capable de photographier des coraux spécifiques
développement
d’appareils et de
« de systèmes de caméras abordables, adaptés à à une distance de 2 m, ce qui permet de savoir si les
méthodologies au nombre d’applications dans les grands fonds (au tentacules étaient activement étendus ou non ».
sein de l’Institut moins 6000 m). Nous avons étudié l’utilisation de (VF : Pascal Godart)
Alfred Wegener
(Allemagne) pour la
recherche polaire
et marine.

awi.de/en

Photos avec l’aimable


autorisation de l’équipe
GEOMAR JAGO

L
 es appareils PiCam
Marine sont logés
dans les caissons de
déploiement d’un
sous-marin envoyé en
plongée. Le capitaine,
l’équipage et les
scientifiques présents
à bord du navire
océanographique
Poseidon, lors de la
campagne POS526,
ont joué un rôle
essentiel lors des
déploiements initiaux.

28 magpi.fr PiCam Marine

028-029_MagPi06_PiCam-Marine-SHOWCASE_FR.indd 28 20/12/2018 12:53


PROJETS

Deux batteries lithium-ion


disposent d’une capacité
suffisante pour prendre un
cliché toutes les cinq minutes
sur une durée de déploiement
de dix jours.

Les composants sont placés dans


un tube de plastique transparent
de 15 cm de long et de 9 cm de
diamètre dont les deux extrémités
sont usinées.
La carte RPi Zero W, la caméra,
le flash à LED et le circuit intégré
de l’horloge en temps réel (qui
sert de référence de temps au
système) sont fixés sur un support
en plastique.

L’équipage a pris au total


20 000 photos au cours
de la campagne.

Outre les coraux,


l’équipe a identifié des
dizaines de crabes.

PiCam Marine magpi.fr 29

028-029_MagPi06_PiCam-Marine-SHOWCASE_FR.indd 29 20/12/2018 12:53


PROJETS

FRILLER
Cet étonnant robot modifie la forme de ses roues pour
franchir des obstacles, comme l’a découvert Phil King.

U
n robot à deux roues passe sous une table en
verre, se retourne, et soudain… déploie ses
roues transformées en « jambes » en forme
de pétales hérissées d’arêtes saillantes pour accroître
leur diamètre et escalader la table. Il s’agit du phéno-
ménal FRILLER, créé par Al Bencomo et basé sur une
carrosserie originale conçue par Carter Hurd.
« L’inspiration est venue du robot STAR de l’univer-
Al sité de Californie et de recherches menées au sein du JPL
MAKER

Bencomo (Jet Propulsion Laboratory, NASA) », précise Al, « avec des


prototypes de robots repliables ou munis de queues ».
Al est chercheur Alors que le processus de transformation des roues
au sein de la
paraît complexe, la conception en impression 3D et le
division Systèmes
Intelligents mécanisme sont beaucoup plus simples que ce qu’on
du centre de imagine. « Le premier essai de faisabilité disposait
recherches Ames
d’un connecteur en forme de tendon pour mettre
de la NASA. Il
est chargé de en tension les « pétales » entre un état et un autre.
développer Cependant, la dernière version utilise des sections à
et tester, en verrouillage mutuel obtenues par impression 3D sans
conditions réelles,
les algorithmes
avoir à fabriquer des structures de soutien ».
des véhicules
autonomes Tout-terrain
robotisés.
La transformation des roues fait appel à des motoré-
magpi.cc/UpZKrP Les roues circulaires se transforment en
ducteurs Solarbotics GM3 224:1 (0,343 Nm/moteur, 3
jambes « agrippantes », ce qui permet
V). Associés aux roues transformables dotées d’arêtes au robot de franchir un terrain accidenté.
saillantes, les moteurs d’entraînement (couple
de 1,2 Nm, 12 V) et la queue arrière plate d’équilibrage
permettent au FRILLER de traverser des terrains acci-
dentés. Jusqu’ici, il a franchi avec succès les tests dans
la neige, la boue, de la prairie et les petits graviers. dieuse, mais l’impression 3D permet de gagner du
« Les essais de terrain préliminaires de FRILLER temps ». Les fichiers STL et le code d’impression
n’ont pas été particulièrement difficiles » admet Al, 3D sont à code source ouvert : magpi.cc/pYSbeV.
« mais ils peuvent tout de même être mis à notre cré- Le cœur du FRILLER est un RPi 3 sous Android
dit. Les prochains tests prendront en compte d’autres Things. La commande manuelle du robot utilise
environnements (pentes raides, dunes) ». l’appli TouchOSC sous Android. « Pour les essais
Al précise que le concept de roue déformable offre un de terrain, l’appareil Android est configuré en point
potentiel considérable pour des utilisations réellement d’accès (hotspot) et FRILLER s’y connecte pour rece-
pratiques, sur des sites difficiles à atteindre comme les voir des commandes au moyen de paquets UDP ».
rebords de volcans. Ce type de roue peut servir égale- Al prévoit d’ajouter un système de commande
ment dans des véhicules autonomes plus volumineux autonome pour effectuer des expériences scienti-
pour améliorer l’exploration scientifique. fiques alors que le robot est hors de portée visuelle.
D’autres améliorations sont à l’étude : ajouter des
Impression 3D capteurs, un spectromètre pour étudier la com-
La construction et le codage ont nécessité position chimique de l’environnement, et un GPS
80 heures-personnes. « En temps normal, la pour faciliter la navigation en pilotage indirect.
construction du robot aurait été compliquée et fasti- (VF : Pascal Godart)

30 magpi.fr FRILLER

030-031_MagPi06_Friller-SHOWCASE_FR.indd 30 20/12/2018 12:54


PROJETS

L’ESSENTIEL
> La construction
et le codage
ont nécessité
80 heures-
personnes.
> Les détails de
construction sont
ici : magpi.cc/
UpZKrP.
> Al travaille pour
la NASA, mais il
ne s’agit pas d’un
projet officiel de
Le cerveau du robot est cette institution.
constitué d’un RPi 3, doté > Le robot est ali-
d’un HAT moteur Adafruit.
menté par une
batterie Li-ion
de 11,1 V, 3,5 Ah.
> L’autonomie est
proche de 650 m
sur un chemin de
terre nivelé.

La queue arrière plate


de FRILLER permet
de le stabiliser en
montée.

Les roues du robot restent circulaires


(à gauche) pour se déplacer
rapidement sur route ou à l’intérieur,
et deviennent « agrippantes » (à
droite) pour franchir des obstacles
sur terrain accidenté.

FRILLER magpi.fr 31

030-031_MagPi06_Friller-SHOWCASE_FR.indd 31 20/12/2018 12:54


PROJETS

Babyfoot
Le football est une affaire de résultat et gérer un score ne
devrait pas être très difficile. Grâce au tableau d’affichage
piloté par RPi que propose Matmi, c’est un jeu d’enfant.
« Les résultats sont là », confirme David Crookes.

L
e football est de longue date un jeu très amusant,
mais le baby-foot, comme l’appellent les
Français, a quelque chose de plus original. Des microcommutateurs sont placés
Très apprécié depuis longtemps (ses origines dans les conduits de récupération de la
balle du baby-foot et reliés aux broches
remontent à 1921), il consiste à déplacer huit rangs
GPIO du RPi.
de footballeurs, fixés sur des tiges mobiles pouvant
tourner et glisser pour passer une balle d’un joueur à
un autre. Est déclaré(e) gagnant(e) celui ou celle qui a
marqué davantage de buts que l’adversaire.
Dans l’art du baby-foot, la fine équipe de Matmi est
sans rivale... Quand leurs projets de développement
Jeff numérique pour le groupe Gorillaz, la chanteuse Lily
MAKER

Coghlan Allen, le comédien Warwick Davies, ou encore la BBC,


Alton Towers, United Airlines et Comic Relief leur en
Fondateur de
Matmi en 2001,
Jeff Coghlan a
travaillé aux côtés
Nous avons décidé de réinventer notre baby-foot et
des plus grandes
légendes de la
d’enrichir cette expérience de jeu grâce à la technologie.
technologie comme
Steve Wozniak et laissent le temps, ils se retrouvent autour du baby-
Ian Livingstone. Il foot dans leurs locaux et prennent du bon temps. ordinateur monocarte accepte des entrées-sorties
est supporter du Malheureusement, ils sont tellement occupés sur son connecteur GPIO, mais il a aussi pour lui
club de football de
Manchester United..
qu’ils oublient souvent le score et que les spectateurs une suite de développement complète avec l’OS
n’arrivent pas à suivre les matchs. D’où l’idée de Raspbian et l’environnement Visual Studio Code, ce
matmi.com
confier la gestion du score à un Raspberry Pi 3B+. qui permet d’accélérer et de faciliter le processus ».
« Nous avons décidé de réinventer notre baby-
foot et d’enrichir cette expérience de jeu grâce à Technologie sur la ligne de but
la technologie, en créant de la compétition et en Les aspects physiques du projet ont été
y ajoutant l’affichage des scores », précise Jeff également résolus rapidement, en plaçant un
Coghlan, fondateur de Matmi. capteur dans chaque conduit de récupération de
L’idée a consisté à créer une application appelée la balle du baby-foot. L’actualisation du score
Red vs Blue Table Foosball dans laquelle les joueurs a lieu lors de la détection du passage de la balle
indiquent leurs noms pour suivre leurs scores en après un but. « Nous avons étudié différentes
temps réel. Dès l’origine, l’équipe a travaillé sur des options de détection d’un but. Finalement, nous
croquis et analysé la table de baby-foot pour imaginer avons décidé d’utiliser des microcommutateurs
la meilleure manière de détecter les buts. Le matériel munis de languettes pour détecter le but lorsque
nécessaire a été rapidement déterminé et commandé : la balle descend dans le conduit », explique Jeff.
un RPi, une carte micro-SD de classe 10, une interface « La gravité force la languette à s’écarter, ce qui
USB micro-SD, une alimentation de 2,5 A, une déclenche un microcommutateur. Cette approche
poignée de microcommutateurs et beaucoup de fils. très simple fonctionne parfaitement. Nous avons
« Le Raspberry Pi 3B+ répond parfaitement aux pu rapidement résoudre les aspects physiques et
besoins », indique Jeff. « Non seulement ce nano- nous consacrer davantage à la présentation ».

32 magpi.fr Babyfoot

032-033_MagPi06_Foosball-SHOWCASE_FR.indd 32 21/12/2018 07:58


PROJETS

L’affichage est assuré par un ordinateur


portable. Les buts sont célébrés par un
clip audio et une pluie de confettis à
l’écran, et le score est actualisé.

Lorsqu’un but est marqué,


les signaux sont lus sur le
RPi par un programme créé
avec Visual Studio Code.

L’ESSENTIEL
> Le projet devrait
fonctionner avec
n’importe quel
baby-foot.
> L’appli indique
l’équipe qui a
marqué et l’heure.
> L’affichage utilise
un ordinateur por-
L’équipe précise que le framework table connecté en
JavaScript open source Vue.js a facilité le Wi-Fi.
Will Booth, stagiaire chez Matmi, a programmé processus de création de l’appli grâce
le RPi pour lire les entrées des capteurs et les aux nombreux exemples proposés sur le > Matmi envisage
site Stack Overflow. d’ajouter un mode
imprimer dans un historique des scores. Un
ordinateur portable a ensuite été connecté au RPi « tournoi ».
via un réseau Wi-Fi pour présenter les données sur > Les mises à jour
le serveur HTTP du système. « L’adaptateur sans sont diffusées sur
le compte Twitter
fil intégré et le système d’exploitation Raspbian
@matmi.
ont facilité la configuration du réseau. En outre,
nous avons réussi à préserver le côté vintage du jeu
en limitant au minimum le câblage », a indiqué
Will, qui a également conçu le contenu graphique
du tableau d’affichage avec Paint.net.
Résultat : un jeu qui convient aussi bien aux
joueurs qu’aux spectateurs. Pour autant, l’équipe
ne compte pas s’arrêter en si bon chemin. « Pour
le moment, nous travaillons sur l’ajout d’une
caméra en vue de dessus, pour le visionnage
des buts, et sur une évolution de l’interface
graphique », précise Jeff. « Nous ferons une
nouvelle présentation lorsque notre logiciel aura
franchi un nouveau palier ».
(VF : Pascal Godart)

Babyfoot magpi.fr 33

032-033_MagPi06_Foosball-SHOWCASE_FR.indd 33 21/12/2018 07:58


PROJETS

Pierre-feuille-ciseaux
Si un jour un robot vous propose de jouer le monde à pierre-feuille-
ciseaux, méfiez-vous. Un conseil de Nicola King.

P
ierre-feuille-ciseaux est un jeu qui se joue « Je l’ai entraîné avec un ensemble d’images
avec les mains. Et donc entre humains. étiquetées venant des gestes de la main capturés
Julien de la Bruère-Terreault, ingénieur par le RPi. »
en aérospatiale, ne s’est pas arrêté à ce détail
Julien Images d’entraînement
MAKER

anatomique et a conçu une version opposant un


de la Bruère- joueur à un RPi bardé d’IA. Julien a d’abord imprimé en 3D le support de
Terreault L’idée de ce projet est venue de son fils, alors que fixation de la caméra et des bandes de LED (magpi.
Julien lui enseignait les bases de la programmation cc/VqvUAJ). Il a ensuite écrit un script de capture
Julien est cana-
à travers l’écriture en Python d’un pierre-feuille- et d’étiquetage pour les images nécessaires à
dien et ingénieur.
Son intérêt pour ciseaux textuel. Son fils lui demanda alors s’il l’entraînement du classificateur, entraînement qui
les ordinateurs serait possible de faire le même jeu avec une allait à son tour être l’objet d’un script.
remonte à ce jour caméra détectant les gestes de la main. « Je « J’ai commencé avec un ensemble d’environ
des années 1980 savais que c’était possible, alors j’ai relevé le 150 images étiquetées, auquel j’ai appliqué un
où il reçut comme
défi, y voyant là une bonne occasion d’apprendre algorithme dit de réduction de la dimensionnalité
cadeau un ordina-
teur TI-99. beaucoup de choses. » pour accélérer leur traitement. »
Julien s’est d’abord frotté durant une année aux Julien a conclu l’écriture de ses scripts par la
magpi.cc/zAzFgs
techniques de l’apprentissage machine et de la logique du programme et l’ajout d’une interface
vision par ordinateur. « Le défi pour moi avec ce graphique.
projet, c’est que je devais apprendre pratiquement Le RPi faisait à ses yeux partie intégrante de la
tout ce qui était nécessaire à sa réussite. La construction : « Avec son module caméra et sa for-
partie la plus difficile a été l’écriture et le test midable bibliothèque Picamera, sa petite taille et sa
de l’algorithme d’apprentissage machine. » Cet puissance de calcul suffisante, le RPi était la plate-
algorithme, ou « classificateur », apprend à forme idéale pour la réalisation de ce projet. »
l’ordinateur à reconnaître un ensemble de gestes : (VF : Hervé Moreau)

„ Le pipeline de traite-
ment : entraînement du
classificateur d’images
(en haut), et prédiction du
geste d’après les images
capturées par le RPi (en
bas).

34 magpi.fr Pierre-feuille-ciseaux

034-035_MagPi06_RPC-SHOWCASE_FR.indd 34 20/12/2018 12:57


PROJECT
PROJETS
FOCUS

Le support a été imprimé en 3D. Les


LED entourant la caméra fournissent un
éclairage uniforme.

Le RPi 3 utilise OpenCV


pour l’interprétation
des gestes.

La couleur verte de la
base permet de supprimer
le fond des images.

 Le joueur fait son choix


sous la caméra tandis que
le RPi sélectionne une
image de geste aléatoire.

Pierre-feuille-ciseaux magpi.fr 35

034-035_MagPi06_RPC-SHOWCASE_FR.indd 35 20/12/2018 12:57


PROJETS

Borne d’arcade 4D :
Can’t Drive This
Que peut donc bien cacher le « 4 » de cette borne
d’arcade 4D ? Pour le découvrir, Rosie Hattersley et Rob
Zwetsloot s’en sont littéralement pris plein la figure.

U
n petit RPi pour un gros plus, la recette est
souvent infaillible. Elle a en tout cas réussi au
Pixel Maniacs a construit
studio allemand Pixel Maniacs qui s’est servi du
la borne pour mettre en
Raspberry Pi pour moderniser une borne d’arcade des
avant son dernier jeu.
années 1980 et y implanter son dernier jeu, Can’t Drive
This. Installez cette borne dans un salon de jeux vidéo tel
que Gamescom, les curieux s’agglutineront vite.
Can’t Drive This (magpi.cc/TphZao) est un jeu de
Pixel Maniacs
MAKER

conduite loufoque qui se joue à deux : l’un roule sur la


route que l’autre construit, l’objectif étant de traver-
Basé à Nuremberg
(Allemagne), le ser un océan et de parvenir sur l’autre bord en évitant
studio Pixel Maniacs toutes sortes d’embûches telles que des boules de dé-
a débuté dans les molition, des barrières ou… de l’eau que la borne vous
applis mobiles et
envoie de temps à autre dans la figure ! Et mieux vaut
crée aujourd’hui
des jeux vidéo aller vite. Sinon la voiture explose.
pour PC, Xbox
One, PlayStation et
Nintendo Switch.
Que d’eau, que d’eau !
Can’t Drive This Si le joueur peut se faire arroser, c’est que Pixel
signe sa première Maniacs a ajouté à la borne d’origine divers éléments
association avec le interactifs. Les bornes d’arcade dont le graphisme 3D
Raspberry Pi.

pixel-maniacs.com

f Le jeu est coopératif :


un des joueurs
construit la route,
l’autre tente de la
suivre.

36 magpi.fr Borne d’arcade 4D : Can’t Drive This

036-039_MagPi06_4DArcade_SHOWCASE_FR.indd 36 20/12/2018 12:58


PROJETS

L’affichage rétro vient


d’une matrice de 256 LED
pilotée par un RPi.

En Bref
> La borne d’arcade
En voiture Simone, c’est
était initialement
toi qui klaxonnes ! En
avant Simon, c’est toi qui
destinée au rebut.
fais attention ! > Plusieurs visiteurs
du salon Games-
com ont proposé
de l’acheter.
> La borne imprime
un ticket-souvenir
comportant une
photo des joueurs.
> Le premier jeu
vidéo sorti par
Pixel Maniacs était
ChromaGun.
> Le thème de leur
prochain jeu sera
le temps.

Borne d’arcade 4D : Can’t Drive This magpi.fr 37

036-039_MagPi06_4DArcade_SHOWCASE_FR.indd 37 20/12/2018 12:58


PROJETS

SPEAKER SPEAKER SPEAKER

Raspberry Pi Power Supply

RGB LED MATRIX

WATER
FAN SPRAYER FAN
LEFT RIGHT

CAMERA

27” Monitor

cc Le circuit d’origine a
été remplacé par des
processeurs actuels SPEAKER SPEAKER
ainsi que par des FRONT FRONT
modules commandés LEFT RIGHT
par un Raspberry Pi. BUTTON PANEL

ff Le schéma de la
borne d’arcade 4D
montre le rôle
essentiel que joue
le RPi en tant que
contrôleur.
ACTIVE
TEHRMAL SUBWOOFER
PRINTER
est complété par une simulation matérielle, un
volant et des pédales p. ex., sont dites bornes 4D.
Cette quatrième dimension prend ici une forme
peu classique : des lumières (dont un gyrophare), NOTEBOOK
des ventilateurs, et un pulvérisateur d’eau.
Les membres du studio savaient que le RPi
pourrait contribuer à toutes les facettes de la
fabrication, et en connaissaient d’autant mieux le
potentiel qu’ils l’utilisaient déjà pour commander
des écrans et une carte son. de RAM pour exécuter nos scripts, et aussi des
Selon Andy Holtz, ingénieur logiciel chez Pixel apports d’une vaste communauté. »
Maniacs, une des idées était d’utiliser une matrice La version arcade du jeu est exécutée sur un
de 256 LED RVB pour afficher PC dissimulé dans la borne, le RPi étant quant à
des animations à base de lui chargé d’activer les éléments 4D au moment
lutins (sprites). « Nous opportun, p. ex. le pulvérisateur pour surprendre
savions que nous aurions le joueur. Un des ventilateurs peut simuler
besoin d’une machine une tempête et le gyrophare s’affole lorsque le
puissante dotée d’assez joueur fracasse sa voiture. Holtz explique que le
PC « envoie en permanence au RPi des données
sur l’état du jeu via un
adaptateur USB-UART.
Le RPi lit les messages
d’état, puis les convertit
en commandes qu’il
envoie aux ventilateurs,
au pulvérisateur, à la
caméra et à la matrice
ff Les joueurs
repartent avec un de LED. Ainsi, quand
ticket-souvenir les
montrant en pleine les joueurs roulent sur
action. de l’eau, le PC envoie

38 magpi.fr Borne d’arcade 4D : Can’t Drive This

036-039_MagPi06_4DArcade_SHOWCASE_FR.indd 38 20/12/2018 12:58


PROJETS

Le jeu d’arcade revisité

Un RPi 3B+ pilote l’écran à LED et active


cc Pour équiper sa
01 le pulvérisateur d’eau, le gyrophare et les
l’info au RPi, qui active alors la buse pour asperger
borne, Pixel Maniacs ventilateurs, autant d’éléments qui enrichissent les
les joueurs. » a reprogrammé un
interactions entre le jeu et les joueurs.
contrôleur de console
Pixel Maniacs a eu l’idée de la version arcade portable.
de Can’t Drive This lors d’une visite au magazine
M! Games. Dans un coin était abandonnée une
borne d’arcade des années 1980 hors d’état.
Pixel Maniacs demanda : combien ? Le magazine
répondit : rien. Et voilà, marché conclu, Pixel
Maniacs repartit avec l’objet et son idée.

« Comme une bête »


Une idée est une chose, la réalité en est une autre.
La borne allait en effet devoir résister à un week-
end de manipulations effrénées. Dixit Holz : « Le
Raspberry Pi s’est comporté comme une bête.
Le Gamescom était ouvert de 9h à 20h, le RPi

D’allure vieillotte à l’origine, la transformation


Le RPi active les éléments 4D au moment 02 de la borne d’arcade en machine 4D moderne
doit beaucoup à l’imagination de ses créateurs, mais
opportun, p. ex. le pulvérisateur d’eau pour aussi aux ajouts permis par le RPi.

surprendre les joueurs.


allait donc devoir fonctionner durant onze heures
d’affilée, sans surchauffe ni plantage. Et il l’a fait.
Aucun des périphériques reliés au RPi n’a eu de
problème, et là aussi nous n’avons pas subi un seul
plantage. »
Les visiteurs se sont montrés enthousiastes, au
point que de temps à autre l’un d’eux proposait
d’acheter la borne 4D. Mais comme le dit Andy Holtz,
« on ne vend pas son bébé. » Par contre rien n’em- 03 Can’t Drive This est aussi stimulant et frustrant
que les autres jeux de conduite, mais quels
pêche de l’exposer : c’est ce qu’a fait le studio lors de sont ceux qui vous aspergent d’eau et vous envoient
divers salons allemands avant de lancer officielle- de l’air dans la figure pour simuler votre vitesse ?
ment Can’t Drive This en fin d’année dernière. (VF : Hervé Moreau)
(VF : Hervé Moreau)

Borne d’arcade 4D : Can’t Drive This magpi.fr 39

036-039_MagPi06_4DArcade_SHOWCASE_FR.indd 39 20/12/2018 12:58


PROJETS

Imprimante à
tricoter en réseau
Cette vénérable tricoteuse aurait-elle pu imaginer qu’un jour elle
serait aux ordres d’un jeunot pas plus gros qu’une barquette de
framboises ? Un récit tricoté par Nicola King.

L
e tricot semble une activité indémodable.
Ses aiguilles enjambent les décennies sans
rouiller, même si le 20e siècle, progrès oblige,
a mécanisé leur pas tranquille. L’ingénieuse Sarah
Spencer les a quant à elle carrément propulsées
dans le monde connecté du 21e siècle. Elle a en effet
transformé une vieille machine à tricoter familiale en
objet pour le moins spécial : une imprimante à tricoter
Sarah Spencer
MAKER

en réseau capable de produire d’étonnants ouvrages.

Sarah est austra-


lienne. Ingénieure Néo-tricot
en informatique, L’intérêt de Sarah pour la transformation des machines
elle est aussi à tricoter remonte à plusieurs années, à l’époque où elle
adepte de la cherchait à marier anciennes et nouvelles technologies.
culture maker et
Si cette quête venait de sa formation d’informaticienne,
styliste passionnée.
l’objet qu’elle choisit pour la mener vint de son goût
magpi.cc/fvCnbX
pour le tricot : une machine à tricoter Brother KM950i au point : « Avec l’ajout d’un bras motorisé et d’un
des années 1980. Cette machine aujourd’hui introu- changeur automatique de couleur, ma tricoteuse est
vable était dotée d’un scanner de patron et d’un lecteur en passe de devenir une machine mains libres. »
de disquette pour leur sauvegarde. « En utilisant un Sarah a également dû élargir sa machine après s’être
« spécialisée dans le tri-
cotage multicouleur par le

‚ La machine à trico-
À mes débuts avec le Raspberry Pi, jamais biais d’une technique à deux
couches appelée jacquard
ter des années 1980
modifiée par Sarah. je n’aurais imaginé tout ce qu’il m’a permis double fonture qui nécessite
Le RPi stocke les
patrons et les
envoie au lecteur de réaliser. deux lits d’aiguilles. »
Sarah a une approche
de disquette de la
machine. pour le moins pratique de
émulateur de lecteur de disquette écrit en Python et son travail : « J’ai fait une chose qui peut faire des
une interface web, explique Sarah, je peux envoyer une choses, donc je dois en faire quelque chose, n’est-ce
image au RPi par le réseau, la visualiser sur une grille de pas ? » Et ce qu’elle fait, elle le fait très bien, no-
tricot, puis commander l’envoi du patron à la tricoteuse tamment des housses d’ordinateur portable et des
via le port du lecteur de disquette […] J’ai appelé cette foulards qu’elle vend en ligne sur Etsy (site de vente
configuration OctoKnit en l’honneur d’OctoPrint, une en ligne de créations personnelles).
interface d’impression 3D très utilisée sur le RPi. » Mais il y a mieux, et d’une tout autre échelle : une
Sarah n’a cessé d’apporter des modifications à sa extraordinaire tapisserie tricotée appelée Stargazing
machine durant toutes les années nécessaires à sa mise (magpi.cc/ZsvAjA).

40 magpi.fr Imprimante à tricoter en réseau

040-041_MagPi06_Knitting_SHOWCASE_FR.indd 40 20/12/2018 12:59


PROJETS

La zone grise En bref


représente la Voie
lactée – notre Galaxie. > Le logiciel com-
prend du Python,
du JavaScript, et
un peu de PHP.
> Le code de l’in-
terface web est
sur magpi.cc/
VaTNeL.
> Stargazing
représente le ciel
tel qu’il était à
l’heure d’ouver-
ture du festival
EMF (le comman-
ditaire).
> Sarah vend des
tricots personnal-
isés sur Etsy.
La ligne ondulée correspond à
la projection dans l’espace de
l’équateur terrestre.

Avec ses 88 constellations, la


carte céleste de Sarah mesure
4,6 m de large et pèse 15 kg.

Une étoile est tricotée


Cet impressionnant tricot de 4,6 m de large repré-
sente le ciel nocturne des deux hémisphères et en
montre les 88 constellations. Sarah explique avoir
tricoté son ouvrage « en sept panneaux cousus
ensemble à la main. Comme le fichier du patron
stocké sur le RPi était 21 fois plus volumineux que
la mémoire disponible sur ma vieille tricoteuse, je
l’ai détricoté en 21 fichiers afin de pouvoir le trans-
férer. La carte a demandé plus de cent heures de
travail et pèse 15 kg. »
« À mes débuts avec le Raspberry Pi, jamais je
n’aurais imaginé tout ce qu’il m’a permis de réali-
ser, même dans mes rêves les plus fous. » Eh bien,
ce qu’elle a su faire ici du RPi est étonnant, et que
vous soyez amateur de tricot ou simplement admi-
ratif de l’ingéniosité humaine, jamais tricot n’aura
été aussi beau.
(VF : Hervé Moreau)
 Sarah a présenté son
tricot céleste lors d’un
hackathon australien.

Imprimante à tricoter en réseau magpi.fr 41

040-041_MagPi06_Knitting_SHOWCASE_FR.indd 41 20/12/2018 12:59


TUTORIEL

Pygame Zero
Invaders (I)
Vous n’avez sans doute jamais été attaqué par des aliens dans la vraie
vie, mais vous l’avez sûrement été un jour dans Space Invaders, le jeu
que nous allons recréer ici.

F
ut un temps où, lorsque je devais apprendre première, nous construirons la base du jeu, à
Mark un nouveau langage, je me familiarisais à savoir les aliens, les lasers, les bases de défense
MAKER

Vanstone sa syntaxe et à ses fonctions en tentant de et un système de score. Dans la seconde, nous
recréer Space Invaders. L’exercice était d’autant ajouterons tout ce qu’il faut pour que notre jeu
Auteur de logiciels
plus profitable que ce jeu implique la mise en ressemble à celui des salles et bornes d’arcade des
éducatifs dans
les années 1990, œuvre de différentes techniques de codage. années 1970.
dont la série Ce tutoriel comprendra deux parties. Dans la
ArcVenture,
perdue corps et
biens dans l’océan
des logiciels, mais
sauvée de l’oubli
par le RPi !
magpi.cc/YiZnxl
Le score augmente de 1000 points
@mindexplorers pour chaque alien tué.
Les aliens traversent
l’écran en formation
en se rapprochant des
bases de défense.

Ingrédients

> Raspian Jessie ou Les bases de défense


plus récente bloquent les lasers, mais
s’effritent chaque fois
> Les images de qu’elles sont touchées.
magpi.cc/MATfil
ou les vôtres
Le joueur déplace son vaisseau
> La dernière ver- au moyen des touches fléchées
sion de Pygame Droite et Gauche.
Zero (1.2)
> Des nerfs d’acier
pour sauver la
Terre.

42 magpi.fr Pygame Zero Invaders (I)

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 42 20/12/2018 13:04


TUTORIEL

On attaque (juste le code)


figure1.py
01 J’ai déjà montré dans les volets précédents
comment écrire et lancer un squelette de 001. import pgzrun
programme Pygame Zero avec IDLE, donc 002.
attaquons sans plus tarder. Nous aurons bien sûr 003. player = Actor("player", (400, 550)) # Load in the player
besoin d’éléments graphiques. Le plus simple est Actor image
de télécharger ceux de magpi.cc/MATfil, mais 004.
vous pouvez aussi créer les vôtres. Sous Pygame 005. def draw(): # Pygame Zero draw function
Zero, l’écran a par défaut une largeur de 800 px 006. screen.blit('background', (0, 0))
et une hauteur de 600 px. Cette taille est adaptée 007. player.draw()
à notre jeu, donc inutile ici de définir WIDTH et 008.
HEIGHT. 009. def update(): # Pygame Zero update function
010. checkKeys()
011.
Sous l’obscure clarté des étoiles 012. def checkKeys():
02 Commençons par placer le vaisseau du 013. global player
joueur. L’image qui le représente étant player.png, 014. if keyboard.left:
nous créons un acteur player en début de code avec 015. if player.x > 40: player.x -= 5
player = Actor(«player», (400, 550)). 016. if keyboard.right:
Batailler de nuit est plus spectaculaire, surtout 017. if player.x < 760: player.x += 5
avec des lasers. Nous ajoutons donc un fond 018.
nocturne (background.png) dans la fonction 019. pgzrun.go()
draw(). Si cet arrière-plan est affiché en premier,
tout ce qui sera dessiné ensuite le sera par-
cc Création et affichage
dessus. Nous l’affichons avec la fonction blit() faudra interagir avec eux. Nous initialiserons les du vaisseau et
en ajoutant la ligne screen.blit(’background’, coordonnées des aliens dans une fonction appelée de l’arrière-plan,
et fonction de
(0, 0)) suivie, pour afficher le vaisseau du joueur, initAliens(), et puisque nous aurons à initialiser déplacement du
vaisseau.
de player.draw(). d’autres éléments, nous définirons une fonction
init() depuis laquelle nous appellerons toutes nos
fonctions d’initialisation.
Bâbord toute !
03 Le joueur déplacera son vaisseau au moyen
Maths attacks!
des touches fléchées, définissons donc une
fonction checkKeys() lisant les entrées du clavier.
05 Pour créer et positionner nos aliens, nous
Elle utilisera l’objet keyboard de Pygame Zero et déclarons donc une liste – aliens = [] – puis
sera appelée depuis la fonction update(). démarrons une boucle avec for a in range(18):
Nous devons d’abord déclarer l’acteur player dans laquelle sont créés les acteurs et calculées
comme variable globale à l’intérieur même de leurs positions de départ. C’est ce que fait aliens.
checkKeys(). Nous écrivons ensuite, pour la touche append(Actor(«alien1», (210+(a % 6)*80,
fléchée Gauche, if keyboard.left:, suivi de 100+(int(a/6)*64)))). Cette ligne d’apparence
if player.x > 40: player.x -= 5. Le code est compliquée dit simplement : x vaut 210 plus
similaire pour la touche Droite (figure1.py). le reste de la division par 6 multiplié par 80.
Autrement dit le premier x commence à 210, et les
suivants sont espacés de 80 pixels. Même principe Astuce
À vos rangs, fixe !
04 Passons à l’escouade d’aliens évoluant
pour y, sauf que nous utilisons une division
normale dont le résultat est converti en entier, et
Le premier
tutoriel consacré
en formation. La géométrie de cette formation que l’espacement vertical est de 64. à Pygame Zero a
peut être modifiée, j’ai choisi ici 3 rangées et été publié dans
Plan 18 from Outer Space le numéro 4 du
6 colonnes. Un alien sera représenté par une image
appelée alien.png et défini par un objet Actor (il
06 Nous l’avons vu dans les précédents MagPi français,
les deux suivants
y a en fait 2 images, alien1.png et alien1b.png, tutoriels, il est possible d’ajouter des propriétés
dans le numéro 5.
cf. étape 08). Ces 18 acteurs seront stockés dans (ou attributs) supplémentaires à un objet Actor.
une liste qu’il sera facile de parcourir lorsqu’il Nous le ferons ici également puisque, comme

Pygame Zero Invaders (I) magpi.fr 43

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 43 20/12/2018 13:04


TUTORIEL

montre le code d’updateAliens(). Notez le recours

figure2.py à deux images pour représenter un alien, ainsi que


l’appel à la fonction animate() de Pygame Zero et
à ses paramètres duration et tween pour fluidifier
001. def updateAliens(): l’animation. Regardez également à quel moment
002. global moveSequence, moveDelay et comment est appelée updateAliens() dans
003. movex = movey = 0 update().
004. if moveSequence < 10 or moveSequence > 30: movex = -15
005. if moveSequence == 10 or moveSequence == 30:
006. movey = 50 Problème de base
007. if moveSequence >10 and moveSequence < 30: movex = 15
09 Passons maintenant à la construction des
008. for a in range(len(aliens)): bases défensives. Nous souhaitons bien sûr utiliser
009. animate(aliens[a], pos=(aliens[a].x + movex, des acteurs, mais un problème se pose : l’objet
aliens[a].y + movey), duration=0.5, tween='linear') Actor n’offre aucune méthode de découpage de
010. if randint(0, 1) == 0: l’image le représentant, or nous aimerions n’en
011. aliens[a].image = "alien1" afficher qu’une partie pour montrer l’effritement
012. else: d’une base touchée par un tir. Tout comme nous
013. aliens[a].image = "alien1b" avons déjà affublé nos objets Actor de propriétés
014. moveSequence +=1 supplémentaires, nous pouvons heureusement leur
015. if moveSequence == 40: moveSequence = 0 ajouter des méthodes.

cc La fonction
La guerre des Trois aura lieu
updateAliens()
calcule le mouvement
nous le verrons plus loin, il s’avérera utile de doter
chaque alien d’une variable d’état. Mais affichons
10 Nous construirons trois bases au moyen de
des aliens en fonction
de la valeur de d’abord notre bataillon d’aliens. Pour cela nous trois acteurs. Si nous voulions simplement afficher
moveSequence.
définissons une fonction drawAliens() parcourant l’image entière (base1.png), nous créerions une
la liste des 18 aliens et les affichant. Une ligne liste d’objets base que nous afficherions avec
suffit : for a in range(len(aliens)): bases[b].draw(). Mais cela ne suffit pas. Nous
aliens[a].draw(). Nous appelons ensuite devons recourir à une variable height déterminant
cette fonction depuis la fonction draw(). la hauteur de l’image à afficher. Nous avons
également besoin d’une fonction affichant
la base en fonction de cette variable. Nous
Au max la menace l’appelons drawClipped() (to clip = découper).
07 Nous ne voulons pas que les aliens se Une fois cette fonction définie (figure3.py), nous
déplacent à chaque appel de la fonction update() (à pouvons l’appeler depuis chaque acteur base avec
chaque rafraîchissement d’écran). Pour contrôler bases[b].drawClipped(), ce que nous faisons dans
la vitesse de la menace alien, nous définissons drawBases().
donc un compteur appelé moveCounter qui sera
incrémenté à chaque appel de update() et remis
à zéro lorsqu’il a atteint une certaine valeur
Astuce (moveDelay). Lorsque le compteur vaut zéro, nous
11 Des lasers pour tous
appelons, depuis update(), une fonction appelée Si nous avons construit une base de défense,
Suppression updateAliens() calculant les déplacements x c’est bien sûr pour nous protéger des lasers, mais
d’éléments et y des aliens, autrement dit leur progression aussi pour contre-attaquer avec les mêmes armes.
horizontale à travers l’écran et leur inquiétante Nous stockons tous ces lasers dans une même
Attention à ne descente lorsqu’ils atteignent les bords. liste appelée lasers[], et dotons chaque objet
pas supprimer lasers[l] d’un type : 0 pour les lasers des aliens,
l’élément d’une liste
1 pour ceux du joueur. À chaque objet laser est
parcourue avec
Destin animé
range (len(list)) : la
longueur de la liste
08 Pour contrôler cette progression, nous
également affectée une variable d’état status. Les
fonctions de création et de mise à jour des lasers
en fin de boucle utilisons une boucle allant de 0 à 40. De 0 à 9, les sont similaires à celles déjà vues pour d’autres
serait différente de
aliens iront vers la gauche. À 10, ils iront vers le éléments (figure4.py).
sa longueur initiale,
ce qui retournerait bas. De 11 à 29, ils se déplaceront vers la droite.
une erreur. À 30, ils progresseront vers le bas et, enfin, de 31
à 40 ils iront vers la gauche. Le listage figure2.py

44 magpi.fr Pygame Zero Invaders (I)

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 44 20/12/2018 13:04


TUTORIEL

Tirer dans le bon sens


12 Comme le montre le code du listage
figure4.py, la fonction checkKeys() crée un laser
figure3.py
de type 1 (pour le joueur) lorsque l’objet keyboard
détecte une pression de la touche Espace (space). 001. def drawClipped(self):
L’image représentant le laser est dans ce cas 002. screen.surface.blit(self._surf, (self.x-32, self.y-
laser2.png (laser bleu). Une fois le nouveau laser self.height+30),(0,0,64,self.height))
ajouté à la liste des lasers, nous l’affichons en 003.
appelant drawLasers() depuis draw(). La fonction 004. def initBases():
updateLasers() parcourt la liste lasers et lit le 005. global bases
type de l’élément : s’il vaut 1 (joueur), le laser est 006. bases = []
déplacé vers le haut et nous vérifions s’il a ou non 007. bc = 0
touché quelque chose. Notez les dernières lignes 008. for b in range(3):
appelant listCleanup(). Nous y revenons de suite. 009. for p in range(3):
010. bases.append(Actor("base1",
midbottom=(150+(b*200)+(p*40),520)))
011. bases[bc].drawClipped = drawClipped.__get__
Collisions (bases[bc])
13 Voyons d’abord checkPlayerLaserHit(). 012. bases[bc].height = 60
Nous vérifions si le laser a touché un alien en 013. bc +=1
parcourant la liste aliens[] et en utilisant 014.
pour chacun de ses éléments la méthode 015. def drawBases():
collidepoint((lasers[l].x, lasers[l].y)). 016. for b in range(len(bases)): bases[b].drawClipped()
C’est ici qu’entrent en jeu nos variables d’état
status. Plutôt que de supprimer à l’intérieur de
cc Positionnement des
la boucle l’alien et le laser si l’alien a été touché, bases et affichage
nous les étiquetons comme prêts à être supprimés et provoquerait une erreur en fin de boucle. La d’une image
­découpée.
en affectant 1 à leur variable status. Supprimer suppression se fait donc après exécution de la
un élément durant le parcours de la boucle boucle avec listCleanup().
modifierait en effet la longueur initiale de la liste

Astuce
Faciliter la
lecture du code

Pour éviter les


longs blocs de
code associés à
un objet particulier
dans les fonctions
draw() ou
update(), écrivez
ce code dans une
fonction séparée
au nom explicite,
drawLasers() p. ex.

Pygame Zero Invaders (I) magpi.fr 45

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 45 20/12/2018 13:04


TUTORIEL

devons écrire notre propre fonction pour détecter

figure4.py une collision entre un objet laser et une base. Nous


la nommons collideLaser() et la chargeons de
comparer les coordonnées d’un objet laser avec
001. def checkKeys(): celles d’une base en prenant en compte sa hauteur.
002. global player, lasers Cette fonction sera attachée aux objets base au
003. if keyboard.space: moment de leur création, et servira à détecter les
004. l = len(lasers) collisions des lasers des aliens et aussi de ceux
005. lasers.append(Actor("laser2", du joueur. Nous supprimons le laser s’il touche
(player.x,player.y-32))) un objet, et s’il s’agit d’un laser d’alien nous
006. lasers[l].status = 0 réduisons la hauteur de la base touchée.
007. lasers[l].type = 1
008.
009. def drawLasers():
010. for l in range(len(lasers)): lasers[l].draw() Pour une guerre juste et durable
011.
16 Notre code permet de modifier le nombre
012. def updateLasers(): de lasers tirés par les aliens, mais pour le moment
013. global lasers, aliens le vaisseau peut déclencher un tir de laser à
014. for l in range(len(lasers)): chaque appel d’update(). Le joueur pourrait
015. if lasers[l].type == 0: même déclencher un tir constant en maintenant
016. lasers[l].y += (2*DIFFICULTY) enfoncée la touche Espace, ce qui serait injuste
017. checkLaserHit(l) envers les pauvres aliens, mais surtout affecterait
018. if lasers[l].y > 600: lasers[l].status = 1 la vitesse du jeu. Nous allons donc contraindre la
019. if lasers[l].type == 1: cadence de tir au moyen de l’objet clock de Pygame
020. lasers[l].y -= 5 Zero. Nous ajoutons une variable laserActive à
021. checkPlayerLaserHit(l) l’acteur player, mettons sa valeur à zéro lorsque
022. if lasers[l].y < 10: lasers[l].status = 1 le joueur tire, et écrivons aussitôt après clock.
023. lasers = listCleanup(lasers) schedule(makeLaserActive, 1.0), instruction
024. aliens = listCleanup(aliens) signifiant : appeler la fonction makeLaserActive()
dans 1 s.

cc Lecture du
clavier, création et
Nettoyer le champ de bataille
14
déplacement des
lasers, et vérification
La fonction listCleanup() crée une Nous sommes touchés !
des collisions.
nouvelle liste vide newList, puis parcourt la liste
17 Écrivons maintenant les conséquences
qui lui a été passée en argument, ne transférant d’un tir ennemi sur le vaisseau du joueur. Nous
dans newList que les éléments dont status vaut 0. créerons pour cela une animation composée
La nouvelle liste est retournée et affectée à la de cinq images d’explosions stockée dans une
liste lasers (ou aliens). Il est facile d’adapter liste images[] attachée au joueur. Le premier
aux lasers des aliens tout ce que nous venons élément de cette liste est l’image du vaisseau

Astuce de créer pour les lasers du joueur. Par exemple,


plutôt que de lire le clavier en attente de la touche
en bon état. Nous importons le module Math et
écrivons, dans draw(), la ligne player.image =
Espace, nous déclenchons les tirs à intervalles player.images[math.floor(player.status/6)]. Cette
Regrouper aléatoires en utilisant if randint(0, 5) == 0: dans instruction affiche l’image du vaisseau en bon état
le code
updateAliens(). L’objet laser a cette fois-ci le tant que player.status vaut 0. Lorsque status est
d’initialisation
type 0, et nous le déplaçons vers le bas de l’écran mis à 1, c’est-à-dire quand le vaisseau est touché,
Dans la mesure du dans updateLasers(). la ligne if player.status > 0: player.status += 1 de
possible, tout code la fonction update() a pour effet d’afficher l’une
servant à initialiser après l’autre les images de l’explosion à mesure
le jeu devrait être
qu’augmente la valeur de status.
placé à un endroit
Destruction des bases
du programme
facilitant son
15 Comme nous souhaitons modifier la hauteur
redémarrage. de l’image représentant un acteur base, nous
Initialisation
ne pouvons pas utiliser directement la fonction
de détection de collision de Pygame Zero. Nous
18 Il pourra sembler illogique d’aborder

46 magpi.fr Pygame Zero Invaders (I)

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 46 20/12/2018 13:04


TUTORIEL

l’initialisation du jeu en fin de tutoriel, mais


comment faire autrement ? Il nous fallait
bien décrire les éléments du jeu afin que vous
compreniez ce qu’il est nécessaire de paramétrer
figure5.py
en début de partie. J’ai mentionné à l’étape 04 la
fonction init() déclenchant cette initialisation, 001. def init():
que ce soit pour démarrer une partie ou en lancer 002. global lasers, score, player, moveSequence,
une nouvelle. Le listage figure5.py montre toutes moveCounter, moveDelay
les variables et fonctions d’initialisation qu’elle 003. initAliens()
utilise. 004. initBases()
005. moveCounter = moveSequence = player.status = score =
player.laserCountdown = 0
Finitions 006. lasers = []
19 Pour conclure, apportons quelques finitions 007. moveDelay = 30
au jeu. Nous définissons et initialisons à 1 une 008. player.images = ["player","explosion1","explosion2",
variable DIFFICULTY en début de code. Elle est "explosion3","explosion4","explosion5"]
utilisée par divers éléments et permet de corser 009. player.laserActive = 1
la difficulté du jeu. Pour le score, nous ajoutons
1000 à une variable globale score chaque fois cc L’appel de la
qu’un alien est touché, score que nous affichons fonction init()
initialise toutes les
en haut et à droite de l’écran. Nous affichons ajouterons du son, des niveaux de jeu, des vies, un variables de jeu à
également un message de fin de partie lorsque tous vaisseau spatial et un tableau de classement. leurs valeurs de
départ.
les aliens ont été tués ou lorsque le joueur a été (VF : Hervé Moreau)
touché (cf. le code complet). Et voilà, nous avons
écrit un jeu Space Invaders ! Il reste cependant
assez sommaire. Dans la prochaine partie, nous lui

ee L’écran de fin de
partie (peut mieux
faire).

Astuce
Initialisation
simultanée de
variables
Initialisation
simultanée de
variables
Il est possible
d’initialiser en
une seule ligne
plusieurs variables
de même valeur :
a = b = c = 0
affecte à a, b et c la
valeur 0.

Pygame Zero Invaders (I) magpi.fr 47

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 47 20/12/2018 13:04


TUTORIEL

invaderspart1.py
> Language: Python

001. import pgzrun 042.


002. from random import randint 043. def checkKeys():
003. import math 044. global player, lasers
004. DIFFICULTY = 1 045. if keyboard.left:
005. player = Actor("player", (400, 550)) # Load in the 046. if player.x > 40: player.x -= 5
player Actor image 047. if keyboard.right:
006. 048. if player.x < 760: player.x += 5
007. def draw(): # Pygame Zero draw function 049. if keyboard.space:
008. screen.blit('background', (0, 0)) 050. if player.laserActive == 1:
009. player.image = 051. player.laserActive = 0
player.images[math.floor(player.status/6)] 052. clock.schedule(makeLaserActive, 1.0)
010. player.draw() 053. l = len(lasers)
011. drawLasers() 054. lasers.append(Actor("laser2",
012. drawAliens() (player.x,player.y-32)))
013. drawBases() 055. lasers[l].status = 0
014. screen.draw.text(str(score), topright= 056. lasers[l].type = 1
(780, 10), owidth=0.5, ocolor=(255,255,255), 057.
color=(0,64,255), fontsize=60) 058. def makeLaserActive():
015. if player.status >= 30: 059. global player
016. screen.draw.text("GAME OVER\nPress Enter 060. player.laserActive = 1
to play again" , center=(400, 300), 061.
owidth=0.5, ocolor=(255,255,255), 062. def checkBases():
color=(255,64,0), fontsize=60) 063. for b in range(len(bases)):
017. if len(aliens) == 0 : 064. if l < len(bases):
018. screen.draw.text("YOU WON!\nPress Enter 065. if bases[b].height < 5:
to play again" , center=(400, 300), owidth=0.5, 066. del bases[b]
ocolor=(255,255,255), color=(255,64,0) , 067.
fontsize=60) 068. def updateLasers():
019. 069. global lasers, aliens
020. def update(): # Pygame Zero update function 070. for l in range(len(lasers)):
021. global moveCounter,player 071. if lasers[l].type == 0:
022. if player.status < 30 and len(aliens) > 0: 072. lasers[l].y += (2*DIFFICULTY)
023. checkKeys() 073. checkLaserHit(l)
024. updateLasers() 074. if lasers[l].y > 600:
025. moveCounter += 1 075. lasers[l].status = 1
026. if moveCounter == moveDelay: 076. if lasers[l].type == 1:
027. moveCounter = 0 077. lasers[l].y -= 5
028. updateAliens() 078. checkPlayerLaserHit(l)
029. if player.status > 0: player.status += 1 079. if lasers[l].y < 10:
030. else: 080. lasers[l].status = 1
031. if keyboard.RETURN: init() 081. lasers = listCleanup(lasers)
032. 082. aliens = listCleanup(aliens)
033. def drawAliens(): 083.
034. for a in range(len(aliens)): aliens[a].draw() 084. def listCleanup(l):
035. 085. newList = []
036. def drawBases(): 086. for i in range(len(l)):
037. for b in range(len(bases)): 087. if l[i].status == 0: newList.append(l[i])
038. bases[b].drawClipped() 088. return newList
039. 089.
040. def drawLasers(): 090. def checkLaserHit(l):
041. for l in range(len(lasers)): lasers[l].draw() 091. global player

48 magpi.fr Pygame Zero Invaders (I)

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 48 20/12/2018 13:04


TUTORIEL

TÉLÉCHARGEMENT
DU CODE COMPLET :
magpi.cc/lwqLZj

092. if player.collidepoint((lasers[l].x, moveCounter, moveDelay


lasers[l].y)): 138. initAliens()
093. player.status = 1 139. initBases()
094. lasers[l].status = 1 140. moveCounter = moveSequence = player.status =
095. for b in range(len(bases)): score = player.laserCountdown = 0
096. if bases[b].collideLaser(lasers[l]): 141. lasers = []
097. bases[b].height -= 10 142. moveDelay = 30
098. lasers[l].status = 1 143. player.images =
099. ["player","explosion1","explosion2",
100. def checkPlayerLaserHit(l): "explosion3","explosion4","explosion5"]
101. global score 144. player.laserActive = 1
102. for b in range(len(bases)): 145.
103. if bases[b].collideLaser(lasers[l]): 146. def initAliens():
104. lasers[l].status = 1 147. global aliens
105. for a in range(len(aliens)): 148. aliens = []
106. if aliens[a].collidepoint((lasers[l].x, 149. for a in range(18):
lasers[l].y)): 150. aliens.append(Actor("alien1", (210+
107. lasers[l].status = 1 151. (a % 6)*80,100+(int(a/6)*64))))
108. aliens[a].status = 1 152. aliens[a].status = 0
109. score += 1000 153.
110. 154. def drawClipped(self):
111. def updateAliens(): 155. screen.surface.blit(self._surf, (self.x-32,
112. global moveSequence, lasers, moveDelay self.y-self.height+30),(0,0,64,self.height))
113. movex = movey = 0 156.
114. if moveSequence < 10 or moveSequence > 30: 157. def collideLaser(self, other):
115. movex = -15 158. return (
116. if moveSequence == 10 or moveSequence == 30: 159. self.x-20 < other.x+5 and
117. movey = 50 + (10 * DIFFICULTY) 160. self.y-self.height+30 < other.y and
118. moveDelay -= 1 161. self.x+32 > other.x+5 and
119. if moveSequence >10 and moveSequence < 30: 162. self.y-self.height+30 + self.height >
120. movex = 15 other.y
121. for a in range(len(aliens)): 163. )
122. animate(aliens[a], pos=(aliens[a].x + movex, 164.
aliens[a].y + movey), duration=0.5, tween='linear') 165. def initBases():
123. if randint(0, 1) == 0: 166. global bases
124. aliens[a].image = "alien1" 167. bases = []
125. else: 168. bc = 0
126. aliens[a].image = "alien1b" 169. for b in range(3):
127. if randint(0, 5) == 0: 170. for p in range(3):
128. lasers.append(Actor("laser1", 171. bases.append(Actor("base1",
(aliens[a].x,aliens[a].y))) midbottom=(150+(b*200)+(p*40),520)))
129. lasers[len(lasers)-1].status = 0 172. bases[bc].drawClipped =
130. lasers[len(lasers)-1].type = 0 drawClipped.__get__(bases[bc])
131. if aliens[a].y > 500 and player.status == 173. bases[bc].collideLaser =
0: collideLaser.__get__(bases[bc])
132. player.status = 1 174. bases[bc].height = 60
133. moveSequence +=1 175. bc +=1
134. if moveSequence == 40: moveSequence = 0 176.
135. 177. init()
136. def init(): 178. pgzrun.go()
137. global lasers, score, player, moveSequence,

Pygame Zero Invaders (I) magpi.fr 49

042-049_MagPi06_PyGame-TUTORIAL_FR.indd 49 20/12/2018 13:04


TUTORIEL

Pygame Zero
Invaders (II)
Dans cette seconde et dernière partie, nous allons greffer au
code précédent divers éléments graphiques et sonores qui
rendront le jeu plus attrayant et plus proche de l’original.

P
our rappel, dans la première partie nous traditionnellement trois vies au joueur. Nous le
Mark avons codé le déplacement du vaisseau du ferons ici aussi en écrivant, dans la fonction init(),
MAKER

Vanstone joueur, celui des aliens, les bases de défense, la ligne player.lives = 3. Pendant que nous
ainsi que les interactions entre les tirs et les sommes dans init(), ajoutons la ligne player.name
Auteur de
éléments de la scène. Le code et les images de cette = «». La variable name servira plus tard à afficher le
logiciels
éducatifs dans première mouture sont sur GitHub (magpi.cc/ nom du joueur sur le tableau des meilleurs scores.
les années 1990, JxQrdd). Nous allons compléter ce code en ajoutant L’affichage du nombre de vies est quant à lui confié
dont la série des vies, des niveaux de jeu, un vaisseau spatial, à une fonction drawLive() appelée depuis draw().
ArcVenture, un écran d’accueil, un tableau des meilleurs scores Elle contient une boucle affichant en haut et à
perdue corps
et biens dans
et, bien sûr, des effets sonores « comme si vous y gauche de l’écran autant de vaisseaux (life.png) que
l’océan des étiez » (ou presque). de vies restantes (figure1.py).
logiciels, mais
sauvée de l’oubli
par le RPi !
On ne vit que trois fois Relevé de compteur
magpi.cc/YiZnxl 01 Les jeux de type Space Invaders accordent
02 Maintenant que nous disposons d’un
@mindexplorers

L’écran de Le joueur débute la partie


démarrage demande avec trois vies.
au joueur d’entrer
son nom.

Ingrédients

> Les images de


magpi.cc/mYSswY
ou les vôtres
> La dernière ver-
sion de Pygame
Zero (1.2)
> Les sons de
magpi.cc/mYSswY
ou les vôtres
> Des haut-parleurs Un vaisseau spatial Les scores précédents
ou un casque Le joueur passe au niveau suivant apparaît de temps en sont affichés sur le
audio lorsqu’il a tué tous les aliens. temps. tableau de classement.

50 magpi.fr Pygame Zero Invaders (II)

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 50 20/12/2018 13:15


TUTORIEL

compteur de vies, nous devons traiter les cas


où une vie est perdue. Le code de la première
figure1.py
partie décrétait la fin de jeu lorsque player.
status atteignait 30. Notre nouvelle fonction 001. def draw()
update() teste à la fois player.status et le nombre 002. # additional drawing code
d’aliens encore en vie (ligne 022 de figure1.py), 003. drawLives()
et décrémente le nombre de vies du joueur avec 004. if player.status >= 30:
player.lives -=1 si player.status vaut 30. Le code 005. if player.lives > 0:
vérifie aussi si le joueur a encore des vies lorsqu’il 006. drawCentreText(
appuie sur la touche Entrée (RETURN). "YOU WERE HIT!\nPress Enter to re-spawn")
007. else:
008. drawCentreText(
Nouvelle chance "GAME OVER!\nPress Enter to continue")
03 Après décrémentation de player.lives 009.
et pression sur Entrée par le joueur, tout ce que 010. def init():
nous avons à faire pour relancer les attaques est 011. # additional player variables
de mettre player.status à 0. Nous réinitialisons 012. player.lives = 3
également la liste des lasers avec lasers = [] pour 013. player.name = ""
laisser une chance au joueur au cas où un déluge 014.
de lasers lui aurait fait perdre plusieurs vie en une 015. def drawLives():
seule fois. S’il ne lui restait qu’une seule vie, le 016. for l in range(player.lives):
code affiche le tableau des scores (figure1.py). 017. screen.blit("life", (10+(l*32),10))
018.
019. def update():
Niveaux et difficulté 020. # additional code for life handling
04 Le principe des niveaux est de démarrer la 021. global player, lasers
partie avec un scénario d’attaque facile à contrer, 022. if player.status < 30 and len(aliens) > 0:
et ensuite d’augmenter la difficulté chaque fois 023. if player.status > 0:
que le joueur a eu raison d’une vague d’aliens. 024. player.status += 1
C’est ce que nous ferons en modifiant la valeur de 025. if player.status == 30:
variables pertinentes par le biais d’une variable 026. player.lives -= 1
globale level qui sera incrémentée à chaque 027. else:
nouveau niveau. Nous la définissons dans init() 028. if keyboard.RETURN:
et l’initialisons à 1 avec level = 1. Illustrons 029. if player.lives > 0:
cette technique avec la vitesse de déplacement 030. player.status = 0
verticale (movey) des aliens. Pour la relier au 031. lasers = []
niveau en cours, nous écrivons, dans la fonction 032. else:
updateAliens() et en la conditionnant à la valeur 033. # go to the leader-board
de moveSequence (10 ou 30), l’instruction movey = 034. pass
40 + (5*level). 035.
036. def drawCentreText(t):
037. screen.draw.text(t , center=(400, 300), owidth=0.5,
Franchissement d’un niveau ocolor=(255,255,255), color=(255,64,0) , fontsize=60)
05 Pour passer au niveau suivant, le joueur
doit tuer tous les aliens. Nous savons qu’il
cc Code de gestion
n’en reste aucun si len(aliens) = 0. Nous des vies du joueur.
Formatage du texte
06
pouvons donc écrire dans draw() une condition Notez la fonction
drawCentreText()
if len(aliens) == 0:, puis afficher un texte Le code figure1.py contient deux appels et son paramètre t
pour l’affichage de
annonçant que le niveau a été franchi. Nous à une fonction drawCentreText(). Son nom est texte.
écrivons la même condition if dans le bloc de sans doute explicite : elle positionne du texte
la fonction update() attendant une pression de au centre de l’écran dont les coordonnées sont
RETURN. Si cette touche Entrée a été pressée et ici (400,300). Sa définition ne comprend qu’une
si la longueur de la liste des aliens vaut 0, nous seule ligne : screen.draw.text(t, center=(400,
incrémentons level et appelons initAliens() et 300), owidth=0.5, ocolor=(255,255,255),
initBases() pour initialiser le niveau suivant. color=(255,64,0), fontsize=60), t étant le

Pygame Zero Invaders (II) magpi.fr 51

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 51 20/12/2018 13:15


TUTORIEL

figure2.py
001. def updateBoss():
002. global boss, level, player, lasers
003. if boss.active:
004. boss.y += (0.3*level)
005. if boss.direction == 0: boss.x -= (1* level)
006. else: boss.x += (1* level)
007. if boss.x < 100: boss.direction = 1 cc Les lasers sont dangereux. Pour votre santé, bougez.
008. if boss.x > 700: boss.direction = 0
009. if boss.y > 500:
010. sounds.explosion.play() qui sera appelée depuis update(). Son rôle est de
011. player.status = 1 mettre à jour les coordonnées de l’acteur boss s’il
012. boss.active = False est actif ou, s’il ne l’est pas, d’éventuellement le
013. if randint(0, 30) == 0: faire intervenir (figure2.py).
014. lasers.append(Actor("laser1",
(boss.x,boss.y)))
015. lasers[len(lasers)-1].status = 0 Boum zif zouf
016. lasers[len(lasers)-1].type = 0
09 Comme le montre la ligne sounds.
017. else: explosion.play() du code figure2.py, le
018. if randint(0, 800) == 0: chargement et la lecture d’un fichier son se font
019. boss.active = True avec l’objet sounds et la méthode play() de
020. boss.x = 800 Pygame Zero. Il s’agit ici du fichier explosion.
021. boss.y = 100 wav de sounds/, le dossier par défaut dans lequel
022. boss.direction = 0 Pygame Zero cherche les fichiers son. Notez que la
durée d’un effet sonore enregistré au format WAV
doit être relativement courte. Un logiciel comme
cc Le code met à jour
les coordonnées du paramètre passé à la fonction. Les arguments tels Audacity permet d’éditer les fichiers WAV. Le code
vaisseau boss s’il que color et fontsize sont des attributs de texte (cf. complet lit de la même façon les bruitages gun.wav
est actif, ou le rend
actif en fonction la documentation). et laser.wav.
du résultat d’un
tirage de nombres
aléatoires.
Vaisseau spatial Comment devenir boss
07 Apportons un peu de piquant au jeu en
10 Comme nous l’avons dit plus haut, ce sont
mêlant un vaisseau spatial à la bataille. Nous des nombres aléatoires qui décident quand le
déciderons du moment de son intervention à l’aide vaisseau boss devient actif et à quels moments
de la fonction randint() de génération de nombres il tire. Il suffit de modifier les valeurs a et b de
aléatoires. Ce belligérant supplémentaire et unique randint(a,b) pour obtenir un comportement
sera appelé boss et sera représenté par un acteur différent (figure2.py). Notez également la façon
dont l’image est boss.png. Nous le déclarons en dont est calculée la trajectoire diagonale du boss.
début de code sans initialiser ses coordonnées Ici aussi la valeur de la variable level permet de
puisqu’il n’apparaîtra qu’une fois la bataille modifier ce mouvement selon le niveau du jeu.
engagée : boss = Actor(«boss»). Les lasers du boss sont traités comme ceux des
aliens, mais nous devons ajouter à la fonction
checkPlayerLaserHit() un bloc de code vérifiant si
Un boss pas toujours actif
08 Le vaisseau boss n’intervenant donc
le boss a été touché par le joueur.

qu’après le démarrage du jeu, nous écrivons dans la


L’utile gameStatus
fonction init() l’affectation boss.active = False,
puis, dans draw(), l’instruction if boss.active:
11 Si nous voulons afficher un tableau des
boss.draw(), à comprendre comme : ne pas meilleurs scores une fois que le joueur a épuisé
afficher le boss tant qu’il n’a pas été activé. Nous ses trois vies, il nous faudra non seulement
définissons ensuite une fonction updateBoss() un écran séparé pour ce tableau, mais aussi un

52 magpi.fr Pygame Zero Invaders (II)

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 52 20/12/2018 13:15


TUTORIEL

écran invitant le joueur à entrer son nom afin


que nous puissions l’associer à son score final.
Avec ce que nous pouvons appeler l’écran de
figure3.py
jeu proprement dit, cela fait trois écrans. Nous
avons déjà utilisé dans cette série une variable 001. def on_key_down(key):
gameStatus pour enregistrer divers états de jeu et 002. global player
contrôler l’affichage de différents écrans. La même 003. if gameStatus == 0 and key.name != "RETURN":
technique nous servira ici. 004. if len(key.name) == 1:
005. player.name += key.name
006. else:
Changement d’écran 007. if key.name == "BACKSPACE":
12 Nous aurons besoin de trois états pour 008. player.name = player.name[:-1]
la variable gameStatus. La valeur 0 sera pour
l’affichage de l’écran d’accueil et l’enregistrement
cc Code de lecture de
du nom du joueur, la valeur 1 pour le lancement du l’entrée clavier pour
Tableau des meilleurs scores enregistrer le nom du
jeu, et 2 pour l’affichage du tableau de classement.
Commençons par l’écran d’accueil. Nous
15 Venons-en au code du tableau de classe-
joueur demandé sur
l’écran d’accueil.
initialisons gameStatus à 0 en début de code, puis ment qu’attendait en particulier le commentaire
ajoutons, dans la fonction draw(), la condition if # go to the leader-board du listage figure1.py.
gameStatus == 0:. Nous la faisons suivre d’un appel Nous voulons afficher le tableau après que le joueur
à drawCentreText() dont l’argument est le message a perdu sa dernière vie. Lorsque cela arrive, nous
d’accueil, puis nous affichons la chaîne player. affectons 2 à gameStatus et ajoutons, dans draw()
name, chaîne qui sera initialement vide. et dans update(), une condition if gameStatus ==
2: suivie d’un appel à drawHighScore(), la fonction
qui affichera les meilleurs scores.

Appelez-moi Exterminator
13 Sauvegarde des scores
Le message d’accueil invite le joueur à
entrer son nom. Pour le lire et l’enregistrer,
16 Pour être en mesure de comparer le
nous écrivons une routine d’entrée très simple score final à d’anciens scores, nous devons les
et la plaçons dans la fonction on_key_down() de enregistrer quelque part. Un simple fichier texte
Pygame Zero (figure3.py). Le code lit le nom de la nous suffira. Supposons que le joueur ait réalisé
touche pressée par le joueur et l’ajoute à la chaîne un nouveau score. Nous devons lire la liste des
player.name. Si le joueur corrige son entrée avec scores précédents, y ajouter le nouveau, trier
BACKSPACE, nous effaçons le dernier caractère cette nouvelle liste, et enfin la sauvegarder. Trois
entré avec une instruction astucieuse : player.name instructions successives ajoutées à update() y
= player.name[:-1]. Notez que nous ignorons la pourvoiront : un appel (ligne 065) à une fonction
touche RETURN puisque nous pouvons la traiter nommée readHighScore(), une affectation mettant
dans update(). gameStatus à 2, et un appel à une fonction nommée
writeHighScore().
Anciens
Après vous, Exterminator Lecture, écriture et affichag tutoriels
14 Une fois que le joueur a saisi son nom, tout
17 Les définitions des trois fonctions
ce qu’il reste à faire est de détecter la pression de précédentes, drawHighScore(), readHighScore(),
Le premier
la touche RETURN dans update(), puis de passer et writeHighScore() sont reproduites sur le listage
tutoriel
au jeu. Pour cela nous écrivons simplement if figure4.py. Les fonctions de lecture/écriture de consacré à
gameStatus == 0: suivi de if keyboard.RETURN fichier telles qu’open et write sont des fonctions du Pygame Zero a
and player.name != «»: gameStatus = 1. Il nous langage Python. Dans la fonction readHighScore(), été publié dans
faut également conditionner le code principal chaque ligne du fichier highscores.txt est ajoutée à le numéro 4 du
MagPi français,
d’update() à cette valeur 1. Nous le faisons en une liste qui est ensuite triée par ordre décroissant.
les deux
ajoutant au début de cette fonction la ligne if La fonction writeHighScore() écrit simplement suivants dans le
gameStatus == 1:. Ajoutons cette même condition chaque élément de cette liste triée dans le fichier. numéro 5.
dans draw(), et voilà, nous disposons d’un système La fonction d’affichage n’a alors plus qu’à
pour passer de l’écran d’accueil au jeu. parcourir ce fichier et à en afficher les lignes.

Pygame Zero Invaders (II) magpi.fr 53

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 53 20/12/2018 13:15


TUTORIEL

figure4.py
001. def readHighScore():
002. global highScore, score, player
003. highScore = []
004. try:
005. hsFile = open("highscores.txt", "r")
006. for line in hsFile:
cc Message affiché lorsqu’un niveau a été franchi.
007. highScore.append(line.rstrip())
008. except:
009. pass conversion tous les scores commençant par 9
010. highScore.append(str(score)+ " " + player.name) viendraient en premier, puis ceux commençant
011. highScore.sort(key=natural_key, reverse=True) par 8, etc. Autrement dit 9000 serait affiché
012. avant 80400.
013. def natural_key(string_):
014. return [int(s) if s.isdigit() else s for s in
re.split(r'(\d+)', string_)] Conclusion
015.
19 Nous en avons terminé avec le code du jeu,
016. def writeHighScore(): mais que diriez-vous de le compléter, p. ex. en
017. global highScore utilisant la variable level pour varier les niveaux et
018. hsFile = open("highscores.txt", "w") leur difficulté ? Vous pourriez aussi vous amuser
019. for line in highScore: à créer de nouveaux aliens et à faire en sorte qu’il
020. hsFile.write(line + "\n") y en ait un type par rangée. Nos bruitages aussi
021. pourraient être améliorés, car avec eux, pour sûr ce
022. def drawHighScore(): n’est pas tout à fait Star Wars !
023. global highScore (VF : Hervé Moreau)
024. y = 0
025. screen.draw.text("TOP SCORES", midtop=(400, 30),
owidth=0.5, ocolor=(255,255,255), color=(0,64,255) ,
fontsize=60)
026. for line in highScore:
027. if y < 400:
028. screen.draw.text(line, midtop=(400, 100+y),
owidth=0.5, ocolor=(0,0,255), color=(255,255,0) ,
fontsize=50)
029. y += 50
030. screen.draw.text("Press Escape to play again" ,
center=(400, 550), owidth=0.5, ocolor=(255,255,255),
color=(255,64,0) , fontsize=60)

cc Fonctions de
lecture, tri, écriture
Tri des scores
et affichage des
meilleurs scores. 18 Le tri des scores mérite un commentaire.
Dans le listage figure4.py, la fonction sort()
triant la liste highScore utilise un paramètre key.
Ce paramètre spécifie la fonction à appeler sur
chaque élément de la liste avant d’effectuer le tri.
La fonction appelée ici est natural_key(), et son
rôle est de convertir en type integer (entier) les
éléments de type string (chaîne de caractères).
La liste est en effet de type chaîne, et sans cette

54 magpi.fr Pygame Zero Invaders (II)

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 54 20/12/2018 13:15


TUTORIEL

invaderspart2.py TÉLÉCHARGEMENT DU
CODE COMPLET :
> Language: Python magpi.cc/gRWABf

001. import pgzrun, math, re, time 038. if gameStatus == 0:


002. from random import randint 039. if keyboard.RETURN and player.name != "":
003. player = Actor("player", (400, 550)) 040. gameStatus = 1
004. boss = Actor("boss") 041. if gameStatus == 1:
005. gameStatus = 0 042. if player.status < 30 and len(aliens) > 0:
006. highScore = [] 043. checkKeys()
007. 044. updateLasers()
008. def draw(): # Pygame Zero draw function 045. updateBoss()
009. screen.blit('background', (0, 0)) 046. if moveCounter == 0: updateAliens()
010. if gameStatus == 0: # display the title page 047. moveCounter += 1
011. drawCentreText("PYGAME ZERO INVADERS\n\n\ 048. if moveCounter == moveDelay:
nType your name then\npress Enter to start\n(arrow 049. moveCounter = 0
keys move, space to fire)") 050. if player.status > 0:
012. screen.draw.text(player.name , 051. player.status += 1
center=(400, 500), owidth=0.5, ocolor=(255,0,0), 052. if player.status == 30:
color=(0,64,255) , fontsize=60) 053. player.lives -= 1
013. if gameStatus == 1: # playing the game 054. else:
014. player.image = 055. if keyboard.RETURN:
player.images[math.floor(player.status/6)] 056. if player.lives > 0:
015. player.draw() 057. player.status = 0
016. if boss.active: boss.draw() 058. lasers = []
017. drawLasers() 059. if len(aliens) == 0:
018. drawAliens() 060. level += 1
019. drawBases() 061. boss.active = False
020. screen.draw.text(str(score) , 062. initAliens()
topright=(780, 10), owidth=0.5, 063. initBases()
ocolor=(255,255,255), color=(0,64,255) , 064. else:
fontsize=60) 065. readHighScore()
021. screen.draw.text("LEVEL " + 066. gameStatus = 2
str(level) , midtop=(400, 10), owidth=0.5, 067. writeHighScore()
ocolor=(255,255,255), color=(0,64,255) , 068. if gameStatus == 2:
fontsize=60) 069. if keyboard.ESCAPE:
022. drawLives() 070. init()
023. if player.status >= 30: 071. gameStatus = 0
024. if player.lives > 0: 072.
025. drawCentreText( 073. def on_key_down(key):
"YOU WERE HIT!\nPress Enter to re-spawn") 074. global player
026. else: 075. if gameStatus == 0 and key.name != "RETURN":
027. drawCentreText( 076. if len(key.name) == 1:
"GAME OVER!\nPress Enter to continue") 077. player.name += key.name
028. if len(aliens) == 0 : 078. else:
029. drawCentreText("LEVEL CLEARED!\nPress 079. if key.name == "BACKSPACE":
Enter to go to the next level") 080. player.name = player.name[:-1]
030. if gameStatus == 2: # game over show the 081.
leaderboard 082. def readHighScore():
031. drawHighScore() 083. global highScore, score, player
032. 084. highScore = []
033. def drawCentreText(t): 085. try:
034. screen.draw.text(t , center=(400, 300), 086. hsFile = open("highscores.txt", "r")
owidth=0.5, ocolor=(255,255,255), color=(255,64,0) 087. for line in hsFile:
, fontsize=60) 088. highScore.append(line.rstrip())
035. 089. except:
036. def update(): # Pygame Zero update function 090. pass
037. global moveCounter, player, gameStatus, 091. highScore.append(str(score)+ " " +
lasers, level, boss player.name)

Pygame Zero Invaders (II) magpi.fr 55

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 55 20/12/2018 13:15


TUTORIEL

092. highScore.sort(key=natural_key, reverse=True) 143.


093. 144. def makeLaserActive():
094. def natural_key(string_): 145. global player
095. return [int(s) if s.isdigit() else s for s in 146. player.laserActive = 1
re.split(r'(\d+)', string_)] 147.
096. 148. def checkBases():
097. def writeHighScore(): 149. for b in range(len(bases)):
098. global highScore 150. if l < len(bases):
099. hsFile = open("highscores.txt", "w") 151. if bases[b].height < 5:
100. for line in highScore: 152. del bases[b]
101. hsFile.write(line + "\n") 153.
102. 154. def updateLasers():
103. def drawHighScore(): 155. global lasers, aliens
104. global highScore 156. for l in range(len(lasers)):
105. y = 0 157. if lasers[l].type == 0:
106. screen.draw.text("TOP SCORES", midtop= 158. lasers[l].y += 2
(400, 30), owidth=0.5, ocolor=(255,255,255), 159. checkLaserHit(l)
107. color=(0,64,255) , fontsize=60) 160. if lasers[l].y > 600:
108. for line in highScore: 161. lasers[l].status = 1
109. if y < 400: 162. if lasers[l].type == 1:
110. screen.draw.text(line, midtop= 163. lasers[l].y -= 5
(400, 100+y), owidth=0.5, ocolor=(0,0,255), 164. checkPlayerLaserHit(l)
color=(255,255,0) , fontsize=50) 165. if lasers[l].y < 10:
111. y += 50 166. lasers[l].status = 1
112. screen.draw.text( 167. lasers = listCleanup(lasers)
"Press Escape to play again" , center= 168. aliens = listCleanup(aliens)
(400, 550), owidth=0.5, ocolor=(255,255,255), 169.
color=(255,64,0) , fontsize=60) 170. def listCleanup(l):
113. 171. newList = []
114. def drawLives(): 172. for i in range(len(l)):
115. for l in range(player.lives): 173. if l[i].status == 0:
116. screen.blit("life", (10+(l*32),10)) 174. newList.append(l[i])
117. 175. return newList
118. def drawAliens(): 176.
119. for a in range(len(aliens)): aliens[a].draw() 177. def checkLaserHit(l):
120. 178. global player
121. def drawBases(): 179. if player.collidepoint((lasers[l].x,
122. for b in range(len(bases)): lasers[l].y)):
123. bases[b].drawClipped() 180. sounds.explosion.play()
124. 181. player.status = 1
125. def drawLasers(): 182. lasers[l].status = 1
126. for l in range(len(lasers)): lasers[l].draw() 183. for b in range(len(bases)):
127. 184. if bases[b].collideLaser(lasers[l]):
128. def checkKeys(): 185. bases[b].height -= 10
129. global player, score 186. lasers[l].status = 1
130. if keyboard.left: 187.
131. if player.x > 40: player.x -= 5 188. def checkPlayerLaserHit(l):
132. if keyboard.right: 189. global score, boss
133. if player.x < 760: player.x += 5 190. for b in range(len(bases)):
134. if keyboard.space: 191. if bases[b].collideLaser(lasers[l]):
135. if player.laserActive == 1: 192. lasers[l].status = 1
136. sounds.gun.play() 193. for a in range(len(aliens)):
137. player.laserActive = 0 194. if aliens[a].collidepoint((lasers[l].x,
138. clock.schedule(makeLaserActive, 1.0) lasers[l].y)):
139. lasers.append(Actor("laser2", 195. lasers[l].status = 1
(player.x,player.y-32))) 196. aliens[a].status = 1
140. lasers[len(lasers)-1].status = 0 197. score += 1000
141. lasers[len(lasers)-1].type = 1 198. if boss.active:
142. score -= 100 199. if boss.collidepoint((lasers[l].x,

56 magpi.fr Pygame Zero Invaders (II)

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 56 20/12/2018 13:15


TUTORIEL

200. lasers[l].y)): 254. boss.y = 100


201. lasers[l].status = 1 255. boss.direction = 0
202. boss.active = 0 256.
203. score += 5000 257. def init():
204. 258. global lasers, score, player, moveSequence,
205. def updateAliens(): moveCounter, moveDelay, level, boss
206. global moveSequence, lasers, moveDelay 259. initAliens()
207. movex = movey = 0 260. initBases()
208. if moveSequence < 10 or moveSequence > 30: 261. moveCounter = moveSequence = player.status =
209. movex = -15 score = player.laserCountdown = 0
210. if moveSequence == 10 or moveSequence == 30: 262. lasers = []
211. movey = 40 + (5*level) 263. moveDelay = 30
212. moveDelay -= 1 264. boss.active = False
213. if moveSequence >10 and moveSequence < 30: 265. player.images =
214. movex = 15 ["player","explosion1","explosion2","explosion3",
215. for a in range(len(aliens)): "explosion4","explosion5"]
216. animate(aliens[a], pos=(aliens[a].x 266. player.laserActive = 1
+ movex, aliens[a].y + movey), duration=0.5, 267. player.lives = 3
tween='linear') 268. player.name = ""
217. if randint(0, 1) == 0: 269. level = 1
218. aliens[a].image = "alien1" 270.
219. else: 271. def initAliens():
220. aliens[a].image = "alien1b" 272. global aliens, moveCounter, moveSequence
221. if randint(0, 5) == 0: 273. aliens = []
222. lasers.append(Actor("laser1", 274. moveCounter = moveSequence = 0
(aliens[a].x,aliens[a].y))) 275. for a in range(18):
223. lasers[len(lasers)-1].status = 0 276. aliens.append(Actor("alien1", (210+
224. lasers[len(lasers)-1].type = 0 (a % 6)*80,100+(int(a/6)*64))))
225. sounds.laser.play() 277. aliens[a].status = 0
226. if aliens[a].y > 500 and player.status == 278.
0: 279. def drawClipped(self):
227. sounds.explosion.play() 280. screen.surface.blit(self._surf, (self.x-32,
228. player.status = 1 self.y-self.height+30),(0,0,64,self.height))
229. player.lives = 1 281.
230. moveSequence +=1 282. def collideLaser(self, other):
231. if moveSequence == 40: moveSequence = 0 283. return (
232. 284. self.x-20 < other.x+5 and
233. def updateBoss(): 285. self.y-self.height+30 < other.y and
234. global boss, level, player, lasers 286. self.x+32 > other.x+5 and
235. if boss.active: 287. self.y-self.height+30 + self.height >
236. boss.y += (0.3*level) other.y
237. if boss.direction == 0: 288. )
238. boss.x -= (1* level) 289.
239. else: boss.x += (1* level) 290. def initBases():
240. if boss.x < 100: boss.direction = 1 291. global bases
241. if boss.x > 700: boss.direction = 0 292. bases = []
242. if boss.y > 500: 293. bc = 0
243. sounds.explosion.play() 294. for b in range(3):
244. player.status = 1 295. for p in range(3):
245. boss.active = False 296. bases.append(Actor("base1",
246. if randint(0, 30) == 0: midbottom=(150+(b*200)+(p*40),520)))
247. lasers.append(Actor("laser1", 297. bases[bc].drawClipped =
(boss.x,boss.y))) drawClipped.__get__(bases[bc])
248. lasers[len(lasers)-1].status = 0 298. bases[bc].collideLaser =
249. lasers[len(lasers)-1].type = 0 collideLaser.__get__(bases[bc])
250. else: 299. bases[bc].height = 60
251. if randint(0, 800) == 0: 300. bc +=1
252. boss.active = True 301.
253. boss.x = 800 302. init()

Pygame Zero Invaders (II) magpi.fr 57

050-057_MagPi06_Pygame-Zero-P2-TUTORIAL_FR.indd 57 20/12/2018 13:15


TUTORIEL

Détecteur de pluie
Sauve qui pleut !
Le rinçage, oui, la rincée, non : épargnez à votre linge un
retour à la case machine grâce à ce détecteur de pluie facile à
assembler.

I
PJ l arrive que la tranquillité d’une maisonnée soit Une boîte hermétique protège le RPi,
MAKER

Evans secouée par un grand « PLUIE ! », cri aussitôt le contrôleur et l’alimentation.


suivi de la tambourinade d’un escalier dévalé
PJ est ingénieur dans la panique pour rentrer au plus vite le linge
logiciel. Sa maison oublié dehors. Car s’il n’y a rien de tel qu’un linge
est envahie de Le capteur agit comme un dipôle dont
dispositifs à RPi de propre séché au grand air, il n’y a rien de plus la résistance est plus grande à l’état
son cru. Il porte des désagréable que l’odeur d’un linge mouillé par la humide qu’à l’état sec.
vêtements propres pluie. Et devoir relancer une machine n’est guère
et secs.
plus plaisant.
mrpjevans.com Ce détecteur signale par téléphone l’arrivée des
@mrpjevans premières gouttes. Il n’y a rien à souder, juste
quelques fils à brancher. Le RPi Zero W a été
choisi pour sa faible consommation et son
module Wi-Fi.

01 Préparation
du RPi
L’accès au Raspberry Pi
étant malaisé une fois le
détecteur assemblé, mieux
vaut commencer par sa
Ingrédients configuration. Installez donc une
copie de Raspbian Stretch Lite sur
> 2 capteurs de pluie une carte SD (la version Lite suffit,
+ 1 contrôleur (Rain aucun environnement de bureau
Sensor Module
n’étant nécessaire ici) et insérez la
YL-83, interface
Arduino 3,3 V-5 V carte dans le RPi. Entrez raspi-config
de Gaoxing Tech) pour paramétrer la connexion Wi-
Fi et activer l’accès SSH. Procédez au
> Petite plaque
d’essai traditionnel cérémoniel de mise à jour et
de mise à niveau avec sudo apt update
> Chargeur por-
tatif USB, p. ex. && sudo apt upgrade, redémarrez, vérifiez
PowerCore+ Mini la connexion SSH, et mettez le RPi hors
3350mAh d’Anker tension.
> Boîte en plastique
hermétique
> Fils de connexion

58 magpi.fr Détecteur de pluie Sauve qui pleut !

058-061_MagPi06_Rain-Detector-TUTORIAL_FR.indd 58 20/12/2018 13:20


TUTORIEL

Astuce
Sortez votre
paraPi
Pour que votre
précieux RPi reste
au sec en toutes
circonstances, le
trou par lequel
passent les fils doit
être aussi étroit que
possible et protégé
de la pluie.

cc Ce qu’il vous faut. Utilisez de préférence une boîte dotée d’un joint en
caoutchouc ou en silicone.

Montage des capteurs


02 Le détecteur fonctionne bien avec deux cap-
la broche GPIO n° 2 (5 V), GND à n’importe quelle
broche GND du port GPIO (p. ex. la n° 6), et D0 à la
teurs, mais vous pouvez en utiliser autant que vous broche GPIO 17 (n° 11). À D0 etA0 correspondent
le souhaitez. Fixez les deux plaques détectrices sur deux méthodes de lecture du signal. D0 est une
le couvercle avec du chatterton ou du ruban isolant, sortie numérique dont le seuil on/off est déterminé
ou imprimez le support rouge de la photo et fixez- par la position du potentiomètre de la carte. A0 est
le avec de la colle ou de la pâte adhésive (les fi- une sortie analogique dont l’intervalle des valeurs
chiers STL du support sont sur magpi.cc/DAuqUT). va de 0 à 1024 selon l’intensité de la pluie (et après
Reliez une paire de fils à chaque plaque. La pola- conversion numérique).
rité est sans importance. L’autre extrémité de ces
dd Les plaques
fils sera à enfiler dans la boîte. Percez donc à un sont reliées au
Assemblage
endroit judicieux de votre boîte un trou aussi étroit
que possible, l’objectif étant de minimiser les
05 Reliez le câble micro-USB du chargeur
contrôleur en
parallèle, pas en
série, afin que
risques d’infiltration d’eau. l’un ou l’autre des
capteurs puisse
déclencher l’alerte.
Montage des capteurs La polarité est sans
03 Le contrôleur (la petite carte livrée avec les
importance.

capteurs) détecte le courant qui apparaît lorsque


de l’eau court-circuite les pistes d’une plaque, puis
convertit ce courant en signal numérique que le RPi
exploitera. Reliez en parallèle les deux paires de
fils des capteurs sur une plaque d’essai (cf. photo,)
puis insérez-y les broches d’entrée du contrôleur
(le côté à deux connecteurs) de façon à ce que
chacune d’entre elles soit reliée à un des fils de
chaque capteur.

Câblage du contrôleur
04 La carte du contrôleur porte sur un de ses
côtés quatre broches nommées A0, D0, GND et
VCC. Munissez-vous de fils de connexion et reliez
le contrôleur au RPi de la façon suivante : VCC à

Détecteur de pluie Sauve qui pleut ! magpi.fr 59

058-061_MagPi06_Rain-Detector-TUTORIAL_FR.indd 59 20/12/2018 13:20


TUTORIEL

au RPi, placez et stabilisez l’ensemble du dispositif User Key qui vous aura été attribuée. Suivez ensuite
Astuce dans votre boîte, avec de pâte adhésive par
exemple. Fermez la boîte et vérifiez que les câbles
les instructions de création d’un Application Token
pour obtenir une clé d’API. Dans le script, entrez
Rebuté par partant des plaques ne sont ni écrasés ni trop les valeurs de vos clés là où les commentaires vous
Pushover ? tendus. Rouvrez la boîte, branchez le câble USB invitent à le faire. Installez l’appli Pushover si ce
sur le chargeur, refermez la boîte, et pour finir n’est déjà fait.
Vous pouvez vérifiez votre connexion Wi-Fi. Selon sa capacité,
remplacer la le chargeur devrait maintenir en vie le RPi Zero W
fonction pushover()
Exécution automatique
par n’importe quoi :
durant quelques heures au moins.
08 Le script doit être lancé au démarrage
l’envoi d’un mail,
d’un SMS, d’une du RPi. Pour cela créez le fichier suivant en mode
Logiciel
requête ping à
un site, voire par
06 Copiez le code du listage rainbot.py
super-utilisateur :

le lancement ou téléchargez-le depuis GitHub, et enregistrez-le sudo nano /lib/systemd/system/rainbot.


d’un feu d’artifice
sous ~/pi/rainbot. Testez le script avec python3 service
(déconseillé).
~/pi/rainbot/rainbot.py. Si tout va bien, un
résultat s’affiche toutes les cinq secondes : True s’il Ajoutez-y ces lignes :
ne pleut pas, False s’il pleut. Arrêtez le script avec
Ctrl+C. [Unit]
Description=Rainbot
After=multi-user.target
Pushover
07 J’ai choisi le service de notification Pusho- [Service]
ver pour la réception des alertes. La licence est Type=idle
définitive et coûte moins de 5 € par plateforme ExecStart=/usr/bin/python3 /home/pi/rainbot/
(Android p. ex.) après un essai gratuit de 7 jours. rainbot.py
Enregistrez-vous sur pushover.net et copiez la clé

„ Le contrôleur est
alimenté en 5 V par
le RPi Zero W. Il
convertit en signal
numérique la sortie
analogique des
deux plaques et
transmet le signal
au RPi.

60 magpi.fr Détecteur de pluie Sauve qui pleut !

058-061_MagPi06_Rain-Detector-TUTORIAL_FR.indd 60 20/12/2018 13:20


TUTORIEL

CODE COMPLET
rainbot.py SUR GITHUB :
> Langage : Python 3 magpi.cc/DAuqUT

001. from gpiozero import DigitalInputDevice


002. from time import sleep
003. import http.client, urllib.parse
004.
005. # Some setup first:
006. APP_TOKEN = 'YOUR_PUSHOVER_APP_TOKEN' # The app token -
required for Pushover
c Assurez-vous que tout est bien fixé et que les
007. USER_TOKEN = 'YOUR_PUSHOVER_USER_TOKEN' # Ths user token -
fils restent bien en place. required for Pushover
008.
009. # Set up our digital input and assume it's not currently raining
[Install] 010. rainSensor = DigitalInputDevice(17)
WantedBy=multi-user.target 011. dryLastCheck = True
012.
Sauvegardez puis quittez nano avec Ctrl+X. 013. # Send the pushover alert
Entrez les commandes suivantes : 014. def pushover(message):
015. print(message)
sudo chmod 644 /lib/systemd/system/rainbot. 016. conn = http.client.HTTPSConnection("api.pushover.net:443")
service 017. conn.request("POST", "/1/messages.json",
sudo systemctl enable rainbot.service 018. urllib.parse.urlencode({
sudo systemctl daemon-reload 019. "token": APP_TOKEN, # Insert app token here
020. "user": USER_TOKEN, # Insert user token here
Le script sera désormais lancé au redémarrage 021. "title": "Rain Detector",
(même s’il ne montre aucune sortie). Redémarrez 022. "message": message,
le RPi et testez à nouveau le détecteur avec de l’eau. 023. }), { "Content-type": "application/x-www-form-urlencoded" })
024. conn.getresponse()
025.
(Petite) pluie d’idées 026. # Loop forever
09 Le détecteur peut être amélioré ou 027. while True:
personnalisé de multiples façons. Le service 028.
Pushover est pratique, mais pas obligatoire. Vous 029. # Get the current reading
pouvez donc le remplacer par… eh bien par ce que 030. dryNow = rainSensor.value
vous voulez. La fréquence des mesures (toutes 031. print("Sensor says: " + str(dryNow))
les 5 s dans le script) peut également être modifiée. 032.
Sinon, que diriez-vous d’ajouter un convertisseur 033. if dryLastCheck and not dryNow:
analogique-numérique et d’utiliser la sortie A0 034.
pour mesurer l’intensité de la pluie ? Enregistrer 035. pushover("It's Raining!")
les données est une bonne base de départ pour 036.
construire une station météo. Enfin, un bouton 037. elif not dryLastCheck and dryNow:
pour éteindre le RPi en toute sécurité s’avèrerait 038.
bien utile. 039. pushover("Yay, no more rain!")
(VF : Hervé Moreau) 040.
041. # Remember what the reading was for next check
042. dryLastCheck = dryNow
043.
044. # Wait a bit
045. sleep(5)

Détecteur de pluie Sauve qui pleut ! magpi.fr 61

058-061_MagPi06_Rain-Detector-TUTORIAL_FR.indd 61 20/12/2018 13:20


TUTORIEL

Méli-mélo de
projets Minecraft
en langage Wolfram
Quatre petits projets. Quatre grandes idées.

L
a bibliothèque MinecraftLink (MagPi no 5 Magnify[{#["Image"], #} & /@ available,
ou magpi.cc/Luhhlw pour son instal- 0.6]
lation) va nous servir ici à convertir une
photo en blocs, à répliquer la géographie d’un
pays à partir d’une carte, à positionner des
Sélection de pixels
blocs en fonction des données d’une image to-
modensitométrique, et enfin à automatiser la
02 Comme j’envisage de regarder les blocs de
construction d’une pyramide. côté, ce qui m’intéresse ici est la couleur moyenne
Jon des faces latérales. J’ai créé à cet effet un masque
MAKER

McLoone
Rendu de photo
pour la position des pixels d’une face latérale d’un
bloc gold :
Jon McLoone
est diplômé en
mathématiques mask = Erosion[DominantColors[ , 4,
Sélection des images "CoverageImage"][[2]], 2]
de l’université de
Durham et dirige les 01 L’objectif est de remplacer les pixels d’une
services techniques,
la communication photo par des blocs de la même couleur. Le paquet Les images (textures) ayant la même forme et
et la stratégie de MinecraftLink inclut des entités MinecraftBlock la même orientation, nous pouvons appliquer
Wolfram Research du Wolfram Data Repository dont certaines ont des ce masque à chaque bloc pour sélectionner les
Europe.
images (textures) que nous pouvons analyser pour pixels de la face avant :
jon.mcloone.info déterminer la couleur moyenne d’un bloc. Elles
sont parfaites pour notre objectif. Sélectionnez mask RemoveAlphaChannel[Entity[
donc toutes les entités possédant des images/tex- "MinecraftBlock", "WoodBirch"]["Image"]]
tures, à l’exception des 8 blocs ci-dessous (glass,
leaves, cobweb, etc.), mal adaptés ici pour diverses
raisons :
Suppression du canal alpha
EntityList[Entity["MinecraftBlock",
03 Pour être certain d’obtenir des valeurs co-
Ingrédients "Image" -> ImageQ]]; hérentes, je supprime la couche de transparence
available = Complement[EntityList[Entity (AlphaChannel) et place les images dans le même
>>Raspbian à jour ["MinecraftBlock", "Image" -> ImageQ]], espace de couleur. Je demande la valeur moyenne des
>>Bibliothèque Mine- { , , pixels et je la convertis en couleur moyenne, en mode
craftLink (PacletIns- , , HSB (Teinte Saturation Valeur) car ce système est
tall [«Minecraft- , , plus proche de la perception naturelle des couleurs :
Link»])
, }]
>>Données tomoden- averageColor[block_] :=
sitométriques (op- Entrez l’instruction suivante pour visualiser ces Hue[ImageMeasurements[ColorConvert
tionnel)
entités : [RemoveAlphaChannel[block["Image"],
LightBlue], "HSB"], "Mean", Masking →

62 magpi.fr Méli-mélo de projets Minecraft en langage Wolfram

062-067_MagPi06_Minecraft-TUTORIAL_FR.indd 62 20/12/2018 13:23


TUTORIEL

La séparation des différentes La modification du seuil de


couches de densité de binairisation a mis en évidence
l’image 3D de la tête permet de la densité osseuse, en
n’en voir que le crâne. particulier les orbites.

TÉLÉCHARGEMENT
DU CODE COMPLET :
> Nom du fichier :
Minecraft
ProjectCode.nb
Même les dents sont
devenues visibles. > Langage :
Wolfram Language
magpi.cc/DJegxv

mask]]; Il ne reste ensuite plus qu’à parcourir les


colors = Map[averageColor, available] pixels de l’image obtenue, à trouver pour
chacun le nom du bloc ayant la couleur la
La commande suivante montre la palette ob- plus proche, et à placer ce bloc à l’endroit
tenue : correspondant :

ChromaticityPlot[colors] putPicture[{x0_, y0_, z0_}, img_] :=


Block[{dims = ImageDimensions[img]},
Do[
MinecraftSetBlock[{dims[[1]] - x + x0,
Recherche du bon bloc
04 y + y0, z0}, getName[RGBColor[ImageValue[img,
La fonction Nearest sachant calculer des
distances colorimétriques, je l’utilise pour obtenir
{x, y}]]]],
{x, dims[[1]]}, {y, dims[[2]]}]];
Anciens
le nom du bloc possédant la couleur la plus proche tutoriels
d’une couleur donnée :
Le premier tuto-
getName[color_] := Exécution du programme
First[Nearest[MapThread[Rule, {colors,
06 Je peux maintenant me placer dans un
riel consacré à
Minecraft et au
available}], color]]; espace dégagé et lancer le programme sur l’image : langage Wolf-
ram a été publié
Il me faut à présent une fonction réduisant putPicture[{30, 0, 0}, toBlockColors[
dans le MagPi
la résolution d’une image et la simplifiant de , 50]]
n° 5.
façon à ce qu’elle ne comporte que des couleurs
à notre disposition : www.magpi.fr/
magazine/2018/5
Importation d’images
toBlockColors[img_, size_] := ColorQuantize
[ImageResize[img, size], colors];
07 Vous pouvez utiliser Import pour exploiter
vos propres images, mais également profiter de
celles incluses avec le langage Wolfram, par ex. le
célèbre tableau de Grant Wood :
Application
05 Appliquons-la au logo de Wolfram : ["Image"]

toBlockColors[ , 50] Voici comment j’ai obtenu une mosaïque de la


femme :

Méli-mélo de projets Minecraft en langage Wolfram magpi.fr 63

062-067_MagPi06_Minecraft-TUTORIAL_FR.indd 63 20/12/2018 13:23


TUTORIEL

ff Le langage Wolfram
permet de créer des
mosaïques à partir
d’images importées,
comme ici avec une
partie du tableau
American Gothic.

Création des blocs


putPicture[{30, 0, 0},
toBlockColors[ImageTake[
09 Transformons ces données en blocs. Nous
["Image"], {25, 75}, {10, 50}], 50]] contraindrons l’intervalle des hauteurs. Si la
hauteur est positive, nous créons une colonne de
blocs solides jusqu’à cette hauteur, et de l’air au-
dessus. Si la hauteur est négative, les blocs seront

Recréer le monde réel solides depuis la valeur minimale de l’intervalle


jusqu’à la hauteur donnée, ensuite les blocs seront
des blocs d’eau, puis de l’air au-dessus du niveau
de la mer.
Obtention des données
08 Recréer la géographie d’un pays revient createMapColumn[{x_, y_, z_}, seaLevel_,
simplement à placer sur une grille des colonnes min_, max_] := MinecraftSetBlock[{{x, min,
de blocs représentant les différentes altitudes du z}, {x, y, z}}, "Dirt"];
pays. Ces altitudes peuvent être obtenues avec la If[y ≥ seaLevel, MinecraftSetBlock[{{x,
fonction GeoElevationData de Wolfram, ici celles y, z}, {x, max, z}}, ],
du Royaume-Uni : MinecraftSetBlock]
{{x, y, z}, {x, seaLevel - 1, z}},
ListPlot3D[Reverse /@ GeoElevationData[ ];
], PlotRange → {-10 000, MinecraftSetBlock[{{x, seaLevel, z},
20 000}, Mesh → False] {x, max, z}}, "Air"]] ;

Les valeurs négatives correspondent à des


terrains situés sous le niveau de la mer. Elles
Création des colonnes
nécessiteront un traitement spécial. Avant cela,
diminuons la résolution :
10 La fonction suivante crée une colonne en
chaque point après transformation des données
ListPlot3D[Reverse /@ GeoElevationData[ d’altitude. QuantityMagnitude se débarrasse
, GeoZoomLevel → 3], des unités, Reverse et Transpose alignent les
PlotRange → {0, 5000}, Mesh → False] coordonnées avec celles de la boussole, et le reste
consiste en une mise à l’échelle verticale :

MinecraftElevationPlot[data0_, {x0_,
seaLevel_, z0_}, maxHeight_: 5] :=
Block[{data =

64 magpi.fr Méli-mélo de projets Minecraft en langage Wolfram

062-067_MagPi06_Minecraft-TUTORIAL_FR.indd 64 20/12/2018 13:23


TUTORIEL

QuantityMagnitude[Reverse[Map[Reverse,
Transpose[data0]]]], MinecraftSetCamera["Normal"]
scale, min, dims}, MinecraftElevationPlot[GeoElevationData[
dims = Dimensions[data]; GeoDisk[ , 3 mi],
scale = maxHeight / Max[Flatten[data]]; GeoZoomLevel → 9], {-15, -18, -15}, 30]
min = Round[scale * Min[Flatten[data]]];
Do[createMapColumn[{Round[x0 + i], Vous pouvez bien sûr embellir vos paysages
Floor[scale data[[i, j]] + seaLevel], en adaptant les matériaux à l’altitude, p. ex. en
z0 + j}, Round[seaLevel], seaLevel + min, utilisant de la neige pour les sommets et du sable
Round[maxHeight + seaLevel]], {i, dims[[1]]}, pour les côtes.
{j, dims[[2]]}]]

Rendu de voxels
Création d’un terrain plat
11 Données 3D
Créons un vaste terrain plat pour la carte, et
plaçons la caméra au-dessus de cette zone :
14 Si vous n’avez pas de données provenant
d’un scanner TDM, utilisez l’exemple fourni :
MinecraftSetBlock[{{-40, -10, -40}, {40, 0,
40}}, "Grass"]; Show[ExampleData[{"TestImage3D", "CThead"}],
MinecraftSetBlock[{{-40, 0, -40}, {40, 50, BoxRatios → 1]
40}}, "Air"];
MinecraftSetCamera["Fixed"]; Redimensionnons cette image, et transfor-
MinecraftSetCamera[{0, 25, 0}] mons-la en image binaire de façon à convertir en
blocs et en air les 0 et les 1 obtenus :

Binarize[ImageResize[ExampleData[
Placement de la carte
12 Plaçons la carte avec :
{"TestImage3D", "CThead"}], {80, 80, 80}]]

MinecraftElevationPlot[
Coordonnées des voxels
GeoElevationData[ ,
GeoZoomLevel → 2], {-15, 0, -15}, 5]
15 Nous aurons besoin des coordonnées des
voxels (pixels 3D) pour placer nos blocs. Nous
Les terres sont visiblement plus hautes dans pouvons les obtenir avec :
la montagneuse Écosse. On distinguerait mieux
ces Highlands avec la caméra dans sa position Position[ImageData[%], 1]
habituelle, mais le littoral serait plus difficile à
voir.

Sur le toit du monde Fonction de rendu


13 Voici à quoi ressemble la crête nord de
16 Regroupons les étapes précédentes dans
l’Everest vue de son sommet : une seule fonction. La position initiale est para-
métrable, et l’ajout d’une courte pause évitera
de surcharger le serveur de Minecraft de plus de
requêtes qu’il ne pourrait en traiter (certains blocs
seraient ignorés) :

fixCoordinates[{a_, b_, c_}] := {c, -a, b}


(*Mapping coordinate systems*)

minecraftImage3D[img_Image3D, pos_List,
block_, threshold_: Automatic] := (
MinecraftSetBlock[{pos, pos +

Méli-mélo de projets Minecraft en langage Wolfram magpi.fr 65

062-067_MagPi06_Minecraft-TUTORIAL_FR.indd 65 20/12/2018 13:23


TUTORIEL

ImageDimensions[img]}, "Air"];
Map[(Pause[0.01]; En partant de ce principe vous pourriez définir
MinecraftSetBlock[pos + #, block]) &, trois niveaux de densité et utiliser des blocs de
fixCoordinates /@ type verre pour appliquer une peau transparente
Position[ImageData[Binarize[img, threshold]], sur le crâne. Je vous laisse essayer ! On trouve
1]];) sur le web des images au format DICOM, mais
attention si vous en importez, certaines sont très
Pour l’appliquer sur l’image de la tête : volumineuses.

minecraftImage3D[
ImageResize[ExampleData[{"TestImage3D",
"CThead"}], {40, 40, 40}], {0, 40, 0},
Auto-construction
"GoldBlock"] de pyramide

Fonction de détection
18 Ce mini-projet déclenche la construction
d’une pyramide lorsque le joueur approche d’une
combinaison de blocs donnée, ici un bloc gold (or)
sur un bloc glowstone (pierre lumineuse).
La première étape consiste à chercher parmi
les blocs situés autour d’un certain point ceux
de type or, et à retourner leurs positions :

scanForGold[{x0_, y0_, z0_}]


:= Block[{goldPos = {}, height =
MinecraftGetHeight[{x, z}]},
Do[Pause[0.1];
If[MinecraftGetBlock[{x, height - 1, z}]
=== Entity["MinecraftBlock", "GoldBlock"],
AppendTo[goldPos, {x, height - 1, z}]],
Sélection d’une densité
17 Une image tomodensitométrique contient
{x, x0 - 1, x0 + 1}, {z, z0 - 1, z0 + 1}];
goldPos];
tous les niveaux de densité des parties scannées.
En modifiant le seuil de binairisation nous pouvons
ainsi sélectionner uniquement la densité osseuse
Recherche du bloc glowstone
et obtenir un crâne :
19 Nous cherchons ensuite s’il y a un bloc
Binarize[ImageResize[ExampleData glowstone sous les blocs d’or trouvés :
[{"TestImage3D", "CThead"}], {80, 80, 80}],
0.4] checkGoldForGlowstone[goldPos_] :=
FirstCase[goldPos, {x_, y_, z_} /;
minecraftImage3D[ MinecraftGetBlock[{x, y - 1, z}] ===
ImageResize[ExampleData[{"TestImage3D", Entity["MinecraftBlock", "GlowstoneBlock"]]
"CThead"}], {40, 40, 40}], {0, 40, 0},
"GoldBlock", 0.4]

Pose de la pyramide
20 Créons maintenant une fonction qui affiche
un message, supprime les deux blocs spéciaux et
pose la pyramide :

66 magpi.fr Méli-mélo de projets Minecraft en langage Wolfram

062-067_MagPi06_Minecraft-TUTORIAL_FR.indd 66 20/12/2018 13:23


TUTORIEL

pyramidActions[found_] :=
(MinecraftChat["Building Pyramid"];
MinecraftSetBlock[{found, found - {0, 1,
0}}, "Air"];
MinecraftSetBlock[found - {0, 1, 0},
"GoldBlock", Pyramid[], RasterSize → 12]);

Tâche d’arrière-plan
21 Regroupons tout cela dans une fonction
qui scannera les alentours du joueur et exécutera
les actions précédentes au premier emplacement
détecté. Comme la fonction PreemptProtect est
une tâche d’arrière-plan, nous devons veiller à
ne pas effectuer deux actions simultanément afin
que les messages allant et venant sur le serveur
Minecraft ne se mélangent pas :

pyramidCheck[] := PreemptProtect
[Block[{found = checkGoldForGlowstone
[scanForGold[MinecraftGetTile[]]]},
If[Not[MissingQ[found]],
pyramidActions[found]]]]

Ne reste plus qu’à exécuter ce code toutes les


cinq secondes :

task = SessionSubmit
PARTAGEONS !
[ScheduledTask[pyramidCheck[], 5]]
Manifestations, sites, associations, réalisations, boutiques… : parlez-nous
de vos activités autour du Raspberry Pi (contact@magpi.fr).

Test
22 Pour tester la fonction, placez un bloc gold
Dates de parution du MagPi en 2019. À vos agendas !
sur un bloc glowstone, dirigez-vous vers eux et >>MagPi n°7 mars-avril : 14.03.2019
attendez quelques secondes. Le message Building
>>MagPi n°8 mai-juin : 09.05.2019
Pyramid et la pyramide devraient apparaître.
>>MagPi n°9 juillet-août : 11.07.2019
>>MagPi n°10 sept-oct : 12.09.2019
Arrêt de la tâche
23 Pour mettre fin à la tâche, évaluez :
>>MagPi n°11 nov-déc : 14.11.2019

TaskRemove[task]
Chaque magazine est disponible gratuitement sous forme de fichier
PDF à télécharger trois mois après la parution en kiosque. Toutefois les
(VF : Hervé Moreau)
abonnements et les ventes en kiosque sont nécessaires pour rémunérer
tous ceux qui travaillent à la production du magazine. Le prix de vente
de 9,95 € a été calculé au plus juste pour que chacun puisse s’offrir le
magazine (moins de 5 € par mois !).
Pour toute autre information complémentaire sur le MagPi français,
n’hésitez pas nous solliciter : contact@magpi.fr

Méli-mélo de projets Minecraft en langage Wolfram magpi.fr 67

062-067_MagPi06_Minecraft-TUTORIAL_FR.indd 67 20/12/2018 13:23


TUTORIEL

Guide de démarrage rapide du

Raspberry Pi
C’est assez simple de configurer un Raspberry Pi.
Suivez juste les conseils de Rosie Hattersley.

F
élicitations ! Vous avez rejoint les allez découvrir l’OS Raspbian, qui comporte
explorateurs du Raspberry Pi. Nous sommes des programmes de codage et des logiciels de
sûrs que vous allez adorer découvrir un bureautique, tous prêts à l’emploi. Après cela,
tout nouveau monde de l’informatique avec le monde de la fabrication numérique avec
la possibilité de créer vos propres jeux, de Raspberry Pi vous attend.
commander vos propres robots et machines, et de
partager vos expériences avec les autres fanatiques Ingrédients
de RPi. Tout ce dont vous avez besoin pour configurer un
Débuter ne vous prendra pas longtemps : ordinateur Raspberry Pi
juste rassembler tous les ingrédients de notre
liste, plus peut-être un boîtier RPi sympa pour Raspberry Pi
l’accueillir. Des écouteurs ou des haut-parleurs Que vous choisissiez un Raspberry Pi 3B+, 3B,
sont des compléments utiles si vous souhaitez Pi Zero, Zero W ou Zero WH (ou un modèle plus
utiliser votre RPi comme serveur multimédia ou ancien de Raspberry Pi), la configuration de base
console de jeux. est la même. Tous les ordinateurs Raspberry
Pour être prêt, il suffit de formater votre Pi fonctionnent à partir d’une carte micro-SD,
carte micro-SD, de télécharger NOOBS et de nécessitent une alimentation micro-USB, et
lancer l’installateur de Raspbian. Ce guide va disposent des mêmes systèmes d’exploitation,
vous conduire à travers chaque étape. Vous programmes et jeux.

68 magpi.fr Guide de démarrage rapide du Raspberry Pi

068-073_MagPi06_QuickStart-TUTORIAL_FR.indd 68 20/12/2018 13:26


TUTORIEL

Alimentation
Le Raspberry Pi utilise le même
type d’alimentation USB qu’un
ordiphone ordinaire. Vous pouvez
donc recycler un ancien câble USB
vers micro-USB et une alimentation
d’ordiphone. Le Raspberry Pi
dispose aussi d’une alimentation
officielle (www.elektor.fr/usb-
power-supply-rpi) qui fournit
une source d’énergie fiable et
Carte micro-SD de 8 Go stabilisée.
Il faudra une carte micro-SD d’au moins 8 Go.
Votre Raspberry Pi l’utilise pour stocker les Souris USB
jeux, programmes et fichiers photo ainsi que Il est plus simple d’avoir une souris
les amorces de votre système d’exploitation qui filaire physiquement attachée à votre
démarre à partir d’elle. Vous aurez aussi besoin Raspberry Pi via un port USB plutôt qu’une
d’un lecteur de carte micro-SD pour connecter la version Bluetooth (susceptible d’être perdue quand
carte à un ordinateur PC, Mac ou Linux. vous en aurez besoin). Comme pour le clavier, nous
pensons qu’il vaut mieux faire la configuration
avec une souris filaire.
Ordinateur Mac ou PC
Vous aurez besoin d’un PC sous Windows ou Linux,
ou d’un ordinateur Mac Apple pour formater Écran
la carte micro-SD et télécharger le logiciel de
configuration initial pour votre Raspberry Pi. Peu
importe le système d’exploitation de
cet ordinateur, il s’agit
juste d’y faire transiter
des fichiers.

Un moniteur de PC ordinaire est idéal, car l’écran


sera assez grand pour lire confortablement. Il doit
avoir une connexion HDMI, car c’est ce qui est
installé sur la carte Raspberry Pi.

Concentrateur USB (pour RPi Zero W)


Le RPi Zero W n’a pas de ports USB de
taille standard. À la place, il a un port
micro-USB (et est livré d’habitude
Clavier USB avec un adaptateur micro-USB vers
Comme sur tout autre ordinateur, il vous faut USB). Pour connecter un clavier et
un moyen pour saisir des adresses web, taper une souris (et d’autres éléments)
des commandes, et plus généralement contrôler à un RPi Zero, vous devrez prendre
votre Raspberry Pi. Vous pouvez utiliser un clavier un concentrateur USB à quatre
Bluetooth, mais le processus de configuration ports (ou utiliser un clavier avec un
initial est plus facile avec un clavier USB filaire. concentrateur intégré).

Guide de démarrage rapide du Raspberry Pi magpi.fr 69

068-073_MagPi06_QuickStart-TUTORIAL_FR.indd 69 20/12/2018 13:26


TUTORIEL

Configurer un 02 Connectez une souris

Raspberry Pi
Connectez une souris filaire USB à l’une
des autres grandes prises USB sur le Raspberry Pi.
Comme pour le clavier, on peut utiliser une souris
sans-fil Bluetooth, mais la configuration est bien
Le Raspberry Pi 3 / 3B+ dispose plus simple avec une connexion filaire.

de nombreuses connexions, ce qui


simplifie son installation. Câble HDMI
03 Ensuite, connectez le Raspberry Pi à votre
Raccordez le clavier
01 Connectez un clavier filaire ordinaire de PC
écran avec un câble HDMI standard (type A).
Enfichez le câble HDMI directement dans la
(ou Mac) à l’une des quatre grandes prises USB sur prise HDMI sur le plus grand côté d’un Raspberry
un Raspberry Pi 3/3B+. Peu importe à quelle prise Pi 3/3B+. Connectez l’autre extrémité du câble à un
vous le connectez. On peut connecter un clavier moniteur ou téléviseur HDMI.
Bluetooth, mais un clavier filaire est préférable
pour commencer.

Pour connecter le Raspberry Pi à une TV


ou un écran, on utilise un câble HDMI
standard, comme ceux utilisés par la
plupart des téléviseurs modernes.

Une souris filaire standard


est connectée à n’importe
laquelle des quatre
prises USB A.

Un clavier filaire est


connecté sur une autre de
ces quatre prises USB A.

70 magpi.fr Guide de démarrage rapide du Raspberry Pi

068-073_MagPi06_QuickStart-TUTORIAL_FR.indd 70 20/12/2018 13:26


TUTORIEL

Un adaptateur micro-USB
vers USB A est nécessaire
pour connecter à votre RPi
Zero W des dispositifs USB
filaires tels que souris et
clavier.

Le RPi Zero dispose d’une


prise mini-HDMI. Il faudra
un adaptateur mini-HDMI
(type C) vers HDMI standard
(type A) comme celui-ci pour
connecter votre RPi Zero W à
un écran HDMI.

Configurer un RPi Zero 02 Souris et clavier


Vous pouvez connecter votre souris à une
prise USB sur votre clavier (s’il en a une), puis
Il vous faudra une paire connecter le clavier sur la prise micro-USB (via
d’adaptateurs pour configurer un l’adaptateur micro-USB vers USB A). Vous pouvez
aussi brancher un concentrateur USB à l’adaptateur
Raspberry Pi Zero / W / WH. micro-USB vers USB A.

Connexion d’un RPi Zero W


01 Plus de connexions
Si vous voulez configurer un petit Raspberry
Pi Zero, vous devrez utiliser un câble d’adaptation
03 Connectez maintenant votre câble HDMI
micro-USB vers USB A pour connecter un clavier standard (type A) à l’adaptateur mini-HDMI
au connecteur USB plus petit du RPi Zero W. Un RPi vers HDMI et branchez l’adaptateur au port
Zero W n’a qu’un port micro-USB pour connecter mini-HDMI au milieu du RPi Zero W. Connectez
des dispositifs, ce qui rend la connexion d’une l’autre extrémité du câble à un moniteur ou
souris et d’un clavier légèrement plus délicate téléviseur HDMI.
qu’avec un Raspberry Pi plus grand.

Guide de démarrage rapide du Raspberry Pi magpi.fr 71

068-073_MagPi06_QuickStart-TUTORIAL_FR.indd 71 20/12/2018 13:26


TUTORIEL

Configurer
le logiciel
Installez l’OS Raspbian avec
NOOBS sur votre carte micro-SD et
démarrez votre Raspberry Pi.

M
aintenant que tous les éléments sont
Formatez la carte micro-SD
assemblés, il est temps d’installer un sys-
tème d’exploitation sur votre Raspberry
02 Choisissez l’option de formatage rapide puis
Pi pour que vous puissiez commencer à vous en cliquez sur Format (avec un Mac, il faudra ici entrer
servir. Raspbian est l’OS officiel pour le Raspberry votre mot de passe d’administrateur). Lorsque le
Pi et le moyen le plus simple pour configurer Rasp- processus de formatage de la carte est terminé, elle
bian sur votre Raspberry Pi est d’utiliser NOOBS est prête à être utilisée dans votre RPi. Laissez-la
(New Out Of Box Software). dans votre ordinateur pour l’instant et notez sim-
Si vous avez acheté une carte micro-SD plement l’emplacement de votre carte SD dûment
de 16 Go avec NOOBS préinstallé (magpi.cc/ formatée. Windows lui aura sûrement assigné une
huLdtN), vous pouvez sauter les étapes 1 à 3. lettre de lecteur, telle que E: ; sur un Mac, elle appa-
Sinon vous devrez formater une carte micro-SD raîtra dans la zone Appareils d’une fenêtre Finder.
et y copier le logiciel NOOBS.
Généralement, les kits de démarrage RPi
contiennent une carte micro-SD avec NOOBS
préinstallé (voir www.elektor.fr/rpi3b+-starter-
kit et www.elektor.fr/rpi-zero-w-starter-kit).

Ingrédients

>>Un ordinateur PC
Téléchargez NOOBS
sous Windows/
Linux ou un Mac 03 Téléchargez le logiciel NOOB depuis rpf.io/
Apple
downloads. NOOBS (New Out Of Box System) propose
>>Une carte une sélection de systèmes d’exploitation pour RPi
­micro-SD (d’au et les installe pour vous. Cliquez sur « Download
moins 8 Go)
zip » et sauvegardez le fichier dans votre dossier
>>Un adaptateur Téléchargements. Lorsque le téléchargement du
micro-SD vers USB Préparez le formatage
(ou un adaptateur 01 Commencez par télécharger l’outil
fichier zip est terminé, double-cliquez pour lancer
et décompresser le dossier. Vous devez copier tous
micro-SD vers SD
et un emplace- SD Card Formatter depuis le site de la les fichiers du dossier NOOBS sur votre carte SD.
ment pour carte SD Card Association (rpf.io/sdcard). Branchez alors Appuyez sur CTRL+A (⌘⌘ +A sur un Mac) pour
SD sur votre ordi- la carte micro-SD à votre PC et lancez sélectionner tous les fichiers, puis glissez tous
nateur) SD Card Formatter (cliquez sur Oui pour autoriser les fichiers dans le dossier de la carte SD. La copie
>>SD Memory Card Windows à l’exécuter). Si la carte n’est pas terminée, éjectez votre carte SD. Faites attention
Formatter rpf.io/ reconnue automatiquement, retirez-la et à ne copier sur la carte micro-SD que les fichiers
sdcard
remettez-la puis cliquez sur Refresh. La carte contenus dans le dossier NOOBS (pas le dossier
>>NOOBS rpf.io/ devrait être sélectionnée automatiquement (ou NOOBS lui-même).
downloads bien choisissez la bonne dans la liste).

72 magpi.fr Guide de démarrage rapide du Raspberry Pi

068-073_MagPi06_QuickStart-TUTORIAL_FR.indd 72 20/12/2018 13:26


TUTORIEL

D’abord, insérez votre


carte micro-SD dans le
Raspberry Pi.

Assemblez votre Raspberry Pi


04 Il est temps maintenant de configurer
Une fois la carte micro-SD
bien insérée, connectez
physiquement votre Raspberry Pi. Branchez votre votre câble d’alimentation
écran de PC au secteur et connectez son câble micro-USB au RPi. Un
voyant rouge va s’allumer
HDMI au port HDMI correspondant sur votre
sur la carte pour
RPi. Utilisez les ports USB pour connecter clavier indiquer la présence de
et souris. Finalement, retirez la carte micro-SD l’alimentation.
de l’adaptateur de carte SD et insérez-la dans
l’emplacement au-dessous de votre RPi 3B+
ou 3. Les possesseurs de RPi Zero W devront
connecter un concentrateur USB pour connecter
souris, clavier et moniteur. La carte micro-SD du
RPi Zero W prend place sur le dessus du circuit
imprimé.

Connectez-vous
06 Lorsque Raspbian se charge pour la première
Mettez sous tension
05 Branchez l’alimentation sur le port micro-
fois, vous devez définir quelques préférences. Cliquez
sur Next à l’invite, puis sélectionnez votre fuseau
USB du RPi. Mettez-la sous tension. Quelques horaire et langue préférée et créez un mot de passe
secondes après l’écran devrait s’allumer. Lorsque de connexion. Vous êtes maintenant prêt à vous
l’installateur NOOBS apparaît, vous verrez une connecter. Sélectionnez votre réseau Wi-Fi et tapez
sélection de systèmes d’exploitation. Nous les mots de passe requis. Une fois connecté, cliquez
allons installer Raspbian, le premier et le plus sur Next pour permettre à Raspbian de vérifier les
répandu. Cochez cette option et cliquez sur Install, mises à jour de l’OS. Ceci fait, il peut demander à re-
puis cliquez sur Yes pour confirmer. Pour plus démarrer pour que les mises à jour soient appliquées.
de choix d’OS, cliquez sur « Wifi networks » et Cliquez sur l’icône Raspberry en haut à
entrez votre mot de passe de réseau sans-fil ; la gauche de l’écran pour accéder à des éléments
liste d’OS disponibles s’allongera. L’installation familiers tels que la suite LibreOffice, l’Internet,
prend du temps, mais finira par s’achever. des jeux et des accessoires tels que la vision-
Ensuite, un message de confirmation du succès neuse d’image, l’éditeur de texte et la calcula-
de l’installation s’affiche. Votre RPi vous invitera trice. Tout est prêt pour que vous commenciez à
à cliquer sur OK, après quoi il redémarrera et profiter de votre propre Raspberry Pi.
chargera l’OS Raspbian. (VF : Denis Lafourcade)

Guide de démarrage rapide du Raspberry Pi magpi.fr 73

068-073_MagPi06_QuickStart-TUTORIAL_FR.indd 73 20/12/2018 13:26


TUTORIEL

Regardez la télé en direct sur votre

Phil
RPi avec le HAT TV
MAKER

King
Configurez votre nouvelle extension pour diffuser la TV en direct depuis et sur
Quand il ne corrige
pas The Magpi
un Raspberry Pi.

L
(édition anglaise,
a dernière extension officielle du Raspberry
originale du MagPi)
et n’édite pas Pi est indispensable pour les accros de
Assemblage et montage
des livres sur le
Raspberry Pi, Phil
la télé. Le HAT TV Raspberry Pi permet à
n’importe quel RPi (avec un connecteur GPIO
01 Insérez l’extrémité fine de l’adaptateur
aime regarder un à 40 broches) de décoder des signaux de télévision de câble RF argenté fourni dans le connecteur
mélange d’émis-
numérique en direct et de les diffuser vers des doré sur le côté du HAT. Prenez le connecteur
sions de télé de
qualité (Endeavour, appareils distants – comme un autre RPi, un à 40 broches fourni et insérez-le dans les trous en
The Crown) avec ordinateur ou même un ordiphone. Le syntoniseur dessous du HAT – pas dans le connecteur femelle
d’autres (des intégré Sony CXD2880 prend en charge les normes noir au-dessus ! Installez le HAT sur le RPi, avec
vieilles rediffusions
DVB-T2 et DVB-T (la TNT) pour vous permettre de l’adaptateur RF à l’extrémité du logement de la
de Dynasty).
regarder toutes vos chaînes préférées. Nous vous carte micro-SD. Pour le maintenir, vous pouvez le
magpi.cc montrerons ici comment le configurer, et même visser en utilisant les entretoises fournies.
l’utiliser pour transformer un RPi en un TV/PVR
Ingrédients
(téléviseur/enregistreur) tout-en-un.

> HAT Raspberry Pi


TV www.elektor.
fr/raspberry-pi-
tv-hat
> Réseau sans fil
> Ordinateur

Bonne
astuce
Enregistrement
Ajoutez un disque
dur ou une clé
USB à votre RPi Regardez la télé en direct
pour le transfor- depuis votre RPi avec le
mer avec la distri- HAT TV.
bution LibreELEC
Connectez votre câble Le HAT est fixé sur le RPi
en enregistreur
d’antenne TV au HAT avec le connecteur fourni
« fait maison » de
grande capacité. avec l’adaptateur fourni. inséré en dessous.

74 magpi.fr Regardez la télé en direct sur votre RPi avec le HAT TV

074-075_MagPi06_DVB-TUTORIAL_FR.indd 74 20/12/2018 13:29


TUTORIEL

Installation de Tvheadend
02 Connectez un câble coaxial RF d’une prise
d’antenne TV à l’adaptateur RF du HAT. Il faut une
réception correcte de la TNT pour que le syntoni-
seur fonctionne. Avec Raspbian Stretch installé sur
sa carte micro-SD, allumez le RPi – une LED verte
va s’éclairer sur le HAT. Il faut installer un service
de TV en arrière-plan pour diffuser de la vidéo :
nous utiliserons Tvheadend. Pour l’installer, ou-
vrez une fenêtre de Terminal et tapez :

sudo apt-get update


sudo apt-get install tvheadend

Configuration de Tvheadend
03 Tvheadend met quelques minutes à s’ins-
taller, allez donc prendre une tasse de thé. Une fois
installé, un écran de configuration du paquetage ­ aintenant regarder en direct la télé diffusée par
m cc On peut accéder à
l’EPG et regarder la
apparaît et vous devez entrer un identifiant d’ad- le HAT TV. Dans l’EPG, cliquez sur l’icône TV à télé en direct avec
ministrateur Tvheadend. Pour rester simple, entrez gauche d’un programme pour le regarder dans une un navigateur sur un
ordinateur distant.
kodi, et kodi aussi pour le mot de passe – vous fenêtre, que vous pouvez étendre en plein écran. Il
pourrez toujours le changer plus tard si vous préfé- y a aussi des options pour programmer et enregis-
rez. Vous êtes prêt maintenant pour vous connecter trer des émissions – utilisez l’option Help pour plus
depuis un autre dispositif. de détails. De même qu’avec un navigateur, vous
pouvez regarder la télé depuis de nombreux clients,
y compris Kodi, omxplayer, VLC et des applis d’or-
Connexion à distance
04 Maintenant que Tvheadend fonctionne,
diphone – voir magpi.cc/ZpJtwd.
(VF : Denis Lafourcade)
vous pouvez y accéder depuis un autre ordinateur
(éventuellement un autre RPi). Entrez cette adresse
dans un navigateur : http://raspberrypi.local:9981/
extjs.html. Si elle n’n’est pas résolue, utilisez
l’adresse IP du RPi à la place, suivie de :9981/extjs.
Utilisation de LibreELEC
html. Connectez-vous avec kodi à la fois pour
On peut accéder au flux de télé en direct du HAT TV
l’identifiant et le mot de passe. Un assistant de
dans le lecteur de média Kodi, mais c’est plus fa-
configuration apparaît et vous permet de choisir le cile avec LibreELEC sur un RPi. Installez le client
type de réseau et l’émetteur TV. Tvheadend en sélectionnant Add-ons > Install from
repository > PVR clients > Tvheadend HTSP Client.
De plus, avec LibreELEC, il est possible de configurer
Configuration du réseau TV à la fois le client et le serveur Tvheadend sur le même
05 Dans la « Configuration réseau » de l’assis- RPi – un RPi 2, 3 ou 3B+ est recommandé – pour obtenir
un dispositif TV/PVR tout-en-un. Pour cela, sélec-
tant de configuration, vous devez voir « Tuner: Sony
tionnez Add‑ons > Install from repository > Services >
CDX2880 #0 DVB-T #0 ». Pour le type de réseau, Tvheadend Server 4.2 et installez-le. Connectez-vous
choisissez « DVB-T Network ». Pour les multiplex
prédéfinis, sélectionnez votre émetteur local : par
depuis un autre ordinateur avec l’adresse IP suivie
de :9981 et configurez-le comme dans l’étape 5. Vous Bonne
ex., le nôtre était uk-Rowridge. Après avoir cliqué
sur Save & Next, le balayage des multiplex et services
pouvez maintenant y accéder depuis LibreELEC (avec
le client TvHeadend installé), en sélectionnant l’option astuce
principale TV.
(canaux) commence. Lorsqu’il aura atteint 100%,
Pour enregistrer la télé, vous devez créer un dossier Bonne astuce
cochez les trois cases (Map all services / Create provider d’enregistrements sur une clé ou un disque dur USB
tags / Create network tags) et un guide de programma- connectés – naviguez jusque-là dans le gestionnaire On peut recevoir
tion électronique (EPG) apparaîtra. de fichiers, faites un clic droit et sélectionnez « Créer la télé en direct de
un nouveau dossier ». Puis, dans l’interface web d’un plein de façons, y
ordinateur distant, allez à Configuration > Recordings et compris avec des

Regarder la télé mettez le chemin système à var/media/[le nom de applis Android et


06 Dans votre navigateur, vous pouvez
votre lecteur]/recordings. iOS.

Regardez la télé en direct sur votre RPi avec le HAT TV magpi.fr 75

074-075_MagPi06_DVB-TUTORIAL_FR.indd 75 20/12/2018 13:29


TUTORIEL

Construire un dispositif de
communication radio secret
Ajoutez la transmission par radio à 433 MHz à votre Raspberry Pi pour
envoyer des messages sans fil et sans Wi-Fi ainsi que commander des
prises secteur à distance.

D
’accord, le Wi-Fi c’est bien beau, mais est- commande. Si vous n’avez pas accès à plusieurs cla-
PJ
MAKER

ce vraiment le seul moyen de communica- viers et moniteurs, vous pouvez accéder aux cartes
Evans tion sans fil sur un Raspberry Pi ? Et s’il n’y via SSH depuis deux fenêtres sur votre ordinateur.
PJ aime écrire de a pas de réseau disponible ou si vous voulez une Comme ça, vous voyez tout ce qui se passe.
la prose, mais aussi plus longue portée ? Alors il vous faut une trans-
du code. Il dirige mission par radio à 433 MHz. Dans ce tutoriel, nous
le Milton Keynes Un coup d’œil aux émetteurs/
Raspberry Jam
(Royaume-Uni).
ajoutons une liaison radio à 433 MHz à une paire de
RPi et nous montrons comment leur faire échan-
02 récepteurs
Il a un penchant ger des messages sans fil et sans Wi-Fi. Puis, nous Chaque kit est livré avec deux circuits imprimés. Le
inquiétant pour tout étendons la portée du système avec une petite dose plus long des deux est le récepteur, doté de quatre
ce qui commute. de science et nous bricolons avec des prises secteur broches. Avant de câbler le tout, vérifiez le brochage
mrpjevans.com télécommandées. Votre maison aussi sera pleine avec soin : il peut varier suivant les modèles. Dans le
de prises commandées par RPi ! désordre, vous trouverez une entrée d’alimentation
en 5 V (étiquetée VCC), la masse (GND) ainsi que
deux lignes de données (DATA) qui transmettent les
Préparez vos Raspberry Pi
Ingrédients 01 Pour montrer comment échanger des mes-
signaux reçus. Ces dernières sont identiques, choi-
sissez l’une des deux.
sages sur le 433 MHz, rien de tel qu’une conversation L’émetteur, plus petit, arbore trois broches.
>>2× émetteur/ré-
cepteur à 433 MHz entre deux RPi. Notre projet ne demande pas beau- Leur position exacte dépendra ici aussi du fabri-
magpi.cc/yXnbtu coup de puissance et vous pouvez utiliser n’importe cant. Tout comme le récepteur, vous trouverez
ou www.elektor. quel modèle de RPi, même les premiers modèles A VCC pour l’alimentation, GND pour la masse
fr/stx882-srx882 et B. Suivant votre niveau d’expérience, installez ainsi qu’une dernière broche pour les données.
>>2× mini-plaque Raspbian Stretch en version complète, ou, comme
à essais www. nous, Raspbian Lite ; tout se fait depuis l’invite de
elektor.fr/bread-
Câblage de la plaque à essais
boards-and-wires 03 Nous utilisons une toute petite plaque à es-
>>12× câble mâle/fe- sais, mais n’importe quelle taille fait l’affaire. En
melle pour plaque
fait, une plaque plus grande dotée de rails d’alimen-
à essais www.
elektor.fr/bread- tation permettrait un câblage plus propre. Insérez
boards-and-wires avec soin le récepteur et l’émetteur côte à côte dans
la plaque à essais. Les deux plaques à essais doivent
>>prise secteur
télécommandée se faire face, de sorte que l’émetteur relié au RPi n°1
(baptisé « Alice ») pointe directement vers le ré-
cepteur relié au RPi n°2 (« Bob ») et vice-versa.
ff Voici tout ce qu’il Insérez six fils de connexion dans chaque
vous faut. Il est plaque à essais, un pour chaque broche des mo-
possible de se
contenter d’un dules radio. Le choix de la broche DATA sur le
seul Raspberry Pi,
mais ce sera moins
récepteur n’a pas d’importance.
amusant.

76 magpi.fr Construire un dispositif de communication radio secret

076-079_MagPi06_Secret-Radio-TUTORIAL_FR.indd 76 20/12/2018 13:31


TUTORIEL

Les deux RPi doivent tout


d’abord être très proches l’un
de l’autre pour communiquer.
Nous étendrons la portée
plus tard.

Les émetteurs et récepteurs


à 433 MHz se présentent
sous forme de petits circuits
imprimés.

Reliez le tout aux cartes RPi


04 Reliez les six fils de connexion directement
tez le test sur l’autre RPi.

à chaque RPi. Pour ce projet, aucun composant


Test d’émission
supplémentaire n’est nécessaire. Le récepteur et
l’émetteur fonctionnent tous deux en 5 V ; reliez
06 Positionnez les RPi de sorte que les deux
les fils VCC aux broches 2 et 4 des GPIO (les deux plaques à essais se trouvent à moins d’un centi-
broches en haut à droite lorsque la broche 1 se mètre l’une de l’autre, l’émetteur d’Alice devra
trouve en haut à gauche). Reliez ensuite les fils de pointer vers le récepteur de Bob et vice-versa. Sur
masse aux broches 6 et 9. Votre radio est mainte- Alice, lancez le script de réception, comme nous
nant sous tension, mais cela ne sert pas à grand- venons de le faire à l’étape précédente. Sur Bob, sai-
chose si elle ne peut échanger des données. Reliez sissez les commandes suivantes dans un terminal :
la broche DATA de l’émetteur à GPIO17 et la broche
DATA du récepteur à GPIO27 (broches 11 et 13). cd ~/rfchat
python3 send.py 1234

Test de réception
05 Avant que vous puissiez faire quoi que ce
Si tout se passe bien, « 1234 » devrait s’af-
ficher en boucle dans le terminal relié à Alice.
soit avec votre nouvelle radio, il faut installer des Il n’y a pas de correction des erreurs de trans-
logiciels. Ouvrez un terminal et tapez : mission et il est donc normal que certains ca-

cd
sudo apt install python3-pip git
pip3 install rpi-rf ƒ Les émetteurs
et récepteurs ne
git clone https://github.com/mrpjevans/ nécessitent pas
de composants
rfchat.git externes et
peuvent être reliés
directement aux
Le matériel est maintenant prêt pour un test. GPIO.
Choisissez votre RPi préféré et saisissez ces
commandes :

cd ~/rfchat
python3 receive.py

Positionnez maintenant la télécommande de


la prise secteur à proximité immédiate du ré-
cepteur et actionnez ses boutons. Des nombres
s’affichent ? Parfait. Sinon, vérifiez votre
câblage. Utilisez CTRL+C pour quitter puis répé-

Construire un dispositif de communication radio secret magpi.fr 77

076-079_MagPi06_Secret-Radio-TUTORIAL_FR.indd 77 20/12/2018 13:31


TUTORIEL

recevoir des messages. Pour commencer :

cd ~/rfchat
python3 rfchat.py

Tapez maintenant votre texte lentement sur


l’un des RPi et le message apparaîtra sur l’autre.
Le texte que vous tapez s’affiche aussi sur la carte
émettrice : elle capte les signaux qu’elle émet !
ff Les modules radio sont
alimentés en 5 V par le
RPi ; leurs broches de
données y sont aussi
Un peu de science pour
directement reliées.
ractères soient manquants ou corrompus. Si
08 améliorer la portée
cela ne fonctionne pas, essayez encore. Une fois La portée est réduite parce que les antennes sont
satisfait, n’oubliez pas de répéter le test en in- minuscules. C’est un problème facile à résoudre. La
versant les rôles afin de vérifier que l’émetteur longueur des antennes doit être un sous-multiple
d’Alice fonctionne également. de la longueur d’onde. Vous pouvez calculer cette
dernière en divisant la vitesse de la lumière par la
fréquence (299 792 458  m/s divisés par 433 000 000).
Et maintenant, une conversation
07 Nos deux RPi peuvent maintenant commu-
Continuez de diviser la valeur obtenue de 692,36  mm
par 2 jusqu’à ce que vous obteniez une longueur
niquer sans fil et sans Wi-Fi. Pour vous faire une utilisable en pratique. Une antenne de 173  mm est
idée de ce qui est possible, jetez un œil au script suffisamment longue pour fournir une portée im-
rfchat.py. Ce code utilise plusieurs fils d’exécution pressionnante, habituellement assez pour couvrir
(jargon de codeur pour dire qu’ils font plusieurs toute une maison. Soudez des fils de 173  mm sur
choses en même temps) pour guetter les données en chacun des points de soudure étiquetés « ANT » sur
provenance du clavier et du récepteur. Les données les modules radio. Votre rfchat devrait maintenant
entrantes et sortantes sont converties en nombres fonctionner sur de bien plus longues distances.
(ASCII). Cela donne une interface de discussion en
temps réel. Vous pouvez maintenant envoyer et

rfchat.py
> Taal: Python 3

001. import sys 019. tx = RFDevice(17)


002. import tty 020. tx.enable_tx()
003. import termios 021. rx = RFDevice(27)
004. import threading 022. rx.enable_rx()
005. import time 023.
006. from rpi_rf import RFDevice 024. # Receiving loop
007. 025. def rec(rx):
008. # Elegant shutdown 026.
009. def exithandler(): 027. print(“Receiving”)
010. termios.tcsetattr(sys.stdin, termios. 028.
TCSADRAIN, old_settings) 029. lastTime = None
011. try: 030. while True:
012. rx.cleanup() 031. currentTime = rx.rx_code_timestamp
013. tx.cleanup() 032. if (
014. except: 033. currentTime != lastTime and
015. pass 034. (lastTime is None or currentTime -
016. sys.exit(0) lastTime > 350000)
017. 035. ):
018. # Activate our transmitter and received 036. lastTime = rx.rx_code_timestamp

78 magpi.fr Construire un dispositif de communication radio secret

076-079_MagPi06_Secret-Radio-TUTORIAL_FR.indd 78 20/12/2018 13:31


TUTORIEL

Aux prises avec la domotique


09 Les appareils domestiques qui utilisent
du 433 MHz pour envoyer des codes de commande
ne manquent pas. Parmi les plus populaires se
trouvent les prises secteur télécommandées, sou-
vent utilisées pour commander de l’éclairage. La
plupart du temps, elles fonctionnent en 433 MHz et
utilisent des protocoles que rpi-rf peut comprend

cd ~/rfchat
python3 receive.py

Actionnez des boutons sur la télécommande.


Vous verrez sans doute s’afficher à l’écran une
liste de nombres qui changent en fonction du
c c Gros plan sur les
bouton et répétés pour permettre la correction modules radio.
des erreurs. Notez-les et envoyez-les ensuite des prises dans vos projets domotiques, mais ils per- Le plus long
des circuits est
comme suit : mettent également des communications radio là où le récepteur, le
le Wi-Fi est inutilisable en pratique, comme dans les petit circuit carré,
l’émetteur.
python3 send.py [nombres] ballons-sondes, des capteurs à l’écart des habitations
(par ex. détecteurs d’inondations). Les appareils de
Vous devriez entendre le « clic » rassurant l’Internet des Objets peuvent utiliser la radio pour
du relais de la prise. Essayez de la mettre sous envoyer et recevoir n’importe quelle information.
tension et hors tension. Maintenant que vous commandez des prises depuis
votre RPi, soyez inventifs pour les lier à la détection
d’un événement. Vous pourriez détecter l’arrivée de
À vous de jouer !
10 Ces modules à 433 MHz ouvrent pour un coût
votre voiture à la maison avec un module caméra RPi
et une reconnaissance automatique des plaques mi-
modique tout un monde de possibilités à votre RPi. néralogiques pour allumer l’éclairage de la maison.
Bien sûr vous pourrez les utiliser pour commander (VF : Kévin Petit)

TÉLÉCHARGEMENT
DU CODE COMPLET :
magpi.cc/mcxmKh

037. try: 055.


038. if (rx.rx_code == 13): 056. # Remember how the shell was set up so we can reset
039. # Enter/Return Pressed on exit
040. sys.stdout.write(‘\r\n’) 057. old_settings = termios.tcgetattr(sys.stdin)
041. else: 058. tty.setraw(sys.stdin)
042. sys.stdout.write(chr 059.
(rx.rx_code)) 060. while True:
043. sys.stdout.flush() 061.
044. except: 062. # Wait for a keypress
045. pass 063. char = sys.stdin.read(1)
047. 064.
048. time.sleep(0.01) 065. # If CTRL-C, shutdown
049. 066. if ord(char) == 3:
050. # Start receiving thread 067. exithandler()
051. t = threading.Thread(target=rec, 068. else:
args=(rx,), daemon=True) 069. # Transmit character
052. t.start() 070. tx.tx_code(ord(char))
053. 071.
054. print(“Ready to transmit”) 072. time.sleep(0.01)

Construire un dispositif de communication radio secret magpi.fr 79

076-079_MagPi06_Secret-Radio-TUTORIAL_FR.indd 79 20/12/2018 13:31


COUP DE PROJECTEUR

La vision en plus grâce au

MODULE
CAMERA
Utilisable dans une grande variété de projets, le module Camera
RPi devrait être une pièce maîtresse de la panoplie du maker
numérique. Wesley Archer nous éclaire.

F
aites cadeau de la vue à votre Raspberry Pi Nous avons vu beaucoup de passionnantes ré-
avec un module Camera RPi (www.elektor. alisations qui mettent en jeu tout cela, mais pou-
fr/pi-camera-module-2). Cet accessoire voir voir ce qui se passe autour de votre Raspberry
pratique se connecte directement au Raspberry Pi Pi est très facile avec le module Camera RPi. Voici
et s’utilise dans une grande variété de projets en quelques-uns des meilleurs projets pour débu-
lien avec la vision. tants. Faciles à mettre en œuvre, ils produisent
Surveiller son environnement avec un Rasp- des résultats visibles.
berry Pi est un sujet fascinant, surtout avec la Utiliser le module Camera est un excellent
grande palette de capteurs, accessoires, HAT et moyen pour ajouter une dimension supplémen-
pHAT disponibles. taire à la plupart des projets. Allons-y…

Vision normale ‚ Module Camera V2.1 ‚ Module Camera NoIR V2.1

ou nocturne ?
Il y a deux variantes du module Camera
RPi – la version standard et la version NoIR,
dont le filtre infrarouge a été supprimé pour
permettre à la caméra de détecter la lumière
infrarouge (www.elektor.fr/pi-noir-came-
ra-v2). Associée à une source de lumière IR
(infrarouge), c’est une excellente caméra de
vision nocturne !

80 magpi.fr La vision en plus grâce au module Camera

080-087_MagPi06_PiCamera_Feature_FR.indd 80 20/12/2018 13:33


COUP DE PROJECTEUR

Le module Camera est assez Le petit objectif capture des


petit pour tenir dans des images fixes et des vidéos qui
nichoirs ou dans de petits sont sauvegardées dans le
coffrets. Raspberry Pi.

La vision en plus grâce au module Camera magpi.fr 81

080-087_MagPi06_PiCamera_Feature_FR.indd 81 20/12/2018 13:33


COUP DE PROJECTEUR

CONFIGUREZ VOTRE
MODULE CAMERA
Avant de pouvoir commencer à photographier avec le module
Camera, vous devrez le connecter au Raspberry Pi et le tester.

C
onfigurer un module Camera est on ne peut glissez le câble dedans – vous devez avoir la partie
Ingrédients
plus simple. Vous connectez le module blanche vers le haut. Vous saurez que le câble est
> Module Camera Camera directement au port CSI (Camera correctement mis si la caméra fonctionne, mais
RPi www.elektor. Serial Interface) de la carte Raspberry Pi. il vaut mieux vérifier avant de redémarrer votre
fr/pi-camera-mo- La connexion à votre Raspberry Pi est la même Raspberry Pi.
dule-2 qu’il s’agisse d’un Raspberry Pi 3+, RPi Zero ou

3
> Adaptateur Came- même un précédent modèle B à 26 broches GPIO.
ra pour RPi Zero Toutefois, pour connecter un module Camera Connexion du module
(optionnel) – fourni
avec certains kits
à un RPi Zero (1.3, W ou WH), il vous faudra un Camera
Raspberry Pi Zero adaptateur Camera RPi Zero (un câble en nappe, Tout comme le câble de la caméra se connecte au
(www.elektor.fr/ souple). Il est souvent vendu séparément (4,65 €, Raspberry Pi, soulevez doucement le petit clapet en
rpi-zero-w-star- magpi.cc/uAUbdp), et parfois offert avec le boîtier plastique sur le module Camera puis glissez l’autre
ter-kit) officiel du RPi Zero (magpi.cc/LECcmF). extrémité du câble de la caméra dans le port – cette
> Carte micro-SD Si vous avez reçu un RPi Zero W gratuit avec un fois avec la partie bleue vers vous, avec l’objectif
abonnement au MagPi (www.magpi.fr/abo), vous de la caméra pointant dans la direction opposée.
> Raspbian
avez eu un adaptateur Camera RPi Zero avec votre Refermez doucement le clapet, ce qui verrouille le
RPi Zero et son kit de démarrage. câble en place – les clapets peuvent être fragiles,
Désactivez Une fois en possession du module Camera et du manipulez-les avec précaution.
la LED Raspberry Pi, servez-vous du câble pour les relier.
Nous allons vous montrer comment…

1
Le module Camera
V1 allume une
LED rouge quand
Connexion du câble à un
il est activé (le V2 Raspberry Pi 2/3/3+
n’en a pas). Pour la Sur un Raspberry Pi grand format, vous devrez
désactiver, ajouter connecter le câble de la caméra au port Camera à
disable_camera_ côté du port Ethernet. Soulevez doucement le petit
led=1 au fichier
clapet en plastique sur le port Camera et connectez
/boot/config.txt
(et redémarrez). le câble de la caméra avec la partie bleue vers le
port Ethernet, puis repoussez doucement le clapet
vers le bas pour qu’il maintienne le câble en place.

„ Bien que petit, le


module Camera
prend sans diffi-
culté des photos
2 Connexion du câble à un
RPi Zero W
Le RPi Zero W a un port Camera plus petit, mais
de haute réso- le boîtier RPi Zero officiel inclut généralement le
lution (jusqu’à
3280×2464 pixels) câble.
et capture de
Comme avec le Raspberry Pi grand format,
la vidéo HD
(jusqu’à 1080p). soulevez doucement le clapet en plastique puis

82 magpi.fr La vision en plus grâce au module Camera

080-087_MagPi06_PiCamera_Feature_FR.indd 82 20/12/2018 13:33


COUP DE PROJECTEUR

Le câble relie le module


Camera au port Camera
sur la carte Raspberry Pi.

 Les possesseurs
de RPi Zero doivent
avoir un adaptateur
Camera RPi Zero
Le câble est flexible, ce qui vous permet de placer pour connecter le
module Camera
et fixer le module Camera où vous voulez pour votre à la prise Camera
projet. Vous pouvez aussi acheter des câbles de plus petite sur cette
carte.
différentes longueurs en fonction de votre projet.

4 Activez le module Camera


Par défaut, le module Camera n’est pas
activé dans Raspbian, mais l’activer est très facile.
5 Activation via SSH
Si vous accédez à votre Raspberry Pi avec SSH,
vous devrez à la place activer la caméra via l’outil de
Boîtier
Camera
Raspberry Pi
Si votre Raspberry Pi est connecté à une souris, configuration du Raspberry Pi en ligne de commande.
un clavier et un écran, vous pouvez utiliser le Entrez ce qui suit dans une fenêtre de Terminal : Vous avez un
bureau du Raspberry Pi pour activer la fonction Raspberry Pi grand
format ? Pourquoi
Camera. Cliquez sur l’icône ‘framboise’ (en haut sudo raspi-config
ne pas acheter un
à gauche) et choisissez Préférences > Configuration boîtier Raspberry
Raspberry Pi. Cliquez sur l’onglet Interfaces et activez Sélectionnez « 5 – Interfaces Options > P1 Pi conçu pour
Camera. Cliquez sur OK puis sur Oui à l’invite de – Camera » et choisissez <Yes> pour activer accueillir le module
redémarrage. la caméra. Sélectionnez <Ok> et appuyez sur Camera, par ex. le
PiShell ?
Entrée puis sélectionnez <Finish>. À l’invite de
redémarrage, choisissez <Yes>. Nous sommes
maintenant prêts à photographier.

6 Testez le module Camera


Avant de se lancer dans un projet, il vaut
mieux vérifier d’abord que votre module Camera
fonctionne comme attendu. Ouvrez un Terminal et
entrez cette commande :

raspistill -o /home/pi/hello.jpg

Souriez quelques secondes – vous pouvez vous


voir sur l’aperçu en direct de la caméra – pendant ƒ Vous devez
activer l’interface
que la photo est prise et sauvegardée dans le Camera dans la
configuration du
répertoire /home/pi. Pourquoi ne pas l’ouvrir dans
Raspberry Pi avant
le gestionnaire de fichiers pour voir le résultat ? d’utiliser la caméra.

La vision en plus grâce au module Camera magpi.fr 83

080-087_MagPi06_PiCamera_Feature_FR.indd 83 20/12/2018 13:33


COUP DE PROJECTEUR

RÉGLAGES DU
MODULE CAMERA
Tirez le meilleur parti de votre module Camera en ajustant les
divers réglages pour créer des effets différents.

raspistill -w 640 -h 480 -br 40 -o /home/

L
e module Camera ne fait pas que prendre des pi/hello.jpg
Ingrédients
photos – il enregistre aussi des vidéos – mais
> Module Camera savez-vous que l’on peut appliquer une foule Ceci montre comment vous pouvez prendre une
RPi www.elektor. de réglages différents pour personnaliser l’apparence photo plus petite (640×480 pixels) avec une lumi-
fr/pi-camera-mo- de la photo ou de la vidéo ? Dans ce guide, nous allons nosité de 40, mais n’hésitez pas à tester pour voir
dule-2 explorer certains des réglages et commandes que ce qui marche le mieux.
> Adaptateur l’on peut utiliser pour adapter le module Camera à
Camera pour RPi son utilisation dans votre projet, et nous explorerons
Zero (optionnel)
aussi certaines des fonctions les plus excentriques !
– fourni avec
certains kits
Raspberry Pi Zero
(www.elektor.
fr/rpi-zero-w-
starter-kit)

> Carte micro-SD

> Raspbian

2 Ajouter du texte
Si vous êtes assez âgé pour vous rappeler
des vraies photographies imprimées, vous avez dû
remarquer que certains appareils ajoutaient la date
et l’heure de la prise de vue. Si vous êtes trop jeune

1
pour vous en rappeler, pas d’inquiétude, vous ve-
Ajuster la résolution et la nez de découvrir quelque chose ! Avec raspistill,
luminosité vous pouvez ajouter votre propre texte à vos pho-
Le module Camera le plus récent a une résolution tos, avec le paramètre -a ou –annotate. Prenez
maximale pour la photo de 3280×2464 pixels, mais l’exemple suivant :
des images aussi grandes peuvent au fil du temps
occuper beaucoup d’espace de stockage et être plus raspistill -a 4 -a "Pi Camera %d-%m-%Y
longues à traiter par le RPi. Heureusement, raspis- %X" -o /home/pi/text.jpg
till, le programme qui capture les photos sur le RPi,
nous permet très facilement de spécifier la réso- La première séquence -a 4 positionne le masque
lution des photos. Par exemple, vous pouvez fixer de bits dans les métadonnées pour enregistrer
la largeur (640 pixels) et la hauteur (480 pixels) l’heure (plus de détails ici : magpi.cc/2egcYup).
avec respectivement les paramètres -w et -h. Vous La seconde séquence -a inclut notre texte
pouvez aussi spécifier la luminosité avec le pa- personnalisé (Pi Camera) et formate la date en
ramètre -br et une valeur entre 0 et 100. L’image jj-mm-aa (%d-%m-%Y) avant d’ajouter l’heure
ci-dessus a été prise avec le module Camera NoIR (%X) et d’enregistrer la photo dans le répertoire
(d’où les couleurs bizarres) avec : d’accueil du Raspberry Pi sous le nom text.jpg.

84 magpi.fr La vision en plus grâce au module Camera

080-087_MagPi06_PiCamera_Feature_FR.indd 84 20/12/2018 13:33


COUP DE PROJECTEUR

Les essen-
tiels de
Camera

Nous n’avons fait


ici qu’effleurer
les possibilités
du module Ca-
mera. N’hésitez
pas à consulter
le Camera Mo-
dule Guide (en
anglais) dans la
collection The
MagPi Essentials,
pour un tour
d’horizon plus
complet de tou-
tes les comman-
des, conseils et
astuces afin d’en
tirer le meilleur
parti.
« Vous pouvez ajouter des effets aux images magpi.cc/
camera-

prises par le module Camera, comme inverser essentials

les couleurs en négatif. »

3 Ajouter des effets d’image


Une autre fonction originale de raspistill est
la possibilité d’ajouter des effets aux photos prises
par le module Camera, comme inverser les couleurs
en négatif, faire ressembler la photo à un croquis,
ou même ajouter un effet de dessin animé. Mainte-
nant, avant de vous emballer, certains de ces effets
ƒ Faites ressembler
peuvent être un peu imprévisibles, tout en ajoutant la photo à une
néanmoins une touche stylée à vos photos ! Pour aquarelle au lieu
d’un négatif avec
cela, il suffit d’ajouter le paramètre -ifx suivi de le paramètre -ifx
watercolour.
l’effet désiré (liste complète ici : magpi.cc/SuuECJ).
L’exemple suivant applique un effet de négatif ƒ Le gaufrage consiste
à la photo, ainsi que l’addition de notre texte per- à créer une image
en relief, en général
sonnalisé, de la date et de l’heure : sur papier ou
carton. Vous pouvez
recréer l’effet avec
raspistill -ifx negative -a 4 -a "Pi le paramètre -ifx
emboss.
Camera %d-%m-%Y %X" -o /home/pi/negative.
jpg

Comme vous le voyez sur l’image ci-dessus, c’est


un effet intéressant ! Essayez aussi les commandes
sketch (croquis) et emboss (gaufrage).

La vision en plus grâce au module Camera magpi.fr 85

080-087_MagPi06_PiCamera_Feature_FR.indd 85 20/12/2018 13:33


COUP DE PROJECTEUR

PROJETS AVEC LE
MODULE CAMERA
Nous avons choisi six projets à essayer autour du module Camera. Si vous
êtes en mal d’inspiration, jetez un œil à cette sélection des meilleurs.

Animation image par image


L’animation image par image – pensez à Wal-
lace & Gromit – c’est lorsqu’une série de photos
est prise, avec des changements mineurs de
la « scène » filmée. La scène est légèrement
modifiée entre les prises – appelées trames – et
lorsqu’elles sont ensuite réassemblées, l’illusion
de l’animation est complète ! Dans ce fantastique
tutoriel, apprenez comment ajouter un bouton à
la configuration de votre module Camera et créez
votre propre animation image par image !
Plus d’infos : magpi.cc/KiYbdb

Boîtier RPi Zero à LED


Comme vous le savez maintenant, la version
NoIR du module Camera n’a pas de filtre in-
frarouge sur l’objectif afin qu’il puisse détec-
ter la lumière infrarouge. Cela en fait un choix
idéal pour les applications dans l’obscurité.
Grâce à cet élégant projet, vous pouvez facile-
ment ajouter des LED IR pour avoir un éclai-
rage infrarouge complémentaire et des photos
plus détaillées dans l’obscurité – et le tout
contenu dans le boîtier officiel du RPi Zero !
Plus d’infos : magpi.cc/xCozST

Rodak : un RPi dans un Kodak


Prendre des photos est ce pour quoi le module
Camera est fait, donc quoi de mieux que de re-
cycler un vieil appareil Kodak Brownie Flash III
pour abriter un Raspberry Pi Zero, comme l’a fait
Alex Ellis ? Il contient aussi quelques composants
supplémentaires, comme une batterie LiPo pour
une alimentation autonome, un bouton-poussoir
pour déclencher l’appareil et une chouette LED
NeoPixel qui prévient quand votre appareil est
prêt à faire feu de nouveau !
Plus d’infos : magpi.cc/sAxjyc

86 magpi.fr La vision en plus grâce au module Camera

080-087_MagPi06_PiCamera_Feature_FR.indd 86 20/12/2018 13:33


COUP DE PROJECTEUR

« Ajoutez facilement
des LED IR pour
avoir un éclairage
infrarouge
complémentaire
et des photos plus
détaillées dans
l’obscurité ! »

Google Vision : Camera parle


Ce projet sympa, de Dan Aldred (alias TeCoEd),
se sert du service Google Vision du nuage. Si vous
ne connaissez pas Google Vision, sachez que
l’intelligence artificielle y est utilisée pour analyser
une image et vous dire ce qu’il y a dessus ! Dan
pousse ce projet encore plus loin en créant un
appareil portable – contenu dans un vieil appareil
jetable – qui utilise le module Camera, ainsi que
Google Vision pour annoncer ce que vous venez de
photographier.
Plus d’infos : magpi.cc/VadAHy

Réalisez un détecteur de parent (VF : Denis Lafourcade)


Suspectez-vous vos parents de se faufiler
dans votre chambre lorsque vous êtes sorti ?
Vidéosurveillance avec motionEyeOS Est-ce qu’ils jouent avec votre Xbox ou PS4
Si vous avez manqué notre article sur la sécurité sans votre permission ? Alors suivez ce
à domicile dans le n° 5 du MagPi, vous devriez tutoriel et construisez un détecteur de parent,
vraiment découvrir motionEyeOS, un système avec le module Camera et un capteur PIR
d’exploitation autonome qui fonctionne sur (infrarouge passif), et prenez-les la main
Raspberry Pi et vous permet de créer facilement dans le sac ! Apprenez comment le capteur
en quelques clics votre propre système de PIR peut déclencher le module Camera pour
vidéosurveillance domestique. Une fois l’image de prendre une photo dès qu’il détecte un
l’OS flashée sur votre carte micro-SD, vous serez mouvement, et voyez comment vos parents
opérationnel en un rien de temps et capable de réagissent face aux preuves.
garder un œil sur votre domicile en votre absence. Plus d’infos : magpi.cc/nlaODg
Plus d’infos : magpi.cc/mpLqjp

La vision en plus grâce au module Camera magpi.fr 87

080-087_MagPi06_PiCamera_Feature_FR.indd 87 20/12/2018 13:33


INTERVIEW

Dave
Honess
Emmener l’éducation dans les étoiles avec Space Dave.

> Catégorie Éducateur > Site Web www.esa.int


> Profession Coordonnateur « ISS & opérations d’éducation internationales »

« À quand remonte mon


intérêt pour l’espace ?
Mon premier souvenir,
c’est l’observation de la comète
programmes Astro Pi en cours à
la Fondation.
« La majeure partie de ma
carrière n’a rien à voir avec l’es-
vé à discuter avec des gens de
l’agence spatiale britannique
d’une collaboration, ce qui est
devenu la première mission As-
de Halley à neuf ans », nous pace », admet Dave. « Cepen- tro Pi.
raconte Dave Honess. La dant cela m’a toujours intéressé, « Un ami qui travaillait à
rédaction anglaise du MagPi j’aimais regarder les diffusions l’ESA aux Pays-Bas m’a dit qu’il
connaît Dave personnellement en direct de l’ISS dans les an- changeait de travail et que son
- il a travaillé à la Fondation nées 2000 pendant sa construc- poste allait se libérer », dit
Raspberry Pi sur le projet Astro tion. Je n’ai jamais imaginé que Dave. « Nous avons passé en-
Pi, et il a même écrit plusieurs je travaillerai dans le domaine viron une heure au téléphone à
tutoriels pour le magazine.. de l’espace un jour ; cela m’a discuter de tous les aspects de
Aujourd’hui, Dave travaille toujours semblé si éloigné et son travail et… j’ai décidé de
avec l’Agence spatiale euro- abstrait. » poser ma candidature pour le
péenne (ESA) pour aider à orga- Dave a commencé à travailler poste. Nous avons maintenant
niser leurs programmes éduca- pour la Fondation Raspberry Pi déménagé aux Pays-Bas, et je
tifs et il assure la liaison avec les début 2014, et s’est vite retrou- travaille à l’ESA ESTEC (centre

L’astronaute Tim Peake


de l’ESA a participé à la
première mission Astro Pi.
Crédit photo : ESA (Agence Spatiale européenne)

88 magpi.fr Dave Honess

088-089_MagPi06_INTERVIEW_DaveHoness_FR.indd 88 20/12/2018 13:35


INTERVIEW

Astro Pi
J’espère que vous savez main-
tenant qu’il y a deux Raspberry
Pi spéciaux installés à bord de
la station spatiale internationale. ED et Izzy, ces deux dispositifs As-
tro Pi, sont conçus pour exécuter différentes expériences sur l’ISS :
ED vit dans le module de Columbus et utilise un module d’ap-
pareil-photo normal, alors qu’Izzy a un module d’appareil-photo
infrarouge qui regarde par un hublot vers la Terre.
Il y a régulièrement des concours pour que des écoliers européens
Découvrez comment fassent tourner leurs expériences sur ces ordinateurs, certaines
imprimer votre propre
tournent même en ce moment ! Voir astro-pi.org pour plus de
boîtier Astro Pi ici :
magpi.cc/EtDxAo. détails.

européen de recherche et de à Astro Pi, et de les entendre dire vie, vous pourrez carrément as-
technologie spatiale) depuis qu’ils voulaient à présent étudier sister à un lancement réel. »
mars 2018.» l’aéronautique, l’astrophysique
ou autre. » Y a-t-il de futurs plans
Quel est votre meilleur professionnels que vous
souvenir de travail à la croisée Avez-vous des projets pouvez partager avec nous ?
de l’espace et de l’éducation ? personnels relatifs à l’espace ? « Je commence réellement à
« C’est difficile de n’en gar- « Oui, certainement. Chaque croire que l’enseignement de
der qu’un. Je suis vraiment année, l’ESA organise un voyage l’informatique se trouve en
reconnaissant envers mes an- du personnel en Guyane fran- bonne position maintenant,
ciens collègues à la Fondation çaise pour voir le site de lance- mais ça ne veut pas dire que nous
Raspberry Pi de m’avoir permis ment des fusées Ariane ; vous devrions lever le pied. Astro Pi
de voyager en Floride pour voir payez votre voyage, mais vous est devenu un défi éducatif mûr
le lancement de la fusée OA-4 au avez accès à la base de lancement et je pense qu’il continuera de
centre spatial Kennedy en 2015 et droit à une visite guidée. Si progresser. Je tourne maintenant
(celle qui a apporté dans l’ISS vous êtes chanceux, vous pourrez mon attention vers le monde des
le matériel original de l’Astro aussi voir un véhicule intégré de radioamateurs, c’est un domaine
Pi). Je me souviens d’avoir parlé lancement posé sur la rampe, et qui ne suscite pas l’intérêt qu’il
avec les élèves qui ont participé si vous avez la chance de votre mérite. La radio reste la seule
manière de communiquer avec
Voici l’Astro Pi Izzy- son nos vaisseaux spatiaux dans tout
Crédit photo : ESA (Agence Spatiale européenne)

appareil-photo regarde
à travers une fenêtre de
le système solaire ; les organisa-
l’ISS. tions comme ARISS (programme
qui permet aux radioamateurs de
parler avec leurs homologues à
bord de l’ISS) et les clubs locaux
de radioamateurs deviennent, à
mon avis, de plus en plus néces-
saires pour attirer de nouveaux
talents. Il serait bon d’avoir du
matériel éducatif alliant infor-
matique et radio. Après tout,
tous les vaisseaux spatiaux
peuvent se résumer à deux com-
posants principaux : un ordina-
teur et une radio ! »
(VF : Thierry Destinobles)

Dave Honess magpi.fr 89

088-089_MagPi06_INTERVIEW_DaveHoness_FR.indd 89 20/12/2018 13:35


INTERVIEW

Becky
Stern
Experte en bricolage, maker, motarde et vlogueuse.
Becky peut apparemment tout faire.

> Catégorie Maker > Site Web beckystern.com | magpi.cc/DFIfAT


> Profession vlogueuse > Twitter @bekathwia

G
randir avec des parents de maker à l’âge de huit ans en lescente. J’étais inscrite au club
Crédit photo : Smokey Nelson qui aiment bricoler peut cousant une copie d’une peluche vidéo de mon lycée, j’y ai réalisé
souvent déteindre sur les Beanie Babies. « Les ordinateurs des courts métrages avec mes
enfants - même s’il s’agit juste me fascinaient aussi, j’ai passé amis et j’y ai appris à utiliser des
de monter une étagère. Cela a beaucoup de temps sur des fo- logiciels de montage vidéo. »
fortement influencé Becky Stern, rums BBS, naviguant sur le net Après avoir étudié le design et
surtout parce que c’est elle qui des premiers instants, et discu- la technologie, elle a décroché
filmait le processus.. tant avec de parfaits étrangers des contrats à temps partiel pour
« Je me rappelle que je por- sur ICQ », se rappelle Becky. les magazines Make: et Craft:,
tais notre immense caméra VHS « Je me suis lancée dans la cou- avant de passer à plein temps
pour filmer la construction d’un ture de mes propres sacs et je chez Make: et finalement de
grand mur dans l’annexe qu’ils modifiais mes vêtements d’ado- rejoindre Instructables. Tout en
aménageaient », nous dit Becky.
« J’avais probablement cinq ou
six ans, et j’étais trop petite pour
S
 uivez votre curiosité !
aider à soulever la longue pièce N’attendez pas d’avoir les outils ou
 e simple montage permet
C de charpente. »
à Becky de prendre ses
projets en photo pendant
Elle a commencé sa carrière matériaux parfaits !
que ses mains sont
occupées à autre chose.
faisant cela, elle a créé des choses
étonnantes et publié d’excel-
lentes vidéos sur ses réalisations.

Que rêvez-vous de fabriquer ?


Je voudrais intégrer des éti-
quettes RFID sur des bijoux fins
faits main. Je voudrais créer
des tables de chevet flot-
tantes. Je veux connecter une
pédale de pied à l’interphone
pour que le chien puisse ouvrir
la porte […]. J’ai des problèmes
de genoux depuis l’enfance,
alors j’essaie de ne pas imagi-
ner des projets encombrants
ou lourds qui dépassent mes
capacités physiques quelque peu
limitées.

90 magpi.fr Becky Stern

090-091_MagPi06_INTERVIEW_BeckyStern_FR.indd 90 20/12/2018 13:36


INTERVIEW

 ecky est une motarde


B
passionnée et fabrique
des autocollants pour
casques sur commande.

Quels passe-temps et centres ces autres intérêts déteignent tation et de l’échec. Trouvez des  érifier la qualité de la lame
V
d’intérêt avez-vous en dehors naturellement sur mes projets. idées de projets qui résoudront de votre couteau ? Becky a
un projet pour cela.
du bricolage ? vos petits problèmes et tracas
J’aime rouler en moto, ce qui Je veux me lancer dans un […]. Vous accéderez au succès
influence sûrement certaines de projet et je suis novice. Que me étape par étape. Par exemple,
mes réalisations, comme mon conseillez-vous ? terminez un projet au lieu
siège ou mes autocollants pour Suivez votre curiosité ! N’at- d’ajouter encore une fonction
casques sur mesure. J’aime éga- tendez pas d’avoir les outils ou (au début). Si vous voyez votre
lement mes animaux de compa- matériaux parfaits. Laisser ce vitesse d’apprentissage comme
gnie, la nourriture et la cuisine, et que vous avez à disposition vous un jeu vidéo, assurez-vous que
jouer aux jeux vidéo. Je m’appuie aider à déterminer ce que vous c’est amusant de jouer et que le
certainement sur mon expérience construirez en premier. niveau de difficulté croît de ma-
personnelle quand je cherche de Dédramatisez autant que pos- nière appropriée.
nouvelles idées de projet, donc sible les enjeux de l’expérimen- (VF : Thierry Destinobles)

Coup de projecteur sur les projets


APPAREIL-PHOTO GIF POUR TUMBLR PHOTOS BRODÉES APPRENEZ À CRÉER
En général, Becky dit qu’elle est plus satisfaite « Les projets avec un procédé artisanal me « Si vous cherchez des connaissances de base
des projets simples et pourtant utiles. « Natu- rendent plus heureuse pendant leur réali- sur toutes les disciplines communes de la fa-
rellement, les projets électroniques complexes sation », reconnaît Becky. Même si c’est un brication, consultez les cours en ligne gratuits
me donnent un fort sentiment d’accomplis- projet assez simple, c’est l’occasion idéale (en anglais) sur Instructables », indique Becky.
sement (quand ils fonctionnent bien) », ajoute de vous améliorer en broderie et de créer en « J’ai créé les cours sur l’Arduino, l’Internet des
Becky. « Comme l’appareil-photo vintage que même temps quelque chose de réellement objets, le tricot, le solaire et les bijoux, et j’ai
j’ai amélioré avec un RPi pour créer et télé- personnel. appris le travail du cuir, la robotique, et com-
charger des GIF sur Tumblr. » ment employer une scie de table en suivant
les cours de mes collègues. »

magpi.cc/GLrUEb magpi.cc/pYGafL instructables.com/classes

Becky Stern magpi.fr 91

090-091_MagPi06_INTERVIEW_BeckyStern_FR.indd 91 20/12/2018 13:36


Raspberry Pi @ Elektor
BANC D’ESSAI
Notre sélection :
1. RPi 3 B+ Kit de démarrage +
Compilation
www.elektor.fr/rpi-
starterkit

StromPi V3 - alimentation autonome enfichable pour Raspberry Pi


La StromPi V3 est une alimentation autonome qui prend également en charge le module
Battery HAT, un accu LiFePo4 de 1000 mAh, avec une tension nominale de 3,2 V, soit
3,2 Wh. Cette extension HAT s’enfiche simplement sur la StromPi V3 qui devient ainsi
une alimentation de sauvegarde pour votre Raspberry Pi. La notice fournie donne les 2. Kit ordi. portable pi-top 2
informations indispensables pour assembler le tout, mais rien de plus. La lecture de ce www.elektor.fr/pi-top2
banc d’essai sera donc profitable.La StromPi V3 offre au RPi plusieurs entrées de ten- 3. PiJuice HAT
sion dont la gamme s’étend de 6 à 61 V. Ce HAT est doté aussi d’une horloge en temps www.elektor.fr/pi-juice-hat
réel RTC, bien utile en cas de coupure de courant ou de perte de réseau. Quand la source 4. Raspberry Pi 3 A+
d’alimentation de la StromPi V3 fait défaut, un protocole préétabli par l’utilisateur règle www.elektor.fr/rpi-3a-plus
l’ordre de repliement sur les sources d’alimentation restantes. 5. StromPi 3
www.elektor.fr/strompi3
Lisez le banc d’essai sur www.elektormagazine.fr/strompi

LIVRES
Apprendre à programmer Python pour les kids - La Raspberry Pi :
avec Python 3 programmation accessible 35 projets ludiques

Support de cours réputé, adopté par de nombreux Donne vie à Python avec ce livre illustré ! Il te Pour stimuler votre créativité, ce livre présente
enseignants, avec 60 p. d’exercices corrigés. guidera parmi les bases de la programmation, 35 idées de projets ludiques à réaliser soi-même
Réussissez votre entrée dans l’art de la program- à mesure que tu essayeras les exemples de avec RPi. Tout y est : liste du matériel, instructions
mation ! Ce livre s’adresse aux étudiants et à leurs programmes originaux et parfois drôles, avec de montage, code et conseils de pros du RPi.
enseignants, mais aussi à tout autodidacte féru de monstres, sorciers, agents secrets et autres curio- Le code des projets « À monter ! » est téléchar-
programmation qui veut découvrir le langage Py- sités velues. Les définitions des termes utilisés, le geable. Robots, jeux, expériences scientifiques,
thon. Original et stimulant, il aborde concrètement code colorisé, expliqué en détail agrémentent et lecteur vidéo pour enfant, torréfacteur, yaourtière,
tous les fondamentaux de la programmation. facilitent l’apprentissage. scanner 3D, beatbox à betteraves…

www.elektor.fr/python3 www.elektor.fr/python-kids www.elektor.fr/35projets

092-093_MPi06_Storespread_FR.indd 2 20/12/2018 13:55


r www.elektor.fr/raspberrypi
La TV numérique KITS & MODULES
terrestre sur votre RPi
Raspberry Pi
Zero WH
Le Raspberry Pi Zero
WH est identique au
RPi Zero W, sauf que
la barrette de GPIO est
présoudée sur le WH.
Vous pouvez donc
commencer tout de
suite !

www.elektor.fr/rpi-
zero-wh

Audio DAC
Le quatuor gagnant
formé par un RPi,
un DAC de pointe de
type PCM1794A, une
commande de volume
Recevoir et diffuser sur votre serveur domestique la tv et un écran tactile
numérique terrestre, y compris DVB-T et DVB-T2 ? C’est transforme votre
possible avec TV HAT, une nouvelle carte pour tous les RPi en lecteur audio
modèles de Raspberry Pi dotés d’un connecteur GPIO numérique haut de
à 40 broches. gamme en réseau.

Pour la fluidité de la vidéo, il est recommandé d’utiliser un


www.elektor.fr/
Raspberry Pi 2, 3 (ou plus). audio-dac-rpi
Les dimensions de la carte correspondent au demi format du
Zéro. Elle est fournie avec un jeu d’entretoises, un connecteur
à 40 voies et une fiche coaxiale pour l’antenne. Talking Pi
Talking Pi est un nou-
Caractéristiques techniques vel assistant intelli-
gent et universel pour
> Tuner TV Sony CXD2880
la commande vocale
> Normes TV : avec un Raspberry Pi.
• DVB-T2 Le code source de ce
• DVB-T module d’extension
compatible avec le
• VHF III, UHF IV, UHF V
projet Google Home/
> Convient pour Pi 2 / 3 / 3B / 3B+
AIY est ouvert.
> Accessoires fournis
www.elektor.fr/
• 1x connecteur à 40 broches
talking-pi
• 1x fiche coaxiale pour l’antenne

www.elektor.fr/rpi-tv-hat

092-093_MPi06_Storespread_FR.indd 3 20/12/2018 13:56


BANC D’ESSAI

Picade
Pimoroni magpi.cc/iLOfHv 166,50 €

La mini-borne d’arcade Picade


fait peau neuve et propose une
multitude de fonctions améliorées.
Phil King se souvient de sa jeunesse
dans les salles d’arcade.

E
n général, les nouveaux produits sont « plus
grands, plus beaux », mais cette Picade
de Pimoroni est plus petite que la toute
première borne d’arcade de comptoir. L’écran
mesure lui aussi 8 pouces, mais contrairement
au modèle précédent, il n’a pas ce joli contour
noir massif. Cette fois-ci, il s’agit d’une dalle à
commutation en plan (IPS) avec des angles de
vision larges, une résolution plus élevée (1024×768
par rapport aux 800×600 précédents), une nouvelle
carte pilote conçue par Pimoroni, avec un port
HDMI et des commandes au clavier pour accéder au
menu à l’écran.
Le nouveau HAT Picade X, qui fonctionne
avec n’importe quel RPi à 40 broches constitue
une autre amélioration clé. Disponible
également séparément (17 €) pour ceux qui
veulent construire leur propre borne d’arcade
personnalisée, ce HAT a des connecteurs
DuPont faciles d’emploi pour raccorder tous les
fils du joystick et des boutons. Le connecteur
« Hacker » permet de distribuer les autres
broches GPIO et I²C, susceptibles
d’être utilisées pour
ajouter des boutons
supplémentaires.
Ce HAT dispose
également
d’une gestion de
l’alimentation
et d’un CN/A
I²S intégré avec
amplificateur
de 3 W pour l’audio
mono. Ce modèle
n’a qu’un seul haut-
parleur, mais le volume
est suffisant.
Avant de jouer avec votre nouvelle borne Pi-
cade, il vous faudra l’assembler, ce qui vous prendra
cc Plus facile à assembler, cette entre 2 et 3 h. L’assemblage a été simplifié, la seule
nouvelle version de la mini-borne
d’arcade Picade fera un malheur difficulté est de maintenir les petits écrous M3
sur votre table de salon. dans les logements d’accès difficile durant le vis-

94 magpi.fr Picade

094-095_MagPi06_PiCade_REVIEW_FR.indd 94 20/12/2018 13:44


BANC D’ESSAI

sécurité, ce qui est appréciable. SPÉCIFICATIONS

C’est la récré ! ÉCRAN :


dalle IPS
Enfin presque, car vous devrez tout d’abord de 8 pouces,
télécharger et sauvegarder RetroPie sur une carte 1024×768 pixels
micro-SD. Ensuite, il vous faudra activer une ligne
cc Le HAT Picade X dispose dans le fichier boot/config.txt (hdmi_force_
CARTE :
de connexions plus faciles HAT Picade X
à utiliser et notamment d’un hotplug=1) pour imposer la sortie sur HDMI, afin
connecteur « Hacker ».
que l’affichage fonctionne. La carte peut ensuite COMMANDES :
être insérée dans le RPi monté à l’intérieur de Joystick, 6×
boutons d’arcade
sage (utiliser un peu de patafix ne fera pas de mal). la borne d’arcade en passant au travers de la
Certes, les instructions d’assemblage sont impri- trappe d’accès. Sinon, le panneau arrière se HAUT-PARLEUR :
mées au verso d’une affiche A1, mais nous avons démonte aisément ce qui facilite l’accès à tous les 3 pouces, 5 W, 4 Ω
utilisé celles qui se trouvent en ligne, car elles sont composants.
ENCOMBREMENT :
plus simples à suivre. L’assemblage est d’autant Une alimentation standard micro-USB de 5 V 350 × 230 × 210 mm
plus facile que la carcasse de la borne, l’écran, le (non fournie) permet de mettre sous tension le
matériel de fixation et les accessoires sont emballés HAT Picade X, qui à son tour alimente le RPi et
dans des boîtes séparées.. l’écran via un câble USB. On appuie maintenant
sur l’interrupteur et c’est parti. En fait, pas
Avant de jouer sur votre encore. Il faut d’abord connecter un clavier au
RPi et installer le pilote du HAT Picade X avec une
nouvelle borne Picade, il vous commande qui tient sur une ligne dans Terminal.

faudra l’assembler. Suit maintenant la configuration du joystick et


des boutons de commande dans le menu Emula-
tionStation. Il ne reste plus qu’à ajouter quelques
Assemblage de l’arcade fichiers ROM à RetroPie et à choisir son jeu préfé-
On commence par visser les panneaux de ré. Hadouken !
fibres à densité moyenne thermolaqués noirs (VF : Pascal Duchesnes)
en se servant des équerres en plastique. Placé à
l’envers sur un panneau en acrylique transparent,
l’afficheur est relié à sa carte pilote montée à ee Alors, on commence
par quoi ? Popeye ?
l’arrière, au moyen d’un court morceau de câble Donkey Kong ?
en nappe souple. Attention de ne pas tirer trop Street Fighter ?
fort sur les languettes des connecteurs au moment
de l’insertion.
Ensuite, il faut monter les boutons d’arcade Notre avis
de 30 mm ainsi que le joystick à tête sphérique,
doté d’un micro-interrupteur. Comme ces pièces Montage sympa,
sont standards, vous pouvez personnaliser votre mais par mo-
Picade en choisissant des boutons illuminés ou ment compliqué.
une boule de joystick spéciale. Cette nouvelle
borne Picade se
Le câblage est plus facile que sur la Picade
distingue par ses
d’origine, car le HAT dispose de connecteurs composantes de
DuPont sur lesquels les fils dotés de cosses haute qualité et sa
viennent s’enficher. Les fils du haut-parleur robustesse. Parmi
viennent s’insérer dans des connecteurs à clip. les améliorations
Assurez-vous que les fils sont correctement majeures, citons
une dalle IPS à
positionnés du côté du HAT avant de connecter
haute résolution et
le joystick et les boutons. L’arcade dispose de
un HAT Picade X
six boutons de commande, de quatre boutons

9
facile à connecter.
utilitaires répartis sur les côtés et d’un
interrupteur avec voyant qui permet d’allumer

/10
et d’éteindre la Picade, mais aussi d’arrêter
automatiquement le Raspberry Pi en toute

Picade magpi.fr 95

094-095_MagPi06_PiCade_REVIEW_FR.indd 95 20/12/2018 13:44


BANC D’ESSAI

Cube:Bit
4tronix magpi.cc/PjGgkp à partir de 24 €

Inspirée du projet Cubert, cette matrice de NeoPixels


permet de produire des effets visuels en 3D
impressionnants. Phil King nous éclaire sur le sujet.

D
isponible en trois tailles - 3×3×3, 4×4×4, de la tranche du dessus. Chaque tranche est reliée
SPÉCIFICATIONS et 5×5×5 - le Cube:Bit est une matrice 3D à l’autre au travers de trois entretoises seulement,
de LED RVB. 4tronix déclare avoir trouvé puisque la DIN de la tranche inférieure n’est pas
NEOPIXELS : l’inspiration dans le projet Cubert de Lorraine connectée à la DOUT de la tranche supérieure.
125 LED RVB
Underwood (magpi.cc/djMRkX), bien que le Malgré ce montage à trois pattes, le cube est solide.
(modèle 5x5x5)
Cube:Bit ait des allures de nain par rapport à son Vous pouvez le déplacer et même le tripoter sans
ENCOMBREMENT : ancêtre. Le modèle 5×5×5 (98 €) que nous avons craindre de le voir s’effondrer.
89 x 89 x 89 mm testé mesure 89 mm de chaque côté.
(modèle 5x5x5)
Tout d’abord, il vous faudra l’assembler, car Alimentation et pilotage
SOCLE E/S : ce petit bijou est livré en « fines tranches » Bien qu’il soit possible d’alimenter et de piloter le
connecteurs GPIO, 2D carrées dans un écrin de luxe. L’assemblage Cube:Bit manuellement en connectant les pieds
micro:bit, etc.
est rapide et relativement simple grâce aux métalliques du premier étage à une alimentation
instructions fournies en ligne (magpi.cc/EujyXH). de 5 V, à la masse et à un RPi ou à tout autre
Les tranches sont empilées à l’aide des entretoises microcontrôleur, à l’aide de pinces crocodiles, il
métalliques et des vis fournies. On commence par est beaucoup plus simple de le monter sur un socle
la tranche du bas, la face A pointant vers le haut, Cube:Bit (13 €) disponible en option, en se servant
on tourne la prochaine tranche de manière à ce d’entretoises. Ce socle offre quatre options de
que sa face B pointe vers le haut et ainsi de suite connexion d’alimentation en 5 V : micro-USB, prise
(heureusement A et B sont bien repérés). Assurez-
vous que les 5 V et le GND correspondent avec ceux
du bas. La sortie des données (DOUT) de la tranche
inférieure est reliée à l’entrée des données (DIN)

ff Ligne Cube:Bit :
du modèle 3×3×3
au modèle 5×5×5.

96 magpi.fr Cube:Bit

096-097_MagPi06_CubeBit_REVIEW_FR.indd 96 20/12/2018 13:45


BANC D’ESSAI

jack CC de 2,1 mm, broches GVS (masse, tension,


signal) et emplacements pour pinces crocodiles.
Le socle permet également d’alimenter un RPi
connecté ou tout autre microcontrôleur. En plus
d’avoir un emplacement pour une carte micro:bit,
le socle est doté d’un connecteur GPIO pour RPi.
Comme les entretoises métalliques empêchent de
connecter directement un RPi de taille standard,
on doit se servir d’un câble plat (ou de fils volants
raccordés aux seules broches utilisées, soit 5 V,
GND et GPIO 18). Vous pouvez néanmoins monter
un RPi Zero, directement sur le connecteur du
socle Cube:Bit, la carte dépassera alors sur le côté.

Pixels serpentins
Comme le Cube:Bit est une chaîne de LED RVB,
vous pourrez les piloter avec n’importe quel
code standard compatible WS2812B. Vous devrez
installer la bibliothèque Python rpi_ws281x sur
votre RPi, soit directement soit en utilisant p. ex. le
script curl prévu pour le HAT Unicorn de Pimoroni.
En effet, le pilotage manuel risque d’être

une corvée dans la mesure où la « chaîne » de cc Les effets de cette


matrice multicolore
NeoPixels serpente de haut en bas avant de passer sont éblouissants.
à la tranche supérieure. Heureusement, 4tronix a
créé une bibliothèque Python téléchargeable grâce
à une commande qui tient sur une ligne dans ee En veux-tu en voilà !
Théoriquement,
Terminal. Elle permet d’obtenir une cartographie vous pourriez même
logique des pixels pour faciliter leur affectation construire une tour
de BabeLED.
aux coordonnées x, y et z. Ceux qui enseignent la
géométrie en 3D pourront s’en servir comme outil
de démonstration.
Au moment d’écrire ces lignes, la bibliothèque
Python ne contient que quelques exemples de
code : test.py pour créer un arc-en-ciel ou tester Notre avis
chaque LED et purpleRain.py qui fait « pleuvoir
Facile à assembler,
des gouttes violettes ». Avec micro:bit, on
mais pas facile
dispose d’une gamme plus large d’exemples
à programmer.
MakeCode pour démontrer les capacités du Cube:Bit coûte
Cube:Bit, notamment l’effet de rotation du cube (à bonbon surtout
condition d’enficher un pHAT Enviro ou une carte en grande taille
similaire sur le RPi). et avec l’option
Nous avons aussi pensé à l’utiliser comme socle. Mais qu’est-
ce qu’on ne ferait
modulomètre pour la musique. Robin Newman
pas pour des effets
nous invite à aller plus loin, en pilotant les LED visuels en 3D
du Cube:Bit à partir d’un Sonic Pi en utilisant des

8
exceptionnels ?
messages OSC (magpi.cc/RkxuDU) et même d’une
application sur ordiphone. Les possibilités sont

/10
donc multiples.
(VF : Pascal Duchesnes)

Cube:Bit magpi.fr 97

096-097_MagPi06_CubeBit_REVIEW_FR.indd 97 20/12/2018 13:45


BANC D’ESSAI

HiFiBerry magpi.cc/ENHNgK 65 €

SPÉCIFICATIONS

SORTIE
ANALOGIQUE :
2 × RCA

E/S NUMÉRIQUE :
entrée ≤ 96 kHz,
sortie ≤ 192 kHz

DSP :
300 MHz

CONVERTISSEUR
DE FRÉQUENCE
D’ÉCHANTILLON-
NAGE :
convertisseur
de fréquence
d’échantillonnage
asynchrone

DIVERS :
EEPROM

DAC+ DSP
Dopez vos enceintes d’antan avec un
convertisseur numérique-analogique et un
processeur de signal numérique.
Lucy Hattersley

A
vec sa nouvelle carte DAC+ DSP, HiFiBerry Les choses se sont corsées avec DSP. La pro-
a bien l’intention de mettre à niveau l’au- grammation permet de personnaliser la sortie au-
dio RPi, en ajoutant à un CN/A (d’un prix dio numérique.
raisonnable) un processeur de signal numérique. Sur GitHub, HiFiBerry met à votre disposition
Le lecteur attentif remarquera que cette carte res- toute une gamme d’options logicielles pour ses
semble à celle présentée dans le MagPi nº5 (page 82) : cartes DSP (magpi.cc/bzizRQ). Parmi ces options
BeoCrate. En effet, DAC+ DSP reprend une grande intéressantes, citons le logiciel REW (Room EQ Wi-
partie de la technologie de l’ampli BeoCreate qui
coûte plus cher (164 €). DAC+ DSP n’a que deux sor- La programmation permet de
ties RCA alors que BeoCrate en a quatre.
personnaliser la sortie audio
Notre avis
Prêt à résonner numérique. Cette carte vaut
La configuration est relativement simple. La carte son pesant d’or.
s’enfiche directement sur le connecteur GPIO d’un zard, roomeqwizard.com) qui permet d’analyser Elle offre les joies
d’un CN/A haut
RPi 2 ou 3 ou bien d’un RPi Zero pour être alimen- l’acoustique d’une pièce (magpi.cc/xJaOiu). Il y
de gamme sans
tée. Nous l’avons testée avec un RPi Zero W. a également un filtre répartiteur de haut-parleur
oublier la passion
OSMC a fonctionné d’emblée et LibreELEC n’a qui permet de capter le signal d’entrée numérique des audiophiles
requis qu’un ajustement d’une seule ligne dans le unique et de créer de multiples signaux de sortie numériques : le
fichier config.txt. Comme HiFiBerry n’avait pas de hautes, moyennes et basses fréquences suscep- « codage ».

8
mis sa documentation en ligne au moment où nous tibles d’être ajustés (magpi.cc/gbvAXa).
avons examiné DAC+ DSP, nous avons consulté (VF : Pascal Duchesnes)

/10
d’autres guides d’installation, le guide DAC+ a fait
l’affaire.

98 magpi.fr DAC+ DSP

098_MagPi06_DAC+DSP_REVIEW_FR.indd 98 20/12/2018 13:46


EDITORIAL
Éditrice :
Mariline Thiebaut-Brodier
redaction@magpi.fr
À NE PAS MANQUER Rédacteurs :
Voici quelques autres trouvailles intéressantes. (VF : Pascal Duchesnes) Lucy Hattersley, Rob Zwetsloot, Phil
King, Jem Roberts

TÉLÉCRAN RASPBERRY PI ÉCRAN VIDÉO ROTATIF Directeur de la Publication :


Donatus Akkermans
C’est plutôt rigolo de voir le RPi tourner les boutons d’un Contrairement à un ordiphone qui est doté d’un gyro- Auteurs :
télécran. En combinant bricolage et programmation, scope, un mini-écran monté sur un RPi ne change pas Alex Bate, Brian Beuken, Mike Cook,
Sunny Balasubramanian a réussi à se servir d’un RPi pour l’orientation de l’affichage quand on l’incline. Florian David Crookes, Gordon Horsington,
convertir les images qui lui sont envoyées en commandes reprend le principe et va un peu plus loin, comme on Kent Elchuk, Kyle Goff, Phi King,
pour que ce jouet classique les dessine. le découvre dans sa vidéo. Le RPi suit désormais vos Sean McManus, Binsen Qian, Matt
mouvements. C’est magique. Richardson, Laura Sachs, Richard
Smedley, Dean Swift, Clive Webster,
Sai Yamanoor, Srihari Yamanoorr

Maquette :
Dougal Matthews
Sabrina Huppertz

Traducteurs :
Pascal Duchesnes, Pascal Godart,
Jean-Louis Mehren, Hervé Moreau,
Kévin Petit, Denis Lafourcade

magpi.cc/wuLzXa magpi.cc/HrwPdB
PUBLICITÉ
Margriet Debeij
MIRROIR INTELLIGENT CAMÉRA DE VISION NOCTURNE IR margriet.debeij@eimworld.com

On en a vu tellement qu’il faut vraiment quelque cho- Dans une vidéo, Purple Oranji nous explique com- Service aux lecteurs :
se de spécial pour attirer notre attention. C’est réussi, ment elle a fabriqué sa caméra IR pour filmer en contact@magpi.fr
avec ses crochets pour suspendre des clés et sa continu ses hamsters la nuit quand ils sont actifs. Si
station de charge, ce miroir joint l’utile au magique ! vous n’avez d’yeux que pour eux, faites comme elle. MAGPI EST ÉDITÉ PAR
PUBLITRONIC SARL
c/o Regus Roissy CDG
1 rue de la Haye
BP 12910
FR-95731 Roissy CDG cedex
www.magpi.fr

IMPRESSION :
Senefelder Misset ,
Doetinchem (Pays-Bas)

Diffusion :
MLP (France), AMP (Belgique)
magpi.cc/tZDPyp youtu.be/tVmH1V4TBdY
MagPiFR

DIRTY PI : MIXAGE VIDÉO ANALOGIQUE PROJECTEUR PI ZERO W MagPi_FR

Doté, disons, d’une fonction de distorsion, ce mélan- On n’a jamais vu un projecteur aussi sympa, aussi
geur vidéo « réactif au son » a été créé pour le groupe portable. Pour créer ce mini-projecteur, MickMake
de l’utilisateur Reddit sealcouch. « Le bouton central s’est servi d’un RPi Zero et d’un circuit imprimé qu’il
me permet de transiter d’un RPi à l’autre durant la a réalisé lui-même. L’acoustique n’est pas compri-
janvier - février 2019 - n°6
lecture vidéo, tandis que le bouton latéral sert à régler se, mais personne ne vous empêche d’ajouter une
ISSN : 2608-1822
le son. LibreELEC m’a permis de télécharger quelques carte son USB. Dépôt légal : décembre 2018
vidéos sur YouTube. »
MagPi – le magazine officiel du Rasp-
berry Pi (version française) est une
version sous licence du magazine
MagPi publié par Raspberry Pi (Trad-
ing) Ltd, 30 Station Road, Cambridge,
CB12JH (Royaume Uni). Tous les con-
tenus de ce magazine sont
soumis à la licence Creative
Commons Attribution-Non
Commercial-ShareAlike 3.0
Unported (CC BY-NC-SA 3.0).

magpi.cc/DmKvvJ youtu.be/RxQ4GFfPJFo POWERED BY

magpi.cc 99
magpi.fr 99

099_MagPi06_This-Month_FR.indd 99 20/12/2018 13:47


ABONNEZ-VOUS ET RECEVEZ

RPI ZERO W
GRATUIT
Souscrivez dès maintenant un
abonnement d’un an au magazine
MagPi, nous vous offrons :
Six numéros du magazine MagPi

Une carte Raspberry Pi Zero W

Un boîtier avec trois couvercles différents

ENT Un connecteur pour module de caméra


SEULEM

54,95 € TOUS LES 2 MOIS, LES DERNIÈRES


NOUVELLES DU RASPBERRY PI ET
Un câble HDMI/mini-HDMI

PAR ANOS) LES MEILLEURS PROJETS ! et un câble micro-USB/USB OTG


ÉR
(6 NUM

Vos avantages :
Prix au numéro réduit

Chaque numéro directement dans votre

boîte aux lettres

Tous les numéros disponibles sous forme

numérique (PDF)

Cadeau de bienvenue d’une valeur de 22,95 €

Découverte de chaque nouveau numéro

avant sa sortie en kiosque

ABONNEZ-VOUS : WWW.MAGPI.FR

100_MagPi06_Subscription_FR.indd 28 20/12/2018 13:50

Vous aimerez peut-être aussi