Votre boutique On-line

Raspberry Pi

Raspberry Pi 3

Avec Raspberry Pi, une multitude de fonctionnalités s’offrent à vous ...

Découvrez l’univers du Raspberry Pi

et plus de 250 accessoires !

Code KDO : HACKABLE

5€ pour 100€ d’achat

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) www.kubii.fr

ÉDITO

SOMMAIRE

Attrapez-les tous !

À moins de vivre dans une grotte et totalement décon-

ACTUALITÉS

necté du monde, vous avez sans doute du observer des

comportements étranges autour de vous : des utilisateurs

04

de smartphones l’œil rivé sur l’écran semblant errer,

perdus, avant de subitement changer de direction ou se

Tizen, l'autre plateforme mobile

précipiter quelques dizaines de mètres plus loin, parfois

open source...

en témoignant de façon vive et bruyante une certaine

excitation. Ne vous inquiétez pas, c’est normal, ce syn-

drome s’appel e Pokemon Go. .

ÉQUIPEMENT

Je ne suis pas fan de Pokemon, mais il y a dans ce phénomène, ou cette mode, quelque chose qui m’a attiré : la possibilité d’utiliser ce système pour des projets et des montages amusants. Nous avons là une sorte de système de géocaching virtuel 14

utilisant une masse de données impressionnante, et ce avec un aspect interactif inté-

Le C.H.I.P : le tueur de framboises ?

ressant. Bref, un terreau propice à la bidouil e.

Seulement voilà, la société éditrice du jeu, Niantic, ne semble pas apprécier du tout qu’on joue avec ses jeux d’une autre manière que cel e initialement prévue (même si ARDU'N'CO

c’est bien plus drôle que d’attraper des créatures trimbalant un poireau). Ainsi, bien qu’il soit techniquement possible de se construire, par exemple, un détecteur de Pokemon à base de Raspberry Pi, ceci est totalement contraire aux conditions d’utilisation (TOS) et 26

peut vous valoir une suspension de votre compte utilisateur, sinon pire encore.

Un affichage sur papier électronique

Nous avons donc une communauté de développeurs « rebel es », essayant par tous les moyens de créer une interface de programmation (une API) ou d’utiliser cel e, non pour votre Arduino

publique, déjà existante et, en face, un éditeur essayant, par tous les moyens aussi, de restreindre son utilisation, voire de sanctionner ceux qui s’en servent. Personnel ement, 38

je vois cela comme un beau gâchis de temps, d’énergie, d’efforts et de ressources. .

Bien entendu, on peut parfaitement comprendre que l’objectif poursuivi est tout Créez un moniteur de température et

simplement d’empêcher les joueurs de tricher, mais dans ce cas, pourquoi ne pas dis-d'hygrométrie

poser d’une API interne réservée au jeu et en proposer une autre, publique, fournissant simplement des informations basiques, accessibles après enregistrement ? Après tout, c’est ce que font déjà d’autres sociétés et en particulier Google, Twitter et Facebook pour leurs services. .

EN COUVERTURE

Je crois que des choses m’échapperont toujours concernant les choix et la politique de certains acteurs du monde super-connecté dans lequel nous vivons. L’ouverture, la 50

standardisation et la proximité avec les développeurs/hackers les plus inventifs sont Contrôlez votre appareil photo

autant de principes qui ont, pourtant, déjà fait leurs preuves à maintes reprises. .

Devant un tel manque d’ouverture, la réaction la plus intel igente est donc de laisser numérique avec votre Pi

les ténèbres, l’obstination et l’obscurantisme là où ils sont et passer paisiblement son chemin. . (en pestant)

62

Manipuler et traiter automatiquement

vos photos sur Raspberry Pi

Hackable Magazine

Plate-forme de Saint-Quentin-Fallavier.

78

est édité par Les Éditions Diamond

Tél. : 04 74 82 63 04

Prenez des clichés automatiquement

Service des ventes : Abomarque : 09 53 15 21 77

IMPRIMÉ en Allemagne - PRINTED in Germany

en cas de détection de mouvement

Dépôt légal : À parution,

N° ISSN : 2427-4631

Commission paritaire : K92470

EMBARQUÉ & INFORMATIQUE

10, Place de la Cathédrale - 68000 Colmar

Périodicité : bimestriel

Prix de vente : 7,90 €

86

Tél. : 03 67 10 00 20 – Fax : 03 67 10 00 21

E-mail : lecteurs@hackable.fr

La rédaction n’est pas

Votre Raspberry Pi en pont Wifi/

Service commercial : cial@ed-diamond.com

responsable des textes,

il ustrations et photos qui

Ethernet

Sites : www.ed-diamond.com

lui sont communiqués par

Directeur de publication : Arnaud Metzler

leurs auteurs. La reproduction totale ou partiel e des articles publiés dans Rédacteur en chef : Denis Bodor

Hackable Magazine est interdite sans accord écrit de la société Les Éditions Diamond. Sauf accord particulier, les manuscrits, photos et dessins TENSIONS & COURANTS

Réalisation graphique : Kathrin Scali

adressés à Hackable Magazine, publiés ou non, ne sont ni rendus, ni Responsable publicité : Valérie Fréchard,

renvoyés. Les indications de prix et d’adresses figurant dans les pages rédactionnel es sont données à titre d’information, sans aucun but publici-94

Tél. : 03 67 10 00 27 v.frechard@ed-diamond.com taire. Toutes les marques citées dans ce numéro sont déposées par leur Service abonnement : Tél. : 03 67 10 00 20

propriétaire respectif. Tous les logos représentés dans le magazine sont Intégrer l'Arduino dans une réglette

la propriété de leur ayant droit respectif.

Impression : pva, Landau, Al emagne

lumineuse : attention à l'alimentation !

Distribution France : (uniquement pour les

dépositaires de presse)

Suivez-nous sur Twitter

MLP Réassort : Plate-forme de Saint-Barthélemy-

@hackablemag

ABONNEMENT

d’Anjou. Tél. : 02 41 27 53 12

13

À PROPOS DE HACKABLE...

Offres spéciales professionnels

HACKS, HACKERS & HACKABLE

67/68

Ce magazine ne traite pas de piratage. Un hack est une solution rapide et bricolée pour régler un problème, tantôt élégante, tantôt brouil onne, mais systématiquement Abonnements tous supports

créative. Les personnes utilisant ce type de techniques sont appelées hackers, quel que soit le domaine technologique. C’est un abus de langage médiatisé que de confondre « pirate informatique » et « hacker ». Le nom de ce magazine a été choisi Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) pour refléter cette notion de bidouillage créatif sur la base d’un terme utilisé dans sa définition légitime, véritable et historique.

HACKABLE MAGAZINE n°14

3

ACTUALITÉS

SMARTWATCH

TIZEN, L’AUTRE

PLATEFORME MOBILE

OPEN SOURCE...

Denis Bodor

... quand Samsung décidera de mettre vraiment ce système en avant et qu’il y aura des applications. On entend parler de Tizen depuis des années, mais même si des produits existent effectivement, Samsung reste très (trop) discret sur le sujet. Alors que la smartwatch Gear S2

3G est arrivée sur le marché cet été, il est temps de jeter un œil au système qui l’anime. Non ce n’est pas Android, mais Tizen...

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 4

HACKABLE MAGAZINE n°14

Tizen, l'autre plateforme mobile open source. .

Que trouvons- devenue l’association Tizen

nous sur le

regroupant, entre autres,

marché du

Samsung, Intel, Huawei,

smartphone et

Fujitsu, NEC, Panasonic,

des tablettes

Orange ou encore Vodafone,

actuel ement ? Deux OS se par-

et toutes les références

tagent clairement le terrain de

pointant initialement sur LiMo

chasse (le gibier c’est nous, mais

sont maintenant redirigées

on dit « client » pour pas qu’on

vers Tizen.

s’effarouche) : iOS et Android. En

Bien que partageant

dehors de ces vedettes figurent

techniquement des origines

quelques outsiders ou dinosaures,

et des bases communes, les

mais également un système qui a

visions propres à Android et

un fort potentiel : Tizen.

Tizen sont très différentes.

La genèse de Tizen remonte à

Sous Android, vous

MeeGo, lui-même né de la fusion

développez principalement

du projet Maemo initié par Nokia

vos applications avec un

et du Moblin d’Intel. Cela remonte

environnement dédié appelé

à quelques 7 ans maintenant,

Android Studio et ce en Java.

mais certains se souviendront

Avec Tizen, Java n’est pas de

avec nostalgie de leur Nokia N810

la partie et les applications

ou N900. Depuis, les choses ont

peuvent être écrites en HTML5

bien changé et Android occupe

plus d’autres technologies

aujourd’hui plus de 80% des

Web (JavaScript, jQuery, etc.)

L’interface de Tizen ne

unités utilisées. Derrière les

ou sous forme d’applications natives en C.

déroutera pas un utilisateur

d’Android ou d’iPhone.

15% d’iOS de l’iPhone, plusieurs

Autre détail intéressant, il n’est pas

Ergonomiquement parlant

« petits » systèmes se partagent

nécessaire d’utiliser l’environnement

c’est une sorte de mélange

les miettes qui restent. Parmi eux

s’inspirant des deux autres

graphique de développement (IDE) pour

systèmes. Certains points

se trouve Tizen, un système open

créer ses applications. Il est parfaitement

sont sans doute perfectibles,

source (comme Android), basé sur

possible, dans la grande tradition du

mais dans l’ensemble c’est

Linux (comme Android), et destiné

développement UNIX/Linux d’utiliser

avant tout une question

à fonctionner sur smartphones,

de goût.

l’éditeur de son choix et la ligne de

smartwatchs, équipements

commandes, sans le moindre problème.

automobiles, appareils photo

On reconnaît là, sans le moindre doute, la

numériques, téléviseurs, etc. (oui,

trace de développeurs de la vieil e école

comme Android).

et l’influence évidente de gens comme

Tizen est le successeur

Carsten Haitzler, alias Rasterman, créateur

de la plateforme LiMo (LInux

des Enlightenment Foundation Libraries

MObile) dont MeeGo était une

(EFL) et du gestionnaire de fenêtres

implémentation, mais n’est

Enlightenment (si vous ne connaissez pas,

pas pour autant un dérivé de

instal ez le paquet e17 sur votre Pi, ainsi que

MeeGo, mais en réalité d’une

terminology et vous aurez une très bonne

implémentation de référence

idée de ce que permettent de faire les EFL).

réalisée par Samsung dans le

L’aspect technique plus proche d’un

cadre de la plateforme LiMo.

système GNU/Linux standard, une « culture

La fondation LiMo est à présent

Linux » plus présente et une utilisation

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

5

ACTUALITÉS

SMARTWATCH

Mais mon intérêt premier n’était

pas encore Tizen, mais simple-

ment d’utiliser une smartwatch

d’une tail e raisonnable (pas une

horloge comtoise plus large que

mon poignet) m’offrant l’opportu-

nité d’y instal er des applications

« maison » par la suite. Après

une prise en main des plus

pénibles en raison du fait qu’il

s’agissait d’une édition « Asia »

et que je ne possède pas/plus de

smartphone, et après avoir dû

utiliser le smartphone Samsung

d’une col ègue, j’ai décidé de

jeter un œil sans attendre à cette

opportunité de développement. Et

là, surprise ! Les développeurs de

Tizen et du SDK ont fait un sacré

bout de chemin !

Non seulement l’environ-

Le Samsung Z3 n’est

nement de développement

pas commercialisé en

(

Europe et est réservé,

https:/ developer.tizen.org/

massive de standards et de projets ouverts

comme le Z1, au

development/tools/download) est

comme la GNU libC, X11, Wayland, ConnMan

marché indien où il

disponible à la fois pour Windows,

est distribué depuis

(gestion réseau), oFono (téléphonie) ou Smack

Mac OS X (ou « macOS » comme

octobre 2015. On

(sécurité et isolation des applications web) en

remarquera la présence

il faut dire maintenant) et Ubuntu,

font, à mon sens, quelque chose de bien plus

d’un accumulateur

mais ce en 32 et 64 bits. . et avec,

attrayant qu’Android et assez proche de la liberté

amovible et d’un double

au choix, une interface graphique

emplacement SIM,

technique qu’on retrouve avec une Raspberry Pi.

ou en ligne de commandes. L’ins-

deux caractéristiques

très rares chez nous.

tal ation se passe sans le moindre

1. LE POURQUOI DU

problème (avec un système GNU/

Linux Debian) et l’environnement

COMMENT

(basé sur Eclipse) permet de rapi-

dement créer un « Hel oWorld ».

Il y a quelques années, j’avais débuté la ré-

Certes, l’instal ation d’applications

daction un article sur Tizen et la façon de déve-

maison sur la montre passe par

lopper des applications pour cet environnement.

l’enregistrement de certificats en

Le projet d’article s’est cependant rapidement

ligne, à la fois pour le périphérique

essoufflé tant l’instal ation des outils et du kit de

et le programmeur, selon une pro-

développement (SDK) était pénible. Il était litté-

cédure relativement simple, mais

ralement nécessaire de bidouil er dans tous les

dont on se passerait volontiers,

coins pour ne serait-ce qu’obtenir une instal ation mais on arrive, en une après-midi fonctionnelle.

à créer sa première application

Dernièrement cependant, mon attention a été

vaguement utile (en l’occurrence

attirée par ce que je considère comme un gad-

un widget affichant l’adresse IP

get amusant : une montre Samsung Gear S2.

obtenue par la montre via wifi).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 6

HACKABLE MAGAZINE n°14

Tizen, l'autre plateforme mobile open source. .

L’élément clé ici est la pos-

sibilité de développer à la fois

des applications web HTML/JS,

mais aussi, et surtout des appli-

cations dites natives, en C et

reposant sur un environnement

de programmation relativement

simple. En ce qui me concerne,

c’est en particulier ce point qui

fait de Tizen quelque chose de

réel ement intéressant puisqu’on

se trouve dans une logique de

programmation que je pourrai

qualifier de « classique ». Ainsi,

même si vous n’êtes pas coutu-

mier de l’environnement Tizen,

ceci n’est pas très éloigné de ce

qu’il faut connaître pour créer

une application C sous Linux

utilisant les EFL, qui n’est somme

La Samsung Gear

S2 est l’un des

rares périphériques

toute par très différent de la programmation C/C++

Tizen disponibles

qu’on trouve sur bien des plateformes PC, Arduino,

en Europe. Ici le

Launchpad, RPi/WiringPi, etc.

modèle « classic »

passe presque pour

Ceci est très différent de la philosophie de déve-

une montre standard

loppement sur Android ou iOS avec des langages

contrairement aux

comme Java ou Objectif-C qui peuvent paraître

autres modèles du

marché aux cadrans

« extraterrestres » par rapport aux classiques que

démesurés comme la

sont C, C++ ou Python. Cela fait de Tizen un sys-

Moto 360.

tème qui me semble très intéressant pour débuter

le développement d’applications mobiles même si

deux importants problèmes sont au rendez-vous si

vous vous lancez dans l’aventure. .

2. DISPONIBILITÉ DU

MATÉRIEL

Ayant commencé à jouer avec le SDK, l’environ-

nement, les exemples et le matériel lui-même, on en

vient naturel ement à vouloir voir plus grand. Ma pre-

mière expérience m’a donc conduit à la recherche

Le principal problème dans l’achat

d’un périphérique utilisant Tizen pour étendre mes

d’un smartphone destiné à un marché

possibilités de développement. Et c’est là que le

étranger est la liste de langues

supportées. Ici, la seule option possible

problème le plus important se fait jour : il y a, dans

est clairement l’anglais.

les faits, très peu de périphériques disponibles.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

7

ACTUALITÉS

SMARTWATCH

Nous avons tout d’abord les smartwatchs comme Gear 2,

Gear S, Gear S2, Gear Fit et la prochaine Gear S3 (en septembre

2016 théoriquement). C’est sans le moindre doute le périphérique

mobile le plus facile à acquérir puisque la plupart des modèles

sont disponibles chez les distributeurs de produits électroniques.

Les téléviseurs Samsung représentent également une option

puisque tous les modèles fabriqués par Samsung depuis 2015

fonctionnent sous Tizen. Étant cependant totalement anti-TV (et

anti-taxe-TV) depuis plus de 10 ans, je ne vais toutefois pas céder pour le seul plaisir de développer pour un périphérique qui ne

m’intéresse pas.

Certains appareils photo numériques comme le NX1 ou le NX500

peuvent être une option intéressante, à condition d’y mettre le prix et en partant du principe qu’on ne possède pas déjà un appareil

hybride ou reflex digne de ce nom. L’option du Gear 360, un appareil photo/vidéo 360° pourrait être tentée puisque l’objet pourra avoir un usage « normal » original, mais le fait qu’il ne dispose pas

d’interface utilisateur (écran) limite grandement son usage en guise de plateforme de développement.

Si on écarte les produits exotiques que sont les réfrigérateurs

ou encore l’adaptateur Samsung OBD II pour votre voiture, on en

arrive tout naturel ement à la solution qu’on

L’écran de notification

envisagerait en premier lieu : le smartphone.

déroulable depuis le

Et là, on se heurte à un gros problème, sinon

haut est très proche de

à un mur, car même s’il existe effectivement

ce qu’on trouve sous

Android si ce n’est que

deux modèles de mobiles sous Tizen que sont

les raccourcis sont

le Z1 (01/2015) et le Z3 (10/2015), ceux-ci ne

configurables.

sont pas disponibles en Occident. En effet, ces

produits sont réservés au marché indien (plus

le Bangladesh et le Népal) et sont extrêmement

difficiles à obtenir en Europe. Ce qui est

d’autant plus frustrant que le prix annoncé de

5590 roupies indiennes équivaut à environ

75 euros.

L’obtention d’un tel périphérique relève donc

soit d’une chasse au trésor, soit de la mise en

œuvre de contacts internationaux qui vous

permettraient d’acquérir l’objet (l’option de deux

Tizen est multitâche,

fois 8h de vol Paris - New Delhi pour un budget

une pression

à 4 chiffres n’est pas raisonnable). La seule

maintenue sur le

bouton physique

option restante consiste donc à fouil er les sites

en façade liste les

comme eBay ou Amazon et d’attendre la bonne

applications en cours

occasion. Chose que j’ai fait pour finalement

d’exécution qu’on peut

mettre la main sur un Z3 quasi neuf à quelques

alors terminer en les

glissant sur le côté.

230€, sur eBay, en provenance d’Al emagne.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 8

HACKABLE MAGAZINE n°14

Tizen, l'autre plateforme mobile open source. .

Le principal intérêt de

Tizen est sans conteste

Achat que je ne regrette pas,

• connectivité Wifi 802.11 b/g/n +

l’environnement de

car les spécifications, même

Bluetooth 4.0 LE,

développement disponible

au prix payé sont tout à fait

pour Windows, Mac et Linux,

• radio FM intégrée,

sympathiques :

permettant de développer

des applications « maison »

• géolocalisation GPS + GLONASS,

• livré avec Tizen 2.3 et mise à

soit en HTML/JS, soit en

jour vers 2.4,

• et finalement accumulateur amovible de

C. Et ce, au choix, avec

l’environnement graphique

2600 mAh (oui, oui, amovible !).

• processeur quatre cœurs à

ci-contre basé sur Eclipse,

1,3 Ghz,

On ne peut s’empêcher de se demander

soit en ligne de commandes

avec son éditeur de code

pourquoi diable un tel produit n’existe

• processeur graphique Mali-

préféré (Vim donc).

pas pour le marché occidental qui doit

400,

supporter une déferlante d’accumulateurs

• 1 Go de RAM,

intégrés et de disparition progressive des

• 8 Go de stockage interne,

emplacements microSD, le tout à des

prix qui font froid dans le dos. Certes le

• un emplacement microSD

Z3 n’est pas 4G, mais il serait loin d’être

(jusqu’à 128 Go),

le seul modèle d’entrée de gamme à se

• deux emplacements SIM,

limiter au GSM/HSPA. Autre limitation de ce

téléphone dans l’état, le nombre de langues

• écran Super AMOLED

disponibles aussi bien pour l’interface que

5 pouces 720*1280 pixels,

pour le clavier est très limité : seul l’anglais

• caméra 8 MP avec flash à

est utilisable puisqu’aucune autre langue

l’arrière + 5 MP en façade,

occidentale n’est instal ée.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

9

ACTUALITÉS

SMARTWATCH

On ne peut qu’espérer un prochain changement qui selon

les rumeurs devrait succéder à l’annonce de la disponibilité de

Tizen 3.0 en septembre. Je me permettrai cependant d’émettre

la plus grande réserve concernant l’arrivée d’un Z2 ou d’un Z5 en Europe même si la version 3.0 du système risque effectivement

d’être disponible. En effet, fin 2015 bon nombre de sites couvrant l’actualité des smartphones ont annoncé l’arrivé imminente du Z3

dans 11 pays d’Europe, dont la France, sans pour autant que cela

soit effectivement suivi des faits.

3. CARENCE D’APPLICATIONS

En termes de critiques pour les rares personnes ayant eu l’occa-

sion de tester et commenter l’utilisation d’un Samsung Z3 par

exemple, le verdict est souvent le même : bon appareil, interface très personnalisable, mais bien trop peu d’applications.

Bien entendu, le système est encore relativement jeune (en parti-

culier la 2.3) et quelques critiques ont également été faites sur l’ergo-nomie générale, l’utilisation du bouton physique ou encore l’absence de rotation de l’écran d’accueil, mais ceci est avant tout une affaire de goût. Ce qui ne l’est pas en revanche c’est le mil ier d’applications disponibles dans le Tizen Store, face à la concurrence que sont

En termes d’interface la grosse

spécificité de Tizen est la

personnalisation. Il est possible de

modifier presque tous les éléments

graphiques du système et une

importante quantité de thèmes sont

disponibles.

La smartwatch Gear S2

intègre à l’arrière un capteur

permettant de mesurer le

rythme cardiaque. C’est l’une

des fonctionnalités de fitness

intégrée qui devrait ravir les

sportifs...

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 10

HACKABLE MAGAZINE n°14

Tizen, l'autre plateforme mobile open source. .

Le Z3 possède les caractéristiques d’un

smartphone de moyenne gamme avec

une finition exemplaire tout en restant

sobre. Il ne lui manque que deux choses :

la 4G et une fonctionnalité NFC.

Android et iOS où ce nombre s’ex-

bonnes applications. Et c’est là que réel ement Tizen est à

prime en mil ions. Il faut cepen-

la traîne, car la plupart des applications phares manquent à

dant mitiger cette comparaison

l’appel pour séduire l’utilisateur lambda (Facebook Messen-

en rappelant que le Play Store de

ger, Instagram, WhatsApp et Dropbox sont disponibles

Google, tout comme l’App Store

dans le store, mais ne sont pas suffisants pour séduire le

d’Apple, sont littéralement infestés

grand public).

d’applications inutiles ou redon-

Si comme moi, vous préférez voir dans votre smart-

dantes. Une simple recherche de

phone ou smartwatch une plateforme de développement

« lampe torche » et vous en aurez

pour des projets personnels, ce problème n’entre pas vrai-

la parfaite démonstration.

ment en ligne de compte. Au pire, le navigateur, le client

Certes l’offre d’applications

mail et l’outil de messagerie intégrés suffiront amplement

gratuites comme payantes permet

pour un usage courant. Mais ce n’est pas là un usage

une certaine diversité et dans

qu’on peut considérer comme « normal » ou digne de pou-

la masse on trouve parfois des

voir s’adresser à un marché concurrentiel aux leaders du

petites merveil es. Mais la ques-

domaine.

tion n’est pas de savoir quel e

L’absence d’un nombre important d’applications et sur-

plateforme a le plus d’applications

tout d’applications vedettes est donc bel et bien un énorme

disponibles, mais laquel e a les

handicap pour Tizen.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

11

ACTUALITÉS

SMARTWATCH

développement d’une véritable

application sur la base d’un simple

émulateur...

Ma conclusion toute

personnel e est donc que malgré

les difficultés rencontrées, Tizen

est une plateforme furieusement

intéressante que je continuerai

d’explorer et un système que je

recommande si, comme moi, vous

aimez fouiller et vous amuser à

créer des applications en fonction

de vos besoins. Mais à moins d’une

évolution dans la disponibilité du

matériel suite à l’arrivée de Tizen

3.0, la très faible part de marché de

ce système ne justifierait pas que je

m’étende davantage sur le sujet ici,

ce que je regrette énormément. .

L’écriture

À noter enfin que le blog de

d’applications et de

l’Open Source Group de Samsung

widgets, comme

ici le fruit de ma

première tentative

CONCLUSION

parle d’un portage en cours de

Tizen sur Raspberry Pi 2, mais

de programmation,

La plateforme Tizen peut se prêter à une uti-

toutes les informations, images,

est relativement

lisation bien plus dans l’esprit « bidouil e » que

fichiers et sources datent de 2015

aisée pour qui

connaît un minimum

ne le permettent Android ou iOS. C’est avant tout

et les travaux ne semblent pas

le C ou HTML5.

une question de philosophie globale et d’utilisa-

avoir avancé depuis. Peut-être que

L’environnement

tion des technologies en œuvre. Il y a bien en-

cela reviendra au goût du jour d’ici

fournit bon nombre

tendu un travail d’apprentissage non négligeable

la fin de l’année et que le projet

d’exemples dont on

peut s’inspirer et on a

à prévoir pour comprendre et utiliser l’environ-

redémarrera avec la finalisation de

ainsi très vite le pied

nement de développement et la logique des EFL

Tizen 3.0. Adresser ainsi le marché

à l’étrier.

(dans le cas d’un développement natif), mais ceci de l’électronique de loisir serait une me semble bien plus accessible que les deux

excel ente carte à jouer de la part

principaux systèmes du marché.

de Samsung.

Le manque d’applications découle à mon

Tizen a un potentiel de « bi-

sens directement de la non-disponibilité du

douil abilité » énorme et pourrait

matériel. Bien sûr les « grosses applications »

devenir le compagnon idéal pour

que sont Facebook, Instagram, Twitter, Snapchat, quelqu’un usant de Raspberry Pi WhatsApp, etc. jouent un rôle important pour

et d’Arduino pour se confectionner

l’utilisateur, mais un écosystème d’applications

son environnement électronique.

en tout genre n’en est pas moins important. Or

Croisons les doigts, avec un peu

cel es-ci sont principalement développées par

de chance lorsque vous lirez ceci

des particuliers ou des petites entreprises qui,

Samsung se sera plié de quelques

sans pouvoir mettre la main facilement sur un

annonces sympathiques et les

appareil compatible, ne peuvent tout simplement

choses pourront enfin bouger dans

rien créer. Personne ne se lance dans le

ce sens... DB

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 12

HACKABLE MAGAZINE n°14

ACTUALITÉS

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

13

ÉQUIPEMENT

LE CHIP

LE C.H.I.P : LE TUEUR DE

FRAMBOISES ?

Denis Bodor

J’avoue que ce titre a tout de l’accroche racoleuse du tabloïd le plus pathétique, mais c’est ainsi qu’a plus ou moins été perçu le CHIP lors de son annonce. En effet, ceci remonte à une date où le Raspberry Pi Zero n’était même pas encore une rumeur et l’argument le plus percutant était alors tout simplement « le premier ordinateur au monde à 9 dollars ». Le CHIP est depuis passé de la phase de financement participatif et celle de la livraison aux contributeurs Kickstarter, à celle de la précommande avec une production en masse et un début de livraison prévue pour octobre. Le moment parfait pour vous faire découvrir la bête...

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 14

HACKABLE MAGAZINE n°14

Le C.H.I.P : le tueur de framboises ?

Le CHIP de Next thin

Co. (abrégé NTC)

a été annoncé à

grand fracas lors

du lancement de

sa campagne de financement

participatif (ou en anglais

crowdfounding) en mai 2015.

Avec un objectif de 50000$,

ce sont finalement quelques

2 mil ions de dol ars qui ont été

engagés par près de 40000

contributeurs avec des premières

livraisons fin 2015 et durant le

premier semestre 2016. Parmi

ces contributeurs se trouvait votre

dévoué rédacteur en chef.

Les « récompenses » pour diffé-

rentes contributions étaient consti-

tuées de plusieurs éléments :

• le CHIP lui-même, se pré-

sentant comme un ordinateur

mono-carte de 40x65mm ;

• un jeu d’accessoires compre-

nant un accu LiPo, et deux

cartes additionnelles appe-

lées DIP permettant d’ajouter

une sortie VGA ou HDMI ;

• le PocketCHIP, une sorte de

Le CHIP de Next thing Co.

station d’accueil pour le CHIP

est un minuscule ordinateur

fournissant un écran tactile

intégrant processeur

TVA. Instinctivement, on a naturel ement envie de

ARM, 512 Mo de mémoire

LCD 4,3 pouces, un clavier

comparer le CHIP au Raspberry Pi Zero, annoncé

vive, Wifi, Bluetooth 4.0,

(QWERTY) et un accu, le

à quelques 5$ (mais qui en réalité s’affiche à

périphériques et mémoire

tout dans un boîtier plastique

quelques 16€ en France). Cependant, on prendra

flash de 4 Go permettant de

robuste.

stocker un système

garde de ne pas tout mélanger, car même si la

GNU/Linux et de faire

L’ensemble de ces éléments

tentation est grande, il ne s’agit pas du tout du

fonctionner l’ensemble.

est maintenant disponible en

même type de jouet. .

précommande sur https://

getchip.com/pages/store : CHIP

(9$), PocketCHIP (69$), DIP

1. LE CHIP

HDMI (15$) et DIP VGA (10$).

Comme la Raspberry Pi, le CHIP (oui, j’ai

Montants auxquels il faut, bien

décidé que le CHIP était mâle) est un ordinateur

entendu, ajouter le port (quelques

mono-carte intégrant processeur, mémoires, péri-

6$) et surtout les frais de douane

phériques, alimentation et une myriade d’entrées/

incluant, entre autres, 20% de

sorties. Comme la Pi, il est alimenté en 5V par un

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

15

ÉQUIPEMENT

LE CHIP

d’architecture est bien plus courant dans

le monde des systèmes embarqués que le

fait d’avoir recours à un stockage externe.

Cela impacte directement la façon de

travail er avec la plateforme.

Une autre différence notable du CHIP

face à une Raspberry Pi (à l’exception

de la Pi 3) est l’intégration du Wifi et du

Bluetooth 4.0. Là encore ceci implique

qu’il n’est pas nécessaire d’ajouter des

périphériques USB pour obtenir ce type

de connectivité. Parlant d’USB d’ail eurs,

le CHIP ne dispose que d’un seul port,

comme la Pi Zéro, mais le connecteur

servant à l’alimentation est un vrai port

USB OTG. Ceci signifie que la carte

L’élément central

peut, par exemple, être configurée pour

du CHIP est le SoC

devenir un périphérique USB comme une

Allwinner R8, regroupant

interface série, Ethernet ou autre (voir

le processeur ARM

Hackable n°11 et son article sur l’USB

Cortex-A8 à 1 Ghz, un

connecteur USB et fait fonctionner

processeur graphique

un système GNU/Linux Debian

gadget expérimental de la Pi Zero).

Mali 400 et un processeur

(Raspbian étant une adaptation de

Une autre spécificité propre au CHIP est

vidéo Cedar Engine

Debian). Mais dans les grandes

(encodage/décodage).

la présence d’un contrôleur d’alimentation

lignes, la comparaison s’arrête là.

(AXP209) capable de supporter un

Au cœur du CHIP se trouve le

accumulateur LiPo. Un connecteur JST

processeur ou plus exactement

2.0 est directement intégré et permet

le SoC (System On a Chip)

ainsi de connecter un accumulateur (une

Al winner R8 regroupant un

cel ule) qui sera automatiquement utilisé

processeur ARM Cortex-A8

lorsque l’alimentation est débranchée et

1Ghz, un processeur vidéo Cedar

rechargé lorsqu’el e est présente. Ceci

Engine (VPU) et un processeur

vous permettra de créer, sans accessoire

graphique Mali 400 (GPU). Ceci

annexe, un projet autonome. L’accu livré

s’accompagne de 512 Mo de

est marqué « 11.1 Wh » correspondant

mémoire vive et surtout de 4Go de

à 3000 mAh (Wh*1000/tension, soit

flash. C’est là un point important,

11,1*1000/3,7=3000), ce qui est suffisant

car le CHIP n’utilise pas de SD

pour alimenter un CHIP ou un PocketCHIP

ou de microSD pour accueil ir le

durant quelques 5h. Bien entendu, rien ne

système et les données, mais

vous empêche d’opter pour un accu de plus

une mémoire interne de tail e

grande capacité si vous le souhaitez, du

fixe. Ceci signifie qu’il n’est pas

moment qu’il s’agit bien d’un accu LiPo en

possible d’étendre cette mémoire

3,7V (valeur standard) incluant, bien sûr,

puisqu’el e est soudée sur le

un circuit de protection. La tail e d’un CHIP,

CHIP, mais d’un autre côté,

associé au fait qu’il n’y ait pas de partie

qu’il n’est pas nécessaire non

mécanique (emplacement SD) à ce support

plus d’acquérir une carte SD/

rendent la carte très utile pour des projets

microSD supplémentaire. Ce type

demandant autonomie et intégration.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 16

HACKABLE MAGAZINE n°14

Le C.H.I.P : le tueur de framboises ?

2. LES DIP

Les DIP sont au CHIP ce que les shields

sont à Arduino. Comme le précise la docu-

Avant toute chose, précisons

mentation du CHIP, les 80 broches dispo-

que ces cartes additionnel es ne

nibles sur la carte en deux séries de deux

sont supportées qu’avec la version rangées de 20 broches permettent de connec-dite Debian 4.4 du système. Les

ter toutes sortes de circuits. On y trouve ainsi

CHIP ayant été commandés via la

de quoi commander un écran LCD paral èle,

campagne Kickstarter et livrés fin

une console série (UART), diverses tensions,

2015, sont normalement équipés

des masses, les sorties d’un ADC, l’audio,

du système Debian 4.3 ne suppor-

l’interface pour une surface tactile résistive,

tant pas encore les DIP (qui n’ont

deux bus i2c (TWI), un SPI et huit GPIO.

été livrés qu’en mai). Les CHIP

précommandés et qui seront livrés

Ce format et une partie des signaux sont

à partir d’octobre seront norma-

directement utilisés par les DIP afin de, pour

lement équipés de Debian 4.4 et

l’instant, proposer des sorties vidéos VGA et

Le CHIP ne dispose pas de

port VGA ou HDMI par défaut

il ne sera pas nécessaire de faire

HDMI. Le CHIP permet, par défaut de sortir

et ne propose qu’une sortie

de mise à jour. Si vous avez déjà

un signal vidéo via ce qui semble être une

composite RCA. Parfaitement

un CHIP ou que vous en trouviez

simple prise jack audio. Il s’agit en réalité

adapté pour une utilisation

un sous Debian 4.3, il vous faudra

d’un connecteur TRRS (pour Tip-Ring-Ring-

autonome, ceci peut être vu

comme un handicap majeur

d’abord passer à 4.4. Nous traite-

Sleeve) 3,5mm fournissant une masse, l’audio

face aux différents modèles

rons de la procédure simplifiée un

droite et gauche, et un signal vidéo composite

de Raspberry Pi proposant

peu plus loin dans l’article.

(prise RCA jaune sur les téléviseurs).

tous une sortie vidéo

numérique par défaut.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

17

ÉQUIPEMENT

LE CHIP

Vous l’avez compris, le CHIP seul ne propose

• 0x00000002 : le DIP VGA,

donc pas de sortie directement compatible avec

•

un moniteur, mais uniquement un signal analo-

0x00000003 : le DIP HDMI.

gique, soit en 640×480 (NTSC), soit en 720×576

Toutes les informations concer-

(PAL). Un peu comme les premiers ordinateurs

nant le fonctionnement et la

familiaux type Commodore 64 ou Thomson MO5.

conception des DIP étant ouvertes

Chaque DIP intègre à la manière des HAT

et publiques (http://docs.getchip.

Raspberry Pi, une EEPROM 1-wire compre-

com/dip.html et https://github.

nant un numéro d’identification (VID/PID) lu au

com/NextThingCo), on peut sup-

démarrage du système. En fonction de cette

poser que d’autres modèles pour-

identification, le système va alors utiliser, tout

raient apparaître bientôt de façon

comme la Pi, un overlay du device tree pour

indépendante de NTC.

Le PocketCHIP

est une « station

prendre en charge et initialiser le périphérique.

d’accueil » pour le

Il y a pour l’heure un seul VID (Vendor IO),

CHIP, intégrant un

3. POCKETCHIP

0x009d011a, celui de Next Thing Co, et trois

écran 4,3 pouces en

PID (Product ID) :

480×272 pixels, un

Le PocketCHIP est un gros

clavier et un accu pour

• 0x00000001 : le PocketCHIP,

DIP dans lequel s’insère un CHIP.

un fonctionnement

Celui-ci fournit un écran LCD

autonome.

4,3 pouces tactile (résistif) avec

une résolution de seulement

480×272 pixels. Il embarque éga-

lement un accu LiPo (le même

que celui vendu par NTC) et dis-

pose d’un clavier à membrane

avec un agencement QWERTY.

L’ensemble forme une unité auto-

nome permettant d’avoir sur soi

un système compact entièrement

utilisable avec toutes les sorties et

broches utiles placées au-dessus

de l’écran (SPI, i2c, GPIO, etc.).

Je ne vous cacherais pas que

son utilisation relève davantage

du gadget que d’un ensemble

ergonomique agréable à utiliser.

Certes, certaines choses ont

bien été pensées comme

la prise en main, l’interface

graphique intégrée au système

ou encore le petit trou pour un

stylo permettant de faire tenir

le PocketCHIP debout, mais la

résolution limite énormément les

possibilités, tout comme le fait

que l’écran tactile soit résistif et

donc non multi-touch.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 18

HACKABLE MAGAZINE n°14

Le C.H.I.P : le tueur de framboises ?

L’argument de vente du Poc-

ketCHIP est très orienté jeu avec,

de base, l’environnement de créa-

tion PICO-8 permettant de créer

des jeux minimalistes. PICO-8 se

présente comme un environne-

ment de jeu, mais également une

plateforme de création (musique,

animation, etc.) que ses créateurs

désignent comme une Fantasy

Console. Personnellement, je

ne vois pas vraiment d’intérêt

dans ce type de choses même

si le concept est intéressant (des

programmes encodés dans les

PNG, pourquoi pas), en particulier

lorsqu’il s’agit d’un logiciel pro-

priétaire vendu normalement pour

quelques 15$.

Le CHIP s’insère

Le système proposé pour le

directement à l’arrière

système en marche, vous pourrez mettre à jour

du PocketCHIP rendant

PocketCHIP n’est cependant pas

la distribution Debian exactement comme avec

l’ensemble des broches

intimement lié à PICO-8 et repose

inaccessibles. Celles-

une Pi (apt-get update et apt-get dist-

sur une architecture GNU/Linux

ci sont heureusement

upgrade). Mais pour faire évoluer l’ensemble

Debian parfaitement standard,

déportées au-dessus de

du système en une fois, vous ne pouvez pas,

l’écran, permettant ainsi la

avec gestion de paquets, shel ,

comme avec une Pi, tout simplement créer

connexion de montages et

outils, serveur X, etc. Rien ne

de circuits faits maison.

une nouvel e carte SD/microSD puis démarrer

vous empêchera donc de lancer

dessus. Vous devez reflasher le système en

des applications X parfaitement

connectant le CHIP à un PC/Mac alors qu’il

classiques si ce n’est, encore une

se trouve dans un mode spécial, appelé FEL,

fois, la faible résolution proposée.

donnant accès à la mémoire flash.

On trouvera cependant dans ce

DIP un véritable intérêt lorsqu’il

La procédure recommandée est la même

s’agira d’utiliser, par exemple,

quel que soit le système que vous al er utiliser

Python et PyGame pour créer de

(Windows, Mac, GNU/Linux) et se fera par

toutes pièces ses propres jeux,

l’intermédiaire du navigateur Google Chrome

ou encore développer ses propres

ou Chromium. Cependant, les préparatifs

applications graphiques adaptées

sont différents, car chaque système gère le

à l’écran.

périphérique dans le mode FEL de façon

différente.

4. MISE À JOUR

Sous Windows, la première chose à

faire, avant même de connecter le CHIP

DU CHIP

consiste à instal er un pilote spécifique,

disponible via la page http://docs.getchip.

Comme je l’ai dit, le CHIP ne

com/chip.html#instructions. Ce fichier,

démarre pas depuis une carte SD

InstallDriver2.exe, devra être instal é après

ou microSD, mais à partir de sa

téléchargement, tout simplement en l’exécutant

mémoire flash intégrée. Une fois le puis en redémarrant la machine.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

19

ÉQUIPEMENT

LE CHIP

Le clavier du PocketCHIP

est formé d’un ensemble

Notez que la procédure de mise à

Il faut également ajouter à

de pastilles métalliques

jour ou d’instal ation d’un système sur le

cela quelques autres problèmes

tenues en place avec un

film adhésif. L’organisation

CHIP, lorsqu’el e est faite sous Windows

potentiels :

est naturellement QWERTY

peut ne pas fonctionner correctement du

• la qualité du USB câble utilisé :

et un certain nombre de

premier coup. Ceci provient à la fois de

touches manquent à l’appel

changez de câble ;

la façon dont fonctionne le CHIP et cel e

(verrouillage majuscules,

insert, suppr). C’est une

dont Windows gère les pilotes. Lorsque

• le fait de brancher le CHIP sur

solution utilisable pour saisir

le CHIP est connecté en mode FEL, il

un port USB 3 : connectez-le

quelques commandes ou

démarre à partir d’un code spécifique

sur un port USB2 ou via un

URL, mais il est difficile d’y

placé en mémoire morte (ROM). Windows

hub USB2.

voir une solution ergonomique

utilisable sérieusement.

doit reconnaître le périphérique dans cet

Passez-moi l’expression, mais

état. Cependant, le processus de mise à

ne vous étonnez donc pas de

jour ne va utiliser ce mode que pour un

« galérer », la gestion de périphé-

court instant avant de basculer le CHIP

riques et de pilotes sous Windows

en mode Fastboot pour la mise à jour.

étant fidèle à el e-même, c’est

Là, Windows voit une déconnexion du

parfaitement normal (triste, mais

périphérique et une reconnexion d’un

normal).

autre avec des identifiants différents et

doit donc basculer sur un autre pilote

Sous GNU/Linux, comme sur

qu’il devra instal er. La première tentative

Mac, il n’y a pas de pilote à ins-

échoue généralement parce que ce

tal er, car le système reconnaît

second pilote (« C.H.I.P Flashing Mode »)

le périphérique. Sous Linux, il

n’est pas instal é en même temps que le

faudra cependant que l’utilisateur

premier.

courant dispose des permissions

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 20

HACKABLE MAGAZINE n°14

Le C.H.I.P : le tueur de framboises ?

adéquates pour accéder au matériel. Il vous faudra éditer un nouveau fichier, que nous appellerons 99-allwinner.rules, placé dans /etc/udev/rules.d. Ce fichier va ajouter une règle udev qui ajustera les droits au moment de la connexion et de la détection du matériel.

# Permissions pour CHIP

SUBSYSTEM=="usb", ATTRS{idVendor}=="1f3a", ATTRS{idProduct}=="efe8",\

GROUP="plugdev", MODE="0660" SYMLINK+="usb-chip"

SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="1010",\

GROUP="plugdev", MODE="0660" SYMLINK+="usb-chip-fastboot"

SUBSYSTEM=="usb", ATTRS{idVendor}=="1f3a", ATTRS{idProduct}=="1010",\

GROUP="plugdev", MODE="0660" SYMLINK+="usb-chip-fastboot"

SUBSYSTEM=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303",\

GROUP="plugdev", MODE="0660" SYMLINK+="usb-serial-adapter"

Ceci aura pour effet de donner les bonnes permissions à tous les utilisateurs du groupe plugdev dont l’utilisateur par défaut fait généralement partie. Il faudra ensuite rafraîchir la configuration du service udev avec sudo udevadm control --reload-rules.

Ceci fait, quel e que soit la plateforme, l’étape suivante consistera à connecter un Les DIP sont des

cartes additionnelles

câble entre l’une des broches GND (masse) et cel e marquée FEL, puis à brancher le permettant d’ajouter

CHIP en USB à un PC ou un Mac. Prenez ensuite votre navigateur Google Chrome et des fonctionnalités

pointez-le sur http://flash.getchip.com. Là, une page vous proposera de choisir le sys-matérielles au CHIP.

tème que vous désirez enregistrer dans la flash du CHIP et il ne vous restera plus qu’à Ici à gauche le DIP

VGA et à droite le DIP

suivre les indications à l’écran. La procédure, lorsqu’el e fonctionne, est relativement HDMI. Ces deux ajouts

longue, mais vous obtiendrez à terme un CHIP avec un système à jour capable ensuite constituent les seuls

de prendre en charge les DIP et donc l’éventuel e sortie HDMI.

moyens pour connecter

le CHIP à un moniteur

PC.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

21

ÉQUIPEMENT

LE CHIP

Le DIP HDMI fournit une solution

pour faire du CHIP une station de

travail miniature, mais il faudra ajouter

un hub USB afin de pouvoir utiliser

un clavier et une souris. Un certain

nombre de broches sont déportées sur

le DIP, mais l’ensemble des signaux

ne sera plus présent/utilisable. À

l’heure actuelle, seul le signal vidéo

est présent en HDMI, pour l’audio, il

faudra attendre ou utiliser la sortie jack

3,5mm.

5. CONFIGURATION

ET FRANCISATION

Quel que soit le système utilisé,

configurer son CHIP pour le plier

à notre identité toute française n’est pas très différent de ce qu’on peut faire avec une carte Raspberry Pi. Avant toutes choses, on obtiendra une ligne de commandes (console série, terminal dans l’interface graphique ou via Wifi/SSH). On pourra alors utiliser, tant bien que mal, le clavier pour saisir les commandes :

$ sudo apt-get install locales $ sudo dpkg-reconfigure locales Ceci aura pour effet d’instal er les éléments propres à la configuration des locales ou

« paramètres régionaux » en bon français. La dernière commande vous présente une liste où vous choisirez fr_FR ISO-8859-1, fr_FR.UTF-8 UTF-8 et fr_FR@euro ISO-8859-15, pour ensuite sur l’écran suivant, définir fr_FR.UTF-8 comme locale par défaut. Le fait d’instal er les deux autres les rend simplement disponibles en cas de connexion SSH depuis une machine les utilisant (une ancienne instal ation GNU/Linux par exemple).

Ces manipulations vous permettront dans un premier temps d’obtenir les messages et des traductions françaises pour de nombreux logiciels et commandes, mais ce n’est pas tout. Il vous faudra ensuite configurer votre clavier USB (ne le faites pas pour un pocketCHIP), avec sudo dpkg-reconfigure console-data. Dans la liste, sélectionnez Choisir un codage clavier

pour votre architecture (notez que ça parle français à présent). Enfin, vous pourrez enchaîner sur sudo dpkg-reconfigure keyboard-configuration et naviguer dans les écrans pour sélectionner le type de clavier que vous souhaitez utiliser.

De là on peut ensuite se plier d’un sudo apt-get update et d’un sudo apt-get dist-upgrade pour mettre l’ensemble du système à jour. Ce après quoi j’enchaîne généralement avec un sudo apt-get install vim bash-completion screen mc exuberant-ctags et un sudo apt-get purge vim-tiny avant de copier, depuis mon PC, mon arborescence

.vim* (configuration Vim) et les fichiers .inputrc (recherche dans l’historique avec les flèches haut/bas) et .screenrc. Je dispose alors d’une ligne de commandes exactement comme je l’aime, un véritable éditeur de texte/code/configuration, un démultiplexeur de termi-naux et un gestionnaire de fichiers en mode texte.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 22

HACKABLE MAGAZINE n°14

Le C.H.I.P : le tueur de framboises ?

Quelle que soit la sortie

vidéo utilisée (HDMI, VGA

CONCLUSION, AVIS ET RÉPONSE

ou composite), le système

Debian GNU/Linux propose

Je vais être direct : le CHIP ne va pas remplacer les Raspberry Pi, ni même une interface graphique

les concurrencer.

reposant sur XFCE.

Différentes applications

Ce n’est pas une question de qualité ou de technicité, ni même de puissance permettent alors de l’utiliser

ou de fonctionnalités. Les deux plateformes n’adressent simplement pas les comme un ordinateur

standard, dans les limites

mêmes utilisateurs. Pour tout dire, je ne sais pas exactement qui sont les utilisa-imposées par les 512 Mo

teurs visés par Next Thing Co., car derrière un aspect accessible et beaucoup de mémoire vive.

d’efforts sincères pour satisfaire les amateurs et utilisateurs de Pi, le CHIP ressemble davantage à une plateforme pour l’embarqué qu’à un nano-ordinateur mono-carte.

Nous avons là un système avec de la flash intégrée, un bootloader U-Boot absolument merveil eux et un support noyau de grande qualité (d’ail eurs développé par les français de Free Electrons). L’absence de sortie VGA ou HDMI est en parfaite cohérence vis-à-vis d’une tel e approche hyper technique. Les diffé-

rentes interfaces proposées, l’intégration du contrôleur de charge LiPO, l’USB

OTG dès la première version, tout comme le support des overlay du device tree, Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

23

ÉQUIPEMENT

LE CHIP

tout semble décrire un matériel

destiné aux professionnels ou aux

amateurs éclairés souhaitant une

approche plus industrielle.

Mais en paral èle à ces ca-

ractéristiques, nous avons le

PocketCHIP, les DIP, PICO-8 ou

encore le système de mise à jour

via navigateur web. Autant d’élé-

ments qui vont clairement dans

le sens de l’utilisateur hobbyiste.

J’apprécie grandement le CHIP

lui-même. Compact, fonctionnant

sur accu, intégrant l’USB OTG. .

c’est une plateforme de déve-

loppement très intéressante et

économique. Les DIP et le Poc-

ketCHIP, en revanche me laissent

totalement indifférent, même s’il a

Le CHIP ne dispose pas d’un

emplacement SD ou microSD.

Le système trouve place dans la

mémoire flash intégrée et pourra être

changé en démarrant le CHIP en

mode FEL via la mise à la masse de

la broche éponyme. Il faudra ensuite

utiliser la connexion USB via un PC

ou un Mac pour charger un nouveau

VOUS CHERCHEZ...

système grâce à une application

installée dans Google Chrome (ou via

les outils du SDK).

...DES OFFRES SPÉCIALES

D’ABONNEMENTS ?

OU

...NOS HORS-SÉRIES ?

Après différents essais, tests, et

expérimentations, voici ce qui

m’apparaît être la seule configuration

réellement intéressante du CHIP :

un système embarqué autonome,

contrôlé via une console série (ou

SSH), susceptible d’être utilisé

comme excellente base pour un

projet de développement d’un objet

connecté. Nous sommes ici dans le

registre du système embarqué ou

de la plateforme de développement,

davantage que dans celui occupé par

la famille Raspberry Pi.

VENEZ VOIR NOTRE NOUVEAU SITE WEB !

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 24

HACKABLE MAGAZINE n°14

www.ed-diamond.com

demi-pub-site-mook.indd 1

19/08/2016 15:59

Le C.H.I.P : le tueur de framboises ?

été amusant de les tester, ce ne sont à mes yeux

simplicité offerte par le fait de mettre une microSD

que de simples gadgets qui se retrouveront dans

dans un lecteur et d’écraser son contenu. Et enfin,

un tiroir assez rapidement après quelques essais

le concept du pocketCHIP bien que très amusant

avec des codes « maison ».

se solde finalement en une seule et unique frustra-

Si l’on s’en tient à l’offre el e-même, on

tion se résumant à deux valeurs : 480 et 272.

constate que le CHIP seul n’est alors en rien

Voici donc ma conclusion, je reconnais ne pas

concurrent à la Raspberry Pi, bien instal ée

être tendre avec le matériel mais, non, le n’ième

et satisfaisant pleinement les besoins de ses

« Raspberry Pi Kil er » supposé n’en est pas un

utilisateurs. Beaucoup trop de limitations sont

et se résume à une excel ente plateforme de

présentes dans le cas du CHIP. Avoir recours à

développement et d’expérimentation pour Linux

un DIP pour l’affichage sur un écran moderne

embarqué (le vrai, avec U-Boot, sous-système

est très restrictif. Le caractère indispensable d’un

MTD, UBIFS, USB OTG, etc.). Ainsi, si vous

hub USB pour une utilisation desktop l’est tout

souhaitez plonger dans les méandres du système,

autant. Dans ce cadre d’utilisation, l’absence

développer, personnaliser la plateforme ou créer un

d’un support de stockage amovible rend difficiles

objet connecté. . ce sera un excel ent choix. Si en

les modifications du système ou simplement sa

revanche vous voulez voir dans le CHIP un simple

réinitialisation. L’outil de flashage apporte une so-

ordinateur miniature pour des projets accessibles,

lution, mais el e n’est en rien comparable avec la

une Raspberry Pi est un bien meil eur choix. DB

VOUS CHERCHEZ...

...DES OFFRES SPÉCIALES

D’ABONNEMENTS ?

OU

...NOS HORS-SÉRIES ?

VENEZ VOIR NOTRE NOUVEAU SITE WEB !

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

25

www.ed-diamond.com

demi-pub-site-mook.indd 1

19/08/2016 15:59

ARDUINO'N'CO

PAPIER ÉLECTRONIQUE

UN AFFICHAGE SUR

PAPIER ÉLECTRONIQUE

POUR VOTRE ARDUINO

Denis Bodor

Les solutions pour afficher du texte et des graphismes avec une carte Arduino sont légion : afficheurs LCD alphanumériques, matrices de leds, écrans TFT, modules Oled, etc. Le papier électronique utilisé majoritairement par les liseuses comme l’Amazon Kindle ou la Kobo de la Fnac possède l’aspect d’un papier plastifié tout en permettant un affichage dynamique. Il existe quelques modules d’affichage de ce type pouvant être utilisés pour vos projets, le plus souvent de taille réduite.

Celui testé et utilisé ici est un modèle conséquent avec une diagonale de 115 mm (4,3”), de quoi satisfaire ses envies d’originalité...

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 26

HACKABLE MAGAZINE n°14

Un affichage sur papier électronique pour votre Arduino Le principal intérêt du attendre une bonne dizaine d’années avant de voir leur papier électronique

popularité croître au point de devenir véritablement un

est son aspect : il

objet du quotidien.

ressemble à une im-

pression laser ou jet

Le principe de fonctionnement de la plupart de ces

d’encre sur papier. Le support est

écrans repose sur l’électrophorèse, consistant à séparer

donc totalement réflectif par oppo-

des particules en fonction de leur charge électrique.

sition aux écrans LCD, TFT ou

La base d’un tel système d’affichage est un ensemble

Oled émettant de la lumière. L’affi-

de capsules contenant des particules sphériques d’un

chage est donc plus « naturel »

diamètre de quelques microns, en suspension dans

et moins fatiguant à la lecture.

un liquide transparent. Les bil es en suspension sont

Un autre avantage est l’aspect

chargées négativement ou positivement et colorées en

statique de l’affichage. La techno-

blanc ou en noir. Les capsules sont prises en sandwich

logie utilisée consiste à changer

dans un substrat couvert d’électrodes transparentes. En

l’état des pixels, dans un sens ou

appliquant une charge électrostatique de part et d’autre

dans l’autre, et c’est uniquement

du support, les particules ou bil es changent de position

ce changement qui nécessite de

laissant alors apparaître une couleur ou l’autre selon la

l’énergie. Lorsqu’il n’est plus ali-

polarité.

menté, l’écran conserve donc l’état

Une fois le déplacement terminé, il n’est pas

qui lui a été donné précédemment, nécessaire de maintenir la charge électrostatique. En contrairement à d’autres systèmes

l’absence de cel e-ci, les particules conservent tout

où une coupure d’alimentation est

simplement leurs positions. En théorie, ce mécanisme

synonyme d’effacement. L’affi-

fonctionne à merveil e, dans la réalité il n’en va pas tout

chage sur papier électronique est

à fait de même. La densité de capsules dans le substrat,

donc très économe en énergie, un

la proximité des unes par rapport aux autres, la présence

autre avantage important pour les

de charges électrostatiques rémanentes et l’inertie

liseuses.

mécanique des bil es font qu’un effet visuel gênant

apparaît : des images fantômes.

1. LA

En effet, une image précédemment affichée en

TECHNOLOGIE

noir sur fond blanc, par exemple, redessinée en blanc,

laissera entrevoir le tracé précédent. De la même

DU PAPIER

manière, un tracé en noir puis le basculement de tous

les pixels de la zone dans cette même couleur fera, là

ÉLECTRONIQUE

aussi, apparaître une trace fantôme. Cet état de fait

rend très difficile un rafraîchissement partiel de l’écran

La technologie du papier élec-

et la technique utilisée dans la plupart des cas consiste

tronique, ou e-paper en anglais,

alors à non seulement redessiner entièrement l’écran

n’est pas récente. Les premières

à chaque changement, mais également à basculer tout

expérimentations dans ce do-

l’écran en noir puis en blanc avant un nouveau tracé,

maine remontent aux années 70

parfois même plusieurs fois de suite. Ceci force les bil es

puis le concept a été amélioré

à reprendre une position uniforme avant tout nouvel

dans les années 90, gagnant en

affichage, un peu comme secouer un récipient pour faire

résolution et en fonctionnalités. Ce

n’est que début 2000 que les péri-

descendre les petits éléments et remonter les plus gros.

phériques de lecture électronique

En fonction de la qualité et la technologie utilisée par

utilisant cette technologie font

le papier électronique, ces opérations de rafraîchisse-

leur apparition et il faudra encore

ment peuvent être plus ou moins optimisées en étant

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

27

ARDUINO'N'CO

PAPIER ÉLECTRONIQUE

Le module d’affichage se

présente sous la forme

faites zone par zone, mais un rafraîchissement

désignation « 4.3inch e-Paper »,

d’un circuit imprimé

de 75 x 118 mm où un

complet s’avère tout de même nécessaire régu-

mais se retrouve sur les sites

écran de 4,3 pouces

lièrement. Vous comprendrez alors qu’il n’est pas d’enchères et les boutiques en d’une résolution de

vraiment possible d’utiliser ce type d’affichage

ligne sous de nombreux autres

800×600 pixels occupe

de la même façon qu’un écran TFT ou Oled et

intitulés. L’objet testé était vendu

la majeure partie de

la surface. Largement

que l’affichage d’animations est tout simplement

par eckstein_komponente sur

suffisant pour envisager

hors de portée.

eBay sous le nom « 4.3 inch

de nombreuses

800 x 600 e-Paper LCD serial

applications...

interface electronic paper display

2. ÉCRAN WAVESHARE

WS92019 » au prix de 68€. J’ai

4,3 POUCES

opté pour cette offre, même si le

mot « LCD » dans la désignation

La technologie e-paper parfois appelée EPD

était peu encourageant, car le

(E-Paper Display) bien que très courante pour

vendeur se trouvant en Al emagne,

les liseuses et de plus en plus pour les systèmes

j’étais assuré d’obtenir le produit

d’affichage de prix en magasins, est encore

assez rapidement. On peut

relativement rare lorsqu’il s’agit d’électronique

cependant trouver le même objet,

hobbyiste. Quelques modules existent proposant

via des vendeurs de Shenzhen

des écrans de plus ou moins grande tail e, mais

pour quelques 50€ port offert si

leur coût reste généralement important face à

l’on accepte de patienter quelques

des équivalences en LCD TFT.

semaines pour la livraison.

Le modèle choisi et testé ici est construit

Le modèle est facilement

et vendu par la société WaveShare sous la

reconnaissable avec un écran de

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 28

HACKABLE MAGAZINE n°14

Un affichage sur papier électronique pour votre Arduino tail e conséquente (4,3” ou 115mm

connexion série en 115200 bps. La connexion avec

de diagonale), son circuit imprimé

une carte Arduino est relativement simple même si

bleu, une sérigraphie « 4.3inch

le câble fourni propose des connecteurs femel es

e-Paper » sur la tranche et le

alors que les cartes Arduino également (du moins

logo Waveshare à l’arrière. Il est

les versions officiel es). Le brochage est le suivant :

peu probable que vous puissiez

• 1 RST (bleu) : la ligne permettant de réinitiali-

le confondre avec un autre

ser le module qui est généralement laissée non

modèle tant ces produits sont peu

connectée ;

courants...

Ce module d’affichage est

• 2 WAKE_UP (jaune) : le signal permettant de

bien plus qu’un simple écran. Il

réveil er le module si celui-ci est passé en veil e

intègre en effet un microcontrôleur

de façon logiciel e pour réduire la consomma-

STM32F103, 1 Mo de mémoire

tion de courant ;

(SRAM), 128 Mo de mémoire de

• 3 DIN (vert) : réception des données série,

stockage (NAND), un support

cette ligne doit être connectée à la broche TX

microSD et une interface série.

de la carte Arduino ;

Piloter un écran e-paper n’est pas

• 4 DOUT (blanc) : envoi des données série

chose facile et le microcontrôleur

transmises par le module, à connecter à la

STM32 se charge donc de le faire

broche RX de l’Arduino ;

à votre place, exactement comme

un circuit intégré HD4480 ou com-

• 5 GND (noir) : masse ;

patible le fait pour un afficheur

• 6 VCC (rouge) : tension d’alimentation entre

LCD alphanumérique. Mais ce

3,3V et 5V. Cette tension sera également

n’est pas tout, ce microcontrôleur

cel e du niveau logique haut pour les autres

prend également en charge des

broches. Le module est donc utilisable aussi

primitives graphiques permet-

bien avec les Arduino en 5V comme la UNO et

tant d’activer des pixels, tracer

en 3,3V comme la Due, mais également avec

des lignes, dessiner des formes

une Raspberry Pi (il existe un module Python

pleines ou vides, afficher des

développé par un programmeur indépendant

images ou écrire du texte.

de WaveShare : https://github.com/yy502/

Il est également possible

ePaperDisplay).

d’utiliser des fichiers présents

sur la carte microSD (appelée

TF dans la documentation) ou

3. UTILISATION DE

dans la mémoire de stockage de

128 Mo ainsi que de procéder

L’ÉCRAN

à des copies de la carte vers la

La connexion Arduino/module sera la

mémoire. Les fichiers en question

suivante : VCC sur 5V, GND avec GND, DIN

peuvent être des images au

sur TX, DOUT sur RX, WAKE_UP sur 2 et RST

format BMP ou des polices de

sur 3. Bien que la documentation précise que la

caractères dans un format qui

broche RST soit plus ou moins inutile, cel e-ci

semble non standard.

est effectivement configurée et utilisée dans la

C’est donc davantage un sys-

bibliothèque. Ce qui nous amène au principal

tème complet qu’un simple écran,

problème de ce produit : une bibliothèque

et celui-ci communique avec

passablement mal écrite intégrant un certain

un protocole particulier via une

nombre d’éléments « en dur » dans le code.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

29

ARDUINO'N'CO

PAPIER ÉLECTRONIQUE

Cette bibliothèque est disponible directement sur le wiki de WaveShare sous la forme d’une archive 7z : http://www.waveshare.com/wiki/File:4.3inch-e-Paper-Code.7z. Ce fichier contient des codes et fichiers pour les plateformes ST Nucleo F103RB (mbed), STM32 Open103Z de WaveShare et Arduino, ainsi que ce qui semble être le binaire du firmware pour le STM32 du module (sans les sources). Vous trouverez ainsi, une fois l’archive décompressée, un répertoire 4_3inch-ePaper-demo/Arduino-epd contenant un croquis Arduino-epd.ino ainsi qu’un sous-répertoire epd comprenant les deux fichiers qui forment la bibliothèque (epd.cpp et epd.h).

Il vous faudra alors copier le répertoire epd et son contenu dans le répertoire librairies de votre carnet de croquis pour ensuite, éventuel ement ouvrir le fichier Arduino-epd.ino, le compiler et le charger dans votre Arduino. Si tout se passe correctement, le module devrait alors afficher une série de démonstrations graphiques avant de terminer par quelques lignes de texte et passer en veil e.

La mise en œuvre d’un premier croquis « maison » est relativement simple au regard de ce que fournit la bibliothèque :

#include <epd.h>

void setup() {

// initialisation du module

epd_init();

epd_wakeup();

// utilisation de la mémoire intégrée

epd_set_memory(MEM_NAND);

// on dessine en noir

epd_set_color(BLACK, WHITE);

// effacement de l'écran

epd_clear();

// choix de la police

epd_set_en_font(ASCII64);

// écriture de texte

epd_disp_string("Hackable Magazine #14", 0, 80);

// mise à jour de l'affichage

epd_udpate();

// mise en veille

epd_enter_stopmode();

}

void loop() {

}

Le développeur ayant une certaine expérience remarquera sans peine quelques petites choses dans l’exemple officiel fourni, indiquant clairement que le code n’est pas initialement développé pour Arduino, mais adapté d’un code générique en C. L’utilisation de void setup(void)en lieu et place de void setup(), par exemple, est typique du C, car ces deux Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 30

HACKABLE MAGAZINE n°14

Un affichage sur papier électronique pour votre Arduino

syntaxes n’ont pas le

même sens alors qu’en

C++, le langage sous-

jacent de l’environnement

Arduino (compilateur

avr-g++), el es sont

strictement identiques.

De plus, les fonctions

proposées sont. . des

fonctions et non des

méthodes (comme

Serial.println()),

il ne s’agit pas de

programmation orientée

objet comme ce que l’on

trouve généralement pour

une bibliothèque Arduino

digne de ce nom.

Ce n’est pas tout, en

regardant du côté du

L’électronique de

fichier epd.cpp, on remarque

contrôle se trouve à

également un certain nombre de

l’arrière du module où

UNO et au premier sur Mega 2560

l’écran à proprement

choses gênantes :

alors que ce port est déjà utilisé pour le

parler est connecté

via un flatflex. La

• un commentaire précise que

moniteur série et pour la programmation

qualité de l’ensemble

l’environnement utilisé est

de la carte. Il est ainsi nécessaire de

est bien supérieure à

RealView MDK-ARM, une

déconnecter le câble blanc du module

celle d’autres modules

solution propriétaire de la

avant de programmer la carte pour éviter

d’affichage (LCD, TFT,

etc.) généralement

société Keil appartenant à

d’envoyer des données non valides à

utilisés, il s’agit

ARM et non un environne-

l’écran. En cas d’utilisation d’un autre port

clairement d’un produit

ment dédié à Arduino ou aux

ou de la bibliothèque SoftwareSerial, il faut

initialement destiné

microcontrôleurs Atmel ;

modifier le code de la bibliothèque fournie.

à une utilisation

industrielle.

• le fichier intègre une men-

• La bibliothèque déclare un tableau de

tion « Copyright 2005-2014,

512 octets (unsigned char) alors que

WaveShare - All Rights

Arduino UNO, par exemple, n’en possède

Reserved » sans préciser de

que 2Ko soit 1/4 de la SRAM disponible,

licence, il n’est donc pas légal

pour composer et stocker les données à

de redistribuer ce code ;

envoyer au module. Mais la seule fonction

faisant usage d’un tel volume de données

• les broches 2 et 3 corres-

est epd_disp_string(), qui ne vérifie

pondent à wake_up et reset,

d’ail eurs pas la tail e de la chaîne de

il n’est pas possible d’utiliser

caractères qui lui est passée en argument.

d’autres broches sans modi-

• La réponse du module, généralement

fier la bibliothèque ;

"OK" n’est jamais vérifiée, le port série

• la bibliothèque utilise par

n’est utilisé qu’en écriture. Techniquement,

défaut Serial correspondant

la broche DOUT sur RX est totalement

au seul port série sur une

inutile.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

31

ARDUINO'N'CO

PAPIER ÉLECTRONIQUE

• De façon générale, l’ensemble

• epd_screen_rotation(mode) :

de la bibliothèque n’est pas

définit l’orientation de l’affichage,

optimisé et n’utilise aucune

soit normal (EPD_NORMAL), soit

technique permettant d’écono-

tourné à 180° (EPD_INVERSION).

miser de la mémoire (comme

La position 0:0 se trouve en haut

le stockage des chaînes en

à gauche de l’écran par défaut

flash).

(affichage normal) et en bas à

Comme vous pouvez le voir, la

droite en inversé.

bibliothèque fournie par WaveShare

• epd_clear() : efface la

n’est rien autre qu’une modeste

mémoire de l’écran (ceci n’a

démonstration du fonctionnement du

aucun impact sur l’affichage

protocole à utiliser avec le module

tant que epd_udpate() n’est

et pour ainsi dire, un exemple

pas utilisé). La couleur utilisée

assez brouil on et décevant des

pour l’effacement est cel e

fonctionnalités du produit.

d’arrière-plan (epd_set_

color(couleur, couleur_

Quoi qu’il en soit, voici un

fond)),

résumé des fonctions disponibles,

puisque la documentation officiel e

• epd_udpate() : répercute les

ne couvre pas le sujet :

modifications de l’affichage

sur l’écran. La logique ici est

• epd_init() : initialise le mo-

de composer un écran avec

dule, à appeler avant toutes

les primitives graphiques puis

communications,

Interface et alimentation sont

de « pousser » ces données

regroupées sur un connecteur

• epd_reset() : réinitialise le

sur l’affichage. Avant appel

à 6 broches et le module est

module via un changement

à cette fonction, l’image est

livré avec le câble adapté,

mais qui malheureusement,

d’état sur la broche RST (3),

uniquement présente dans la

à l’autre bout, possède des

mémoire volatile de l’afficheur

connecteurs femelles : parfait

• epd_wakeup() : réveil e le

(framebuffer).

pour une Raspberry Pi ou

module s’il est passé en veil e,

une carte Arduino Nano, mais

via la broche WAKE_UP (2),

• epd_load_pic() : permet

pénible avec une UNO, ou une

de charger tous les fichiers

Mega2560...

• epd_enter_stopmode(void) :

graphiques présents sur la

passe le module en veil e,

microSD dans la mémoire

celui-ci ne répondra à aucune

NAND interne (l’espace dédié

commande sans d’abord utili-

est effacé puis les fichiers

ser epd_wakeup(),

sont copiés), l’espace dispo-

• epd_handshake() : vérifie

nible pour ces données est

simplement la communication,

de 80 Mo.

le module doit répondre "OK" ,

• epd_load_font() : permet

mais la bibliothèque ne s’en

de copier les fichiers de po-

assure pas,

lices présents sur la microSD

• epd_set_memory(mode) :

dans la mémoire interne

détermine si le module doit

(idem, effacement puis

lire les données depuis la

copie), l’espace disponible

microSD (MEM_TF) ou la mé-

est de 48 Mo. Cette fonction

moire interne (MEM_NAND),

ainsi que epd_load_pic()

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 32

HACKABLE MAGAZINE n°14

Un affichage sur papier électronique pour votre Arduino

ne vérifient pas la présence

• epd_draw_pixel(x0, y0) : active un

de fichiers sur la microSD,

pixel avec la couleur de premier plan

si la carte est vide, la zone

aux coordonnées x0:y0,

correspondante en mémoire

• epd_draw_line(x0, y0, x1, y1) :

interne est simplement

trace une ligne entre le point x0:y0 et

effacée.

x1:y1,

• epd_set_color(couleur,

• epd_fill_rect(x0, y0, x1, y1) :

couleur_fond) : définit

dessine un rectangle rempli de la posi-

la couleur d’avant-plan et

tion x0:y0 (coin supérieur gauche) et

d’arrière-plan pour les tracés.

x1:y1 (coin inférieur droit),

Les couleurs utilisables sont

WHITE (blanc), GRAY (gris),

• epd_draw_circle(x0, y0, r) : trace

DARK_GRAY (gris foncé) et

un cercle avec pour centre x0:y0 et un

BLACK (noir).

rayon r,

Le pilotage de l’écran repose

• epd_set_en_font(police) :

• epd_fill_circle(x0, y0, r) : trace

sur l’utilisation de trois

définit la police de caractères

un disque (plein) avec pour centre

éléments : un microcontrôleur

STM32 (1) chargé de la

à utiliser pour l’affichage de

x0:y0 et un rayon r,

gestion et l’interprétation des

textes anglais entre ASCII32,

• epd_draw_triangle(x0, y0, x1,

commandes, de la mémoire

ASCII48 et ASCII64. La

SRAM (2) pour stocker

y1, x2, y2) : trace un triangle, avec

valeur numérique dans le nom

l’image présentée à l’écran

ses sommets placés aux points x0:y0,

(framebuffer) et 128 Mo de

de la macro correspond à la

x1:y1 et x2:y2,

mémoire flash NAND (3) pour

hauteur du texte en pixels

les fichiers graphiques BMP

(notez que les caractères

(80 Mo) et les polices de

accentués ne sont pas

caractères (48 Mo).

disponibles).

• epd_set_ch_

font(police) : définit

la police de carac-

tères pour l’affichage

de texte en chinois

simplifié avec le jeu

de caractères GBK,

entre GBK32, GBK48

et GBK64. Notez que

les polices ASCII sont

toujours disponibles,

mais que les polices

chinoises doivent se

trouver en mémoire in-

terne ou sur microSD

pour pouvoir être uti-

lisées. Les deux jeux

de polices sont dispo-

nibles, avec des BMP

de démonstration, sur

le wiki WaveShare.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

33

ARDUINO'N'CO

PAPIER ÉLECTRONIQUE

La connexion du module à

une carte Arduino ne présente

matériellement pas de difficulté,

• epd_fill_triangle(x0, y0, x1, y1, x2, y2) : trace un triangle mais il faudra modifier la

plein, avec ses sommets placés aux points x0:y0, x1:y1 et x2:y2,

bibliothèque fournie par le

constructeur si l’on souhaite

• epd_disp_char(caractere, x0, y0) : affiche un caractère utiliser un autre port série que

unique dans la police précédemment sélectionnée aux coordonnées

celui proposé par défaut, comme

ici avec Serial1 sur un clone

x0:y0 (coin supérieur gauche),

d’Arduino Mega 2560.

• epd_disp_string(chaine, x0, y0) : affiche une chaîne de caractères à la position x0:y0 (coin supérieur gauche),

• epd_disp_bitmap(chaine, x0, y0) : affiche un dessin chargé depuis un fichier BMP en mémoire interne ou sur microSD (choisi

par epd_set_memory(mode)) à la position x0:y0 (coin supérieur gauche).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 34

HACKABLE MAGAZINE n°14

Un affichage sur papier électronique pour votre Arduino Le protocole documenté liste

• le nom des fichiers doit être composé de lettres majus-

d’autres commandes possibles,

cules ASCII uniquement ;

comme la définition de la vitesse

• l’extension des fichiers doit être

de communication ou encore la

.BMP ;

lecture du type de mémoire sélec-

• le nom complet des fichiers ne peut pas faire plus de

tionnée. Certaines sont présentes

10 caractères, .BMP inclus, ce qui ne vous laisse que

dans le fichier edp.cpp, mais pas

6 caractères à définir ;

dans epd.h, et d’autres ne sont

tout simplement pas prises en

• les images doivent utiliser une palette de couleurs

charge par la bibliothèque.

indexée sur 1 bit (2 couleurs) ou 2 bits (4 couleurs).

• les images ne peuvent pas avoir une tail e supérieure à

cel e de l’écran, 800 par 600 pixels.

4. UN MOT À

Il est donc nécessaire d’utiliser un logiciel de retouche

PROPOS DES

d’images pour convertir n’importe quel autre format et/ou

IMAGES ET DES

nombre de couleurs. La documentation WaveShare recom-

mande l’utilisation de MS Paint et de leur utilitaire uC GUI

POLICES

BitmapConvert. Personnel ement, je n’ai aucune affinité

avec un outil aussi simpliste que Paint et aucune confiance

Le module est en mesure de

quant à l’exécution d’un programme dont l’origine n’est pas

soulager la mémoire de votre

claire (et disponible sans les sources).

carte Arduino en vous permettant

de stocker les images à afficher

Ma solution consiste donc tout simplement à utiliser

sous la forme de fichiers gra-

Gimp, logiciel libre disponible pour GNU/Linux, Windows

phiques au format BMP. Plusieurs

et Mac OS X (il paraît qu’on dit macOS maintenant). Pour

solutions existent vous permettant

les images à convertir en deux couleurs (noir et blanc), la

de stocker ces fichiers. Vous pou-

technique est relativement simple : ouvrir l’image, adapter

vez soit les utiliser directement

ses dimensions avec Image et Echelle et taille de l’image puis depuis la microSD en sélection-convertir les couleurs via Image, Mode, Couleurs indexées.

nant ce support avec epd_set_

Dans la fenêtre qui s’affiche, choisir Utiliser la palette noir &

memory(MEM_TF), soit les placer

blanc (1-bit) et cliquer sur le bouton Convertir avant d’exporter sur la microSD et utiliser la fonc-le résultat au format BMP.

tion epd_load_pic() pour les

Par défaut, l’image sera radicalement transformée, tous

transférer de la microSD vers la

les pixels ayant une certaine valeur limite passant en noir et

mémoire interne. Attention cepen-

les autres en blanc. Il sera cependant possible, dans le cas

dant, cette opération n’ajoute

d’une photo, d’utiliser un tramage permettant d’avoir un ren-

pas des images, mais efface la

du plus fidèle à l’original. Il suffit de choisir Floyd-Steinberg et mémoire interne dédiée de 80 Mo

Gimp fera de son mieux pour obtenir un résultat optimal.

puis copie l’intégralité des fichiers

BMP de la microSD. Si vous avez

L’écran e-paper peut cependant faire mieux que cela.

en mémoire interne des données

Nous avons en effet non pas juste du noir et du blanc, mais

qui ne sont pas sur la microSD,

deux teintes de gris intermédiaires à notre disposition. Nous

ces fichiers seront donc effacés.

pouvons donc convertir l’image avec chaque pixel encodé

sur deux bits et non un seul. Pour cela, il est possible de

Un certain nombre de restric-

préciser dans la fenêtre de conversion de mode l’option

tions sont également présentes :

Générer une palette optimale en spécifiant 4 en guise de

• la microSD doit être formatée

nombre de couleurs, et ce après avoir passé l’image origi-

en FAT32 ;

nale en niveau de gris via le menu Couleurs et Désaturer.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

35

ARDUINO'N'CO

PAPIER ÉLECTRONIQUE

Une version plus avancée de cette technique consiste

En effet, c’est le microcontrô-

à créer une palette de couleurs spécifique en passant

leur STM32 intégré sur le module

par le menu Fenêtres, Fenêtres ancrables et Palette. Dans qui gère l’ensemble des fonctions

la fenêtre qu’y s’affiche, vous présentant une liste de

disponibles. Il est tout à fait légi-

palettes existantes, cliquez sur l’icône représentant une

time de penser qu’avec un ARM

feuil e vierge en bas, pour créer une nouvel e palette. Là,

Cortex-M3 cadencé à 72 Mhz,

précisez 4 dans Colonnes et ajouter 4 couleurs avec la 512 Ko de flash et 64 Ko de

même icône que précédemment. Il vous suffira alors de

mémoire, ce ne sont pas les

double-cliquer sur chaque couleur pour la définir en nota-

ressources qui manquent pour

tion HTML : 000000, 555555, AAAAAA et FFFFFF. Donnez étendre les fonctionnalités (le

ensuite un nom à votre nouvel e palette et enregistrez-la

fichier 4_3inch_ePaper.hex

en cliquant sur l’icône représentant une petite disquette.

censé être le firmware du STM32,

Retournez ensuite dans l’outil de changement de mode en une fois converti en binaire avec couleurs indexées et optez pour Utiliser une palette person-

objcopy, fait moins de 100 Ko) et

nalisée, sélectionnez votre palette dans la liste, décochez propose des choses comme :

Enlever les couleurs non utilisées de la palette et procédez à la conversion avec ou sans tramage. L’image est conver-

• Le clipping, consistant à

tie en 4 niveaux de gris et vous pouvez l’exporter en BMP.

n’afficher qu’une partie d’une

image en précisant les coor-

Une fois le fichier placé sur la microSD puis éven-

données de la zone à utiliser.

tuel ement transféré en mémoire interne avec epd_

Ceci est une technique très

load_pic(), ou utilisé sur place en précisant epd_set_

intéressante permettant de

memory(MEM_TF), il ne vous restera plus qu’à l’afficher

réunir plusieurs éléments en

avec, par exemple, epd_disp_bitmap("HLOGO.BMP",

un seul fichier graphique pour

350, 165). Vous pouvez placer les images où bon vous

n’en utiliser que certaines

semble, même si cel es-ci dépassent de l’écran.

zones. Idéal pour un jeu

Notez également que l’ordre d’utilisation des primitives

d’icônes par exemple.

graphiques est important, les différents éléments tracés

• Un rafraîchissement partiel

et dessinés s’ajoutent les uns sur les autres et il n’y a pas

de l’écran, permettant d’avoir

de notion de transparence (le texte apparaîtra toujours

ainsi un affichage plus rapide,

avec un fond blanc, ou noir, de la hauteur de la police

exactement comme pour les

précisée). En utilisant judicieusement différents éléments

liseuses.

graphiques ainsi, vous pourrez composer un écran com-

plet constitué d’images, de formes et de textes.

• Des primitives graphiques

un peu plus évoluées que le

modeste ensemble proposé,

CONCLUSION ET AVIS

avec des choses comme des

cercles et disques partiels (en

« Frustrant », c’est le mot qui me vient instinctivement

précisant un angle d’ouver-

à l’esprit lorsque je tente de formaliser un avis sur ce mo-

ture), un choix de l’épaisseur

dule. Matériel ement, l’objet est vraiment sympathique et

de ligne lors des tracés ou

de bonne facture, mais son potentiel n’est clairement pas

encore des formes plus com-

exploité. Nous avons vu que le code fourni en guise de

plexes comme des boîtes à

bibliothèque Arduino mériterait une réécriture complète

coins arrondis.

même s’il semble évident qu’il ne s’agit que d’un simple

exemple fonctionnel d’utilisation. Mais on sent réel ement

Mais le problème principal

qu’il aurait été possible de faire bien davantage sur l’as-

reste le manque d’ouverture.

pect logiciel au sens large du terme.

Une carence en documentation

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 36

HACKABLE MAGAZINE n°14

Un affichage sur papier électronique pour votre Arduino

complète et en exemples de

qualité est une chose récurrente

avec ce genre de modules, mais

ici de nombreux développeurs

seraient sans doute prêts à étoffer

très largement le firmware dans

un effort communautaire si celui-ci

était disponible sous la forme de

code source. Mais ce firmware est

mis à disposition sous une forme

inutilisable en termes d’évolution

ou de modification, chose qui

va de paire avec l’absence de

permission explicite ou de licence

dans le code de démonstration

fourni, mais également avec

l’utilisation d’un format obscur de

polices de caractères.

Gros plan sur l’affichage.

Les fichiers à l’extension .FON

On devine à peine les

semblent bien constitués de pixels

minuscules capsules

blèmes, mais il est tout à fait regrettable

et on reconnaît des formes en

contenant les particules

de voir une tel e potentialité laissée ainsi

en suspension permettant

tentant de convertir le format avec

inexploitée. Il ne fait aucun doute que le

de former les pixels ainsi

des outils comme ceux d’Ima-

matériel vaut son prix certes, c’est tout

que l’aspect “granuleux” de

geMagick, mais l’absence de

l’affichage qui n’est pas sans

bonnement dommage. .

documentation rend les choses

rappeler une impression

laser sur papier standard (ce

très difficiles puisqu’il s’agit de

Note de dernière minute : toutes les

qui est précisément l’objet

polices proportionnel es (un « i »

expérimentations pour cet article ont été

de cette technologie).

occupe moins d’espace horizontal

menées en utilisant un clone d’Arduino

qu’un « w », cette information est

Mega 2560 et en alimentant le module

forcément encodée dans le fichier

via sa broche 5V sans le moindre pro-

pour chaque symbole). Trois tail es blème. Cependant, 48h après la fina-de polices de caractères est déjà

lisation de la rédaction, le module ne

très limitatif, mais bien moins

semble plus pouvoir être alimenté de

que le fait de ne pas disposer de

cette façon en raison de pics de courant

caractères accentués. Là encore,

dépassant 1A, et nécessite donc l’utilisa-

une certaine ouverture technique

tion d’une alimentation propre (l’Arduino

permettrait la création d’un jeu

n’étant pas en mesure de fournir un tel

bien plus complet de polices, voire

courant). Ce comportement étant inter-

la création d’un outil de conver-

mittent, on peut supposer que le circuit

sion utilisant un format standard

d’alimentation de mon module ou de

comme TrueType.

l’écran e-paper comporte un problème.

Quoi qu’il en soit, si votre carte Arduino

Certes le module permet de

redémarre toute seule et/ou que l’inten-

disposer d’un affichage peu

sité de la led du module fluctue, tentez

conventionnel dans le domaine

d’alimenter le module avec une source

et il est possible d’user d’astuces

distincte capable de fournir davantage

pour contourner tous ces pro-

de courant. DB

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

37

ARDUINO'N'CO

THERMOMÈTRE / HYGRO

CRÉEZ UN

MONITEUR

DE TEMPÉRATURE ET

D’HYGROMÉTRIE

Denis Bodor

Avoir une idée précise des conditions intérieures (ou extérieures) d’un emplacement est parfois simplement intéressant, mais tantôt très important. La température et l’humidité relative, par exemple, sont utiles pour le confort intérieur, mais également capitales selon ses activités comme la culture en serre, l’élevage d’animaux, les loisirs créatifs, l’affinage et/ou la fermentation de certains aliments ou encore, dans mon cas précis, le travail d’un matériau vivant comme le bois. Voici donc un projet d’afficheur combiné température/

hygrométrie sur base Arduino...

NIVEAU

TEMPS

BUDGET

20

minutes

85 €

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 38

HACKABLE MAGAZINE n°14

Créez un moniteur de température et d'hygrométrie

Dans mon cas tout Cette valeur s’exprime en pour-

à fait personnel

centage et on serait tenté de lire

à moi-même

un « 42% » comme signifiant

tout seul, et

qu’il y a 42% d’humidité ou d’eau

ayant acquis il

dans l’air (ce qui ne veut pas dire

y a quelques mois un petit local

grand-chose). En réalité, cette

à rénover pour le transformer en

indication exprime le « rapport de

atelier/labo, je me suis heurté à

la pression partiel e de la vapeur

une constatation malheureuse : le

d’eau contenue dans l’air sur la

lieu est humide, voire très humide.

pression de vapeur saturante à

En raison d’une instal ation d’éva-

la même température ». Merci

cuation d’eaux de pluie quasi-mé-

Wikipédia, mais comme tantôt, en

diévale (mais de façon évidente,

terminant de lire la réponse, on

pas du tout antédiluvienne), en cas finit par ne plus comprendre sa de précipitations, l’eau s’infiltre

propre question. .

dans le sol et remonte plus tard

à l’intérieur du local sous forme

Sommairement, le degré

de vapeur. Une nouvelle installa-

d’hygrométrie indique la quantité

tion avec une réfection du puits

d’humidité dans l’air par rapport

perdu devrait régler le problème à

à son maximum. Lorsque l’air

terme, mais le lieu devant devenir

est chaud, il peut contenir davan-

mon terrain de jeu multidiscipli-

tage d’humidité, lorsqu’il est froid

Cette toute petite chose de 1cm de côté

naire incluant le travail du bois,

il peut en contenir moins. C’est

pour cette raison que lorsque

est capable de mesurer la température,

j’ai décidé de garder un œil sur

la pression atmosphérique et le taux

vous prenez une douche, de la

l’humidité ambiante, de manière à

d’hygrométrie de l’air. Remarquez les trois

condensation se forme sur la

éventuel ement agir (aérer) en cas

« pads » à souder permettant de choisir

fenêtre de votre sal e de bain : la

l’adresse du composant sur le bus i2c

de dépassement d’un certain seuil

vapeur d’eau contenue dans l’air

entre, par défaut 0x76 et, par coupure

critique.

entre les deux pads de droite et soudure

se condense, car la température

entre les deux de gauche, 0x77.

Il existe des accessoires tout

sur la vitre est plus basse que

faits pour ce genre de choses,

dans la pièce.

sous la forme de petits modules

Un taux d’humidité relative de

généralement associés à une

42% correspondra donc, non pas

station météo, mais lorsque l’affi-

à une mesure, mais à l’indication

chage est présent, il est ridicu-

« nous sommes à 42% du maxi-

lement petit. Or je souhaite, d’un

mum de vapeur d’eau que peut

coup d’œil, avoir l’information que

contenir l’air à la température

je désire. De plus, à terme, l’idée

actuel e ». À 100%, une partie

sera de déclencher une aération

de cette eau va commencer à

automatique (type VMC) ou un

se condenser. Mais également,

chauffage (pour l’hiver) pour tenter

sans changer la quantité absolue

de baisser le taux d’humidité auto-

d’eau dans l’air, si la température

matiquement.

descend, le degré d’hygrométrie

La notion d’humidité relative

va augmenter. L’air peut conte-

ou de degré d’hygrométrie est

nir moins de vapeur d’eau et on

souvent mal comprise pour qui n’a

approchera donc proportionnelle-

pas fait l’effort de se renseigner.

ment du maximum.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

39

ARDUINO'N'CO

THERMOMÈTRE / HYGRO

C’est aussi pour ça qu’en

chauffant une pièce, on réduit le

degré d’hygrométrie. L’air est pro-

portionnel ement moins humide

et voit alors son pouvoir séchant

augmenter. Dans le cas de mon

atelier/labo, il n’est pas question

qu’il y ait condensation, ce qui

risque d’arriver en particulier en

hiver. Le fait de chauffer l’endroit

n’est pas juste une affaire de

confort, l’électronique ne fait géné-

ralement pas bon ménage avec

l’eau...

Deux modules reposant sur des circuits intégrés Bosch avec à gauche le BME280 utilisé ici et à droite le BMP180 utilisé dans un précédent article sur la mesure de pression et la création d’un baromètre Arduino.

LE PRINCIPE

Dans les grandes lignes, la ver-

Les modules d’affichage d’Embedded Adventures sont composés de 4

afficheurs 16 segments montés sur un circuit avec, à l’arrière les 4 TCL5926

sion de base de ce projet est rela-

permettant leur pilotage avec un nombre réduit de broches. Ceux-ci tivement simple. Nous souhaitons

permettent d’afficher textes et chiffres dans différentes couleurs selon le utiliser un module nous permettant

modèle, mais coûtent tout de même le prix d’une carte Raspberry Pi 3.

de mesurer la température et le

degré d’hygrométrie, puis nous

servir de ces valeurs pour les affi-

cher sur un dispositif relativement

lisible à une distance de quelques

mètres. Cette mesure sera effec-

tuée à interval es réguliers de

façon à afficher les valeurs quasi-

ment en temps réel.

On gardera à l’esprit une évolu-

tion possible du montage permet-

tant le pilotage d’une VMC, d’un

ventilateur ou d’un chauffage (élec-

trique a priori) permettant éventuel-

lement d’influer sur l’humidité rela-

tive soit en chassant l’air humide,

en faisant entrer de l’air sec ou en

augmentant globalement la tem-

pérature de la pièce. Le contexte

ici est celui décrit plus haut, un

atelier, mais ceci pourra aisément

être adapté à une pièce à vivre, un

vivarium ou encore une serre.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 40

HACKABLE MAGAZINE n°14

Créez un moniteur de température et d'hygrométrie CE QU’IL VOUS FAUT

• Carte Arduino : ce projet ne nécessite pas de fonctions particulières propres à un mo-dèle spécifique de carte Arduino.

• Un module capteur température/hygrométrie/pression BME280. Nous avons traité précédemment dans le magazine le capteur BMP180 combinant mesure de température et de pression. Ceci est une version sensiblement plus complète offrant, en plus, la mesure du degré hygrométrique. Le composant actif de ce type de module, le BME280

lui-même, est un circuit intégré fabriqué par Bosch et pouvant être interfacé en SPI ou en i2c. La quasi-totalité des modules utilise la configuration i2c. Le module acheté, sur eBay auprès d’un vendeur appelé czb6721960, m’aura coûté moins de 5€ port offert. Il comprend le BME280, un régulateur de tension, un circuit pour adapter les niveaux de tension et quelques composants passifs (résistances).

• Deux modules de 4 afficheurs 16 segments pilotés par TLC5926, fabriqués et vendus par Embedded Adventures pour quelques 35€ pièce, port inclus. Il existe 5 modèles différents se distinguant par la couleur de l’affichage (vert, jaune, rouge, bleu et blanc).

Pour le projet, j’ai opté pour un module rouge pour la température et un bleu pour l’hygrométrie. Ces modules sont construits autour de quatre exemplaires du circuit intégré TLC5926 faisant office de registre à décalage. Le principe consiste à stocker dans leur mémoire l’état des 16 segments permettant de former un symbole sur chacun des 4 afficheurs à leds. Les 4 TLC5926 sont chaînés entre eux de manière à prendre en compte l’état de 64 segments (4*16). Dans notre montage, deux modules forment, de la même manière, une chaîne de 8 TLC5926 pilotant les 128 segments. Un TLC5926 peut être alimenté avec une tension de 3,3 à 5 volts, mais les afficheurs à leds nécessitent une tension et un courant dépendant de leur couleur. Le TLC5926 est en mesure de réguler le courant adéquat pour chaque afficheur, mais il doit recevoir une tension suffisante pour le faire (3,8V pour rouge, 4,3V pour jaune et vert, 6,6V pour bleu et blanc).

Le module dispose d’une broche VCC pour alimenter le TLC5926 et une autre broche, LED_SUP, pour les leds.

• Bloc d’alimentation 7,5V 1A. Ceci est une spécificité découlant du choix des couleurs des afficheurs. Le fait d’utiliser des leds bleues implique une tension minimum d’environ 7 volts. Si nous nous contentons d’utiliser des leds rouges, une alimentation 5V serait suffisante, mais dans un cas comme dans l’autre, la carte Arduino ne peut pas fournir le courant nécessaire pour quelques 128 leds. Une alimentation supplémentaire est donc indispensable. Notez que plus la tension délivrée sera éloignée de la valeur attendue par les leds, plus les TLC5926 devront dissiper de chaleur pour ajuster le courant.

Alimenter le montage en 12V ou 15V est donc à éviter, à moins de prévoir un système de refroidissement (radiateur ou radiateur+ventilateur). Quoi qu’il en soit, le TLC5926

intègre une protection et se mettra automatiquement en arrêt en cas de dépassement de la température limite de fonctionnement. Petite remarque pratique au passage : pensez à éloigner le capteur de l’afficheur pour ne pas fausser les mesures.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

41

ARDUINO'N'CO

THERMOMÈTRE / HYGRO

LE MONTAGE

Le montage nécessite beau-

chez Embedded Adventures pos-

Restent alors deux broches :

coup de connexions, mais est,

sèdent quelques 18 broches, mais

SIN correspondant à la réception

dans les grandes lignes relative-

plusieurs d’entre el es sont intercon-

des bits et SOUT pour l’émis-

ment simple. En premier lieu, nous nectées. Nous avons ainsi 4 masses sion. La logique utilisée par les

avons le module BME280 qui est

(GND), trois tensions d’alimentation

TLC5926 consiste à recevoir les

connecté en i2c à la carte Ardui-

pour les circuits intégrés TLC5926

16 bits concernant le premier affi-

no. En plus de la masse et de la

(VCC), et trois tensions d’alimen-

cheur 16 segments. Lorsque le bit

tension d’alimentation de 5 volts,

tation pour les leds (LED_SUP).

suivant arrive, le premier qui a été

deux lignes sont utilisées : SDA

Ce n’est pas tout, pour piloter les 8

envoyé « déborde » sur le second

pour les données et SCL pour le

TLC5926, nous utilisons également

TLC5926 qui le considère comme

signal d’horloge.

des broches communes à tous les

son premier bit. En continuant

composants et qui sont présentes

ainsi de « pousser » des bits sur

Notez que ces broches, côté

deux fois sur le module :

le premier TLC5926, le second

Arduino, sont communes avec les

circuit intégré finit lui aussi par

broches d’entrées analogiques A4

• LAT est un signal permettant

laisser « déborder » des bits sur

(SDA) et A5 (SCL). On peut donc

de valider les données en-

le troisième TLC5926 et ainsi de

utiliser l’une et l’autre broche sans

voyées et les mémoriser dans

suite. Comme nous connectons le

changement du croquis. Ici, pour

les TLC5926 ;

SOUT du premier module au SIN

rendre le dessin du montage vi-

• CLK est le signal d’horloge

du second, ce débordement de

suel ement plus clair, j’ai utilisé A4

permettant l’envoi des bits ;

bits se propage également aux 4

et A5, mais dans la réalité, dans la

• BLK est une broche utilisée

TLC5926 du second module. Au

salade de câbles générée, ce sont

pour activer ou désactiver les

final, en envoyant 128 bits, nous

bien les broches libel ées SDA

leds. Cette broche est reliée

définissons l’état des 128 seg-

et SCL qui sont utilisées (cel es

à une sortie « analogique »

ments des afficheurs et il ne nous

proches du connecteur USB).

(PWM) de l’Arduino, nous

reste plus qu’à utiliser la broche

La paire d’afficheurs demande un

permettant ainsi de régler une

LAT pour enregistrer ces états

peu plus d’attention. Les modules de

intensité lumineuse.

dans l’ensemble des TLC5926.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 42

HACKABLE MAGAZINE n°14

Créez un moniteur de température et d'hygrométrie LE CROQUIS

☐

_

✕

Fichier

Édition

Croquis

Outils

Aide

#include <DSP0401B.h>

#include <Wire.h>

#include <Adafruit_BME280.h>

#define SDI_PIN 2 // données

#define CLK_PIN 3 // horloge

#define LE_PIN 4 // validation

#define OE_PIN 5 // état affichage

// objet pour l'afficheur

DSP0401B mydisp;

// objet pour le capteur

Adafruit_BME280 bme;

void setup() {

// 2 afficheurs en chaîne (8 caractères)

mydisp.begin(2, SDI_PIN, CLK_PIN, LE_PIN, OE_PIN);

// réglage luminosité

mydisp.brightness(35);

// initialisation capteur BME280, adresse 0x76

if (!bme.begin(0x76)){

while(1) {

// erreur BME180, affichage message

// boucle infinie

mydisp.slidetext("BME180 ERROR",170);

}

}

}

void loop() {

// tableau pour le texte (8 caractères + \0 de fin)

char texte[9];

// température

int temp = (int)bme.readTemperature();

// humidité relative

int hygro= (int)bme.readHumidity();

// composition du texte à afficher

snprintf(texte, 9, "%2d#C%3d%%", temp, hygro);

// affichage

mydisp.sendtext(texte);

// pause 1s

delay(1000);

}

Arduino

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

43

ARDUINO'N'CO

THERMOMÈTRE / HYGRO

À PROPOS DU CROQUIS

Le sujet principal du numéro 5 de Hackable concer-

ment développées par SparkFun

nait l’utilisation directe du registre à décalage TLC5926

et un développeur indépendant

et des modules d’affichage utilisés ici. En conclusion de

(Tyler Glenn), mais je n’ai pas fait

nos manipulations de l’époque, nous avons produit une

d’essais spécifiques, les résultats

bibliothèque Arduino permettant de faciliter l’utilisation de

apportés par Adafruit_BME280

ces afficheurs. Nous ne reviendrons donc pas sur le sujet

me convenant parfaitement.

du fonctionnement en détail du pilotage de l’afficheur et

Une fois l’objet représentant le

des TLC5926. Il vous suffira, en effet, d’instal er la biblio-

capteur instancié avec Adafruit_

thèque en question, téléchargeable ici : https://github.

BME280 bme, nous pouvons uti-

com/Lefinnois/DSP0401B. Placez simplement le réper-

liser ce dernier pour initialiser le

toire DSP0401B et son contenu dans le répertoire des

capteur via sa méthode begin()

bibliothèques (libraries) de votre carnet de croquis et le en spécifiant, en argument, tour sera joué.

l’adresse du BME280 sur le bus

Le module capteur quant à lui sera piloté par une autre

i2c. Le composant peut utiliser

bibliothèque, développée par AdaFruit et instal able nor-

deux adresses, 0x76 ou 0x77,

malement depuis le gestionnaire de bibliothèques de votre configurées en fonction de l’état environnement Arduino : Adafruit_BME280. Notez qu’il

de sa broche SDO. Sur le module

existe également deux autres bibliothèques, respective-

testé, cette broche est connectée

Le vendeur eBay des

modules capteurs fournit un

schéma dans la description.

On constate que le BME280

se trouve en réalité derrière

un adaptateur de niveau de

tension et est alimenté en

3,3V par un régulateur (LDO).

Ceci contredit la description

du produit qui indique une

tension d’alimentation

entre 1,8V et 5V, ainsi

qu’un fonctionnement en

i2c ou SPI. Ces données

concernent en réalité le

BME280 lui-même et non le

circuit sur lequel il se trouve.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 44

HACKABLE MAGAZINE n°14

Créez un moniteur de température et d'hygrométrie à la masse et l’adresse est donc 0x76. Nous pourrions cependant changer cela en coupant la piste et en ajoutant un point de soudure à l’endroit dédié à cet effet. SDO serait encore connecté à la tension d’alimentation et l’adresse serait changée en 0x77. Ceci permet d’utiliser de concert deux modules sur le même bus i2c d’une seule carte Arduino (par exemple, pour mesurer la température et l’hygrométrie intérieures et extérieures).

La récupération des valeurs dans le croquis se fait ensuite en utilisant les méthodes readTemperature() et readHumidity(), retournant toutes deux des valeurs en virgules flottantes (type float). Le fait de placer un (int) nous permet de convertir cela en entier puisque nous ne disposons pas de suffisamment de place pour afficher un nombre à virgule (et nous n’avons pas de point sur les afficheurs). Cette technique s’appel e le casting et on dit qu’on cast un type en un autre, ou qu’on force une conversion de type.

Mais la partie la plus intéressante de ce croquis tourne autour de l’utilisation de la fonction snprintf(). Cette fonction issue d’une famil e complète incluant vprintf, sprintf ou encore printf que vous connaissez sans doute, permet d’obtenir une conversion vers une sortie formatée. Dans les grandes lignes, il s’agit de prendre des données statiques et issues de variables et de produire un contenu adapté à nos besoins.

Pour comprendre l’utilité de cette fonction dans notre croquis, le plus simple est de tenter de ne pas se servir de snprintf(). Pour afficher le texte souhaité sur notre afficheur, nous avons simplement à notre disposition deux entiers (int) et nous devons produire une chaîne de 8 caractères. De plus, nous voulons que la valeur pour la température et le degré d’hygrométrie soient sur deux positions et accompagnés respectivement de « °C » et « % ».

Enfin pour ne rien gâcher, nous voulons également que le degré d’humidité, indiqué par définition sur 3 caractères, soit aligné à droite (nous nous contentons de 2 chiffres pour la température, car à plus de 99°C je pense qu’on se rendrait compte du problème sans avoir besoin de l’afficheur).

Pour obtenir nos caractères à partir de valeurs entières, nous pouvons faire la chose suivante :

char texte[9] = "42#C 56%";

[...]

texte[0]=(temp/10)+48;

texte[1]=temp-((temp/10)*10)+48;

texte[5]=(hygro/10)+48;

texte[6]=hygro-((hygro/10)*10)+48;

Nous avons un tableau de 9 char, c’est notre chaîne de caractères qui par définition se termine toujours par \0 pour marquer la fin de la chaîne. C’est la position 8 du tableau. Nous déclarons le tableau en l’initialisant avec une chaîne possédant déjà un texte statique avec les symboles aux bonnes positions. Notez l’astuce consistant à utiliser un « # » pour obtenir un « ° » sur l’afficheur, chose qui est intégrée à la bibliothèque DSP0401B (un « ° » dans l’IDE

Arduino n’est pas un symbole ASCII 7 bits, mais un caractère UTF-8 sur 16 bits).

Il nous reste donc à compléter les positions 0 à 8. Pour définir un caractère à partir d’une valeur, nous n’avons qu’à utiliser la table ASCII. Là, on se rend compte que le caractère « 0 »

correspond à la valeur 48, le « 1 » à 49 et ainsi de suite jusqu’à « 9 » étant 57. De ce fait, pour obtenir un « 0 » à partir d’un 0, il nous suffit d’ajouter 48. Il en va de même pour tous les autres chiffres.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

45

ARDUINO'N'CO

THERMOMÈTRE / HYGRO

Notre montage final est riche

en connexions diverses. Lors

de l’installation définitive,

En position 0 de notre tableau, correspondant au caractère le plus à gauche cette connectique fragile sera

sur l’afficheur, nous avons les dizaines de la valeur en degrés Celsius. Il nous remplacée par des câbles

suffit donc de prendre notre valeur entière de température, de la diviser par 10

soudés et la carte Arduino

puis d’ajouter 48 pour obtenir le caractère correspondant. Pour les unités, c’est très probablement changée

par un modèle chinois plus

tout aussi simple puisque nous prenons l’entier, lui retranchons ses dizaines et économique (ou pourquoi pas

obtenons alors une valeur entre 0 et 9 à laquel e nous ajoutons 48 pour obtenir un ATmega328 seul).

un nouveau caractère. Enfin, nous procédons de même pour le degré d’hygrométrie.

Ça marche, mais nous avons cependant un petit problème : ce n’est pas aussi joli que nous l’avions souhaité. Si la température est de 5°C, par exemple, temp divisé par 10 nous donne 0 et provoquera l’affichage « 05°C », ce qui n’est pas très lisible dans ce cas précis.

Nous pouvons alors modifier nos lignes de façon à utiliser un espace à la place d’un « 0 » sous certaines conditions :

char texte[9] = "42#C 56%";

[...]

texte[0]= (temp<10) ? ' ' : (temp/10)+48;

texte[1]=temp-((temp/10)*10)+48;

texte[5]= (hygro<10) ? ' ' : (hygro/10)+48;

texte[6]=hygro-((hygro/10)*10)+48;

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 46

HACKABLE MAGAZINE n°14

Créez un moniteur de température et d'hygrométrie

La condition est ici spécifiée sous la forme d’un opérateur ternaire.

La première ligne pourrait être remplacée en :

if(temp<10)

texte[0] = ' ';

else

texte[0] = (temp/10)+48;

Il est simplement plus concis d’utiliser la syntaxe condition ? si vrai : si faux; . Le résultat sera, pour une température de 5°C et Le registre à décalage

une humidité relative de 42%, une chaîne produite en

TLC5926 est

" 5#C 42%" .

l’élément central des

Vous me direz, c’est beaucoup de code pour une simple présentation et/ou un modules d’affichage.

C’est avec ces

formatage d’une chaîne de caractères, il doit y avoir quelque chose de plus élégant.

composants que

Et vous avez raison, la famil e de fonctions printf() est précisément là pour ça. Mais l’Arduino va dialoguer

attention, le gain en souplesse a un coût.

pour définir l’état de

chaque segment de

Notre snprintf() prend en argument un pointeur sur la variable cible (texte est un l’affichage et ainsi

pointeur, texte[0] est l’élément à la première position), le nombre d’octets que la fonction former des lettres et

des chiffres visibles et

doit produire au maximum (avec le \0 de fin de chaîne), une constante définissant le lisibles de loin.

format à utiliser et la ou les variables dont on fait usage pour le formatage.

Ici, la constante de formatage dit : « un entier signé sur deux chiffres » (%2d), « les caractères # et C », « un entier signé sur 3 chiffres » (%3d) et « le caractère % ». Le fait d’utiliser %d nous permet, pour la température, d’afficher une valeur négative, chose que nous ne prenons pas en compte avec nos codes précédents. Attention toutefois, le 2 de %2d est le nombre minimum de chiffres, pas maximum. Ceci signifie qu’avec une température de -10°C, le « C » débordera sur l’afficheur bleu et comme nous avons précisé 3 chiffres pour l’humidité, le « % » sera alors supprimé.

Une solution possible consiste à ne plus afficher de « C » du tout et d’utiliser 3 chiffres pour la température :

snprintf(texte, 9, "%3d#%3d%%", temp, hygro);

ou garder le « C », mais réduire le degré d’hygrométrie à 2 chiffres (le « % » restera, mais le « C » sera bleu à partir de -10°C) :

snprintf(texte, 9, "%2d#C%3d%%", temp, hygro);

Et si vraiment, vraiment, vous voulez faire les choses le mieux possible, vous pouvez utiliser :

snprintf(texte, 9, "%2d%s%3d%%",temp, (temp<-9) ? "#" : "#C", hygro); Nous ajoutons ici un spécificateur de format %s permettant de spécifier une chaîne de caractères. Cel e-ci est alors ajoutée dans les arguments sous la forme d’un opérateur ternaire et sera ”#” si la température est inférieure à -9°C et ”#C” si el e est égale ou supérieure à -9°C. En d’autres termes, s’il y a de la place pour afficher « °C » on le fait, et Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

47

ARDUINO'N'CO

THERMOMÈTRE / HYGRO

Une fois en route, le

montage va toutes

sinon on se contente de « ° » pour tenir dans les

Une autre voie si l’on veut

les secondes mesurer

la température

4 caractères rouges.

conserver un aspect bien visible

ambiante et le degré

Tout ceci est bien joli, mais il faut maintenant

des valeurs mesurées, mais en

d’hygrométrique

puis mettre à

parler du coût. Le formatage manuel de l’affichage

faisant une concession sur la pré-

jour l’affichage.

produit un croquis binaire de 8612 octets (26%),

cision, consiste à utiliser des leds

L’intensité lumineuse

consommant 298 octets de mémoire vive (14%).

WS2812b, comme sur la réglette

des afficheurs 16

Le fait d’utiliser

décrite dans le précédent numéro.

snprintf() augmente ces quanti-

segments peut

être contrôlée. Une

tés à 9892 octets (30%) et 314 octets de mémoire

En segmentant la plage de tempé-

évolution possible

(15%). Dans le cas présent, ce n’est pas un gros

rature et d’humidité relative, il est

du projet pourra être

problème, nous perdons 1280 octets de flash (sur

possible de se limiter à quelques

une mesure de la

32Ko pour UNO) et 16 octets de SRAM (sur 2Ko),

10 ou 20 leds, en alternant entre

luminosité avec une

simple LDR sur une

mais nous ne les utilisons de toute façon pas. Mais

un affichage rouge et bleu, par

entrée analogique

pour certains projets, plus d’un Ko de flash peut

exemple. Nous pourrons même

pour adapter

être une quantité non négligeable et il faudra se

ajouter une indication de la pres-

automatiquement

passer de ce type de fonctions pour faire tenir le

sion avec une troisième couleur

l’intensité lumineuse

et réduire à la fois

croquis dans la mémoire de l’Arduino. Pensez-y. .

sans dépenser un euro de plus.

la consommation

Enfin, tout dépend également

de courant et la

du contexte d’utilisation de ce

température des

TLC5926.

CONCLUSION

système. Pour une serre ou une

pièce de petite dimension, l’utilisa-

tion d’un afficheur LCD HD44780

ou d’un écran Oled peut être une

Je tiens à préciser ici que l’utilisation des deux

option valable. Il faudra simple-

modules d’affichage de chez Embedded Adven-

ment se déplacer pour lire les

tures représente une part très importante du bud-

valeurs, ce qui n’est pas toujours

get consacré à ce projet. Des alternatives existent

un problème. Depuis 13 numé-

puisqu’il est possible d’utiliser des afficheurs 16

ros de Hackable, nous avons, je

segments en utilisant d’autres registres à décalage

pense, eu l’occasion de voir bon

sous la forme d’un circuit « fait maison ». Il est

nombre de solutions permettant

également possible de se passer de l’affichage

d’afficher une valeur. À vous de

alphanumérique et se contenter de chiffres. Des

faire travail er votre imagination

modules utilisant des afficheurs 7 segments sont

si vous souhaitez quelque chose

bien moins chers.

d’original. . DB

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 48

HACKABLE MAGAZINE n°14

ACTUELLEMENT DISPONIBLE

OPEN SILICIUM N°19 !

N’ÉCRIVEZ PLUS DE PILOTE LINUX !

DÉCOUVREZ LES MÉTHODES ET SOLUTIONS POUR SUPPORTER

VOTRE MATÉRIEL SANS TOUCHER AU NOYAU !

NE LE MANQUEZ PAS

CHEZ VOTRE MARCHAND DE JOURNAUX ET SUR :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) www.ed-diamond.com

HACKABLE MAGAZINE n°14

49

pub_magazines_juin2016.indd 3

20/06/2016 16:24

EN COUVERTURE

PHOTO

CONTRÔLEZ VOTRE

APPAREIL PHOTO

NUMÉRIQUE AVEC

VOTRE PI

Denis Bodor

Le fait de disposer d’un module caméra pour la Raspberry Pi est un avantage certain et permet de faire beaucoup de choses. On est cependant très loin de ce que peut offrir un appareil reflex numérique, même de moyenne gamme, en termes de qualité d’image. D’un

autre côté les firmwares des appareils photo manquent souvent de souplesse et de fonctionnalités, en particulier pour l’automatisation des prises de vue. La solution pour profiter du meilleur des deux mondes est simple : piloter son APN avec une Pi.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 50

HACKABLE MAGAZINE n°14

Contrôlez votre appareil photo numérique avec votre Pi

L’exemple le plus

évident pour

comprendre l’intérêt

d’un contrôle

automatisé d’un

appareil photo moyen ou haut

de gamme (typiquement un

reflex numérique) est le time-

lapse. Cette technique consiste

à prendre une photo à chaque

interval e de temps prédéfini et

de combiner tous les clichés en

une vidéo ou une image unique.

Un autre exemple est la prise

d’une série de clichés avec pour

chacun un temps d’exposition ou

une sensibilité ISO différente, pour

ensuite combiner les photos pour

créer une image à grande gamme

L’utilisation du module

dynamique (ou HDRI).

caméra de la Raspberry

Il est très rare que ce type de

applications Android permettant de faire de

Pi permet d’automatiser

énormément

fonctionnalité soit intégré dans

même, comme DSLR Control er de Chainfire,

d’opérations pour les

le logiciel de l’appareil photo,

mais qui sont payantes et surtout nécessitent

prises de vue, mais

même pour les modèles les plus

un smartphone ou une tablette supportant

il faut se rendre à

coûteux. L’une des solutions

l’USB hôte.

l’évidence, une lentille

de 1mm ne fait pas

consiste à utiliser, par exemple,

La solution Raspberry Pi + câble USB stan-

le poids face à un

un déclencheur programmable à

dard est donc non seulement la plus écono-

objectif de reflex ou

brancher à l’appareil ou encore,

d’hybride. Avoir plein de

mique, mais également la plus souple.

mégapixels c’est une

pour certains modèles, utiliser un

chose, le « trou » par

firmware alternatif en open source

lequel ils entrent en est

comme le fantastique Magic

1. MATÉRIEL UTILISÉ

une autre...

Lantern (pour Canon EOS,

http://www.magiclantern.fm/

POUR L’ARTICLE

features.html).

gPhoto supporte quelques 1828 modèles

Une solution plus

différents d’appareils photo numériques dans

économique et bien plus dans

sa version 2.5.4 actuel ement disponible pour

l’esprit du magazine est de tout

Raspbian. Les explications qui vont suivre

simplement connecter l’appareil

sont valables pour n’importe quel modèle de

photo à une Raspberry Pi en

Raspberry Pi et également pour un simple PC

USB et d’utiliser un programme

sous GNU/Linux.

en ligne de commandes

Côté appareil photo, notre victime innocente

appelé gPhoto pour choisir les

sera un Canon EOS 700D connecté à l’aide

caractéristiques de la ou ou des

d’un câble USB mini type B mâle vers type

prises de vue et, bien entendu,

A mâle. Bien entendu, le type de câble

prendre des photos à volonté.

USB nécessaire sera dépendant du modèle

Notez qu’il existe également des

d’appareil. Notez qu’ici j’utilise un modèle

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

51

EN COUVERTURE

PHOTO

relativement coûteux (~550€), mais gPhoto ne se limite pas à ce type de matériel. Un vieux compact Nikon Coolpix 885 sera parfaitement pris en charge par exemple.

La première chose à faire avant de vous lancer sera donc de vérifier que votre matériel est bien supporté. Après avoir instal é l’utilitaire avec sudo apt-get install gphoto2, une simple commande fera l’affaire :

$ gphoto2 --list-cameras | grep -i "EOS 7"

" Canon EOS 700D "

" Canon EOS 70D "

" Canon EOS 7D "

L’option --list-cameras affiche l’ensemble des modèles pouvant être utilisés et nous redirigeons ce résultat avec | vers la commande grep afin de n’afficher que les lignes contenant le texte “EOS 7” . Si votre matériel apparaît à l’écran, c’est très bon signe, car cela signifie qu’il est au moins en partie supporté. Certains appareils utilisent le protocole MTP, d’autres PTP et d’autres encore une solution spécifique. Actuel ement, PTP semble être devenu la norme et ce protocole est donc commun à tous les appareils récents, seules les spécificités de certains modèles peuvent ne pas être supportées par gPhoto.

L’étape suivante consiste à connecter l’appareil à la Raspberry Pi puis à l’al umer. Le système devrait alors détecter le périphérique comme en témoignent les messages du noyau :

$ dmesg | tail

usb 1-1.2: new high-speed USB device number 10 using dwc_otg

usb 1-1.2: New USB device found, idVendor=04a9, idProduct=3272

usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0

usb 1-1.2: Product: Canon Digital Camera

usb 1-1.2: Manufacturer: Canon Inc.

Il ne vous reste plus ensuite qu’à vous assurer que gPhoto « voit » effectivement votre appareil avec :

$ gphoto2 --auto-detect

Modèle Port

----------------------------------

Canon EOS 700D usb:001,010

On constate ici qu’un Canon EOS 700D est connecté sur le bus USB 001 en tant que périphérique numéro 010. Vous pourrez également obtenir des informations complémentaires en utilisant gphoto2 --summary, comme le numéro de série, la version du firmware, etc.

2. PREMIÈRES MANIPULATIONS

Instinctivement, dès la connexion, la première chose qu’on a envie de tester est la prise de clichés. Inutile de tourner autour du pot au risque d’être frustré, la manipulation est d’une extrême simplicité :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 52

HACKABLE MAGAZINE n°14

Contrôlez votre appareil photo numérique avec votre Pi $ gphoto2 --capture-image-and-download

Le nouveau fichier est à l'emplacement /capt0000.jpg de l'appareil Enregistrement du fichier en capt0000.jpg

Effacement du fichier /capt0000.jpg de l'appareil

Suppression de " capt0000.jpg " du répertoire " / "...

L’option --capture-image-and-download, comme son nom l’indique, va provoquer le déclenchement de l’appareil photo, l’enregistrement de l’image, son téléchargement via USB

sous le nom capt0000.jpg puis sa suppression de l’appareil. Attention cependant, selon les appareils l’image ne sera pas enregistrée puis supprimée sur le support d’enregistrement, mais en mémoire vive. Avec mon EOS 700D par exemple, la configuration par défaut utilise la mémoire SDRAM de l’APN, ce qui peut être déroutant avec d’autres commandes comme : $ gphoto2 --capture-image

Le nouveau fichier est à l'emplacement /capt0000.jpg de l'appareil Contrairement à ce que le message laisse penser, on ne retrouve pas de capt0000.jpg sur la carte SD, car ce fichier est présent uniquement en mémoire vive de l’appareil. Ainsi, pour prendre des clichés et conserver les images comme lorsqu’on utilise classiquement l’appareil, il faut changer la configuration avec :

$ gphoto2 --get-config capturetarget

Label: Cible d'acquisition

Type: RADIO

Current: Mémoire interne

Choice: 0 Mémoire interne

Choice: 1 Carte mémoire

$ gphoto2 --set-config capturetarget=1

$ gphoto2 --get-config capturetarget

Label: Cible d'acquisition

Type: RADIO

Current: Carte mémoire

Choice: 0 Mémoire interne

Choice: 1 Carte mémoire

La première commande liste le contenu de l’option capturetarget déterminant ce que l’APN doit faire de l’image. On voit clairement (ligne Current:) que le choix en place est Mémoire interne. La seconde commande, utilisant l’option --set-config change cela en 1, Carte mémoire, et la dernière commande nous confirme le changement. À présent, en utilisant --capture-image, le résultat est bien différent : $ gphoto2 --capture-image

Le nouveau fichier est à l'emplacement

/store_00020001/DCIM/100CANON/IMG_0994.JPG de l'appareil

L’outil ne parle plus de capt0000.jpg, mais de IMG_0994.JPG, un nom de fichier bien plus classique. De plus, le chemin complet où est enregistré le fichier sur l’APN correspond également à un emplacement identique à celui utilisé lors de clichés pris manuel ement.

Notez que /store_00020001 n’est pas vraiment un répertoire, mais le « point de montage »

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

53

EN COUVERTURE

PHOTO

par lequel le logiciel de l’appareil

accède à la carte SD.

Une autre option utilisable avec

certains appareils est --trigger-

capture permettant de déclencher

une prise de vue sans autre forme

de procès. Cette option, lorsque

disponible, comme pour l’EOS

700D, est sensiblement plus rapide

que --capture-image.

Notez que le fait de modifier la

valeur de l’option capturetarget

perdure entre deux mises en

route de l’appareil, et est même

conservé lors d’un changement

d’accu. Ceci peut être important

dans le sens où l’utilisation de la

mémoire interne est intéressante

pour --capture-image-and-

download (plus rapide), mais

que l’espace de stockage SD

l’est davantage pour --capture-

image. Il sera donc de bon ton de

vérifier la configuration avant de

lancer une série de prises de vue.

La connexion entre

l’appareil photo et la

Raspberry Pi se fait à

l’aide d’un simple câble

3. GÉRER LES FICHIERS

USB. Ceci est une

Récupérer systématiquement le cliché pris sous la forme d’un fichier JPEG n’est fonction standard des

pas forcément quelque chose de souhaitable tant d’un point de vue de l’organisation appareils qui ne risque

que du temps de traitement lors de chaque déclenchement. Heureusement, il est pas d’endommager

quoi que ce soit. Ici, j’ai

donc possible de laisser les fichiers sur l’appareil, mais gPhoto fournit également un fait mes tests avec un

certain nombre de commandes de gestion intéressantes.

Canon EOS 700D,

mais plus de

La première d’entre el es est cel e permettant de lister le contenu de l’appareil : 1200 modèles

sont compatibles

$ gphoto2 --list-files

avec l’outil

Le dossier " / " ne contient aucun fichier.

gPhoto, y

compris des

Le dossier " /store_00020001 " ne contient aucun fichier.

APN compacts,

Le dossier " /store_00020001/DCIM " ne contient aucun fichier.

des modèles

Le dossier " /store_00020001/DCIM/100CANON " contient d’entrée de

10 fichiers.

gamme ou

#1 IMG_0992.JPG rd 4947 KB image/jpeg

des appareils

#2 IMG_0993.JPG rd 4977 KB image/jpeg

ayant un bon

nombre

#3 IMG_0994.JPG rd 5138 KB image/jpeg

d’années.

#4 IMG_0995.JPG rd 5056 KB image/jpeg

#5 IMG_0996.JPG rd 5033 KB image/jpeg

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 54

HACKABLE MAGAZINE n°14

Contrôlez votre appareil photo numérique avec votre Pi

#6 IMG_0997.JPG rd 4941 KB image/jpeg

#7 IMG_0998.JPG rd 4946 KB image/jpeg

#8 IMG_0999.JPG rd 4931 KB image/jpeg

#9 IMG_1000.JPG rd 4403 KB image/jpeg

#10 IMG_1001.JPG rd 4297 KB image/jpeg

Le dossier " /store_00020001/MISC " ne contient aucun fichier.

--list-files peut également être réduit en l’option courte -L (consultez la page de manuel pour en savoir plus avec man gphoto2). Nous voyons ici qu’il y a 10 JPEG placés dans un répertoire DCIM/100CANON sur la carte SD (/store_00020001/). Ces 10 fichiers sont affichés par leur nom avec une indication de leur tail e et de leur type, mais aussi, et surtout précédés d’un numéro en début de ligne.

Il est possible alors de récupérer un ou plusieurs fichiers en les désignant de cette façon :

$ gphoto2 --get-file 2

Téléchargement de " IMG_0993.JPG " depuis le répertoire

" /store_00020001/DCIM/100CANON "...

Enregistrement du fichier en IMG_0993.JPG

Bien entendu, récupérer un unique fichier n’a pas de sens et il est bien plus intéressant d’en « télécharger » une série en spécifiant une plage spécifique comme : $ gphoto2 --get-file 4-9

Téléchargement de " IMG_0995.JPG " depuis le répertoire

" /store_00020001/DCIM/100CANON "...

Enregistrement du fichier en IMG_0995.JPG

Téléchargement de " IMG_0996.JPG " depuis le répertoire

" /store_00020001/DCIM/100CANON "...

Enregistrement du fichier en IMG_0996.JPG

Téléchargement de " IMG_0997.JPG " depuis le répertoire

" /store_00020001/DCIM/100CANON "...

Enregistrement du fichier en IMG_0997.JPG

Téléchargement de " IMG_0998.JPG " depuis le répertoire

" /store_00020001/DCIM/100CANON "...

Enregistrement du fichier en IMG_0998.JPG

Téléchargement de " IMG_0999.JPG " depuis le répertoire

" /store_00020001/DCIM/100CANON "...

Enregistrement du fichier en IMG_0999.JPG

Téléchargement de " IMG_1000.JPG " depuis le répertoire

" /store_00020001/DCIM/100CANON "...

Enregistrement du fichier en IMG_1000.JPG

Nous récupérons ici les fichiers 4 à 9 de la précédente liste obtenue avec --list-files.

La version courte de l’option est -p. Enfin, vous pouvez également, tout simplement, récu-pérer l’ensemble des fichiers en une fois avec --get-all-files. Fort pratique si vous avez votre APN sur un trépied et n’avez vraiment pas envie de jongler avec la carte SD.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

55

EN COUVERTURE

PHOTO

4. RÉGLER LA PRISE DE VUE

La méthode de configuration des paramètres d’une prise de vue peut paraître surprenante au premier regard, mais est relativement facile à maîtriser. En effet, les différentes choses qui peuvent être réglées prennent la forme d’une arborescence et de pseudo-fichiers côté appareil photo. Ainsi pour lister toutes les informations lisibles et définissables, on commence par afficher cette liste de pseudo-fichiers :

$ gphoto2 --list-config

/main/actions/syncdatetimeutc

/main/actions/syncdatetime

/main/actions/uilock

/main/actions/autofocusdrive

/main/actions/manualfocusdrive

/main/actions/cancelautofocus

/main/actions/eoszoom

/main/actions/eoszoomposition

/main/actions/viewfinder

/main/actions/eosremoterelease

[...]

/main/capturesettings/aperture

/main/capturesettings/shutterspeed

/main/capturesettings/meteringmode

/main/capturesettings/bracketmode

/main/capturesettings/aeb

/main/other/d402

/main/other/d407

/main/other/d406

/main/other/d303

/main/other/5001

La liste est longue, mais, en plus du simple nom du pseudo-fichier, il vous suffit de lire son contenu pour savoir précisément de quoi il en retourne. Exemple : $ gphoto2 --get-config whitebalance

Label: Balance des blancs

Type: RADIO

Current: Automatique

Choice: 0 Automatique

Choice: 1 Lumière naturelle

Choice: 2 Ombre

Choice: 3 Nuageux

Choice: 4 Tungstène

Choice: 5 Fluorescent

Choice: 6 Flash

Choice: 7 Manuel

whitebalance permet donc de régler la balance des blancs. Pour régler un paramètre, on utilise --set-config suivi du nom du paramètre (pseudo-fichier), d’un signe égal et du réglage souhaité. Il y a cependant une subtilité puisque ce qui est attendu est une valeur. Or certains réglages se présentent ainsi :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 56

HACKABLE MAGAZINE n°14

Contrôlez votre appareil photo numérique avec votre Pi

$ gphoto2 --get-config iso

Label: Vitesse ISO

Type: RADIO

Current: Automatique

Choice: 0 Automatique

L’un des principaux intérêts du

Choice: 1 100

fait de piloter un appareil photo

Choice: 2 200

avec une carte comme la Pi

Choice: 3 400

est de pouvoir créer des time-

Choice: 4 800

lapses avec un intervalle de

Choice: 5 1600

temps important (en heures).

Dans ce genre de situations,

Choice: 6 3200

l’usage d’une alimentation sur

Choice: 7 6400

accu n’est pas une bonne idée

Choice: 8 12800

puisque si l’appareil passe en

veille il n’est plus accessible via

Nous avons là une liste de choix indexés et une valeur. Le choix 3, par USB, de ce fait il faut désactiver

exemple, correspond à une sensibilité de 400 ISO. On pourrait penser qu’il la mise en veille et l’autonomie

s’en trouve drastiquement

suffit de faire gphoto2 --set-config iso=3, mais il n’en est rien. Si une réduite. La solution est

valeur peut être précisée, alors il faut utiliser la valeur avec -set-config et donc de basculer sur une

non le numéro du choix.

alimentation « secteur » pour

laisser l’appareil en marche en

permanence.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

57

EN COUVERTURE

PHOTO

Le plus simple dans ce cas est d’oublier -set-config et de s’en remettre à deux autres options moins ambigües :

• --set-config-value pour spécifier ici gphoto2 --set-config-value iso=400,

• ou --set-config-index pour renseigner gphoto2 --set-config-index iso=3.

Dans les deux cas, l’ISO sera réglée sur 400. Ceci prend tout son sens lorsqu’il s’agit par exemple de la vitesse d’obturation (shutterspeed). Un 1 pourrait être « une seconde »

(choix 16 dans la liste) ou le choix 1, soit 30 secondes. Utiliser --set-config-value et --set-config-index vous évitera de faire comme moi, vous mélanger les pinceaux et perdre votre temps pour rien.

Notez, à propos de ces réglages, que la liste dépend du mode dans lequel se trouve l’appareil photo. L’EOS 700D par exemple, avec le sélecteur en mode A+ ne proposera naturel ement pas certains réglages accessibles en mode « M » (manuel) puisqu’ils sont automatiques. C’est logique, mais là encore c’est quelque chose auquel il faut être attentif pour éviter de perdre son temps (et de pester pour rien).

5. DEUX PETITS EXEMPLES

Commençons par l’incontournable time-lapse consistant à prendre des clichés à interval es réguliers pour pouvoir observer un phénomène qui échappe normalement à nos sens (comme la pousse d’une plante par exemple). gPhoto rend cela très facile avec des options qui ne sont pas sans rappeler cel es de raspistill, l’outil de prise de vue du module caméra Raspberry Pi. Ainsi pour faire une série de 5 clichés espacés de 10 secondes, on se pliera simplement de :

$ gphoto2 --capture-image-and-download \

--frames 5 --interval 10 --filename capture%05n.jpg

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 58

HACKABLE MAGAZINE n°14

Contrôlez votre appareil photo numérique avec votre Pi

Voici le genre de résultats qu’on

--frames précise le nombre d’images et --interval le temps en peut obtenir en combinant plusieurs

clichés d’une scène ayant une

secondes à attendre entre deux clichés. --filename nous permet de grande gamme dynamique (HDR)

préciser la façon de nommer les fichiers qui sont obtenus par --capture-avec des temps d’expositions

image-and-download. Ici, nous utilisons %n pour obtenir le numéro dans différents. La première photo utilise

la séquence. Le 05, permettant de former %05n, précise une valeur sur 5

un temps d’exposition de 1/12

de secondes, on voit l’extérieur,

chiffres avec un préfixe composé de zéros. Nous obtenons ainsi nos cinq mais l’intérieur est sous-exposé.

fichiers nommés de capture00001.jpg à capture00005.jpg. Il existe La seconde photo avec un temps

d’autres « marqueurs » permettant de nommer de façon judicieuse les d’exposition d’une seconde nous

fichiers. --filename capture%Y-%m-%d_%H:%M:%S.jpg, par exemple, permet de distinguer les détails

dans la pièce, mais l’extérieur

inclura dans le nom la date et l’heure avec un format permettant

est sur-exposé. En combinant

facilement le tri numérique.

plusieurs clichés, on obtient la

dernière image, nous permettant de

Le délai entre les clichés, même exprimé en secondes permet de faire voir l’ensemble de la scène. L’outil

bien plus que ce que le logiciel interne par défaut (Magic Lantern étant utilisé pour la fusion est enfuse,

ce genre de fonctions) ou même un accessoire annexe peut proposer.

disponible dans Raspbian.

Une chose cependant doit être gardée à l’esprit : l’autonomie de

l’appareil. Dans bien des cas, un adaptateur secteur est indispensable et on prendra soin de régler le délai avant extinction sur une durée infinie.

Personnel ement, j’ai choisi l’ACK-E8 officiel de Canon pour l’EOS 700D.

Cela m’a coûté quelques 70€, mais j’ai préféré ne pas prendre le risque d’endommager un reflex numérique à plus de 500€ en optant pour un clone chinois de qualité douteuse à 20€. Il y a suffisamment de vidéos sur YouTube comparant des alimentations d’un point de vue technique pour savoir que prix, qualité et sécurité sont intimement liés dans ce domaine.

Une dernière astuce importante pour vos time-lapses : utilisez des ré-

glages manuels et en particulier pour la balance des blancs afin d’éviter un effet de scintil ement sur la vidéo finale que vous génèrerez avec avconv

-r 24 -i capture%05d.jpg video.mp4 (paquet libav-tools).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

59

EN COUVERTURE

PHOTO

Un autre exemple intéressant est le bracketing. C’est une technique de photo numérique permettant d’obtenir plusieurs clichés d’une scène en faisant varier un réglage au choix. L’une des utilisations de cette technique consiste à jouer sur la sensibilité ou le temps d’exposition et ainsi pouvoir, avec un logiciel de retouche photo, combiner les clichés pour créer une image contenant à la fois les éléments qui pourraient être sous-exposés sur certaines photos et sur-exposés sur d’autres.

Là, ce n’est pas aussi simple que pour le time-lapse, mais c’est relativement compréhensible :

$ gphoto2 --set-config-value shutterspeed=0.6 --capture-image-and-download \

--set-config-value shutterspeed=1/8 --capture-image-and-download \

--set-config-value shutterspeed=1/30 --capture-image-and-download \

--set-config-value shutterspeed=1/80 --capture-image-and-download \

--set-config-value shutterspeed=1/400 --capture-image-and-download \

--set-config-value shutterspeed=1/1000 --capture-image-and-download \

--set-config-value shutterspeed=1/3200 --capture-image-and-download \

--filename capture%05n.jpg

En une seule longue commande, nous modifions les réglages du temps d’exposition (par leurs valeurs) et provoquons plusieurs prises de vue. Comme il s’agit d’une seule « session »

de l’utilitaire, nous pouvons faire usage de l’option --filename pour qu’il nomme tout seul les fichiers obtenus lors de la récupération. Nous obtenons alors les fichiers capture00001.jpg à capture00007.jpg ayant tous un temps d’exposition différent : $ exif *.jpg | grep "Temps d'exposition"

Temps d'exposition |1/2 sec.

Temps d'exposition |1/8 sec.

Temps d'exposition |1/30 sec.

Temps d'exposition |1/80 sec.

Temps d'exposition |1/400 sec.

Temps d'exposition |1/1000 sec.

Temps d'exposition |1/3200 sec.

La commande exif permet de lister les métadonnées d’un JPEG. Cel e-ci s’instal e sous la forme d’un paquet du même nom avec apt-get. Il ne vous restera ensuite plus qu’à combiner les clichés avec votre logiciel préféré.

POUR CONCLURE

En cas de problème ou de fonctionnement étrange, il est recommandé de jeter un œil à la page http://gphoto.org/news avant de dire, demander ou de faire quoi que ce soit.

gPhoto est un outil qui ne date pas d’hier, mais l’existence d’un bug pouvant impacter un appareil récent est toujours possible (c’est un développement perpétuel). L’exemple parfait concerne justement mon EOS 700D qui parfois ne répond plus après une suite de manipulations (réglages répétés de la vitesse d’obturation). Il s’avère que c’est là quelque chose de corrigé avec libgphoto2 2.5.6 et la page précise « Canon EOS: crash on 700D

fixed » (« Canon EOS: crash sur 700D corrigé »). La version disponible dans Raspbian Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 60

HACKABLE MAGAZINE n°14

Contrôlez votre appareil photo numérique avec votre Pi

étant la 2.5.4, il n’y a que peu de solutions possibles : patienter le temps de voir venir une mise à jour, ou recompiler libgphoto2 et gPhoto à partir des sources Debian comme nous l’avions fait dans Hackable n°9 pour obtenir une version récente de RTL power sous forme de paquet. Une autre solution pour obtenir des paquets plus récents est d’ajouter un dépôt dans /etc/apt/sources.list et en particulier la ligne :

deb http://http.us.debian.org/debian/ testing non-free contrib main Ceci vous donnera accès à la version testing de la prochaine version de la distribution et donc à des outils et applications plus récents, mais en phase de test (et donc considérés comme non suffisamment stables pour constituer une version finale de Raspbian pour l’instant). Là, vous aurez accès à la version 2.5.10 de gPhoto en plus de la 2.5.4, mais attention, ce faisant vous commencerez à mélanger des

paquets de la distribution stable et

ceux de testing sur votre système.

Une fois la configuration en

place et gPhoto bien en main, le

panel de possibilités est énorme.

Le fait d’utiliser une Raspberry

Pi nous permet également de

voir encore plus loin en utilisant

par exemple un détecteur de

mouvements pour déclencher une

prise de vue ou encore de contrôler

le déplacement de l’appareil sur

un rail ou une barre de travel ing

motorisée pour ajouter un peu de

mouvement aux time-lapses. Nous

reviendrons certainement sur le

sujet à un moment pour parler de

tout ça. . DB

Magic Lantern est un applicatif qui s’ajoute

au logiciel interne (firmware) des appareils

Canon EOS et fournit une myriade de

fonctionnalités supplémentaires en

fonction du modèle d’appareil, comme le

bracketing, le bulb timer, un intervallomètre

de précision, déclenchement sur mise au

point (pas pour le 650D/700D), contrôle

précis des FPS pour les vidéos, etc.

Si vous avez un EOS compatible, cela

vaut vraiment la peine d’essayer et cela

complètera parfaitement une utilisation

avec la Raspberry Pi.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

61

EN COUVERTURE

TRAITEMENT D'IMAGES

MANIPULER ET TRAITER

AUTOMATIQUEMENT

VOS PHOTOS SUR

RASPBERRY PI

Denis Bodor

Nous avons vu dans l’article précédent avec quelle facilité il était possible de palier au manque de fonctionnalités d’un appareil photo numérique en utilisant gPhoto et une carte Raspberry Pi. Nous

pouvons cependant aller bien plus loin que le réglage de la prise de vue et le déclenchement de l’appareil, en récupérant non seulement chaque cliché, mais en les modifiant à volonté dans la foulée.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 62

HACKABLE MAGAZINE n°14

Manipuler et traiter automatiquement vos photos sur Raspberry Pi Une partie des lors qu’on prend le temps d’en comprendre la logique. La explications qui

récompense à la clé pour vos efforts sera la possibilité pour

vont suivre sont

vous d’automatiser intégralement, non seulement les prises

applicables

de vue, mais également n’importe quel e modification sur

non seule-

le ou les clichés obtenus. Je ne parle pas simplement ici de

ment à l’utilisation d’une carte

déclencher manuel ement l’exécution d’un script pour traiter

Raspberry Pi (ou d’un PC) pour

un lot d’images, mais bel et bien de laisser la Raspberry Pi

déclencher et obtenir des clichés

faire tout le travail à votre place.

depuis un appareil photo numé-

rique (APN), mais également à

n’importe quel fichier graphique

1. IMAGEMAGICK

d’ores et déjà présent sur vos

Peu semblent le savoir, mais ImageMagick est initia-

supports de stockage ou même

lement un programme développé au sein de la société

obtenu par d’autres moyens

DuPont. En 1987, le développeur John Cristy reçoit une

(capture, téléchargement, etc.).

demande de la part de son supérieur afin de trouver une

Ce que je vous propose de

solution permettant d’afficher des images de 16 mil ions de

découvrir ici est le monde fantas-

couleurs (24 bits) sur un écran 256 couleurs. Il se tourne

tique de la retouche et manipula-

alors vers Usenet (les newsgroups) pour chercher de l’aide

tion d’images automatisée.

et Paul Raveling de l’université de Californie du Sud (USC

Si vous avez l’habitude de

ISI) lui indique un code tout prêt disponible sur les serveurs

travail er avec des données gra-

de l’université, permettant de faire la conversion 24 bits vers

phiques, il est très probable que

256 couleurs (8 bis indexés). Dès lors, John n’a de cesse

vous fassiez usage d’un logiciel

d’améliorer le code qu’il développe sur cette base, au fil des

comme Photoshop ou The Gimp.

demandes des chercheurs et biologistes de DuPont, puis

Ce type d’applications repose

fini par rendre public le résultat sur Usenet en août 1990.

sur l’interactivité, vous modifiez

Considérant cela comme un juste retour des choses, John

l’image au fur et à mesure de vos

reçoit l’aval de la direction de DuPont et ImageMagick voit

besoins et, une fois le résultat

officiel ement le jour sous la forme d’un logiciel libre.

attendu obtenu, vous enregistrez

votre travail. Ces logiciels per-

Depuis, DuPont a transféré les droits sur le logiciel à la

mettent souvent d’automatiser

fondation à but non lucratif ImageMagick Studio LLC et une

certaines tâches, comme changer

énorme communauté de développeurs et d’utilisateurs s’est

la tail e d’un groupe de photos, via

développée. ImageMagick est aujourd’hui non seulement

des scripts qui sont généralement

une suite d’outils très stables et matures, mais également

conçus par vous-même ou des

une bibliothèque utilisée dans de nombreux autres projets.

tiers et lancés par l’application

Pour instal er ImageMagick sur votre Pi, il vous suffira

elle-même.

d’utiliser la commande sudo apt-get install image-

Ici, nous al ons utiliser des

magick et vous aurez alors accès à une dizaine de pro-

outils qui, à la base, ne sont pas

grammes permettant toutes sortes d’opérations :

du tout conçus pour une utilisa-

• identify permet d’avoir des informations précises sur

tion interactive, mais uniquement

une image (format, tail e, métadonnées, etc.) ;

pour le traitement par lot (batch

en anglais) et ce, en ligne de

• display affiche l’image avec une interface sommaire ;

commandes. Ceci peut paraître

• convert convertit entre plusieurs formats d’images tout effrayant au premier abord, mais

en permettant toutes sortes de modifications (redimen-

cela est bien plus simple dès

sionnement, découpage, marquage, flous, tracés, etc.) ;

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

63

EN COUVERTURE

TRAITEMENT D'IMAGES

• import permet de faire des captures d’écrans ;

• compare compare mathématiquement et visuel ement des images pour mettre en évidence les différences ;

• mogrify modifie une image à la manière de convert, mais en travail ant directement sur l’original ;

• animate affiche une animation composée d’une image (GIF par exemple) ou d’une séquence d’images ;

• composite permet de composer des images en en mélangeant plusieurs autres ;

• conjure interprète et exécute un script écrit dans le langage propre à ImageMagick, le MSL

ou Magick Scripting Language ;

• stream permet de traiter les pixels d’une image ou d’une partie d’une image sous la forme d’un flux de données (très pratique pour des images géantes) ;

• montage regroupe des images pour former une nouvel e image comme un patchwork.

Nous n’al ons pas ici traiter de tous ces outils, ceci demanderait tout un hors-série, sinon plusieurs, tant ce qu'il est possible de faire est incroyablement vaste. Moi-même je n’utilise que rare-ment toutes ces commandes et m’en tiens, dans 90% des cas, à identify, display, import et surtout convert.

2. POUR SE FAIRE LA MAIN

L’outil convert vous permettra de faire énormément de choses grâce à ces quelques 230

options, mais seules quelques-unes sont fréquemment utiles. Mais nous al ons commencer par quelque chose de plus simple, en obtenant tout d’abord des informations sur un fichier :

% identify image1.jpg

image1.jpg JPEG 5184x3456 5184x3456+0+0 8-bit

DirectClass 6.587MB 0.000u 0:00.000

identify utilisé en passant un simple nom de fichier va tenter d’analyser l’image et vous afficher les informations les plus intéressantes. Ici, nous voyons qu’il s’agit d’un format JPEG et que l’image fait 5184 par 3456 pixels. Vous pouvez également utiliser l’option -verbose pour obtenir une liste complète de caractéristiques al ant du format au nombre de couleurs en passant par l’espace colorimétrique, le niveau de qualité de la compression, la résolution en DPI, la moyenne de la valeur des pixels, etc.

Notre image fait donc 5184 par 3456 et nous al ons commencer par l’utiliser pour produire une image de plus petite tail e avec :

% convert image1.jpg -geometry 1000 image2.jpg

% identify image2.jpg

image2.jpg JPEG 1000x667 1000x667+0+0 8-bit

DirectClass 521KB 0.000u 0:00.000

L’option -geometry de convert nous permet de spécifier une nouvel e tail e pour produire le fichier image2.jpg. Ici, l’ordre des options importe peu, mais ce ne sera pas forcément le cas Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 64

HACKABLE MAGAZINE n°14

Manipuler et traiter automatiquement vos photos sur Raspberry Pi lors de l’utilisation d’options en plus grand nombre. Il est bon de prendre l’habitude de spécifier les arguments sur la ligne de commandes à la manière d’une phrase : « converti image1.jpg avec la géométrie 1000 pour créer image2.jpg ».

Notez que l’image résultante a une dimension de 1000 par 667 pixels. convert s’est, en effet, débrouil é seul pour déterminer que la valeur passée en argument de -geometry était la largeur de l’image souhaitée et a calculé proportionnel ement sa hauteur. Il fait cela tel ement bien que si nous spécifions :

% convert image1.jpg -geometry 1000x1000 image3.jpg

nous obtenons :

% identify image3.jpg

image3.jpg JPEG 1000x667 1000x667+0+0 8-bit

DirectClass 521KB 0.000u 0:00.000

L’intégrité de l’image est un point important dans ImageMagick et le fait de spécifier une tail e qui ne correspond pas au bon ratio hauteur/largeur pourrait produire un résultat non attendu (avec une perte de données). Si vous voulez vraiment que l’outil fasse strictement ce que vous lui demandez, il faut ajouter un ! pour forcer l’opération :

% convert image1.jpg -geometry 1000x1000! image4.jpg

% identify image4.jpg

image4.jpg JPEG 1000x1000 1000x1000+0+0 8-bit

DirectClass 720KB 0.000u 0:00.000

Bien entendu, l’image s’en trouve déformée, mais c’est vous qui avez insisté. . Si vous souhaitez que la valeur que vous passez soit la hauteur et non la largeur et que convert respecte de la même manière le ratio original, il vous suffit de spécifier la seconde dimension. Ainsi, -geometry x1000 produira une image avec une hauteur de 1000 pixels (le x1000 étant la partie droite d’une syntaxe « largeurxhauteur »).

Enfin, autre valeur intéressante, vous pouvez également spécifier une proportion. -geometry 10% va alors produire une image de 10% de sa tail e originale.

Une autre manipulation courante consiste non pas à changer la tail e d’une image, mais son format. convert fait cela très facilement puisqu’il vous suffit de spécifier l’extension adéquate du fichier cible. Exemple :

% identify image2.jpg

image2.jpg JPEG 1000x667 1000x667+0+0 8-bit

DirectClass 521KB 0.000u 0:00.000

% convert image2.jpg image2.png

% identify image2.png

image2.png PNG 1000x667 1000x667+0+0 8-bit

DirectClass 1.698MB 0.000u 0:00.000

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

65

EN COUVERTURE

TRAITEMENT D'IMAGES

En dehors de l’extension du

3. UN PEU DE SCRIPT SHELL

fichier cible, il vous est possible

de spécifier un format avec son

Pour l’heure, nous n’avons travail é qu’avec un seul fichier image et nom suivi d’un double point. La

bien qu’ImageMagick dispose d’un langage qui lui est propre, c’est géné-

commande

ralement au shell qu’on confie l’interprétation de scripts. Si vous êtes convert image2.

débutant sous GNU/Linux grâce à la Raspberry Pi, vous ne le savez jpg png:image2.toto produira le même résultat que précé-

peut-être pas, mais la ligne de commandes que vous utilisez régulièrement est un shel , et plus exactement le shell Bash.

demment, tout en spécifiant le

format qui ne peut être déduit

Un shell ou interpréteur de commandes, est le programme qui traduit par convert grâce à l’extence que vous tapez au clavier et détermine ce qu’il faut en faire. Ceci est sion donnée.

ce qu’on appel e une utilisation interactive du shel , mais il est également possible de réunir un lot de commandes dans un fichier et de demander Beaucoup d’autres modifi-au shell de l’interpréter : c’est un script. Les commandes dans ce script cations peuvent être apportées

peuvent être des programmes, des instructions propres au shell lui-aux images avec convert :

même ou encore des boucles, des initialisations de variables, des condi-

• inverser les couleurs avec

tions. . Ainsi en plus d’être votre interpréteur de commandes, le shell

-negate ;

Bash est également un langage de programmation, ou plus exactement, un langage de script.

• convertir un espace de

couleur à un autre comme

Ce n’est pas tout. Même si l’on trouve généralement ce type d’utilisa-sRGB vers niveau de gris

tion dans un script, ou en d’autres termes dans un fichier, il est égale-avec -colorspace Gray ;

ment possible d’utiliser ces fonctionnalités directement en ligne de commandes pour, par exemple, lancer un appel à un programme à l’intérieur

• réduire le nombre de cou-

d’une boucle.

leurs avec par exemple

Voici un exemple simple. Soit une série de fichiers dans le répertoire

-colors 256 ;

courant :

• tourner une image d’un

certain nombre de degrés

% ls

avec -rotate ;

tizen_S2_arriere.jpg tizen_S2_ip.jpg

tizen_S2.jpg tizen_Z3_arriere.jpg tizen_Z3.jpg

• appliquer des flous avec

-radial-blur, -blur ou

Nous souhaitons, pour chacun de ces fichiers, afficher son type à

-gaussian-blur ;

l’aide de la commande file, ainsi :

• découper un morceau

d’image avec

% file tizen_S2.jpg

-crop ;

tizen_S2.jpg: JPEG image data, JFIF standard 1.01

• etc.

Vous pouvez répéter la commande autant de fois qu’il y a de fichiers, Je vous recommande for-ou vous pouvez demander au shell de boucler sur la liste :

tement la lecture de la page

http://www.imagemagick.

% for i in *.jpg; do file $i; done

org/Usage/. Même si el e est

tizen_S2_arriere.jpg: JPEG image data, JFIF standard 1.01

en anglais, les exemples don-

tizen_S2_ip.jpg: JPEG image data, JFIF standard 1.01

nés sont relativement visuels et

tizen_S2.jpg: JPEG image data, JFIF standard 1.01

tizen_Z3_arriere.jpg: JPEG image data, JFIF standard 1.01

vous permettront au moins de

tizen_Z3.jpg: JPEG image data, JFIF standard 1.01

vous faire une idée des diffé-

rentes options et des consé-

La syntaxe utilisée, ici sur une ligne, est plus facile à comprendre quences de leur utilisation.

présentée ainsi (comme dans un script) :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 66

HACKABLE MAGAZINE n°14

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

67

EN COUVERTURE

XXXXX

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 68

HACKABLE MAGAZINE n°14

Manipuler et traiter automatiquement vos photos sur Raspberry Pi for i in *.jpg

do

file $i

done

Les ; utilisés sur une seule ligne permettent de marquer la fin de chaque instruction (comme en C), mais ils ne sont pas nécessaires lorsqu’on utilise plusieurs lignes. Nous avons ici une boucle for plaçant dans la variable i chaque élément de la liste *.jpg (les fichiers avec une extension .jpg du répertoire courant). Dans le corps de la boucle (do), la variable référencée $i contiendra donc, à chaque tour, un nom de fichier qu’il sera possible d’utiliser pour une commande, ici file. La portée de la boucle el e-même est définie par les directives do et done.

Bien entendu, nous pouvons utiliser n’importe quel e commande ou suite de commandes dans notre boucle, y compris cel es fournies par ImageMagick :

% for i in *.jpg; do identify $i; done

tizen_S2_arriere.jpg JPEG 3695x3359 3695x3359+0+0 8-bit DirectClass 4.19MB 0.370u 0:00.380

tizen_S2_ip.jpg JPEG 2596x2689 2596x2689+0+0 8-bit DirectClass 2.02MB 0.180u 0:00.190

tizen_S2.jpg JPEG 3613x3019 3613x3019+0+0 8-bit DirectClass 3.968MB 0.340u 0:00.329

tizen_Z3_arriere.jpg JPEG 3680x3234 3680x3234+0+0 8-bit DirectClass 2.966MB 0.300u 0:00.300

tizen_Z3.jpg JPEG 3547x3195 3547x3195+0+0 8-bit DirectClass 2.925MB 0.280u 0:00.279

Imaginez maintenant cette même série de fichiers placée dans un répertoire dans lequel nous ajoutons un sous-répertoire petit/. En utilisant un éditeur de texte (Vim, Nano, Emacs, etc.), nous pouvons écrire le script suivant :

#!/bin/bash

for i in *.jpg

do

convert -geometry 500 $i petit/$i

done

Notre boucle est identique à la précédente, mais nous utilisons convert pour changer la tail e de chaque image et placer le résultat dans le sous-répertoire petit/, avec le même nom de fichier. La première ligne du script est appelée un shebang (#! ) et permet au système de savoir qu’il s’agit d’un script et qu’il doit être interprété par un programme particulier (ici /bin/bash, le shell Bash). Ceci nous permet d’enregistrer, par exemple, le script dans un fichier monscript puis de le rendre exécutable avec chmod +x monscript. Ainsi, nous pourrons le lancer avec ./monscript et le système l’interprètera avec /bin/bash sans que nous ayons à faire sh monscript en ligne de commandes.

L’exécution de ce script va boucler sur tous les fichiers .jpg du répertoire courant, les redimensionner à la tail e demandée et enregistrer le résultat dans petit/. Nous obtenons donc une version réduite des images de tout un répertoire en une seule commande.

Bien entendu, ceci fonctionne avec n’importe quel e transformation mise à disposition par convert et nous pouvons même convertir des fichiers d’un format à un autre. Ceci demande une petite astuce puisque convert travail e par défaut en fonction de l’extension du fichier et, même si nous utilisons par exemple png: nous nous retrouverions avec des données PNG dans un fichier avec une extension .jpg (certains logiciels n’aiment pas du tout ça).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

69

EN COUVERTURE

TRAITEMENT D'IMAGES

Pour manipuler le nom de fichier se trouvant dans $i nous devons faire appel à basename, une commande spécialement conçue pour retirer un nom de répertoire et une extension d’un nom de fichier. La syntaxe est la suivante : basename fichier.ext ext qui aura pour effet de retirer

« ext » et retourner le nom « fichier. ». En utilisant l’apostrophe inverse (AltGr+7), nous pouvons utiliser ce résultat comme un argument/élément d’une commande.

Ainsi, si nous faisons convert fichier.jpg `basename fichier.jpg jpg`png, basename va retourner « fichier. », texte que nous réutilisons en le complétant de « png » pour former « fichier.

png » et ainsi former la commande convert fichier.jpg fichier.png. En appliquant cette syntaxe et cette commande basename non pas à un nom de fichier statique, mais à celui contenu dans une variable, nous obtenons convert $ìbasename $i jpg`png. Chose que nous pouvons alors facilement adapter dans un script :

#!/bin/bash

for i in *.jpg

do

echo "Convertion $i"

convert -geometry 500 $i petit/`basename $i jpg`png

done

Ici, nous utilisons donc convert pour redimensionner tous les fichiers du répertoire courant, un par un, en plaçant le résultat dans le répertoire petit/ et en changeant l’extension en .png et donc le format utilisé par convert. Nous en profitons pour ajouter un affichage permettant de suivre la progression, les outils d’ImageMagick étant silencieux par défaut (typique de la philosophie UNIX : si un programme n’a rien à signaler ou d’avertissement à donner, il doit rester silencieux). L’exécution du script nous donne donc :

% ./script.sh

Convertion tizen_S2_arriere.jpg

Convertion tizen_S2_ip.jpg

Convertion tizen_S2.jpg

Convertion tizen_Z3_arriere.jpg

Convertion tizen_Z3.jpg

% ls petit/

tizen_S2_arriere.png tizen_S2_ip.png tizen_S2.png

tizen_Z3_arriere.png tizen_Z3.png

% identify petit/tizen_Z3.png

petit/tizen_Z3.png PNG 500x450 500x450+0+0 8-bit

DirectClass 400KB 0.000u 0:00.000

Nous avons bel et bien transformé tous nos fichiers JPEG du répertoire courant en des versions plus petites, placées dans petit/ et au format PNG. Bingo !

Poussons encore davantage la personnalisation de ce script. Imaginez maintenant que vous ne sachiez pas à l’avance dans quel format ni dans quel e tail e vous souhaiterez convertir vos fichiers. Ces informations peuvent être passées au script lors de son invocation. Modifiez le script en ajoutant ceci après la ligne shebang :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 70

HACKABLE MAGAZINE n°14

Manipuler et traiter automatiquement vos photos sur Raspberry Pi if [ -z "$TAILLE" ]

then

TAILLE=500

fi

if [ -z "$EXT" ]

then

EXT="png"

fi

Nous avons ici deux conditions if qui testent si les variables spécifiées ($TAILLE et $EXT) ont une tail e nul e. Si tel est le cas, c’est que les variables ne sont pas initialisées et nous leur affec-tons donc une valeur par défaut, respectivement 500 et « png ».

Nous modifions également le corps de la boucle ainsi :

echo "Convertion $i en $TAILLE et format $EXT"

convert -geometry $TAILLE $i petit/'basename $i jpg'$EXT

REMARQUE

Notez qu’il est relativement rare d’utiliser cette technique pour passer des arguments à un script. J’ai choisi ici cette méthode de façon délibérée pour enchaî-

ner sur l’utilisation de gPhoto et sa manière d’utiliser des scripts.

En temps normal, on utilisera plutôt les variables $1, $2... désignant respectivement le premier argument, le second argument... passés après le nom du script (qui est contenu dans $0). Le test et l’initialisation prendraient alors cette forme :

if [ -z "$1" ]

then

TAILLE=500

else

TAILLE=$1

fi

if [ -z "$2" ]

then

EXT="png"

else

EXT=$2

fi

Et l’appel du script serait : ./script.sh 850 bmp pour une conversion avec une largeur de 850 pixels et un format cible BMP.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

71

EN COUVERTURE

TRAITEMENT D'IMAGES

Nous utilisons les valeurs dans $TAILLE et $EXT pour afficher la progression et comme arguments pour l’appel à convert. À présent, si nous lançons le script comme précédemment, nous obtenons :

% ./script.sh

Convertion tizen_S2_arriere.jpg en 500 et format png

Convertion tizen_S2_ip.jpg en 500 et format png

Convertion tizen_S2.jpg en 500 et format png

Convertion tizen_Z3_arriere.jpg en 500 et format png

Convertion tizen_Z3.jpg en 500 et format png

Les variables ne sont pas initialisées et les valeurs par défaut, 500 et « png » sont alors utilisées. Mais si nous lançons la commande ainsi :

% TAILLE=850 EXT=bmp ./script.sh

Convertion tizen_S2_arriere.jpg en 850 et format bmp

Convertion tizen_S2_ip.jpg en 850 et format bmp

Convertion tizen_S2.jpg en 850 et format bmp

Convertion tizen_Z3_arriere.jpg en 850 et format bmp

Convertion tizen_Z3.jpg en 850 et format bmp

Les variables renseignées en début de ligne, qui sont appelées variables d’environnements, existent dans le script et n’ont pas une tail e nul e. El es sont alors utilisées pour les commandes dans la boucle. Nous pouvons ainsi choisir, au moment de l’invocation du script, la tail e et le format cible.

4. L’OPTION DES SCRIPTS AVEC GPHOTO

Nous avons maintenant quelques connaissances de base en script shell et en utilisation des outils ImageMagick. Il est donc temps de lier cela avec gPhoto et en particulier son option

--hook-script. Cel e-ci permet d’associer l’exécution d’un script aux différentes phases de traitement des actions de gPhoto. Le script doit se conformer à un certain fonctionnement, car gPhoto va lui passer une ou deux variables d’environnement, exactement comme nous l’avons fait pour $TAILLE et $EXT à l’instant.

Les variables passées sont ACTION et ARGUMENT avec les valeurs possibles pouvant être les suivantes :

• $ACTION = “init” : gPhoto vient d’être lancé, mais n’a encore accompli aucune action. Si le script arrête son exécution en retournant une valeur différente de zéro (avec exit 1 par exemple), gPhoto n’ira pas plus loin et abandonnera l’opération. Ceci peut être très intéressant pour, par exemple, tester la présence d’un répertoire de destination pour les images ou s’assurer d’un espace disque suffisant avant d’al er plus loin.

• $ACTION = “start” : gPhoto a fini d’analyser sa ligne de commandes et est sur le point d’exé-

cuter les ordres donnés.

• $ACTION = “download” : gPhoto vient de télécharger un fichier depuis l’appareil photo et l’a enregistré sous un nom qu’il aura placé dans la variable $ARGUMENT. C’est ici que nous pourrons alors déclencher différentes opérations sur l’image qui vient d’être obtenue.

• $ACTION = “stop” : gPhoto a fini son travail et est sur le point de quitter. C’est le moment de faire un brin de ménage ou de provoquer une opération concernant l’ensemble des fichiers qui ont été téléchargés (comme créer une archive et/ou l’envoyer par mail, par exemple).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 72

HACKABLE MAGAZINE n°14

Manipuler et traiter automatiquement vos photos sur Raspberry Pi En spécifiant l’option --hook-script suivi d’un nom de script, gPhoto va donc l’appeler en initialisant ses variables en fonction de la progression de son travail. Notre objectif sera donc d’écrire un script qui, en fonction du contenu de la variable d’environnement $ACTION, procèdera à diffé-

rentes opérations. Nous pourrions utiliser ici des if pour tester le contenu de $ACTION, mais une condition se prête bien davantage à ce genre d’utilisation : un switch/case :

#!/bin/bash

case "$ACTION" in

"init")

echo ">>> Initialisation"

;;

"start")

echo ">>> Execution des commandes"

;;

"download")

echo ">>> $ARGUMENT a été telechargé."

;;

"stop")

echo ">>> Traitement gPhoto terminé"

;;

esac

case va évaluer le contenu de $ACTION et appliquer automatiquement les instructions placées dans la portée adéquate, délimitée par le contenu attendu entre guil emets et ;; . La fin du switch/

case est bornée par un esac (case à l’envers, tout comme fi marque la fin d’un if). Nous avons donc ici différents affichages de texte avec la commande echo en fonction du contenu de $ACTION.

Il ne nous reste alors plus qu’à tester le script avec :

% gphoto2 --capture-image-and-download --hook-script ./script.sh

>>> Initialisation

>>> Execution des commandes

Le nouveau fichier est à l'emplacement /capt0000.jpg de l'appareil Enregistrement du fichier en capt0000.jpg

>>> capt0000.jpg a été telechargé.

Effacement du fichier /capt0000.jpg de l'appareil

>>> Traitement gPhoto terminé

Pour chaque équivalence du contenu de $ACTION, notre script nous informe de la progression ainsi que du nom du fichier obtenu. Notez cependant que la sortie du script se mélange avec les messages provenant directement de gPhoto. Nous pouvons réduire la présence de ce texte para-site en ajoutant l’option --quiet à notre ligne de commandes :

% gphoto2 --quiet --capture-image-and-download --hook-script ./script.sh

>>> Initialisation

>>> Execution des commandes

/capt0000.jpg

>>> capt0000.jpg a été telechargé.

>>> Traitement gPhoto terminé

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

73

EN COUVERTURE

TRAITEMENT D'IMAGES

Notez bien que ce fonctionnement est valable

L’inclinaison ici ne nous intéresse pas, mais le fait

pour une « session » ou une exécution complète

de placer le texte à une certaine distance d’un

de gPhoto. Ceci signifie que si nous lui deman-

bord ou d’un coin nous sera bien pratique. Nous

dons de prendre une série de clichés, le script

commencerons donc par définir ce point de réfé-

nous affichera bien une seule initialisation et

rence via l’option -gravity pouvant prendre en

une exécution de commandes, mais autant de

argument :

mentions de fichiers téléchargés qu’il y aura de

clichés pris. Ceci est donc particulièrement bien

• NorthWest : en haut à gauche,

adapté à la prise de photos à interval es réguliers.

• North : en haut au centre,

Pour asseoir tout cela, nous al ons immédiate-

• NorthEast : en haut à droite,

ment mettre en pratique cette théorie. .

• West : à gauche au centre,

• Center : au centre de l’image,

5. UN CAS PRATIQUE :

• East : à droite au centre,

HORODATER LES CLICHÉS

• SouthWest : en bas à gauche,

• South : en bas au centre,

D’UN TIME LAPSE

• SouthEast : en bas à droite.

Notre objectif ici sera d’utiliser gPhoto pour

Nos options seront alors -gravity SouthEast

prendre des clichés avec un interval e de 10s

-annotate +10+10 “un texte” , les +10 signi-

(cette valeur n’est pas importante). Après chaque

fiant respectivement à 10 pixels sur X (largeur) et

photo, nous voulons que l’image récupérée soit au-

Y (hauteur) du bord de l’image. Mais nous voulons

tomatiquement redimensionnée avec une largeur

également que le texte soit lisible et nous choisis-

de 800 pixels, placée dans un répertoire particulier

sons alors une couleur de remplissage qui sera

et marquée de la date et l’heure de la prise de vue.

du blanc avec -fill white ainsi qu’une tail e de

La série d’images pourra être ensuite conver-

caractères adaptée, -pointsize 24.

tie en vidéo avec avconv comme nous l’avons

Afin de nous assurer que le texte en blanc soit

vu dans l’article précédent et dans l’article sur le

bien visible quel e que soit l’image, nous al ons

module raspicam dans le numéro de juil et/août.

placer à l’arrière un fond translucide en spécifiant

L’utilisation d’un script avec l’option --hook-

l’option -undercolor avec comme argument

script étant à présent maîtrisée, vous l’avez com-

une valeur RGBA (Rouge Vert Bleu Alpha) à

pris, tout ce que nous avons à faire est de spécifier la

#000000B0 (pas de rouge, pas de vert, pas de

bonne commande pour l’action « download ». L’outil

bleu et un canal alpha à B0 sur un maximum

à mettre en œuvre est encore une fois convert et

de FF). La notation utilisée est cel e du langage

nous connaissons déjà l’option -geometry permet-

HTML avec, en plus, deux caractères pour la

tant de redimensionner l’image.

transparence avec 00 pour totalement transpa-

Nous avons besoin de deux choses supplé-

rent et FF pour une opacité complète.

mentaires :

Notre liste d’options est maintenant : -geometry

• un moyen d’écrire du texte sur chaque image,

800 -gravity SouthEast -undercolor

de façon lisible et propre ;

'#000000B0' -fill white -pointsize 24

-annotate +10+10 “un texte” nous permettant

• extraire la date et l’heure de la prise du cliché

donc d’avoir : un texte blanc en police 24 points à

depuis les fichiers.

10 pixels du bord inférieur droit sur un fond noir

convert fournit l’option -annotate permettant

translucide. Notez que les options sont traitées dans

d’ajouter un test tout en précisant son inclinaison et

l’ordre, et de ce fait que l’inscription du texte aura

son décalage par rapport à un point de référence.

lieu après le redimensionnement de l’image.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 74

HACKABLE MAGAZINE n°14

Manipuler et traiter automatiquement vos photos sur Raspberry Pi Il ne nous reste plus qu’à déterminer le texte à utiliser. Un fichier JPEG tel que ceux provenant des appareils photo numériques embarque des métadonnées incluant le type d’appareil, les conditions de prise de vue, parfois des coordonnées GPS, une vignette. . mais aussi et surtout la date et l’heure du cliché. Attention, il ne s’agit pas là de la date de création ou de modification du fichier, mais bien cel e de la prise de vue.

Pour obtenir les informations embarquées dans le fichier, il vous suffit d’utiliser la commande exif provenant du paquet du même nom. Voici quelques informations issues d’un JPEG provenant de mon EOS 700D :

% exif capt0000.jpg

--------------------+-------------------------------

Marqueur |Valeur

--------------------+-------------------------------

Constructeur |Canon

Modèle |Canon EOS 700D

Orientation |Top-left

Date et heure |2016:08:17 12:02:03

Temps d'exposition |1/200 sec.

F-Number |f/9,0

ISO Speed Ratings |100

Version d'exif |Version d'exif 2.3

Shutter Speed |7,62 EV (1/197 sec.)

Ouverture |6,38 EV (f/9,1)

Longueur focale |46,0 mm

Mode d'exposition |Exposition automatique

Balance des blancs |Balance des blancs automatique

Nous ne voulons cependant pas récupérer toutes ces informations, mais une seule. Nous devons donc utiliser l’option -t en spécifiant le tag (l’information) qui nous intéresse. Pour obtenir la liste des tags EXIF présents dans un fichier, il nous suffit de faire exif -l fichier.jpg et trouver celui qui nous intéresse. Ici, ce sera « 0x9003 Date and Time (Original) ». Il ne nous reste plus qu’à l’utiliser pour obtenir la métadonnée espérée :

% exif -t 0x9003 capt0000.jpg

EXIF entry 'Date and Time (Original)' (0x9003, 'DateTimeOriginal') exists in IFD 'EXIF': Tag: 0x9003 ('DateTimeOriginal')

Format: 2 ('ASCII')

Components: 20

Size: 20

Value: 2016:08:17 12:02:03

Voilà qui n’est pas tout à fait formaté comme nous l’attendions. Heureusement, exif possède un mode beaucoup plus approprié via l’option -m ou --machine-readable :

% exif -m -t 0x9003 capt0000.jpg

2016:08:17 12:02:03

En utilisant l’apostrophe inversée comme nous l’avons fait pour basename, nous pouvons alors utiliser cette sortie comme texte pour l’option -annotate de convert. Voici donc notre script final : Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

75

EN COUVERTURE

TRAITEMENT D'IMAGES

#!/bin/bash

#exit 1

case "$ACTION" in

"init")

echo ">>> Initialisation"

;;

"start")

echo ">>> Execution des commandes"

;;

"download")

echo ">>> $ARGUMENT a été téléchargé."

convert $ARGUMENT -geometry 800 -gravity SouthEast \

-undercolor '#000000B0' -fill white -pointsize 24 -annotate +10+10 \

" èxif -m -t 0x9003 $ARGUMENT` " petit/$ARGUMENT

;;

"stop")

echo ">>> Traitement gPhoto terminé"

echo ">>> `ls petit/*.jpg|wc -l` fichiers traité(s) dans petit/"

;;

esac

Il vous suffira de l’enregistrer dans un répertoire vide, sous le nom script.sh par exemple, avant de vous plier d’un chmod +x script.sh, puis de créer un répertoire petit/ avant de lancer la commande :

% gphoto2 --quiet --capture-image-and-download --frames 5 \

--interval 10 --hook-script ./script.sh

>>> Initialisation

>>> Execution des commandes

/capt0000.jpg

>>> capt0000.jpg a été téléchargé.

/capt0001.jpg

>>> capt0001.jpg a été téléchargé.

/capt0002.jpg

>>> capt0002.jpg a été téléchargé.

/capt0003.jpg

>>> capt0003.jpg a été téléchargé.

/capt0004.jpg

>>> capt0004.jpg a été téléchargé.

>>> Traitement gPhoto terminé

>>> 5 fichiers traité(s) dans petit/

gphoto est ici utilisé pour prendre une photo toutes les 10 secondes jusqu’à atteindre un nombre de 5 clichés. Bien entendu, dans une situation réel e, il s’agira plutôt d’une image toutes les 30s, minutes voire 30mn, en fonction de la scène photographiée (coucher de soleil, déplacement des nuages, journée complète, croissance d’une plante, fonte des neiges, évolution du feuil age d’une forêt, etc.).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 76

HACKABLE MAGAZINE n°14

Manipuler et traiter automatiquement vos photos sur Raspberry Pi

Le résultat du traitement avec convert ressemblera à ceci : pour, à terme après des jours, voire

des semaines de prise de vue, se

rendre compte qu’un petit réglage

aura gâché toute la col ection

d’images...

Voici quelques conseils qui, je

l’espère vous aideront dans vos

expérimentations :

• pensez à l’alimentation de l’appa-

reil et préférez dans la mesure

du possible une alimentation

secteur et non sur batterie ;

• testez, re-testez et re-testez

encore vos scripts, vos com-

mandes et vos options avant

de démarrer votre prise de vue

Je vous invite fortement à consulter la page web http://www.

définitive ;

imagemagick.org/Usage pour trouver des variations intéres-

santes sur ce thème et vous découvrirez que l’étendue des pos-

• faites des copies et des sauve-

sibilités est absolument incroyable.

gardes de toutes vos images, et

assurez-vous de ne jamais rien

écraser ;

POUR FINIR

• préférez les réglages manuels

Nous pourrions pousser encore plus loin le développement

de l’appareil photo (balance des

de ce script et ajouter sans cesse de nouvel es fonctionnalités.

blancs, ISO, mise au point, etc.),

Créer des déclinaisons dans différents formats de chaque cli-

tout ce qui est automatique est

ché, renommer les fichiers, créer des archives par jour, compo-

susceptible de varier et de don-

ser une mosaïque d’images, envoyer les fichiers via une liaison

ner des résultats catastrophiques

réseau (scp), sauvegarder régulièrement sur clé USB. .

une fois converti en vidéo ;

Nous pourrions également rendre le script plus générique en

• assurez-vous, par tous les

lui faisant prendre des arguments dans un fichier de configura-

moyens possibles, que personne

tion (avec l’instruction source) ou en restructurant entièrement ne touche à votre équipement

le script de façon à placer toutes les commandes et paramètres

ou ne risque de le déplacer par

dans des variables réunies en début de fichier pour une édition

inadvertance ;

rapide.

• choisissez le bon interval e en

La qualité d’un appareil reflex numérique couplé à la sou-

fonction de la scène photogra-

plesse d’une Raspberry Pi, la puissance de gPhoto et la

phiée, dans le doute mieux vaut

richesse d’ImageMagick, le tout lié ensemble grâce aux fonc-

avoir trop de clichés que pas

tionnalités du shell Bash, nous ouvre des horizons inaccessibles

assez ;

aux photographes les plus créatifs. Mais c’est aussi une source

• conservez toujours les clichés

d’enrichissement personnel tant au niveau de la masse de

originaux en haute résolution ;

connaissances que vous al ez acquérir, qu’en termes de qualité

humaine comme la patience et la méticulosité. En effet, rien

• organisez-vous et classez vos

n’est plus frustrant que de mettre en place un tel système, le

séries de fichiers par thèmes par

laisser faire son travail alors que les conditions sont optimales date. DB

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

77

EN COUVERTURE

CAPTEUR DE MOUVEMENTS

PRENEZ DES CLICHÉS

AUTOMATIQUEMENT EN

CAS DE DÉTECTION DE

MOUVEMENT

Denis Bodor

Nous avons exploré plusieurs possibilités d’utilisation d’une Raspberry Pi connectée à un appareil photo numérique et il y a certainement encore des centaines d’options à couvrir, mais il en reste une qui me parait tout simplement incontournable : déclencher une prise de vue en fonction d’un évènement externe détecté par la Raspberry Pi.

Notre exemple ici sera la détection d’un mouvement par un capteur infrarouge.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 78

HACKABLE MAGAZINE n°14

Prenez des clichés automatiquement en cas de détection de mouvement Nous savons à présent

piloter un appareil

photo numérique

depuis la Pi en ligne

de commandes grâce

à gPhoto et même traiter automatique-

ment les images ainsi capturées. Nous

Les détecteurs de

mouvements infrarouges

pouvons faire des séries de clichés en

passifs, ou PIR, existent

fonction de paramètres temporels, mais

sous diverses formes,

qu’en est-il de la possibilité de prendre

modèles et types. Tous

des clichés en fonction d’une source

cependant partagent

le même principe de

ponctuel e d’évènement ? Par exemple :

fonctionnement et le même

• le déclenchement d’un capteur par

type de brochage. Seul

point important dans notre

contact ;

cas : la tension utilisée doit

• la détection d’un bruit ;

impérativement être de 3,3V

max.

• la coupure d’un faisceau lumineux

(ou infrarouge) ;

• la détection d’un objet avec un cap-

teur ultrason ;

créant une différence de potentiels en étant exposé à un

changement de température. À l’instar des cristaux pié-

• ou encore la captation d’un mouve-

zoélectriques qui génèrent une tel e différence de poten-

ment par un détecteur infrarouge.

tiels en cas de déformation mécanique, le capteur a pour

Sur papier, le principe est simple, la

objectif de signaler un changement de température et plus

Raspberry Pi, d’une façon ou d’une autre,

généralement l’arrivée d’une source de chaleur comme un

détecte quelque chose et ce quelque

corps humain.

chose doit provoquer la prise d’un cliché.

En pratique, les choses sont plus déli-

Le système est dit « passif », car il n’y a pas d’émission

cates qu’il n’y paraît, mais la Pi, comme

infrarouge de la part du module. Celui-ci ne fait que capter

gPhoto, nous offre des solutions parfaite-

un rayonnement émis par une source, ce qui signifie donc

ment adaptées.

qu’un objet à la même température que son environne-

ment ne déclenchera pas de détection.

Notre exemple ici consistera en l’uti-

lisation d’un module de détection infra-

Le capteur pyroélectrique se compose généralement

rouge passif ou Passive InfraRed sen-

de deux éléments connectés en série et avec des pola-

sor en anglais, généralement écourté

rités opposées. Les deux éléments, percevant chacun la

en PIR sensor.

chaleur ambiante, vont tous deux afficher une différence

de potentiels identique, mais s’annulant l’une l’autre. Le

1. LES CAPTEURS PIR capteur ne réagira donc pas en cas de variation globale de la température, mais uniquement si l’un des deux éléments

Ce type de capteur est très courant,

perçoit de la chaleur, mais l’autre non. C’est précisément

ils sont généralement utilisés, associés

pour cette raison que le capteur est placé derrière une

à un système quelconque d’éclairage

lentil e concentrant le rayonnement infrarouge sur l’une

pour déclencher la mise en route à la

ou l’autre partie du capteur. Cette lentil e à facette nous

moindre détection de mouvement. Leur

parait blanche, mais el e est en réalité transparente aux

principe de fonctionnent est relative-

infrarouges dans la gamme de longueurs d’ondes (entre

ment simple et se base sur un capteur

8 et 15 micromètres) à laquel e réagit le capteur. El e sert

pyroélectrique constitué d’un matériau

également de filtre pour le capteur.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

79

EN COUVERTURE

CAPTEUR DE MOUVEMENTS

Pour que le système fonctionne,

• deux connexions pour alimen-

il faut donc mesurer une différence

ter directement les bobines

de potentiel aux bornes du capteur,

d’un relais qui sera déclenché

amplifier cette différence et détermi-

en cas de détection.

ner un seuil minimum indiquant une

détection effective. Vous n’aurez

De plus, certains modules com-

pas à faire tout cela par vous-même, portent des réglages ou des fonc-Sous la lentille en

car un circuit spécialisé existe et

tions supplémentaires :

plastique blanc se

est intégré presque à l’ensemble des modules de

• une photorésistance (LDR)

cache le capteur

détection, qu’il s’agisse de circuits pour hobbyistes

activable par cavalier ou micro-

pyroélectrique. Celui-ci

est généralement trop

ou de produits manufacturés comme des éclairages

interrupteur, permettant de limi-

complexe à utiliser

automatiques. Ce circuit est le BISS001. Très com-

ter la détection de mouvement

seul (électronique

plet, il prend en charge non seulement le capteur,

en l’absence de lumière. Ici, il

analogique) et

s’accompagne d’un

mais également un ensemble de réglages ainsi

s’agit principalement de piloter

circuit intégré simplifiant

que le pilotage de relais. Le circuit lui-même est en

un éclairage et ce genre de

sa mise en œuvre.

mesure de fonctionner avec une tension entre +3V

modules dispose donc souvent

et +6V, mais ceci est généralement un paramètre

des connexions pour un relais ;

qui découle du module et de son origine.

• un potentiomètre pour régler la

Une simple recherche sur eBay ou sur Amazon

sensibilité de la détection sans

des termes « PIR sensor » et vous aurez droit à

unité de mesure spécifique

une liste incroyablement longue d’offres en tous genres,

(c’est souvent une affaire de

avec des prix ne dépassant généralement pas 4€ pièce,

tâtonnement) ;

port offert, et une moyenne aux alentours de 1,5€. Il vous

• un potentiomètre réglant la

faudra cependant faire très attention aux spécifications

durée de commutation d’un re-

techniques données, car nous avons l’intention de faire

lais. Là encore, ceci va de pair

fonctionner ce module avec une Raspberry Pi. Il ne faut

avec la présence des broches

donc en aucun cas que la tension de sortie dépasse

dédiées et de la LDR.

3,3V, l’alimentation du module pouvant être 3,3V ou 5V.

Enfin, la plupart des modèles

Je vous recommande d’ail eurs, à réception du ou des

permettent de configurer via un

modules que vous commanderez, de vérifier, à l’aide d’un

cavalier, un interrupteur ou un pont à

multimètre, la tension existante entre la masse et le signal souder, le mode de fonctionnement de sortie en cas de détection, et ce avant toute connexion au choix entre « retriggerable »

à une broche en entrée de la Raspberry Pi.

et « non retriggerable ». En mode

Ces modules proposent entre 3 et 6 broches, mais

retriggerable, la détection d’un

seules 3 nous intéressent ici :

évènement va provoquer un chan-

• la masse ;

gement d’état (bas à haut) sur la

• la tension d’alimentation ;

sortie et une détection consécutive

va prolonger le maintien de cet état.

• le signal en sortie généralement libel é OUT, SOUT

Ce n’est que lorsqu’aucune détec-

ou VOUT.

tion n’aura plus lieu que l’état de la

Vous pourrez trouver également :

sortie va alors à nouveau changer

• une seconde tension d’alimentation connectée à un

d’état (haut à bas). Tant qu’il y aura

régulateur et acceptant entre 5V et 20V selon le mo-

des détections dans un court délai,

dèle. Dans ce cas, cette broche est marquée VCC et

la sortie restera à l’état haut et l’en-

cel e de l’alimentation avec une mention de la tension

semble des détections sera consi-

attendue comme 3.3V par exemple ;

déré comme un seul évènement.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 80

HACKABLE MAGAZINE n°14

Prenez des clichés automatiquement en cas de détection de mouvement En mode non retriggerable, une

petit de fabrication inconnue marqué HC-SR505, sans le moindre

détection provoquera un change-

problème. Dans tous les cas, et je le répète : alimentez votre module ment d’état (bas à haut) en sortie

en 5V ou en 3,3V et testez avec un multimètre la tension présente puis un retour à l’état standard

entre la sortie et la masse. Cel e-ci ne doit en aucun cas être supé-

(bas). Une détection consécutive

rieure à 3,3V !

va alors provoquer un nouveau

changement d’état, une tempori-

sation et un nouveau retour à l’état

2. ASSEMBLAGE DES COMPOSANTS

standard. Un lot de détections

La connexion du module PIR à une Raspberry Pi est d’une sim-

sera donc perçu comme une suc-

plicité déconcertante. Selon que le module soit en 5V ou en 3,3V, cession d’évènements.

connectez l’alimentation du module sur la broche 2 ou 1 de la Pi. La En fonction des besoins, l’un ou

masse sera connectée à l’une des masses disponibles : 6, 9, 14, 20, l’autre mode sera préféré. Pour un

25, 30, 34 ou 39. Enfin, la sortie du module sera connectée sur l’une éclairage, par exemple, il n’est pas

des broches GPIO de la carte. Le numéro de la broche importe peu, souhaitable de voir la lampe chan-du moment que cela ne rentre pas en conflit avec d’autres fonctions ger sans cesse d’état, plongeant

de broches qui pourraient être configurées selon vos besoins :

régulièrement la personne dans le

• console série : 8 et 10 ;

noir même en cas de mouvement. .

• SPI : 19, 21, 13, 24 et 26 (pour un écran LCD par exemple) ;

Pour résumer, afin de bien

• i2c : 3 et 5 (pour une RTC ou un capteur de température).

choisir votre ou vos modules PIR,

ceux-ci doivent pouvoir être ali-

mentés en 3,3V ou 5V, fournir un

3. CODE ET COMMANDES

signal de sortie impérativement en

3,3V et disposer d’un moyen de

3.1 Premier essai

choisir le mode d’utilisation.

Nous al ons, dans un premier temps, tâcher de détecter le change-

Le modèle utilisé ici est réfé-

ment d’état du module depuis la carte Raspberry Pi. L’une des façons rencé SS502V110 et fabriqué

de faire consiste à scruter en permanence l’état de la broche sur par Sure Electronics, mais j’ai

laquel e est connectée la sortie du module et à afficher un message également testé un modèle plus

si l’état est haut (à 3,3V). Cette technique s’appel e le polling : Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

81

EN COUVERTURE

CAPTEUR DE MOUVEMENTS

#!/usr/bin/python

# Affichage du message

# -*- coding: utf-8 -*-

print "Mouvement Détecté"

import time

# Configuration de la broche

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

GPIO.setup(40, GPIO.IN)

# on utilise les numéros de broches

GPIO.setmode(GPIO.BOARD)

# broche 40 en entrée

# Installation de la gestion de

GPIO.setup(40, GPIO.IN)

# changement d'état

GPIO.add_event_detect(40, GPIO.

# boucle sans fin

RISING, callback=detection)

while True:

# la broche est a l'état haut ?

# Message

if GPIO.input(40):

print "En attente de détection..."

# oui, on affiche un message

print "Mouvement Détecté"

# Boucle sans fin

# dodo pendant 1 seconde

while True:

time.sleep(1)

time.sleep(10)

Ce script Python très simple ne fait pas grand-

Ici, nous utilisons la méthode add_event_detect()

chose. Il est constitué d’une simple boucle infinie,

permettant d’associer une fonction à un évènement.

testant toutes les secondes si la broche est à l’état

Cette méthode prend en argument la broche à surveil-

haut. Si tel est le cas, un message est affiché. On

ler (ici 40), l’évènement avec ici un changement d’état

enregistrera ce code dans un fichier, motion.py par

de bas à haut (RISING) et le nom de la fonction à appe-

exemple, avant de changer les permissions pour le

ler (le callback). La fonction est déclarée un peu plus

rendre exécutable avec chmod +x motion.py.

haut dans le script et ne fait, encore une fois qu’afficher

un message.

Il nous suffira ensuite de le lancer avec ./motion.

py et de passer la main devant le capteur PIR pour voir

Cette approche nous permet de sortir de la boucle

s’afficher, normalement, les messages de détection.

tous les éléments de test et de reposer entièrement

Notez qu’avec les dernières versions de Raspbian, il

sur des fonctions appelées indépendamment. Cela

n’est plus nécessaire de lancer ce genre de scripts via

tombe bien, car nous al ons également aborder la

sudo, l’utilisateur pi par défaut ayant les droits adé-

notion de signaux qui est une forme d’évènements et

quats pour accéder aux GPIO sans devenir temporaire-

donc quelque chose qui se traite de cette façon.

ment super-utilisateur (root).

Une autre approche pour obtenir le même résultat

3.2 Ajoutons gPhoto

consiste à ne pas scruter l’état de la broche, mais

Il y a une fonction de gPhoto que nous n’avons

de laisser le système nous signaler un changement

pas encore abordé. En effet, celui-ci est en mesure

d’état et de réagir en conséquence.

de déclencher une prise de vue à la réception d’un

signal. Les signaux dans un système UNIX comme

#!/usr/bin/python

# -*- coding: utf-8 -*-

Raspbian forment une méthode de communication

entre processus. Lorsque vous utilisez CTRL+C

# modules

par exemple pour interrompre le fonctionnement

import time

d’une commande, le système va suspendre le

import RPi.GPIO as GPIO

fonctionnement de ce programme et lui envoyer

# Déclenchement gPhoto

le signal SIGINT. Si celui-ci n’y répond pas, le

def detection(channel):

système va simplement arrêter le processus en

question.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 82

HACKABLE MAGAZINE n°14

Prenez des clichés automatiquement en cas de détection de mouvement Il existe toute une gamme de signaux ayant une signification bien précise dans tout le système, mais deux en particulier sont laissés à la discrétion des programmeurs pour leur création : SIGUSR1

et SIGUSR2. Dans le cas de gPhoto, le signal SIGUSR1 est utilisé pour déclencher une prise de vue sous certaines conditions. Lorsque gPhoto est en mode time-lapse par exemple, il est possible de le forcer, durant les temps d’attente, à prendre un cliché en lui envoyant un SIGUSR1. Pour cela, nous devons connaître le numéro de processus, ou PID, étant associé au gPhoto lancé. Numéro que vous pouvez récupérer avec la commande pidof suivie du nom du programme. Le signal est alors envoyé avec la commande kill -SIGUSR1 suivie du PID en question. Il est possible de combiner les deux commandes avec kill -SIGUSR1 `pidof gphoto2` ou tout simplement en utilisant la commande killall -SIGUSR1 gphoto2.

On pourra ainsi lancer gPhoto avec gphoto2 --interval -1 --capture-image-and-download, de façon à le laisser en attente avec un interval e de prise de vue négatif et donc infini. Un premier cliché sera cependant pris par défaut dès le lancement de la commande, mais seul un SIGUSR1 en provoquera un autre.

Tout ce que nous avons à faire est donc de lancer gPhoto puis d’envoyer un signal SIGUSR1 avec notre script si un mouvement est détecté par le capteur PIR. Nous al ons cependant faire un peu plus en ajoutant une date et heure dans le message, tester la présence de gPhoto en mémoire et abandonner l’opération si ce n’est pas le cas et, nous aussi, gérer la réception d’un signal de façon à ce qu’un CTRL+C arrête non seulement notre script, mais également le processus gPhoto.

La version finale de notre script sera donc :

#!/usr/bin/python

# -*- coding: utf-8 -*-

# modules

from subprocess import check_output

#0 client-session (t4 r0 i0/0 o0/0 fd 4/5 cc -1)

import RPi.GPIO as GPIO

# Fonction pour quitter avec CTRL+C

def quitter(sig, frame):

print "On quitte !"

# Arrêt de gPhoto

os.kill(gphotopid, signal.SIGTERM)

# On quitte

sys.exit()

# Déclenchement gPhoto

def detection(channel):

# Obtention de l'heure système

localtime = time.strftime('%x %X')

# Affichage du message de capture

print localtime,"- Mouvement Détecté ! Envoi SIGUSR1 à", gphotopid

# Envoi du signal à gPhoto

os.kill(gphotopid, signal.SIGUSR1)

# Configuration de la broche

GPIO.setmode(GPIO.BOARD)

GPIO.setup(40, GPIO.IN)

# Recherche du processus gPhoto en mémoire

try:

gphotopid = int(check_output(["pidof","gphoto2"])) Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

83

EN COUVERTURE

CAPTEUR DE MOUVEMENTS

except Exception:

print "Pas de PID gPhoto trouvé"

sys.exit()

# Prêt à travailler

print "gPhoto présent. PID = ", gphotopid

# Installation du gestionnaire pour CTRL+C

signal.signal(signal.SIGINT, quitter)

# Installation de la gestion de changement d'état

GPIO.add_event_detect(40, GPIO.RISING, callback=detection)

# Message

print "En attente de détection..."

# Boucle sans fin

while True:

time.sleep(10)

Pour récupérer le PID de gPhoto, nous utilisons tout simplement la commande pidof présente dans le système et convertissons le résultat en valeur numérique. La technique utilisée est cel e du try/catch permettant de tenter une opération et de réagir à une éventuel e erreur (exception). Si tel est le cas, ceci signifie que

gPhoto n’est pas lancé et nous

arrêtons là l’exécution du script.

Autre point intéressant du

Une alimentation, une masse et

une broche GPIO en entrée... Il

script, nous mettons en place

n’en faut pas plus pour pouvoir

un gestionnaire de signaux pour

détecter des mouvements avec

« attraper » un SIGINT décou-

une Raspberry Pi et déclencher

lant d’un CTRL+C. Si ce signal

des prises de vue... ou toute

sorte d’actions intéressantes.

arrive, c’est la fonction associée

quitter() qui s’en chargera et

utilisera le PID de gPhoto pour

lui envoyer un SIGTERM pour

le « terminer » avant de stopper

l’exécution du script.

Enfin, dernier ajout pour un

minimum de suivi des opéra-

tions, nous récupérons l’heure

courante dans la fonction

detection() afin de faire pré-

céder le message de détection

de ces données utiles.

Il ne nous reste plus qu’à

enregistrer tout cela, lancer

gPhoto comme détail é précé-

demment puis à lancer notre

script :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 84

HACKABLE MAGAZINE n°14

Prenez des clichés automatiquement en cas de détection de mouvement $ ./motion2.py

gPhoto présent. PID = 3346

En attente de détection...

08/18/16 12:00:50 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:01:08 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:01:23 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:01:38 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:02:10 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:02:27 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:02:44 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:03:14 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:03:29 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:03:46 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

08/18/16 12:04:00 - Mouvement Détecté ! Envoi SIGUSR1 à 3346

À chaque détection par le capteur PIR, une photo sera prise automatiquement. Et le plus admirable dans tout cela, c’est qu’il nous est parfaitement possible d’utiliser les informations du précédent article afin de traiter automatiquement ces clichés, au fur et à mesure qu’ils sont faits, afin de les formater, les dater et les archiver. .

4. LIMITATIONS ET PERSPECTIVES

Les résultats dépendront de vos objectifs concernant cette technique. Le délai de propagation de l’évènement, par exemple, peut être problématique. Si par exemple, vous souhaitez capturer des clichés d’animaux sauvages (rongeur, oiseaux, etc.), la vitesse à Le dôme de plastique des

laquel e la photo sera prise peut être insuffisante. On peut difficilement réduire le délai modules est en réalité

d’exécution du script et on tentera surtout de traiter le problème côté APN. La prise de une lentille permettant de

vue automatique induit forcément un délai et un passage en manuel pourra être une concentrer les rayonnements

infrarouges sur le capteur

bonne approche. Le fait de stocker la photo sur l’appareil, et d’utiliser --trigger-pyroélectrique. Ceci

capture plutôt que --capture-image-and-download aidera aussi grandement.

nous paraît opaque ou

translucide, mais est

Toujours dans le créneau de la photographie animalière, il pourra être souhaitable en réalité totalement

d’opter pour une configuration en retriggerable ou non retriggerable, sachant que dans transparent aux IR de la

le cas d’un reflex numérique le bruit du miroir lors de la prise de vue bonne longueur d’onde...

risque de faire fuir votre sujet. Il pourrait être ainsi souhaitable d’induire délibérément un délai entre la détection de mouvement et la prise de vue, pour s’assurer de l’immobilité de l’animal photographié. Mais ceci n’est en rien une science exacte. .

Enfin, le capteur PIR n’est pas la seule façon de détecter une

présence. D’autres modules peuvent ainsi être utilisés, voire

plusieurs modules et capteurs de concert, permettant au script de décider de la façon et du moment de prendre des photos. On peut

également envisager de changer les paramètres de prise de vue de

l’APN en fonction du moment dans une journée ou des conditions

environnementales (luminosité, température, etc.).

Il y a suffisamment de ports sur une Raspberry Pi pour créer un

système de détection et de décision complet pour bien des usages.

La limite, comme souvent, n’est que votre imagination. . DB

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

85

EMBARQUÉ & INFORMATIQUE

WIFI

VOTRE RASPBERRY PI EN

PONT WIFI/ETHERNET

Denis Bodor

Créer un point d’accès wifi avec une Raspberry Pi est quelque chose de relativement simple. L’objectif est généralement de fournir une connectivité vers la Pi et éventuellement d’en faire un point d’accès vers Internet pour des périphériques sans fil. La méthode généralement décrite consiste à créer un réseau Wifi d’une part et se connecter à un réseau filaire différent de l’autre. Il existe cependant une autre solution : créer un pont ou bridge en anglais...

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 86

HACKABLE MAGAZINE n°14

Votre Raspberry Pi en pont Wifi/Ethernet

Un point d’accès permet non seulement de garder une correspondance wifi classique

entre machines (interface Ethernet) et adresses,

se compose

mais également de limiter les connexions aux seules

généralement

machines déjà connues. Ce n’est pas une vraie

de plusieurs

mesure de sécurité, mais cela permet de conserver

éléments : un outil permettant

un minimum d’ordre et surtout de me connecter aux

l’authentification des connexions,

machines via une simple adresse fixe (sans avoir

un serveur distribuant des

recours à des protocoles de résolution comme DNS,

adresses IP et une solution

mDNS, etc.).

pour faire transiter et filtrer les

Dans un tel scénario, l’ajout d’un point d’accès wifi

données du réseau Wifi vers le

(ou même plusieurs) disposant de son propre réseau

réseau filaire et inversement.

n’est pas forcément le plus logique. Il est plus simple

Une instal ation réseau

d’avoir un seul serveur (DHCP) distribuant les adresses

standard cependant comprend

et les configurations IP, regroupant les adresses pour

généralement déjà un accès

toutes les machines du réseau, filaire et wifi. Il n’existe

à Internet sous la forme d’une

qu’un endroit où cet « annuaire » existe et où l’on peut

Box ou d’un routeur câble. Le

facilement apporter des modifications. Il faut donc, en

fait d’instal er un point d’accès

principe, qu’un périphérique wifi fasse partie du même

de cette manière revient donc

réseau que les machines connectées en Ethernet et de

à créer un second réseau local

ce fait les rende accessibles de la même manière d’un

et à le connecter avec celui

point à l’autre du réseau.

déjà existant. On a donc une

interconnexion de deux réseaux

Le point d’accès ne doit alors pas être un point de

distincts et une passerel e/routeur

connexion entre deux réseaux, mais un simple pont ne

entre les deux.

faisant que relayer les données d’un média (sans fil) à un

autre (filaire). Il ne s’agit plus de deux réseaux, mais de

Pour bien comprendre l’intérêt

deux segments d’un même réseau et le point de jonction

d’utiliser une autre méthode,

est un pont ou bridge en anglais.

plantons un peu le décor pour

que vous ayez une idée de

la situation et de certaines

préférences qui sont les miennes.

1. PRÉLIMINAIRE

Avant toutes choses, je pars

Nous partons ici du principe que, dans un premier

du principe qu’un réseau filaire

temps, la Raspberry Pi n’aura pour objectif que de servir

est, par définition, mieux qu’un

de point d’accès et de bridge vers le réseau filaire. La

réseau wifi. Ainsi, la très grande

carte utilisée ici est une Pi 1 ou en d’autres termes le tout

majorité des connexions réseau

premier modèle disponible (avec carte SD et connecteur

sont filaires et ce n’est que pour

RCA vidéo). Cel e-ci sera équipée d’un adaptateur wifi

quelques périphériques que

Linksys WUSB54GC presque tout aussi ancien.

je suis dans l’obligation de me

rabattre sur le wifi, car ils ne

La carte SD utilisée a été fraîchement effacée

disposent pas de connectivité

et initialisée avec une image récente de Raspbian

Ethernet.

Jessie Lite 4.4 (du 27/05/2016). Aucune fonctionnalité

spécifique n’est nécessaire et le tout a été configuré

Sur un tel réseau, les

sans interface graphique, avec un minimum de mémoire

adresses des machines sont

pour le processeur graphique et quelques outils

attribuées individuel ement de

standards facilitant la configuration (Vim, Midnight

façon non dynamique. Cela

Commander, etc.).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

87

EMBARQUÉ & INFORMATIQUE

WIFI

L’architecture générale d’un réseau

local avec un accès Internet et

un point d’accès wifi peut être le

Après un premier redémarrage post configuration (locales, fuseau

suivant. Nous avons en B le réseau

horaire, etc.), le système a été mis à jour avec sudo apt-get update local filaire, en C Internet (le reste

du monde) derrière un routeur ou

et sudo apt-get dist-upgrade et enfin, les paquets suivants ont été une box et en A, le plus souvent,

instal és :

un autre réseau en wifi. Le point

d’accès s’occupe de faire la liaison

• hostapd pour la gestion du point d’accès ;

entre les machines des réseaux

A et B via une technique appelée

• bridge-utils pour la configuration en tant que bridge.

NAT. Mais si le point d’accès est

Il conviendra également de supprimer le paquet préinstal é avahi-configuré en bridge, A et B forment

alors un même réseau et ne sont

daemon, un outil de configuration automatique utilisant les protocoles que deux segments de ce dernier.

Zeroconf. Ceci ne nous est d’aucune utilité ici et risque même de Exactement comme si le point

perturber nos manipulations. Il en va de même pour dhcpcd5.

d’accès était un simple hub/switch

Ethernet, les périphériques wifi et

les machines du LAN sont sur un

même réseau IP.

2. CRÉER LE POINT D’ACCÈS WIFI

La première étape consiste à configurer le point d’accès. Le nom de l’interface wifi dépendra du matériel utilisé. Ici, l’adaptateur Linksys utilise une puce Ralink rt73 et un firmware est nécessaire pour le faire fonctionner. Celui-ci, sous la forme du fichier /lib/firmware/rt73.bin est fourni par le paquet firmware-ralink instal é par défaut avec Raspbian comme bien d’autres firmwares. Nous n’avons donc rien à faire si ce n’est de connecter le périphérique et laisser le système faire son travail.

Il suffira alors d’utiliser la commande sudo ifconfig -a (ou ip link show) pour obtenir la liste des interfaces réseaux disponibles et repérer cel e correspondante, ici wlan0.

On pourra ensuite se tourner vers l’écriture du fichier /etc/hostapd/

hostapd.conf :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 88

HACKABLE MAGAZINE n°14

Votre Raspberry Pi en pont Wifi/Ethernet

# interface à utiliser

interface=wlan0

# pilote

driver=nl80211

# SSID en UTF8

utf8_ssid=1

# nom de l'AP

ssid=coucouAP

# mode Wifi

hw_mode=g

# canal à utiliser

channel=3

# on accepte toutes les MAC

macaddr_acl=0

# on accepte que OSA

auth_algs=1

# on ne cache pas le SSID

ignore_broadcast_ssid=0

# chiffrement WPA2

wpa=2

# la phrase secrète

wpa_passphrase=monmot2passe

# gestion PSK

wpa_key_mgmt=WPA-PSK

# chiffrement TKIP pour WPA

wpa_pairwise=TKIP

# chiffrement CCMP pour WPA2

rsn_pairwise=CCMP

# config en bridge

bridge=br0

Cette configuration est très similaire à cel e déjà utilisée dans les articles de Hackable n°6 (point d’accès Tor) et 8 (base de col ecte de sondes de température). Les commentaires du fichier parlent d’eux-mêmes. La ligne très importante est bridge=br0. Cel e-ci indique au démon HostAP qu’il doit ajouter cette interface dans le bridge br0 après sa configuration.

Enfin, pour que le service HostAP se lance correctement au démarrage de la Pi, nous devons éditer le fichier /etc/default/hostapd et spécifier le chemin et le nom du fichier de configuration à utiliser :

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Ceci fait, vous pourrez (re)démarrer le démon HostAP avec sudo service hostapd start et votre point d’accès sera créé. Il devrait être immédiatement visible depuis un périphérique wifi. La connexion après saisie du mot de passe devrait également fonctionner, mais le périphérique n’obtiendra pas d’adresse et vous recevrez alors une erreur.

C’est normal, nous n’avons absolument rien instal é permettant de répondre à une requête DHCP, utilisée pour obtenir la configuration réseau et l’adresse IP. Ceci ne sera pas une tâche pour la Raspberry Pi puisque l’idée est précisément de connecter entre el es les interfaces eth0 et wlan0 pour former un unique réseau « physique ».

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

89

EMBARQUÉ & INFORMATIQUE

WIFI

3. CONFIGURER LE BRIDGE

La notion de pont ou de bridge est relativement simple puisqu’il suffit d’imaginer cela comme un switch réseau logiciel. Ainsi, de la même manière que vous connectez plusieurs câbles Ethernet sur un switch physique pour relier entre el es des machines, un bridge connecte plusieurs interfaces réseau d’une seule et même machine. Ce qui circule sur une interface sera propagé à l’autre et inversement.

Tout ceci se configurera dans le fichier /etc/network/interfaces :

#interface à activer

auto lo br0

# interface virtuelle loopback

iface lo inet loopback

# interface Ethernet

iface eth0 inet manual

# interface Wifi

iface wlan0 inet manual

# Le bridge

iface br0 inet dhcp

bridge_ports eth0

bridge_hw b8:27:eb:5c:06:c5

# wlan0 est ajouté par hostapd

Les interfaces eth0 et wlan0 sont présentes, mais on précise une configuration manuel e. Aucune adresse IP ou configuration réseau via DHCP n’est configurée, ces interfaces ne sont là que pour être des composants du bridge. Celui-ci dispose de sa propre interface sous le nom br0 qui est configurée pour obtenir une adresse via DHCP. L’adresse matériel e (MAC) utilisée pour br0 sera l’adresse la plus petite de toutes les interfaces composant le bridge.

Ceci peut être une source de problèmes dans certaines situations et mieux vaut limiter les risques. La solution consiste à utiliser bridge_hw en spécifiant l’adresse matériel e de l’interface eth0 (qu’on peut obtenir avec ifconfig ou ip link). L’interface représentant le bridge ne peut prendre qu’une adresse matériel e de l’une des interfaces qui le compose, vous ne pouvez pas mettre n’importe quoi et devez impérativement copier/col er ce que vous retourne ifconfig ou ip link.

Notez que dans la configuration, nous utilisons bridge_ports qu’avec eth0 et non en spécifiant toutes les interfaces utilisées comme on le fera pour bridger eth0 et eth1 sur un PC par exemple. HostAP ajoute en effet lui-même wlan0 lorsque le point d’accès est configuré.

Après redémarrage, tout sera automatiquement mis en place : le point d’accès sera configuré, le bridge sera créé et une adresse IP ainsi qu’une configuration réseau seront demandées via DHCP. Le serveur DHCP (spécifique ou celui d’une box) va déterminer la configuration puis répondre à la requête et l’interface sera alors configurée. Vous pouvez jeter un œil à la configuration du bridge avec la commande : Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 90

HACKABLE MAGAZINE n°14

Votre Raspberry Pi en pont Wifi/Ethernet

pi@raspberrypi:~ $ brctl show

bridge name bridge id STP enabled interfaces

br0 8000.b827eb5c06c5 no eth0

wlan0

pi@raspberrypi:~ $ ifconfig

br0 Link encap:Ethernet HWaddr b8:27:eb:5c:06:c5

inet adr:192.168.10.160 Bcast:192.168.10.255 Masque:255.255.255.0

adr inet6: fe80::ba27:ebff:fe5c:6c5/64 Scope:Lien

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:188 errors:0 dropped:0 overruns:0 frame:0

TX packets:114 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 lg file transmission:1000

RX bytes:19588 (19.1 KiB) TX bytes:15441 (15.0 KiB) eth0 Link encap:Ethernet HWaddr b8:27:eb:5c:06:c5

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:193 errors:0 dropped:0 overruns:0 frame:0

TX packets:114 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 lg file transmission:1000

RX bytes:19818 (19.3 KiB) TX bytes:16753 (16.3 KiB) lo Link encap:Boucle locale

inet adr:127.0.0.1 Masque:255.0.0.0

adr inet6: ::1/128 Scope:Hôte

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 lg file transmission:1

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wlan0 Link encap:Ethernet HWaddr 00:22:6b:a9:32:90

adr inet6: fe80::222:6bff:fea9:3290/64 Scope:Lien

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:80 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 lg file transmission:1000

RX bytes:0 (0.0 B) TX bytes:10197 (9.9 KiB)

Si, à présent, vous vous connectez en wifi à votre point d’accès, votre périphé-

rique dialoguera avec HostAP pour négocier la connexion chiffrée. Une fois authentifié, il enverra une requête DHCP pour obtenir la configuration réseau. Cel e-ci passera du wifi au réseau filaire et se propagera sur votre réseau local pour finalement arriver au serveur DHCP qui va la traiter. Votre périphérique wifi fera alors partie du même réseau local.

La différence avec un point d’accès fournissant une adresse IP lui-même est le niveau de fonctionnement de la passerel e. Un bridge fonctionne au niveau de la couche « liaison » (2) alors que l’autre solution fonctionne sur la couche « réseau »

(3) et implique de manipuler les paquets avec Netfilter (iptables) et faire ce qu’on appel e du NAT (Network Address Translation ou traduction d’adresse réseau).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

91

EMBARQUÉ & INFORMATIQUE

WIFI

Ceci signifie également que le périphérique wifi utilisé sera directement accessible sans autre forme de procédé depuis n’importe quel e machine du réseau local. Si ce périphérique est une autre carte Raspberry Pi, par exemple, il suffira d’utiliser son adresse IP pour s’y connecter en SSH et obtenir une ligne de commandes.

Dédier une Raspberry

Pi à ce type d’usage

peut sembler être

du gâchis. Mais en

y réfléchissant bien,

4. PETIT BONUS : METTRE DES ICÔNES

un point d’accès wifi

capable de fonctionner

DANS LE NOM DU POINT D’ACCÈS

en bridge vous coûtera

plus cher qu’une

Nous avons plusieurs fois parlé dans ces pages de points d’accès wifi, mais vieille Pi de première

saviez-vous qu’il est possible d’utiliser des symboles dans le nom du point d’accès et génération et un

non simplement du texte ? En effet, le SSID peut être composé de jusqu’à 32 carac-adaptateur USB wifi plus

tères UTF-8. Or l’ensemble des caractères UTF-8, déjà utilisés par plus de 86%

vieux encore. De plus,

rien ne vous empêche

des sites Internet, contient bien plus que des signes pour différentes langues. On y par la suite d’ajouter

trouve aussi de sympathiques pictogrammes, des icônes et des emoji/émoticônes d’autres services pour

(https://fr.wikipedia.org/wiki/Emoji).

compléter l’installation

ou de multiplier les

Pour la petite histoire, je me suis rendu compte de cela d’une façon fort amusante points d’accès avec des

après avoir regardé un épisode de Doctor Who et plus exactement l’épisode 6 de configurations distinctes

la saison 7, « The Bel s of Saint John » où de mystérieux points d’accès capturent (certains adaptateurs

peuvent supporter

et téléchargent l’esprit des gens dans un cloud. Les points d’accès sont nommés plusieurs SSID avec

HostAP).

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 92

HACKABLE MAGAZINE n°14

Votre Raspberry Pi en pont Wifi/Ethernet

Voici quelques exemples

d’affichage d’un SSID (nom

par des symboles géométriques et tout naturel ement je me suis demandé s’il de point d’accès) utilisant

n’était pas possible de faire de même (utiliser des symboles, non capturer l’esprit des caractères UTF-8.

Sur une smartwatch Gear

des gens). Et il se trouve que je n’étais pas le seul à me poser la question, il est S2 sous Tizen, avec un

effectivement possible de nommer son point d’accès avec toute une gamme de iPhone ou encore avec

caractères amusants !

un widget sur Android.

Remarquez que si les

Pour faire cela, il vous suffit d’éditer le fichier de configuration de HostAP et symboles sont relativement

d’y placer les caractères UTF-8 de votre choix. Bien entendu, il faut que votre proches, chaque système

éditeur de texte soit compatible UTF-8 et vous pourrez alors très simplement les affiche de façon

sensiblement différente.

copier/col er des symboles depuis, par exemple, votre navigateur web (connexion Avec un matériel ne

en SSH, locales configurées en fr_FR.UTF-8, Vim et copier/col er à la souris sachant pas afficher de

fonctionne très bien).

l’UTF-8, le nom cependant

apparaîtra comme une

La seule chose à ne pas oublier est d’ajouter une ligne utf8_ssid=1 dans le longue série de caractères

fichier de configuration et vous pourrez laisser libre cours à votre imagination. En cryptiques et vides de

fonction de la plateforme cliente, certains caractères apparaîtront même sous sens...

la forme de petites icônes en couleur. J’ai fait des tests avec une tablette Nvidia Shield sous Android 6, un iPhone 5, une Gear S2 et un Samsung Z3 sous Tizen et le rendu est systématiquement impressionnant !

Certains utilisateurs semblent ne pas arriver à saisir directement les caractères dans le fichier de configuration. Une alternative possible pour arriver au même résultat consiste à spécifier la valeur hexadécimale de chaque octet de chaque caractère en le faisant précéder de \x. \xe2\x98\x94 produira ainsi le caractère U+2614, ou en d’autres termes l’icône d’un parapluie sous la pluie.

C’est plus fastidieux, mais si vous rencontrez des difficultés, ce sera la voie à suivre. DB

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

93

TENSIONS & COURANTS

ALIMENTATION

INTÉGRER L’ARDUINO

DANS UNE RÉGLETTE

LUMINEUSE : ATTENTION

À L’ALIMENTATION !

Denis Bodor

Dans le numéro précédent, nous avons vu comment modifier une réglette afin de remplacer d’ennuyeuses leds blanches par 72 leds « intelligentes »

RVB de façon à pouvoir piloter l’état de chaque led individuellement et ainsi créer des animations avec une carte Arduino. Une évolution possible du projet consiste à utiliser une carte Arduino Nano ou Leonardo Micro pour l’intégrer directement dans la réglette. Mais attention ! Une carte Arduino ne s’alimente pas n’importe comment !

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 94

HACKABLE MAGAZINE n°14

Intégrer l'Arduino dans une réglette lumineuse : attention à l'alimentation !

Notre projet initial,

en dehors de la

modification de

la réglette el e-

même, consistait

tout simplement à contrôler 72

leds WS2812b assemblées en

ruban avec une Arduino UNO. Le

ruban demande beaucoup de cou-

rant et ne peut être alimenté par la

broche +5V de la carte Arduino. Il

dispose donc d’une alimentation

propre qui n’est pas reliée à la

carte. Seule la masse est com-

mune au ruban, à la carte et à la

connexion USB (c’est normal, c’est

la masse, la référence 0V de tout

le circuit).

En cherchant à intégrer une

carte Arduino de faible dimen-

sion dans la réglette, comme une

Nano, un problème pratique se

pose : si la carte est dans l’objet,

Voici trois façons

communiquer avec el e, aussi bien pour la

envisageables

mieux vaut éviter d’avoir recours

programmer que pour faire dialoguer un cro-

d’alimenter des leds

à deux alimentations électriques,

quis avec, par exemple, le moniteur série de

WS2812b et une carte

une pour le ruban et une pour

Arduino. L’option

l’environnement de développement. Le cou-

la carte. Il faut donc trouver un

A repose sur le fait

rant théorique maximum via cette connexion

d’alimenter la carte via

moyen d’alimenter les deux par-

est de 500mA.

USB avec un PC, ceci

ties avec une seule source.

n’est utilisable que si le

• Le connecteur JACK. Celui-ci est destiné

nombre de leds est très

à la connexion d’une alimentation externe

faible (< 8). L’option B

1. COMMENT

sous la forme d’un bloc secteur fournissant

permet d’alimenter les

leds avec un adaptateur

PEUT ÊTRE

un courant continu entre 250mA et 1A avec

secteur alors que

une tension située entre 9 et 12V. En prin-

l’Arduino est alimenté

ALIMENTÉE UNE

cipe, la plage de tensions se situe entre 7 et

via USB. Notez que la

20V, mais la documentation recommande

broche 5V de l’Arduino

CARTE ARDUINO

n’est PAS connectée

toutefois 9-12V. Derrière ce connecteur se

aux leds. Enfin, l’option

trouvent une diode de protection (assurant

C est celle retenue ici.

Si nous prenons l’exemple

contre l’inversion de polarité) et un régulateur

Aucune alimentation

de l’Arduino UNO, nous avons

n’est fournie via USB et

de tension fournissant le courant au reste de

plusieurs connexions permettant

les leds comme la carte

la carte. Alimenter la carte via ce connecteur

d’alimenter le microcontrôleur

sont alimentées par le

permet de disposer de plus de courant pour

bloc secteur.

qu’el e intègre :

vos montages utilisant alors la broche 5V

• Le port USB. C’est l’alimenta-

pour la connexion de modules et compo-

tion sans doute la plus utilisée

sants externes. Il reste possible d’utiliser le

qui permet à la fois de fournir

connecteur USB avec ce type d’alimentation,

du courant à la carte et de

aussi bien pour la programmation que pour

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

95

TENSIONS & COURANTS

ALIMENTATION

Une carte Arduino

Nano est suffisamment

petite pour pouvoir se

glisser dans la réglette.

L’alimentation unique

pour les leds et la carte

nous permettent de faire

fonctionner le croquis

sans connexion USB.

Notez le gros rectangle

noir en bas, il s’agit

d'une gaine thermo-

rétractable isolante dans

laquelle sera ensuite

glissée l’Arduino avant

d’être collée dans la

réglette.

le moniteur série. Notez que sur les Arduino disposant de

• La broche 5V. Cel e-ci est

ce connecteur, un circuit spécifique, composé d’un amplifi-

connectée directement à la ou

cateur opérationnel (LM358) et d’un MOSFET, coupe auto-

les broches d’alimentation du

matiquement l’alimentation USB si une tension est présente

microcontrôleur. Il n’y a au-

entre la diode et le régulateur (point Vin).

cune protection à ce niveau.

Comme il s’agit d’un point de

• La broche Vin. Cette broche est connectée à un point situé

connexion se trouvant après

avant le régulateur, mais après la diode de protection. El e

le régulateur, c’est un accès

possède deux usages. Comme entrée pour l’alimentation

direct au « bus » d’alimenta-

pour fournir du courant au régulateur indépendamment du

tion 5V de l’ensemble de la

connecteur JACK, et comme sortie pour fournir du courant

carte. Cette broche, comme

à la tension appliquée sur le connecteur JACK, moins la

Vin, peut être utilisée à la fois

chute de tension de la diode dans le sens passant (sens

pour fournir du courant à des

direct). En cas d’alimentation via cette broche, il est absolu-

composants externes ou pour

ment hors de question de connecter une alimentation sur la

alimenter la carte, mais avec

prise JACK. Le circuit de protection coupant l’alimentation

une tension bien régulée.

USB en cas de tension sur Vin n’est présent que sur les

Arduino disposant d’un connecteur JACK, ce qui n’est pas

Notez que la broche marquée

le cas, par exemple, sur Arduino Nano qui se satisfait d’une

3.3V ne doit en aucun cas être uti-

diode Schottky entre la tension d’alimentation USB et la

lisée pour alimenter la carte ou le

tension d’alimentation 5V de toute la carte (diode qui peut

microcontrôleur. Cette tension, sur

être absente sur certains clones chinois à bas prix).

beaucoup de cartes Arduino, est

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 96

HACKABLE MAGAZINE n°14

Intégrer l'Arduino dans une réglette lumineuse : attention à l'alimentation !

fournie directement par un second

en l’absence d’une raison spécifique et

régulateur et permet uniquement

parfaitement légitime, on ne connecte jamais

d’alimenter des composants en

les sorties de plusieurs sources d’alimentation

3,3V. C’est une très mauvaise idée

entre el es.

d’appliquer une tension sur la sor-

Voici donc que la solution apparaît d’el e-

tie de bon nombre de régulateurs.

même, nous n’avons plus que la broche 5V

dans notre épuisette, ou en d’autres termes,

le bus d’alimentation lui-même. Ceci implique

2. RETOUR À LA

deux choses importantes :

RÉGLETTE ET AU

• Il faut que le courant soit « propre » et

la tension bien régulée, ce qui implique

RUBAN DE LEDS

généralement l’utilisation d’un ou plu-

sieurs condensateurs de filtrage/décou-

En résumé, sur une Arduino

plage entre la tension d’alimentation et

UNO, on peut utiliser l’alimentation

la masse, en plus d’une source fiable et

USB ou le connecteur JACK sans

stable. C’est quelque chose qu’il est déjà

problème lors de la programma-

important de mettre en place lorsqu’on

tion de la carte. Sur une Nano

alimente une ou plusieurs WS2812b et

en revanche nous n’avons pas

cela ne changera donc pas notre circuit et

de JACK, mais uniquement la

nos besoins.

broche Vin. Cependant, ceci ne

nous est d’aucune utilité puisque

• Il ne faut en aucun cas que les tensions

le ruban de leds doit être alimenté

5V et VUSB se « mélangent ». Sur une

en 5V. Ceci est insuffisant pour

carte Arduino Nano officiel e, ceci est

Vin puisque la tension en entrée

garanti par la fameuse diode Schottky

Pour nous assurer de

du régulateur doit être supérieure,

(temps de commutation très court et seuil

l’absence de problème

avec ce montage et

souvent d’un minimum de 1V, à la

de tension directe très bas), mais j’ai déjà

éventuellement d’autres,

tension en sortie.

eu le loisir, ou la déplaisante surprise, de

un adaptateur USB

constater que cette diode n’est pas tou-

mâle/femelle type A est

Il ne nous reste donc plus que

jours présente sur les clones les moins

assemblé avec, sur la

l’USB et la broche 5V pour régler

chers. De plus, ceci ne fait que protéger le

ligne d’alimentation, un

notre problème. Notre objectif

interrupteur permettant au

PC d’une surtension côté montage et non

choix de fournir ou non du

est d’alimenter les leds ET la

courant au périphérique.

carte avec une seule

source en 5V fournissant

suffisamment de courant

pour l’ensemble des

WS2812b. La tension

d’alimentation via USB,

nommée VUSB, n’est

pas accessible sous la

forme d’une broche et

ceci serait une mauvaise

idée, car le PC fournit

également une tension

de +5V via l’USB.

De façon générale,

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) HACKABLE MAGAZINE n°14

97

TENSIONS & COURANTS

ALIMENTATION

TOUJOURS DISPONIBLE !

LE 1ER HORS-SÉRIE DE HACKABLE !

l’inverse étant donné l’orientation de la diode

plus, une résistance de 470 ohms

(et certains câbles USB non blindés sont de

et une led rouge entre la masse

véritables antennes).

et la ligne d’alimentation après

Il faut également prendre en compte un autre

l’interrupteur, permettant de n’avoir

point : en n’alimentant pas le montage avec le

aucun doute quant à la coupure

bloc d’alimentation et en connectant la carte

de la ligne d’alimentation (je me

Arduino en USB, cel e-ci va tenter d’alimenter le

connais, alors je suis prudent).

ruban de leds, mais sera incapable de fournir le

En conséquence, le fonctionne-

courant adéquat.

ment est le suivant :

La solution que j’ai donc adoptée est la sui-

• une seule et unique alimenta-

vante : alimenter le montage complet (ruban et

tion fournie le courant pour les

Nano) avec le bloc d’alimentation de 5V/10A et

leds et la carte Arduino et le

utiliser un câble USB modifié pour connecter

projet est autonome ;

ponctuel ement l’ensemble au PC pour une mise

à jour du croquis. La modification du câble USB

• le montage ne peut être pro-

Taraudé par

l’existence d’un

est fort simple puisqu’il suffit de couper le connec-

grammé en USB que s’il est

risque de mauvaise

teur d’alimentation (rouge) qui s’y trouve.

sous tension et alimenté avec

le bloc de 10A ;

manipulation, je

n’ai pu m’empêcher

En poussant l’idée un rien plus avant, j’en suis

d’ajouter une

arrivé à assembler un petit adaptateur USB A

• je peux également déconnec-

résistance et une

mâle vers USB A femel e équipé d’un interrup-

ter l’alimentation du projet,

led à l’adaptateur,

teur sur la ligne d’alimentation me permettant

débrancher le ruban et utiliser

connectés entre

la masse et

d’alimenter ou non un périphérique USB en

un câble USB standard si

l’alimentation côté

fonction de mes besoins. Ceci permet alors d’uti-

nécessaire.

VOUS UTILISEZ

périphérique. Ainsi

liser n’importe quel câble USB adapté à la carte

je sais, avant de

Arduino utilisée (type B pour la UNO, type mini-B

DÉJÀ LA

brancher quoi

que ce soit, si le

pour la Nano ou type micro-B pour la Leonardo).

3. UN DERNIER

périphérique sera

Une évolution suivante de l’adaptateur intègre, de

RASPBERRY PI ?

ou non alimenté via

MOT

USB.

Ce projet est loin d’être terminé.

METTEZ-VOUS

La monopolisation d’une carte

Arduino dans le seul but d’animer

les leds revient à délibérément

À L’ARDUINO !

ignorer les entrées/sorties hon-

teusement inutilisées. En ajoutant

une RTC, la barre pourra donner

l’heure. Un capteur de température

ou d’humidité fera de cette barre

un indicateur de confort original.

Utiliser une entrée analogique

nous permettra d’échantil onner un

signal audio et créer un vumètre. Et

enfin, connecter un module Wifi ou

Bluetooth nous offrirait un contrôle

à distance depuis un PC, un smart-

phone ou une smartwatch. À suivre

donc... DB

TOUJOURS DISPONIBLE SUR :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) www.ed-diamond.com

98

HACKABLE MAGAZINE n°14

pub_magazines_aout2016.indd 10

19/08/2016 15:54

TOUJOURS DISPONIBLE !

LE 1ER HORS-SÉRIE DE HACKABLE !

VOUS UTILISEZ

DÉJÀ LA

RASPBERRY PI ?

METTEZ-VOUS

À L’ARDUINO !

TOUJOURS DISPONIBLE SUR :

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) www.ed-diamond.com

pub_magazines_aout2016.indd 10

19/08/2016 15:54

INFORMATI INFORMATICIENS

INFORMA

CIENS

TICIENS

rejoignez la douane !

rejoignez la douane !

rejoignez la douane !

Mettez vos talen M

tset

tez

a v

u o

s

sta

ele

rnt

vsi au

c s

e er

vice

Mettez vos talents au service

de la protection d

de l

u a p

t ro

e te

r c

d

r tiio

etn

d

oiu

rterr

. itoire.

la protection du territoire.

RÉSEAU INTERNATIONAL DE LA DOUANE

RÉSEAU INTERNATIONAL DE LA DOUANE

RÉSEAU INTERNATIONAL DE LA DOUANE

]]w]w

]]w]w

]]w]w

PROTÉGER

PROTÉGER

PROTÉGER

LES CITOYENS ET

LES CITOYENS ET

LES CITOYENS ET

L’ENVIRONNEMENT

]w]ww

L’ENVIRONNEMENT

]w]ww

L’ENVIRONNEMENT

]w]ww

V A L I D A T I O N

V A L I D A T I O N

V A L I D A T I O N

PARTICIPER PARTICIPER

PARTICIPER

AU FINANCEMENT

AU FINANCEMENT

AU FINANCEMENT

DES SERVICES

DES SERVICES

DES SERVICES

PUBLICS

PUBLICS

PUBLICS

R E C H E R C H E c

R E C H E R C H E c

R E C H E R C H E c

ACCOMPAGNER LES ACTEURS

ACCOMPAGNER LES ACTEURS

ACCOMPAGNER LES ACTEURS

DU COMMERCE MONDIAL

DU COMMERCE MONDIAL

DU COMMERCE MONDIAL

Contactez Infos Douane Service

Contactez Infos Douane Service

Contactez Infos Douane Service

#LaDouaneRecrute Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com)

#LaDouaneRecrute

Sur iOS et Android :

@

Sur iOS et Android :

douane_france

@douane_france

#LaDouaneRecrute

Sur iOS et Android :

@douane_france

douanefrance.mobi

douanefrance.mobi

douane.gouv.fr / recrutement

douane.gouv.fr / recrutement

douanefrance.mobi

douane.gouv.fr / recrutement

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com)

Document Outline

- tizen_l_autre_plateforme_mobile_opensour

- le_pourquoi_du_comment

- disponibilite_du_materiel

- carence_d_applications

- conclusion

- un_affichage_sur_papier_electronique_pou

- la_technologie_du_papier_electronique

- ecran_waveshare_4_3_pouces

- utilisation_de_l_ecran

- un_mot_a_propos_des_images_et_des_police

- conclusion_et_avis

- controlez_votre_appareil_photo_numerique

- materiel_utilise_pour_l_article

- premieres_manipulations

- gerer_les_fichiers

- pour_conclure

- votre_raspberry_pi_en_pont_wifi_ethernet

- preliminaire

- creer_le_point_d_acces_wifi

- configurer_le_bridge

- petit_bonusmettre_des_icones_dans_le_nom

- integrer_l_arduino_dans_une_reglette_lum

- comment_peut_etre_alimente_une_carte_ard

- retour_a_la_reglette_et_au_ruban_de_leds

- un_dernier_mot

- creez_un_moniteur_de_temperature_et_d_hy

- le_principe

- ce_qu_il_vous_faut

- le_montage

- le_croquis

- a_propos_du_croquis

- conclusion

- le_c.h.i.ple_tueur_de_framboise

- le_chip

- les_dip

- pocketchip

- mise_a_jour_du_chip

- conclusion_avis_et_reponse

- manipuler_et_traiter_automatiquement_vos

- imagemagick

- pour_se_faire_la_main

- un_peu_de_script_shell

- l_option_des_scripts_avec_gphoto

- un_cas_pratiquehorodater_les_cliches_d_u

- pour_finir

- prenez_des_cliche_automatiquement_en_cas

- les_capteurs_pir

- assemblage_des_composants

- code_et_commandes

- premier_essai

- ajoutons_gphoto

- limitations_et_perspectives

Table of Contents

tizen_l_autre_plateforme_mobile_opensour

le_pourquoi_du_comment

disponibilite_du_materiel

carence_d_applications

conclusion

un_affichage_sur_papier_electronique_pou

la_technologie_du_papier_electronique

ecran_waveshare_4_3_pouces

utilisation_de_l_ecran

un_mot_a_propos_des_images_et_des_police

conclusion_et_avis

controlez_votre_appareil_photo_numerique

materiel_utilise_pour_l_article

premieres_manipulations

gerer_les_fichiers

pour_conclure

votre_raspberry_pi_en_pont_wifi_ethernet

preliminaire

creer_le_point_d_acces_wifi

configurer_le_bridge

petit_bonusmettre_des_icones_dans_le_nom

integrer_l_arduino_dans_une_reglette_lum

comment_peut_etre_alimente_une_carte_ard

retour_a_la_reglette_et_au_ruban_de_leds

un_dernier_mot

creez_un_moniteur_de_temperature_et_d_hy

le_principe

ce_qu_il_vous_faut

le_montage

le_croquis

a_propos_du_croquis

conclusion

le_c.h.i.ple_tueur_de_framboise

le_chip

les_dip

pocketchip

mise_a_jour_du_chip

conclusion_avis_et_reponse

manipuler_et_traiter_automatiquement_vos

imagemagick

pour_se_faire_la_main

un_peu_de_script_shell

l_option_des_scripts_avec_gphoto

un_cas_pratiquehorodater_les_cliches_d_u

pour_finir

prenez_des_cliche_automatiquement_en_cas

les_capteurs_pir

assemblage_des_composants

code_et_commandes

premier_essai

ajoutons_gphoto

limitations_et_perspectives