NE MANQUEZ PAS LA

NOUVELLE FORMULE !

LINUX PRATIQUE N°99

NOUVELLES

RUBRIQUES, ENCORE

+ PRATIQUE !

NOUVEAU :

UN CAHIER

RASPBERRY PI DANS

CHAQUE NUMÉRO !

CREÉZ FACILEMENT VOTRE

MEDIA CENTER

À PARTIR DE VOTRE PC ET/OU VOTRE RASPBERRY PI

ACTUELLEMENT DISPONIBLE

CHEZ VOTRE MARCHAND DE JOURNAUX ET SUR :

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

pub_magazines_dec2016.indd 4

14/12/2016 15:38

ÉDITO

SOMMAIRE

La Raspberry Pi est-el e l’avenir de Linux ?

Voilà une question intéressante. Si el e était posée correc-

ARDU'N'CO

tement ce serait encore mieux. Déjà, on ne dit pas « Linux »,

mais « GNU/Linux », un système reposant sur les outils GNU et

04

utilisant un noyau Linux (na !). Ensuite, il faut définir ce que veut dire un « avenir » pour un tel système. Le Wiktionnaire nous dit

Utilisez une carte SD

que c’est le « Futur, ce qui va arriver ». Là, la question initiale ne avec votre

veut presque plus rien dire. .

Voyons cela autrement. Le système GNU/Linux est depuis

Arduino

un certain temps maintenant massivement utilisé sur Internet.

Quand vous visitez un site web par exemple, il est presque

certain que vous avez affaire à une machine GNU/Linux d’une façon ou d’une autre. Concernant EN COUVERTURE

les PC et postes de travail, les choses n’en sont pas à ce stade et, il faut se rendre à l’évidence, ne le seront sans doute jamais. .

18

Mais la Raspberry Pi a radicalement changé la donne. GNU/Linux est LE système pour utiliser une Pi et parmi vous qui lisez ceci, beaucoup n’ont sans doute jamais essayé une distribu-nRF24L01 :

tion GNU/Linux sur PC ou n’ont peut-être tout simplement pas été convaincus par leur première expérience. Vous êtes donc nombreux à faire connaissance avec ce système grâce à cet e créez une liaison radio longue

adorable framboise. .

distance entre cartes Arduino

Donc non, la Raspberry Pi n’est pas l’avenir de Linux. La Raspberry Pi EST GNU/Linux, pour nombre d’utilisateurs.

Comme vous le savez peut-être, Hackable n’est pas le seul magazine que nous éditons et 30

nous avons dans notre besace Linux Pratique qui depuis 1999 aide ses lecteurs à découvrir Utilisez un nRF24L01 avec votre

et apprivoiser GNU/Linux. Or, faire ses premiers pas dans ce domaine aujourd’hui est aussi très souvent faire ses premiers pas avec sa Pi. C’est pourquoi la publication sœur de Hackable Raspberry Pi

s’adapte pour son numéro 99 et opte pour une nouvel e formule intégrant un cahier Raspberry Pi.

L’idée n’est bien entendu pas de couvrir les mêmes sujets ici et dans Linux Pratique, ni même d’avoir une approche similaire, mais tout simplement de faire bénéficier l’ensemble des RADIO & FRÉQUENCES

utilisateurs GNU/Linux, quel e que soit leur plateforme, de l’expérience des auteurs contribuant au magazine depuis des années. GNU/Linux est bien plus « grand » que Raspberry Pi et bon nombre de connaissances générales, d’astuces, de pratiques, de logiciels, d’outils. . sont tout 36

simplement universels à tous les GNU/Linux.

Pour al er plus loin en

Hackable ne peut, et ne doit d’ail eurs pas, couvrir ces généralités, mais se concentrer sur la bidouil e et l’exploration électronique/matérielle. Cet e nouvelle formule de Linux Pratique, quant radio logicielle :

à el e, pourra cependant vous intéresser et, je l’espère, vous plaire, si comme bien d’autres vous venez du monde Windows ou macOS et éprouvez tantôt quelques difficultés dans le dressage HackRF One

de vos manchots. Mais je préfère encore vous laisser juge, jetez un œil non loin de l’endroit où vous avez at rapé ce 16ème numéro. Nul doute que vous y trouverez aussi un Linux Pratique à feuil eter.

DÉMONTAGE, HACKS & RÉCUP

Notez au passage que cet édito n’est absolument pas sponsorisé par Linux Pratique. Je n’ai d’ail eurs rien reçu pour m’inciter à l’écrire, rien. . même pas un muffin, du pain d’épice, un cookie 50

ou un croissant lors d’une réunion de rédactions. . malgré le nombre de conseils avisés donnés à la rédactrice en chef. . Mon incorruptibilité me perdra, contrairement à ma gourmandise :) Faites peur à vos amis

en lisant leur carte bancaire !

58

Plate-forme de Saint-Quentin-Fallavier.

Gravez le bois avec de l'électricité !

Hackable Magazine

Tél. : 04 74 82 63 04

est édité par Les Éditions Diamond

Service des ventes : Abomarque : 09 53 15 21 77

IMPRIMÉ en Allemagne - PRINTED in Germany

EMBARQUÉ & INFORMATIQUE

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

N° ISSN : 2427-4631

70

Commission paritaire : K92470

10, Place de la Cathédrale - 68000 Colmar

Périodicité : bimestriel

Ne perdez plus la main sur votre Pi

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

Prix de vente : 7,90 €

grâce à GNU Screen

E-mail : lecteurs@hackable.fr

La rédaction n’est pas

Service commercial : cial@ed-diamond.com

responsable des textes,

illustrations et photos qui

Sites : http://www.hackable.fr/

78

lui sont communiqués par

http://www.ed-diamond.com

leurs auteurs. La repro-

duction totale ou partiel e des articles publiés dans Hackable Magazine Utilisez vos applications graphiques

Directeur de publication : Arnaud Metzler

est interdite sans accord écrit de la société Les Éditions Diamond.

Rédacteur en chef : Denis Bodor

Sauf accord particulier, les manuscrits, photos et dessins adressés à Raspberry Pi depuis Windows

Réalisation graphique : Kathrin Scali

Hackable Magazine, publiés ou non, ne sont ni rendus, ni renvoyés. Les Responsable publicité : Valérie Fréchard,

indications de prix et d’adresses figurant dans les pages rédactionnel es Tél. : 03 67 10 00 27 v.frechard@ed-diamond.com

sont données à titre d’information, sans aucun but publicitaire. Toutes 88

les marques citées dans ce numéro sont déposées par leur propriétaire Service abonnement : Tél. : 03 67 10 00 20

respectif. Tous les logos représentés dans le magazine sont la propriété de leur ayant droit respectif.

Contrôlez vos montages Bluetooth

Impression : pva, Landau, Allemagne

Distribution France : (uniquement pour les

depuis votre Pi

Suivez-nous sur Twitter

dépositaires de presse)

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

@hackablemag

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

ABONNEMENT

À PROPOS DE HACKABLE...

41/42

HACKS, HACKERS & HACKABLE

Abonnements multi-supports

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 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 Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) mag haztitnp:/

e a é w

t w

é ch w

ois .ed

i pou-d

r reiaflém

te o

r c netd.

e ncotoiom

n d e bidouil age créatif sur la base d’un terme utilisé

dans sa définition légitime, véritable et historique.

HACKABLE MAGAZINE n°16

3

ARDUINO'N'CO

CARTE SD

UTILISEZ UNE CARTE SD

AVEC VOTRE ARDUINO

Denis Bodor

Le microcontrôleur d’une carte Arduino dispose de trois types de

mémoire, la SRAM, la flash et l’EEPROM. Chacune a son utilité spécifique, mais les trois sont en quantité réduite. L’utilisation d’une mémoire externe (EEPROM) permet de facilement disposer d’un espace de

stockage pour des données, mais là encore, on parle de quelques

dizaines de kilooctets. Que faire si on a besoin de bien plus d’espace ?

C’est simple, il suffit de faire exactement la même chose que pour tous les produits électroniques du marché : utiliser une carte SD ou microSD !

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez une carte SD avec votre Arduino

Se retrouver à tout autre tournure et on

l’étroit lorsqu’un

utilise alors des notions

projet évolue est

et des structures qui sont

monnaie cou-

celles propres aux disques

rante, c’est là tout

durs : partitions, système

le principe de l’écriture de croquis

de fichiers, répertoires,

Arduino et de la programmation

fichiers, etc.

de microcontrôleurs en général.

Il faut penser, dès le départ, que

nous ne disposons pas d’une

1. LES CARTES

masse énorme de mémoire

comme c’est le cas, par exemple

SD ET MMC

avec un PC ou une Raspberry Pi.

Ce qu’il est courant

Une technique généralement uti-

d’appeler « carte SD » ou

lisée consiste donc à judicieuse-

« microSD » répond tech-

ment choisir ce qui est stocké où,

niquement à la désignation

ou en d’autres termes, faire usage

« Secure Digital Memory

de façon efficace des différents

Card » ou SDC, qui est un

types de mémoire, en fonction des

standard. La technologie

types d’informations qu’on utilise.

SDC est une évolution de

Dans ce sens, le plus important

MMC (Multi Media Card)

est le code qui ne peut être exécu-

tout en conservant une

Voici l’anatomie interne

té qu’en flash. Les données, quant

compatibilité. Normale-

d’une carte SD avec en

à el es, peuvent être migrées à un

ment, un équipement prévu pour lire et écrire

jaune la mémoire flash.

autre endroit, récupérées en cas

sur des SDC fera exactement de même avec les

Contrairement à ce qu’on

pourrait penser, c’est

de besoin et stockées en mémoire

anciennes MMC.

loin qu’être un simple

vive (SRAM) pour être manipulées

Une tel e carte se compose d’une mémoire

support de stockage.

avant d’être à nouveau propre-

flash et d’un contrôleur intégré. Vous n’avez

Techniquement parlant,

c’est même un système

ment rangées. Nous avons vu,

donc pas directement accès physiquement à la

complet avec processeur,

par exemple, dans le précédent

mémoire qui est gérée pour vous. Cette gestion,

périphériques, interface

numéro, qu’il était possible d’atta-

en plus d’offrir un moyen d’accès simplifié, se

et un logiciel pour faire

cher une mémoire EEPROM à

charge également de tous les problèmes liés à

fonctionner le tout.

une carte Arduino et d’y stocker

l’électronique de la carte et à la nature même de

ainsi des mesures de capteurs.

la mémoire utilisée. Une carte SD possède, par

C’est une solution robuste et

exemple, généralement plus d’espace de stoc-

fiable, mais l’espace disponible

kage qu’il n’y paraît pour compenser les défauts

reste limité.

qui peuvent être présents sur le support.

Pour passer à une tout autre

Vous ne le voyez pas, mais la mémoire des

catégorie en termes de volume,

cartes SD et d’autres périphériques comme les

la solution consiste à utiliser une

clés USB de stockage, n’est pas parfaite. El e

carte SD ou microSD. Là, il n’est

possède des défauts et s’use, mais les construc-

plus question que de quelques

teurs ont mis en place une vaste gamme de

kilos ou mégaoctets, mais de

techniques permettant de garantir la fiabilité, de

gigaoctets ! Avec ce genre de

protéger les données et de pal ier à ce type de

volume, l’organisation de la

problèmes. Ceci se fait via un Flash Translation

mémoire prend également une

Layer ou FTL, une couche se trouvant entre

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

HACKABLE MAGAZINE n°16

5

ARDUINO'N'CO

CARTE SD

Si le terme SPI vous dit

quelque chose, c’est tout sim-

plement, car nous l’avons déjà

largement utilisé dans les diffé-

rents articles du magazine. La

communication SPI est courante

et permet aux cartes Arduino, via

une connexion simple à 4 fils, de

dialoguer avec bon nombre de

composants et de modules. On

utilise pour cela les connexions

suivantes (sur une Arduino UNO) :

• 13 : SCLK ou CLK pour

CLocK (horloge) est le signal

qui rythme la communication ;

• 11 : MOSI pour Master Out

Slave In véhicule les données

du maître (Arduino) vers l’es-

clave (ici la carte SD) ;

• 12 : MISO pour Master In

Slave Out transporte les infor-

mations dans le sens opposé ;

L’ajout d’un lecteur de

carte SD ou microSD

• 10 : SS ou CS pour Slave

n’est pas quelque chose

la mémoire à proprement parler et l’interface de

Select ou Chip Select permet

de très complexe. Ceci

se résume à choisir le

connexion (Sata, USB, SPI, etc.). Une simple carte

à celui qui contrôle la commu-

bon module, de qualité,

SD intègre donc un microcontrôleur et tout un sys-

nication (le maître, l’Arduino)

et à une poignée de

tème, dont le logiciel peut parfois être mis à jour

de demander à l’esclave d’être

câbles. Tout le reste

(firmware). Il existe même des firwmares alternatifs

attentif à la communication.

est une question de

bibliothèque et de

pour des usages. . on va dire. . « spécifiques ». Le

Le standard SPI permet de

croquis.

choix de la mémoire flash, sa quantité par rapport à

connecter les lignes SCLK,

l’espace de stockage annoncé et les performances

MISO et MISO à plusieurs

du logiciel, impactent directement la qualité du pro-

esclaves et CS est utilisé pour

duit et son prix. Autrement dit : toutes les cartes SD

les désigner, les adresser. On

ne se valent pas.

utilise généralement la broche

10 (car à côté des autres),

Du point de vue qui nous intéresse ici cependant,

mais ceci n’est en rien impo-

la technologie embarquée ne nous concerne pas

sé. C’est vous qui choisissez

vraiment puisque nous nous contentons d’utiliser

la broche utilisée pour CS sur

ces cartes et de communiquer avec el es. Cette

la carte Arduino.

communication peut être faite selon deux modes

différents : le mode SD et le mode SPI. Par défaut,

• alimentation et masse.

c’est le mode SD qui est utilisé, mais il est possible

Ce dernier point nous amène

de demander à une carte de basculer sur le mode

à une caractéristique importante

SPI en spécifiant l’état de certaines broches et en

des cartes SD et microSD : la

lui envoyant un message spécifique. La carte cesse

tension. En effet, la tension spé-

alors d’utiliser le mode SD et bascule en SPI.

cifiée dans les documentations

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez une carte SD avec votre Arduino

de l’ensemble des constructeurs

précise une alimentation entre

2,7V et 3,6V. Cette même tension

est également utilisée pour déter-

miner les niveaux logiques (ce qui

est un 1 ou un 0).

La grande majorité des cartes

Arduino travail e en 0/5V et non

en 0/3,3V, et il est important de

ne pas connecter directement

les broches d’une carte SD à un

Arduino. Vous trouverez en ligne

une vaste col ection de modules

(breakout board) à des prix divers

et variés. Certains sont de simples

Le module utilisé

supports sans le moindre com-

dans cet article

pour Card Detect. Il s’agit d’un simple contact,

dispose d’un

posant électronique, d’autres

régulateur de

par défaut à la masse ou en l’air, qui change

ajoutent un régulateur permettant

tension et d’un

d’état lorsqu’une carte est présente dans l’empla-

d’alimenter la carte SD en 3,3V

circuit permettant

cement. Ceci permet, par exemple, de faire réa-

à partir de 5V et d’autres enfin

l’adaptation des

gir votre croquis Arduino en cas de changement

niveaux logiques.

embarquent une adaptation de

C’est la solution

de carte.

tension complète assurant un

à privilégier afin

maximum de protection. C’est bien

de s’assurer d’un

entendu ce type de modules qu’il

fonctionnement

optimal avec une

2. UTILISER LA BONNE

faudra choisir.

vaste gamme de

cartes (Arduino ou

BIBLIOTHÈQUE ET

J’ai acquis les miens sur eBay,

non). Notez l’erreur

auprès d’un vendeur appelé

sur les libellés des

PREMIER ESSAI

bobowaytoway sous la désignation

broches : MOSO

« Micro SD Storage Board Reader

L’environnement de programmation Arduino

en lieu et place de

MISO.

TF Card Memory Shield Module

est livré avec la bibliothèque SD. Cel e-ci repose

SPI Pour Arduino », pour moins de

sur un code écrit par Wil iam Greiman, mais

trois euros pièce (livraison incluse

n’offre qu’un nombre limité de fonctionnalités par

depuis l’Angleterre). Ce modèle,

rapport à la version à jour de Wil iam : SdFat. SD

également en vente auprès d’autres

est initialement installable pour permettre l’utili-

vendeurs, intègre un support

sation de microSD avec le shield Ethernet.

microSD (à « clic »), un régulateur

En faisant un petit tour dans le gestionnaire

et un adaptateur de tension facile-

de bibliothèques, vous découvrirez que SdFat

ment reconnaissable par son boîtier

n’est pas là. Il faudra vous rendre sur https://

de 14 broches soudé sur le circuit

github.com/greiman/SdFat afin de télécharger

imprimé.

le répertoire SdFat et son contenu pour le copier

La connexion du module lui-

dans le répertoire libraries de votre carnet de

même à la carte Arduino suivra

croquis. Dès le prochain démarrage de l’environ-

tout simplement cel e décrite pré-

nement Arduino, vous pourrez l’utiliser.

cédemment. Notez toutefois que

Pour nous assurer que tout est bien connecté,

certains modules disposent d’une

commençons pas col ecter quelques informa-

broche supplémentaire notée CD

tions sur la carte présente dans le module :

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

HACKABLE MAGAZINE n°16

7

ARDUINO'N'CO

CARTE SD

☐

_

✕

Fichier

Édition

Croquis

Outils

Aide

#include <SPI.h>

#include <SdFat.h>

#define SDCS 10

// objet sd

SdFat sd;

void setup() {

uint32_t taille;

cid_t cid;

Serial.begin(115200);

// indispensable initialisation

Serial.println("Initialisation SD...");

if (!sd.cardBegin(SDCS,SPI_HALF_SPEED)) {

Serial.println("Erreur initialisation");

return;

}

// Type de carte

Serial.print("\nType de carte: ");

switch (sd.card()->type()) {

case SD_CARD_TYPE_SD1:

Serial.println("SD1");

break;

case SD_CARD_TYPE_SD2:

Serial.println("SD2");

break;

case SD_CARD_TYPE_SDHC:

Serial.println("SDHC");

break;

default:

Serial.println("Inconnu");

}

// obtention de la taille de la carte

taille = sd.card()->cardSize();

if(!taille) {

Serial.println("Erreur taille");

return;

}

Serial.print("Taille physique: ");

Serial.print((taille*512)/1024/1024);

Serial.println(" Mo");

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez une carte SD avec votre Arduino

// obtention des informations

if (!sd.card()->readCID(&cid)) {

Serial.println("Erreur readCID");

return;

}

// affichage des informations

Serial.print("Fabricant ID: ");

Serial.println(int(cid.mid), HEX);

Serial.print("OEM ID: ");

Serial.print(cid.oid[0]);

Serial.println(cid.oid[1]);

Serial.print("Produit: ");

for (uint8_t i = 0; i < 5; i++) {

Serial.print(cid.pnm[i]);

}

Serial.println("");

Serial.print("Version: ");

Serial.print(int(cid.prv_n));

Serial.print(".");

Serial.println(int(cid.prv_m));

Serial.print("Numero de serie: ");

Serial.println(cid.psn,HEX);

Serial.print("Date de fabrication: ");

Serial.print(int(cid.mdt_month));

Serial.print("/");

Serial.println(2000 + cid.mdt_year_low + 10 * cid.mdt_year_high);

}

void loop() {

}

Arduino

Nous avons là plusieurs étapes

débuter le dialogue. Le passage du mode SD au mode

dans le croquis.

SPI est opéré pour nous et nous n’avons pas besoin de

La première consiste à initia-

nous soucier des détails du protocole.

liser la communication et obtenir

Nous nous informons ensuite sur le type de carte

un objet sd avec lequel travail er.

utilisée. Trois réponses sont possibles : SD1, SD2 et

Cette action, déclenchée avec

SDHC, correspondant à différentes déclinaisons des

la méthode cardBegin utilisée

spécifications officiel es. Notez que le SDXC (Secure

avec le numéro de broche pour

Digital eXtended Capacity) n’est qu’un SDHC (Secure

CS et la vitesse de communi-

Digital High Capacity) pouvant al er jusqu’à 2 To de

cation souhaitée, permet de

stockage.

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

HACKABLE MAGAZINE n°16

9

ARDUINO'N'CO

CARTE SD

La connexion d’un

module de lecture de

cartes microSD à une

carte Arduino n’est

pas difficile. Ceci se

résume aux quatre

signaux d’une liaison

SPI (MISO, MOSI,

CLK, CS) et une

alimentation.

Nous récupérons ensuite, avec sd.card()->

Enfin, on passe à quelque

cardSize() la tail e de la carte. Attention, ceci n’est

chose d’un peu plus intéressant en

ni la tail e physique réel e et cachée de la mémoire

récupérant le contenu d’un registre

flash dans le périphérique, ni la tail e utilisable.

très spécial de la carte. Cel e-ci

C’est la tail e matériel e apparente, en nombre de

ne provient pas de la mémoire de

blocs disponibles, servant de base au support.

stockage, mais d’un registre interne

Exactement comme la tail e physique d’un disque dur.

du circuit qui sert d’interface :

Ici, nous utilisons ce nombre de blocs, multiplié par

la valeur de CID pour Card IDenti-

la tail e d’un bloc (512 octets) et divisé pour obtenir

fication. Il s’agit de 16 octets nous

des mégaoctets (ou plutôt des mébioctets selon la

fournissant des informations très

désignation officiel e puisque quelqu’un a eu la bonne

spécifiques sur le produit. Le plus

idée de passer à la trappe des termes utilisés depuis

clair est encore de tout simplement

l’aube de l’informatique et décrivant pourtant sa

voir ce qu’affiche ce croquis dans

nature profonde : des 1 et des 0).

le moniteur série :

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez une carte SD avec votre Arduino

Initialisation SD...

de données, on décide d’organiser

tout cela en fournissant une vision

Type de carte: SD2

abstraite sous forme de fichiers et de

Taille physique: 942 Mo

répertoires (qui n’est qu’une méta-

Fabricant ID: 2

phore). Cette organisation qui fait le

OEM ID: TM

Produit: SA01G

lien entre ce que vous voyez et l’em-

Version: 0.3

placement effectif des données sur

Numero de serie: F00109C

un support est un système de fichiers.

Date de fabrication: 6/2010

Windows ainsi que la quasi-totalité

Comme vous le voyez, nous récupérons tout un

des appareils électroniques (smart-

tas d’information intéressantes comme le fabricant

phones, appareils photo, lecteurs

(ici « TM » semble être Toshiba Memory) ou encore

MP3, etc.) utilisent le système de

la date de fabrication. Si vous voulez savoir si votre

fichiers FAT (FAT16 ou FAT32 plus

carte est ancienne, voilà la réponse, cel e-ci a plus de

précisément). Il en existe d’autres :

6 ans. Ces informations, également récupérables par

GNU/Linux utilise généralement

Certains modules,

d’autres biais, sur une Pi par exemple (essayez

ext4 ou ext3, Mac OS utilise HFS+

cat

ou encore BSD utilise FFS ou UFS.

qui n’en sont pas

/sys/block/mmcblk0/device/date par exemple),

pour autant toujours

Les versions actuel es de Windows

permettent également de détecter les produits dou-

moins chers, utilisent

utilisent généralement NTFS en lieu

des résistances en

teux ou falsifiés qui contiennent souvent des informa-

et place de l’historique FAT qui reste

diviseurs de tensions

tions incomplètes ou incohérentes.

bien entendu utilisable.

afin de permettre

une connexion de

Bien. . C’est très joli tout ça, mais il est temps de

Certains systèmes de fichiers

la carte SD à un

passer aux choses sérieuses. .

système utilisant

sont plus complexes que d’autres

0/+5V. Notez sur

et demandent souvent davantage

cette photo une

3. LIRE LE CONTENU D’UN

de mémoire (vive). Si FAT, qui a vu

carte SD telle

le jour dans sa première version en

qu’il doit en rester

FICHIER

des milliers au

1977, est toujours là, ce n’est pas un

fond des tiroirs :

hasard. Il est certes communément

512 malheureux

Il existe une différence fondamentale entre accéder

supporté, mais surtout il ne de-

mégaoctets,

à une carte SD et lire un fichier. Contrairement à une

mande pas beaucoup de ressources

parfaitement inutile

mémoire EEPROM comme cel e intégrée dans le micro-

pour un smartphone

pour être utilisé. Il n’y a donc rien

ou un APN, mais

contrôleur d’une carte Arduino, ou cel e qu’il est possible

d’étonnant au fait qu’il puisse être

largement suffisants

de connecter en SPI ou en i2c, une carte SD contient

utilisé avec une carte Arduino.

pour un projet

généralement un système de

Arduino.

fichiers. Comprenez bien que ceci

est purement « organisationnel » et

n’a rien à voir avec le fonctionnement

même de la mémoire. Nous l’avons

dit précédemment, la flash d’une

carte SD est organisée en blocs.

Ceux-ci sont structurés d’une cer-

taine manière qui est invariable, car

physiquement implémentée.

Pour simplifier les choses et

permettre à l’utilisateur de ne pas

avoir à courir après ces morceaux

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

HACKABLE MAGAZINE n°16

11

ARDUINO'N'CO

CARTE SD

Avant de poursuivre, voici le croquis que nous al ons utiliser :

☐

_

✕

Fichier

Édition

Croquis

Outils

Aide

#include <SPI.h>

#include <SdFat.h>

SdFat sd;

#define SDCS 10

#define BUFFER_SIZE 100

uint8_t buf[BUFFER_SIZE];

void setup() {

SdFile fichier;

Serial.begin(115200);

Serial.println("Initialisation SD...");

if (!sd.begin(SDCS,SPI_HALF_SPEED)) {

Serial.println("Erreur initialisation");

return;

}

// Volume total

// taille d'un cluster en nombre de blocs

uint32_t volume = int(sd.vol()->blocksPerCluster());

// ...fois le nombre de clusters

volume *= sd.vol()->clusterCount();

// ...fois la taille d'un bloc (toujours 512 octets)

volume *= 512;

Serial.print("Taille du volume: ");

// en mégaoctets

Serial.print(volume/1024/1024);

Serial.println(" Mo");

// Espace libre

uint32_t volumelibre = sd.vol()->freeClusterCount();

volumelibre *= int(sd.vol()->blocksPerCluster());

volumelibre *= 512;

Serial.print("Espace libre: ");

Serial.print(volumelibre/1024/1024);

Serial.println(" Mo");

// Listage de la racine

Serial.println(" ");

sd.ls("/", LS_SIZE|LS_R);

Serial.println(" ");

// Ouverture du fichier

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez une carte SD avec votre Arduino

if (!fichier.open(&sd, "toto.txt", O_READ)) {

Serial.println("Erreur ouverture fichier");

return;

}

// Lecture du fichier

int n = fichier.read(buf, sizeof(buf));

Serial.print(n);

Serial.println(" octet(s) lu(s)");

String myString = String((char *)buf);

myString.trim();

Serial.print("\"");

Serial.print(myString);

Serial.println("\"");

/// Fermeture du fichier

fichier.close();

}

void loop() {}

Arduino

Nous avons précédemment mis

en œuvre

la forme d’une quantité de clusters (ce qui doit vous rappeler

sd.cardBegin() pour

initialiser la communication avec la

quelque chose si vous avez connu CHKDSK.EXE et SCANDISK.

carte SD, cependant, cette méthode,

EXE). Le cluster est l’unité de stockage d’un système FAT.

comme le précise la documentation

Chaque cluster est constitué de plusieurs blocs d’une

dans le fichier

certaine tail e en octets. Pour obtenir l’espace total ainsi que

SdFat.h n’existe qu’à

des fins de diagnostics. Lorsqu’on

celui disponible, il faut donc prendre ce nombre de clusters,

utilise « réel ement » la bibliothèque,

le multiplier par le nombre de blocs par cluster et par la tail e

il convient de choisir

d’un bloc. Ceci nous donne une quantité en octets qu’on fait

sd.begin()

en lieu et place, avec les mêmes

ensuite s’afficher en Mo (ou Mio si vous préférez).

arguments.

Le fait d’utiliser sd.begin() et non sd.cardBegin() nous Ici, avant de nous attaquer à la

donne directement accès au système de fichiers FAT s’il est

lecture d’un fichier à proprement

présent. De ce fait, certaines méthodes très pratiques sont

parler, nous commençons par

utilisables, comme ls() permettant de rapidement lister les

obtenir quelques informations

fichiers. Ceci cependant est davantage un outil pour prendre

concernant le système de fichiers :

en main la bibliothèque ou pour peaufiner un croquis,

sa tail e totale qui n’est pas la tail e

qu’autre chose.

physique de la carte (il peut y avoir

Ce qui nous amène à la partie qui nous intéresse le plus : la

plusieurs partitions avec plusieurs

lecture d’un fichier. Notre cible est ici un fichier toto.txt conte-systèmes de fichiers, comme les

nant une simple ligne de texte. Nous commençons, comme sur

microSD des Raspberry Pi), et

n’importe quel système, par ouvrir le fichier et vérifier une éven-

l’espace encore disponible. Cette

tuel e erreur à cette étape. Si ce n’est pas le cas, nous pouvons

information nous est remontée sous

enchaîner sur la lecture d’une masse de données.

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

HACKABLE MAGAZINE n°16

13

ARDUINO'N'CO

CARTE SD

Voici une petite

collection de

« lecteurs » de

La méthode read() sur l’objet

d’un tableau suffisamment grand pour y mettre la

différentes origines

qui représente le fichier (ici fichier)

quantité d’octets souhaitée. Dans le cas contraire, nous

et qualités. En

prend en argument une zone de

aurions un débordement de tampon (buffer overflow),

rouge, un écran

mémoire (un tableau) et une tail e

TFT équipé d’un

synonyme de gros problèmes par la suite. .

emplacement SD

indiquant la quantité d’octets que

(3,3V uniquement),

Nous disposons donc à ce stade d’un tableau, conte-

nous souhaitons lire. La méthode

à sa droite notre

nant notre texte et beaucoup, beaucoup d’octets 0. Ça

va alors déclencher la lecture du

module préféré,

tombe bien, un 0 est ce qui marque la fin d’une chaîne

fichier et copier une certaine quan-

en bas à gauche

en C/C++. Pour obtenir quelque chose de plus facile à

le shield Ethernet

tité de données dans notre tableau,

Arduino et son

utiliser, nous faisons de ce texte une chaîne (String),

et nous retourne le nombre d’octets

emplacement

utilisons la méthode trim() pour supprimer les blancs

effectivement lus. Si une valeur

microSD et

avant et après la chaîne, puis l’envoyons sur le moniteur

inférieure à la tail e demandée est

enfin, un module

série. Enfin, nous n’oublions pas de fermer le fichier.

SD d’entrée de

retournée, c’est que la lecture est

gamme.

arrivée en fin de fichier, si la valeur

L’exécution de ce croquis nous donne quelque chose

est négative (typiquement -1) c’est

comme :

qu’une erreur est survenue.

Initialisation SD...

Ici, buf est un tableau de 100

Taille du volume: 941 Mo

uint8_t (valeur sur 8 bits non

Espace libre: 876 Mo

signée, ou en d’autres termes des

14 toto.txt

octets). Notre fichier contient bien

0 mon_rep/

moins de données que cela et

40996563 doomsday_1.10.3.dmg

l’appel nous retourne 14. Ce n’est

2217925 lm_hs27_apn.pdf

22737285 hexen_1_1.zip

pas grave, en dehors d’un beau

gâchis de mémoire, ce qui est

14 octet(s) lu(s)

important est le fait de disposer

"Coucou Monde!"

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez une carte SD avec votre Arduino

Il existe d’autres méthodes pour lire des données d’un fichier. Cel e-ci est cel e qu’on pourrait qualifier de plus « brute ». Une autre solution, parfois plus pratique, consiste à utiliser fgets() permettant de récupérer des lignes de texte (terminées par \n ou \r\n) à chaque appel :

int n = fichier.fgets(buf, sizeof(buf));

Serial.print(n);

Serial.println(" octet(s) lu(s)");

String myString = String((char *)buf);

myString.trim();

Serial.print("\"");

Serial.print(myString);

Serial.println("\"");

Ici, avec un fichier composé de plusieurs lignes, seule la première sera récupérée et affichée. La position de la prochaine lecture dans le fichier sera automatiquement cel e correspondant à la fin de la précédente, et ainsi de suite jusqu’à arriver à la fin du fichier. Pour revenir au début du fichier, sans le fermer et le rouvrir, il faudra utiliser la méthode rewind() sur fichier pour le « rembobiner ». Il est amusant de constater que la terminologie issue de vieil es technologies est toujours présente (ici la lecture de bandes magnétiques).

4. CRÉER UN FICHIER ET Y ÉCRIRE

Lire les données d’une carte ou d’un fichier est intéressant mais, en pratique, l’écriture sera sans doute plus utile. Je pense naturel ement à d’éventuels sondes et capteurs comme le montage que j’ai détail é dans le précédent numéro, et utilisant une EEPROM externe.

Étonnamment, l’écriture d’un croquis pour ce genre d’usage est bien plus simple que la lecture. La bibliothèque met en effet à disposition les méthodes print() et println() tel es qu’el es existent, par exemple, pour communiquer avec le moniteur série. Il suffit alors d’ouvrir le fichier en écriture et d’utiliser ces méthodes :

#include <SPI.h>

#include <SdFat.h>

SdFat sd;

#define SDCS 10

#define BUFFER_SIZE 100

uint8_t buf[BUFFER_SIZE];

void setup() {

SdFile fichier;

Serial.begin(115200);

Serial.println("Initialisation SD...");

if (!sd.begin(SDCS,SPI_HALF_SPEED)) {

Serial.println("Erreur initialisation");

return;

}

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

HACKABLE MAGAZINE n°16

15

ARDUINO'N'CO

CARTE SD

// Listage de la racine

sd.ls("/", LS_SIZE|LS_R);

// Ouverture du fichier

if (!fichier.open(&sd, "essai.txt", O_RDWR | O_CREAT | O_AT_END )) {

Serial.println("Erreur ouverture fichier");

return;

}

fichier.println("Coucou ! ceci est un test.");

fichier.sync();

/// Fermeture du fichier

fichier.close();

// Listage de la racine

Serial.println(" ");

sd.ls("/", LS_SIZE|LS_R);

}

void loop() {}

Inutile ici d’utiliser un tableau pour quelque chose d’aussi simple. Enregistrer ainsi des données de type « journal d’activité » comme des mesures de capteurs est un jeu d’enfant. Il est, bien entendu, possible de composer les données à inscrire via un tableau et des fonctions comme snprintf() tel que nous l’avions fait avec l’afficheur température/humidité dans le numé-

ro 14, mais la solution présentée ici est bien plus accessible pour ce type d’usage. On gardera les jeux avec des chaînes, des tableaux et des pointeurs pour des usages plus spécifiques.

La différence concernant l’accès aux fichiers en lecture ou en écriture réside dans le troisième argument de la fonction open(), le drapeau ou flag en anglais. Nous avons précédemment utilisé O_READ pour la lecture seule et ici une combinaison utilisant plusieurs drapeaux réunis via un OU

logique : O_RDWR, O_CREAT et O_AT_END (pouvant être replacé ici par une macro, FILE_WRITE

(définie dans ArduinoFiles.h)).

Les drapeaux utilisables, définis dans FatApiConstants.h sont :

• O_READ ou O_RDONLY : ouverture en lecture ;

• O_WRITE ou O_WRONLY : ouverture en écriture ;

• O_RDWR : ouverture en lecture et écriture (il s’agit en réalité d’un O_READ | O_WRITE) ;

• O_AT_END : se positionne automatiquement à la fin du fichier après l’ouverture, parfait pour un ajout ;

• O_CREAT : créé automatiquement le fichier si celui-ci n’existe pas encore. Si le fichier existe, ce drapeau n’a aucun effet, sauf si on indique également O_EXCL, auquel cas une erreur sera provoquée. Ceci permet de créer un fichier s’il n’existe pas, mais de ne pas toucher aux données existantes dans le cas contraire ;

• O_SYNC : appel e automatiquement la fonction sync() sur le fichier après chaque écriture.

Ceci permet de s’assurer que les données soient effectivement écrites immédiatement dans le fichier. En effet, afin de garantir de bonnes performances, l’écriture effective peut être différée jusqu’à la fermeture du fichier. Ceci permet de s’assurer du contraire, au détriment Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 16

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez une carte SD avec votre Arduino

des performances. Il n’est

pas recommandé d’utiliser

ce drapeau si votre croquis

écrit dans un fichier octet par

octet ;

• O_TRUNC : si le fichier existe

et est ouvert sans erreur en

écriture sa tail e est passée à

zéro. Ceci permet d’écraser le

contenu d’un fichier avec de

nouvelles données, par oppo-

sition au fait d’en ajouter.

Notez un point important clai-

rement précisé dans les fichiers

de la bibliothèque : en aucun cas

vous ne pouvez ouvrir un fichier

de multiples fois. Ceci risque de

Le shield Ethernet

conduire à une corruption de vos

Arduino dispose

données.

la syntaxe utilisée par le programmeur pourra vous

d’un emplacement

paraître un peu déroutante puisqu’il s’agit principa-

microSD fonctionnant

lement de C++, alors que la majorité des croquis

exactement comme

le module dont nous

5. QUOI D’AUTRE ? Arduino utilisent généralement une syntaxe plus parlons ici. Seules

proche du C (bien que le compilateur intégré soit

différences notables,

Beaucoup de choses. La biblio-

C++).

le prix et la connexion

« en dur » du signal

thèque SdFat fournit un nombre

À l’instar de la technologie des supports SD et

CS à la broche 4

de fonctionnalités impressionnant.

microSD, la bibliothèque est relativement com-

(la 10 étant utilisée

Avec el e vous pourrez non seule-

plexe, mais vous permettra de rapidement arriver à

pour le CS du circuit

ment, comme ici, lire et écrire des

intégré Ethernet

un résultat. Nous avons ici à faire à quelque chose

Wiznet W5500).

fichiers, mais également : créer,

qui se rapproche beaucoup de la programmation

supprimer et naviguer dans les

C/C++ sur un système informatique tant au niveau

répertoires, formater une carte,

de la logique utilisée que de la syntaxe des fonc-

gérer plusieurs accès à des cartes

tions et méthodes proposées. L’auteur s’est large-

SD, mesurer les performances

ment inspiré des fonctions utilisées en programma-

d’un support en lecture et en écri-

tion C/C++ UNIX/Linux/GNU.

ture, manipuler les clusters direc-

tement, gérer les métadonnées

Enfin, ne perdez pas de vue qu’une tel e

des fichiers (dates), effacer de

bibliothèque et une tel e profusion de possibilités

façon sécurisée des données (par

arrive nécessairement avec un coût. Notre dernier

écrasement), obtenir des informa-

croquis d’exemple, pourtant relativement simple et

tions sur les partitions, etc.

concis, occupera à lui seul quelques 36% de ma

mémoire flash disponible sur une carte Arduino

La bibliothèque est livrée avec

UNO et 44% de la mémoire vive (SRAM). En

un ensemble d’exemples très

fonction de votre projet, vous risquez donc de vous

complets couvrant toutes les fonc-

retrouver rapidement à l’étroit et obligé de, soit faire

tionnalités proposées et mettant

des concessions, soit d’opter pour une plateforme

en scène différents scénarios

plus « musclée » (comme une Mega 2560 par

d’utilisation. Notez cependant que

exemple). DB

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

HACKABLE MAGAZINE n°16

17

EN COUVERTURE

LIAISON RADIO

NRF24L01 : CRÉEZ UNE

LIAISON RADIO LONGUE

DISTANCE ENTRE

CARTES ARDUINO

Denis Bodor

Dès lors qu’on parle de communication sans fil, les options sont légion.

Le Wifi et le Bluetooth viennent immédiatement à l’esprit mais, comme on peut s’en douter, la portée de ce type de solutions est assez réduite, car initialement non prévues pour ce type d’usage longue distance.

Il faut alors se tourner soit vers la bidouille (type antenne Ricoré ou autre), des équipements coûteux (antenne à haut gain) ou tout

simplement opter pour une autre technologie. L’une d’entre elles est très économique et très populaire : l’utilisation de modules nRF24L01.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

nRF24L01 : créez une liaison radio longue distance entre cartes Arduino Tous les modules

nRF24L01

reposent sur un

composant unique,

une puce de Nor-

dic Semiconductor destinée à une

utilisation polyvalente al ant, bien

entendu, des modules de com-

munication aux claviers et souris

sans fil, en passant par les caril-

lons de porte, les capteurs, les

sondes, les transmetteurs audios,

les manettes de jeu, les télécom-

Les modules utilisés

mandes, etc. On retrouve littérale-

pour les essais

ment ce circuit intégré, ou un autre plus pour que de nombreuses usines en Asie décident entourant cet article

membre de sa famille, partout.

alors de produire massivement de simples modules très

sont équipés d’une

puce nRF24L01+ de

Le nRF24L01 est une puce de

peu chers, de différentes qualités pour satisfaire les

Nordic et intègrent

contrôle pour émetteur-récepteur

besoins des bidouil eurs du monde entier. Et lorsque

un amplificateur pour

l’émission (PA) ainsi

(transceiver en anglais) à faible

je parle prix réduit, il faut bien comprendre qu’il n’est

qu’un amplificateur

consommation utilisant la fré-

pas rare de trouver de tels modules pour 1€ pièce, port

faible bruit (LNA)

quence de 2,4 Ghz (bande ISM

offert !

pour la réception.

donc). Pouvant être alimenté entre

Bien entendu, en fonction du coût, la qualité, tant de

Ceux-ci, associés

à une antenne et

1,9 et 3,6 volts, celui-ci affiche

fabrication qu’en termes de fonctionnalités varie gran-

une alimentation

une consommation extrêmement

dement, ainsi que la distance maximum de communica-

adaptées, permettent

basse en fonction de son mode

tion. Dans les grandes lignes, on peut distinguer deux

d’obtenir une distance

de fonctionnement et le rend

types de modules :

de communication

pouvant aller jusqu’à

parfaitement adapté à une utili-

• ceux très peu chers ne disposant que du strict

800 mètres.

sation autonome sur pile bouton

minimum : la puce, un quartz, quelques compo-

CR2032 ou AAA. L’intégration est

sants passifs (résistances et condensateurs) et une

également l’une des raisons de la

antenne directement dessinée sous la forme d’une

popularité de cette puce, car peu

piste sur le circuit imprimé. Différents essais de la

de composants supplémentaires

part de nombreux utilisateurs ayant partagé leurs

sont nécessaires : un oscil ateur à

expérimentations en ligne montrent des distances

quartz, un circuit et une antenne.

de communication pouvant al er jusqu’à 80 ou 100

mètres en terrain découvert.

1. À PROPOS

• ceux plus chers, entre 3 et 5€, disposant de deux

DES MODULES

circuits supplémentaires et, souvent, d’un connec-

teur d’antenne. Ces ajouts se composent d’un

NRF24L01

amplificateur de puissance abrégé PA pour Power

Amplifier destiné à augmenter la puissance du

Bien évidemment, la profusion

signal en émission, et d’un amplificateur à faible

de nRF24L01 dans différents

bruit ou LNA pour Low Noise Amplifier améliorant

produits a rapidement conduit à

la réception du signal tout en tentant de limiter les

une production massive et à une

interférences. Ces deux circuits se placent entre le

baisse proportionnel e des coûts

nRF24L01 et l’antenne. Le connecteur complémen-

de fabrication. Il n’en fal ait pas

taire, pouvant être en SMA ou en RP-SMA (comme

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

HACKABLE MAGAZINE n°16

19

EN COUVERTURE

LIAISON RADIO

Connexion d’un module nRF24L01 à

une carte Arduino UNO.

les périphériques Wifi), permet l’utilisation d’une antenne de

nRF24L01. Cherchez simplement

meil eure qualité qu’une simple piste sur un circuit imprimé. Une

« nRF24L01 Socket » sur eBay et

bonne antenne est synonyme de gain passif plus important et

vous trouverez votre bonheur.

donc d’une meil eure émission/réception. La portée de ce type

de modules peut atteindre quelque 800 mètres ou plus, en

À propos de tension, on remar-

l’absence d’obstacle, le tout pour quelques euros.

quera que le nRF24L01, bien que

pouvant être alimenté de 1,9 à 3,6V,

Le second modèle est, par définition, plus intéressant pour bon

supporte sans problème l’utilisation

nombre d’applications et en particulier si vous cherchez une solu-

de niveaux logiques 0/+5V comme

tion pour faire communiquer deux montages, soit sur une bonne

c’est le cas avec la plupart des

distance, soit à l’intérieur d’un bâtiment plein de murs (comme la

cartes Arduino. Il n’y a donc aucun

plupart des bâtiments). Les deux amplificateurs intégrés sont direc-

problème dans le fait de connecter

tement pilotés par le nRF24L01 qui, lui-même, dialogue avec votre

directement le module à la carte,

montage Arduino en SPI. Il faut cependant prendre en considéra-

aucune adaptation de niveau n’est

tion un point important : l’alimentation en 3,3V nécessaire pour le

nécessaire. La connexion en el e-

module, généralement fournie par la carte Arduino, peut demander

même se fera avec :

un courant al ant jusqu’à 120 mA (en crête) en émission lorsque

l’amplificateur est configuré au maximum de sa puissance. Or, une

• 11 : MOSI (Master Out Slave

carte Arduino classique comme la UNO n’est en mesure de fournir,

In) pour les données de l’Ar-

via sa broche « 3.3V », qu’un courant de 50 mA. Si le module tente

duino vers le module, broche

de consommer davantage, soit il ne fonctionnera plus correctement,

6 du module ;

soit la tension va s’effondrer et le module va se réinitialiser.

• 12 : MISO (Master In Slave

Il faudra donc prévoir, dans certains cas, une alimentation 3,3V

Out) pour les données dans

supplémentaire. Notez qu’il existe des circuits déjà tout prêts pour le sens inverse, broche 7 du

cet usage (merci la popularité des modules nRF24L01). Vendus

module ;

entre 1 et 2€ pièce, ceux-ci sont constitués d’un régulateur de ten-

• 13 : SCK (CLocK) pour le

sion (LDO, souvent un AMS1117-3.3) permettant une alimentation

signal d’horloge qui cadence

5V par la carte Arduino (capable de fournir bien plus de courant),

la communication, broche 5

et d’un emplacement où vient s’enficher directement le module

du module ;

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

nRF24L01 : créez une liaison radio longue distance entre cartes Arduino

• 10 : CSN (Slave Select Nega-

2. LE NRF24L01, UNE PUCE

tive ou Chip Select Negative)

permet à celui qui contrôle

« INTELLIGENTE »

la communication (Arduino)

Contrairement à un circuit intégré comme le si4021

de demander au module de

de Silicon Labs (voir article sur le hack d’une vieil e

prendre en compte les instruc-

télécommande comme émetteur 433 Mhz dans Hac-

tions en SPI. Cette broche,

kable n°12), le nRF24L01 n’est pas une simple inter-

la 4 sur le module, peut être

face permettant de moduler un signal en fonction des

reliée à n’importe quel e

données à transmettre. C’est un circuit qu’on pourrait

broche de l’Arduino. Ceci est

qualifier d’intel igent dans le sens où il gère également

configuré dans le croquis ;

une bonne partie du protocole de communication,

• 9 : CE (Chip Enable) possède

jusqu’à la confirmation des messages et les retrans-

souvent la même signification

missions.

que CS ou CSN, mais ici per-

Cette puce de Nordic, tout comme les autres de

met de contrôler l’émission

la même famil e, intègre un « accélérateur matériel

radio du module (en plus de

de protocole » (dixit le site de Nordic) appelé « tech-

commandes envoyées en

nologie Enhanced ShockBurst ». Cel e-ci permet de

SPI). Là encore cette broche

décharger presque totalement le processeur hôte (le

(3) peut être reliée à n’importe

microcontrôleur de la carte Arduino dans notre cas)

quel e broche de l’Arduino,

de toutes les tâches liées à la gestion de la communi-

tout cela étant contrôlé via le

cation. Ceci inclut énormément de choses, du format

croquis ;

des messages à la gestion des destinataires en pas-

sant par les délais d’attente, les retransmissions de

Nous avons ici un

• alimentation (VCC) 3,3V

messages, la confirmation de réception, l’intégrité des

module nRF24L01

connectée à la broche 2 du

données. . Ceci est idéal, par exemple, pour les péri-

en réception, c’est le

module ;

phériques comme les souris sans fil ou les claviers,

PRX et 6 modules en

émission. L’ensemble

• la masse (GND) connectée à

n’embarquant pas nécessairement beaucoup de res-

des 6 pipes

la broche 1 du module ;

sources en termes de puissance de calcul. Ceci nous

disponibles est utilisé.

arrange également ici, puisque cela fait bien moins de

C’est le schéma

• la broche 8 du module reste

travail pour notre croquis.

classique utilisé pour

certains ensembles

souvent non connectée. Il

clavier/souris sans fil.

s’agit de la ligne d’interruption

(IRQ) permettant au module

de signaler que quelque

chose doit être fait ou doit être

pris en compte (le module

« interrompt » le fonctionne-

ment normal du croquis pour

qu’on « s’occupe de lui »).

Ce brochage fait référence à

une carte Arduino UNO, il faudra

bien entendu l’adapter si vous

utilisez une autre carte comme

l’Arduino Mega 2560 disposant

des connexions SPI sur d’autres

broches (50, 51, 52, 53).

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

HACKABLE MAGAZINE n°16

21

EN COUVERTURE

LIAISON RADIO

La connexion entre

une carte Arduino et

un module nRF24L01

ne nécessite pas

de composants

supplémentaires et

en particulier pas

• Deux nRF24L01 dialoguent

d’adaptateur de tension.

échangeant les rôles d’émet-

La puce nRF24L01 est

teur et de récepteur en fonction

tolérante au 5V, mais

doit impérativement être

du sens des messages. Là,

alimentée entre 1,9 et

chaque nRF24L01 utilise alors

3,6V.

deux pipes. Le premier est

configuré avec le pipe 0 en écri-

ture en spécifiant une adresse,

et un second pipe (disons le

1) en lecture en spécifiant

une autre adresse. Le second

nRF24L01 configure son pipe

0 avec la même adresse que le

pipe 1 du premier nRF24L01,

et son pipe 1, pour la lecture,

avec l’adresse du pipe 0 du

premier nRF24L01. Imaginez

Du fait de cette « intel igence » embarquée, un certain

cela comme une connexion

nombre de concepts importants doivent être assimilés pour

série entre deux Arduino. Le

pouvoir utiliser des modules nRF24L01. L’un des points

RX de l’un sur le TX de l’autre

les plus importants est la notion de pipe (« pail e-pe » ou

et inversement. Sauf qu’ici, les

« tuyau/canaux » en anglais, mais nous conserverons le

câbles portent des noms : leurs

terme original ici), associée à cel e d’adresses.

adresses.

Un nRF24L01 peut établir des connexions à un niveau

Voir les pipes ou les adresses

logique qui n’est pas lié aux fréquences utilisées (les ca-

comme les désignations des

naux, les vrais), mais à la façon de désigner les acteurs de

nRF24L01 est trompeur. Éliminez

la communication. Chaque nRF24L01 peut utiliser des pipes

cette idée de votre esprit le plus

pour établir des connexions avec un ou plusieurs autres

rapidement possible, elle ne fait

nRF24L01. Six pipes sont disponibles pour votre utilisation,

que compliquer les choses. Mon

numérotés de 0 à 5, sur chaque nRF24L01.

conseil est de bien imager dans

Deux cas de figure peuvent alors se présenter :

votre esprit que les adresses uti-

lisées ne sont pas des dénomina-

• Un nRF24L01 est configuré en réception et jusqu’à 6

tions des modules nRF24L01, mais

nRF24L01 en émission. C’est le cas de figure typique

bel et bien des pipes eux-mêmes.

des claviers/souris sans fil (un PC, plusieurs périphé-

Ce sont les noms des liaisons, des

riques). Le nRF24L01 qui réceptionne les données est

tuyaux, des connexions virtuel es. .

alors un récepteur primaire (ou PRX pour primary RX).

Exactement comme pour une liai-

On le configure en utilisant jusqu’à 6 pipes avec des

son série, si ce n’est qu’il n’y a pas

adresses correspondant aux nRF24L01 pouvant lui en-

de RX/TX (sauf en se les imagi-

voyer des données. Les émetteurs quant à eux, utilisent

nant comme les numéros de pipe),

le pipe 0 (le premier) pour transmettre les messages.

mais que les câbles portent des

Chaque nRF24L01 configure ce pipe avec l’adresse

noms, des adresses choisies pour

associée. Nous avons donc, côté récepteur, 6 pipes en

les désigner.

lecture, et côté émetteur, 6 nRF24L01, avec chacun son

pipe 0 en écriture. Les pipes étant alors littéralement

Vous l’avez compris, le pipe 0

des tuyaux établissant un lien entre les nRF24L01, avec

est spécial. C’est le seul qui peut

une adresse associée.

être utilisé pour l’envoi de données,

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

nRF24L01 : créez une liaison radio longue distance entre cartes Arduino Dans le cas d’une

communication

bidirectionnelle entre deux

nRF24L01, deux pipes

sont utilisés, véhiculant

chacun des messages

dans un sens. C’est le

même principe que dans

une communication série,

à l’exception du fait qu’ici

les « câbles » portent des

« noms ».

mais aussi pour la réception.

signal (en GFSK, Gaussian frequency-shift keying, qui est un

Les pipes 1 à 5 ne peuvent être

type de modulation de fréquences) sous forme de bits. Il est

configurés que pour la réception.

théoriquement possible d’utiliser n’importe quel e adresse de

Généralement, dans la mesure du

son choix, mais en ayant connaissance de certaines réper-

possible, on n’utilisera pas le pipe

cussions quant à la forme du signal lui-même.

0 en lecture, sauf si effectivement

nous avons 6 nRF24L01 émet-

En cas de bruit parasite ou de distorsion du signal, cer-

teurs et un récepteur.

taines adresses peuvent être plus facilement mal interprétées

que d’autres par un nRF24L01. L’octet 0x01 par exemple

Cette différenciation entre le

nous donne en binaire 0b00000001 qui peut alors aisément

pipe 0 et les autres s’étend aux

être pris pour un « bruit ». De la même manière, l’octet 0xAA

adresses utilisables. Le pipe 0

nous donne 0b10101010 qui, avec sa séquence de 1 et de peut être configuré avec une

0 peut être vu comme un signal de synchronisation (pré-

adresse de 40 bits unique, mais

ambule). Ceci ne signifie pas pour autant qu’il est interdit

les pipes 1 à 5 ne peuvent être

d’utiliser ces valeurs, mais on évitera diverses combinaisons

configurés qu’avec une adresse

comme 0xFFFFFFFFFF, 0x0000000000, 0xAA01AA01AA, composée de 32 bits communs

0xAAAAAAAAAA ou encore 0x0000010001. De façon géné-

et de 8 bits de poids faible

rale, on tentera de ne pas utiliser de simples mélanges de

(l’octet complètement à droite

0xAA, 0x55, 0x2A, 0x01, 0x0a, 0x15, 0x05 et de 0x02

dans un croquis Arduino pour un

formant des répétitions de 0b01 entrecoupées de séries de

uint64_t) au choix. Exemple

0b00.

pour une communication entre

un nRF24L01 récepteur et 6

nRF24L01 émetteurs :

3. ARDUINO, BIBLIOTHÈQUE ET

• pipe 0 : 0x7878787878,

CROQUIS

• pipe 1 : 0xB2B3B4B5F1 (bits

de poids faible à F1),

La bibliothèque la plus populaire et cel e que nous al ons

• pipe 2 :

utiliser pour commander nos modules nRF24L01 est l’œuvre

0xB2B3B4B5CD (bits

de poids faible à CD),

initiale de J. Coliz (alias maniacbug) puis reprise (et actuel e-

ment maintenue) et optimisée par TMRh20 avec la contribu-

• pipe 3 : 0xB2B3B4B5A3 (bits

tion de nombreux autres développeurs via GitHub. Cel e-ci,

de poids faible à A3),

appelée RF24, est directement instal able depuis le gestion-

• pipe 4 : 0xB2B3B4B50F (bits

naire de bibliothèques de l’environnement Arduino.

de poids faible à 0F),

Une fois le principe de fonctionnement des pipes, des

• pipe 5 : 0xB2B3B4B509 (bits

adresses et des nRF24L01 compris, la bibliothèque est rela-

de poids faible à 09).

tivement simple à utiliser. La seule difficulté pour comprendre

Au niveau de la transmission

les nombreux exemples qui l’accompagne réside uniquement

el e-même, ces valeurs ou adresses dans ce point et la logique particulière, ou en d’autres termes, sont présentes, modulées, dans le

savoir qui fait quoi.

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

HACKABLE MAGAZINE n°16

23

EN COUVERTURE

LIAISON RADIO

Nous avons ici l’inclusion

des bibliothèques SPI et RF24,

la seconde ayant naturel ement

besoin de la première. Viennent

ensuite deux macros désignant les

broches utilisées pour les signaux

Les modules

CSN et CE du module qui, comme

vendus sur le Web

Contrairement à l’exemple fourni par la bibliothèque

explicité précédemment, per-

peuvent être équipés

pour débuter, nous al ons ici écrire deux croquis afin de

d’un connecteur

mettent d’adresser le module et de

d’antenne. Si le

bien séparer un couple Arduino Uno + nRF24L01 prenant changer son mode de fonctionne-module est vendu

un rôle et un autre couple Arduino Nano + nRF24L01 en

ment. Ces macros sont immédiate-

sans l’antenne,

prenant un autre. Notre objectif ici sera de faire envoyer

ment utilisées pour déclarer l’objet

il faudra être

un message par un duo, de le recevoir avec un autre qui

très attentif à ce

qui désormais représentera le

connecteur : à

retournera un message de confirmation.

module nRF24L01 connecté dans

gauche du SMA et à

droite du RP-SMA,

Notez que ce mécanisme n’est pas réel ement

le reste du croquis et que nous utili-

très commun avec

nécessaire avec les nRF24L01, car le circuit intégré

serons pour le contrôler : radio.

les adaptateurs et

prend en charge de lui-même la notion d’accusé de

Enfin, nous déclarons deux

routeurs Wifi.

réception. Vos croquis ne sont donc, en principe, pas

variables de type uint64_t (va-

obligés de s’assurer de cette manière de la bonne trans-

leurs entières non signées sur 64

mission d’un message. Ceci nous permettra cependant

bits) afin d’y stocker les adresses

d’asseoir à la fois les notions de rôle d’émetteur et de

de 40 bits des pipes que nous

récepteur et cel es de pipes et d’adresse.

al ons utiliser. Ces quelques lignes

Nous utiliserons donc deux cartes Arduino et les rôles

sont strictement identiques pour

de chacune dans notre scénario n’ont pas réel ement

les deux croquis et c’est généra-

d’importance (du moment qu’on ne confond pas cartes et

lement une bonne idée de tout

ports au moment de charger le croquis en mémoire).

simplement les copier/coller pour

éviter toutes fautes de frappe.

3.1 Premier croquis

Nous pouvons ensuite passer

à la composition de la fonction

Nous al ons commencer par le croquis équipant la

setup() chargée de configurer

carte Arduino chargée de répondre aux demandes, et

les modules et l’ensemble des élé-

nous al ons le découper en petits morceaux pour bien

comprendre chaque étape. Nous commençons donc

ments du croquis. Nous commen-

par inclure les bibliothèques nécessaires et déclarer

çons par initialiser la communication

quelques macros, variables et objet :

avec le moniteur série en 115200

bps ainsi que le module radio :

#include <SPI.h>

#include <RF24.h>

void setup() {

Serial.begin(115200);

#define PIN_CS 10

Serial.println(F("Go go go!"));

#define PIN_CE 9

radio.begin();

RF24 radio(PIN_CE,PIN_CS);

Nous activons ensuite la fonc-

const uint64_t pipeA =

tionnalité ShockBurst permettant

0xF0F0F0F0E1LL;

l’accusé de réception automa-

const uint64_t pipeB =

0xF0F0F0F0D2LL;

tique, géré en coulisse par le

nRF24L01 pour nous :

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

nRF24L01 : créez une liaison radio longue distance entre cartes Arduino

// Activer l’accusé de réception

radio.enableAckPayload();

// L’accusé de réception est dynamique

radio.enableDynamicPayloads();

Notez que ceci n’est pas forcément nécessaire ici puisque tout l’objet de l’essai est précisément d’avoir une réponse en retour en plus de la fonctionnalité offerte de base par les nRF24L01.

Vient ensuite la configuration des amplificateurs (PA et LNA), dans le cas où ils sont présents :

// réglage de l’amplificateur

radio.setPALevel(RF24_PA_LOW);

//radio.setPALevel(RF24_PA_HIGH);

Par défaut, c’est RF24_PA_HIGH qui est utilisé, mais cette configuration provoque une consommation excessive de courant (jusqu’à 120 mA) alors que la broche 3,3V d’une carte Arduino ne peut pas en fournir autant (mes alimentations sont encore en chemin alors que j’écris ces lignes). Comme nous sommes en phase d’essai, les deux ensembles sont relativement proches et ne nécessitent donc pas une pleine utilisation des amplificateurs. Notez au passage que RF24_PA_LOW permet tout de même des communications sur des distances plus importantes que le Wifi en intérieur. Le fonctionnement de ces montages pour test n’a posé aucun problème avec une tel e configuration d’un bout à l’autre de nos locaux et ce avec quelques 5 murs en pierre de tail e entre l’un et l’autre nRF24L01.

Arrive alors le moment de configurer les pipes :

// réglage des canaux/pipes

radio.openWritingPipe(pipeA);

radio.openReadingPipe(1,pipeB);

La méthode openWritingPipe() nous permet de connecter un pipe en écriture et plus exactement le pipe 0, le seul pouvant être utilisé pour cela. Inversement, openReadingPipe() est utilisé pour la connexion d’un pipe en lecture. Ici deux paramètres sont nécessaires, le numéro du pipe entre 0 et 5 et l’adresse à utiliser. Notez que vous ne pouvez pas impunément configurer à la fois le pipe 0 en écriture et en lecture, car en utilisant ensuite la méthode startListening(), la configuration en écriture sera perdue. Il vous faudra à nouveau utiliser openWritingPipe() avant de tenter d’écrire sur ce pipe avec write(). De façon générale, et dans la mesure du possible, le plus simple est de tout simplement utiliser le pipe 0 que pour l’écriture.

Enfin, nous touchons à la fin de la fonction setup() et pouvons nous mettre en attente de messages en réception avec :

// En écoute

radio.startListening();

}

Nous pouvons maintenant nous pencher sur la boucle principale loop(). Notre objectif est ici d’être en écoute d’un éventuel message et si l’un d’entre eux arrive, utiliser son contenu et tout simplement le retourner à l’expéditeur. En d’autres termes, on lit sur un pipe et si quelque chose se pré-

sente, on l’écrit sur l’autre. Le message qui sera ici utilisé est une simple valeur entière non signée de type unsigned long correspondant, pour l’expéditeur à la valeur de micros() (le millis() pour les microsecondes).

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

HACKABLE MAGAZINE n°16

25

EN COUVERTURE

LIAISON RADIO

En disposant de modules

avec un connecteur

RP-SMA et étant donné

que les fréquences

utilisées par les

nRF24L01 sont similaires

à celles du Wifi, il sera

possible d’utiliser une

antenne Wifi provenant

d’un routeur, une netcam

ou un adaptateur

USB sans le moindre

problème.

Nous débutons donc notre fonction loop()

en vérifiant si des données sont disponibles en

// arrête émission

radio.stopListening();

lecture :

// envoi de la réponse

radio.write(&temps,

void loop() {

sizeof(unsigned long));

unsigned long temps;

stopListening(), comme son nom l’indique,

// Des données sont-elles disponibles ?

demande au nRF24L01 de stopper l’écoute afin que

if(radio.available()){

nous puissions, avec write() écrire, en d’autres

termes émettre, les données contenues dans

Si cela vous rappel e quelque chose, c’est

normal, c’est exactement le même principe que

temps. Notez que la méthode write(), tout comme

pour une lecture sur le port série (

read(), prend en argument un pointeur et non la

Serial) de

variable elle-même (notez le

l’Arduino.

& devant le nom), ainsi

available() est VRAI si des don-

que la tail e des données à lire (et donc ici cel e d’un

nées peuvent être prises en charge. Si tel est

le cas, nous récupérons toutes les données

unsigned long, le type de la variable temps).

jusqu’à la dernière :

Une fois cette opération terminée, il ne reste plus

qu’à se remettre à l’écoute d’éventuels messages et

// oui, lecture

accessoirement notifier de ce qui vient de se passer

while (radio.available()) {

sur le moniteur série :

radio.read(&temps,

sizeof(unsigned long));

// reprise de la réception

}

radio.startListening();

Et nous les stockons dans temps. Notez que

// Affichage

si plusieurs messages arrivent trop rapidement,

Serial.print(F("pong ! "));

temps ne contiendra que la dernière valeur.

Serial.println(temps);

Nous pouvons alors cesser d’écouter et passer

}

}

en émission :

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

nRF24L01 : créez une liaison radio longue distance entre cartes Arduino 3.2 Second croquis

Notre second croquis, fonctionnant donc sur la seconde carte Arduino, repose exactement sur les mêmes principes et est en grande partie similaire au précédent. Je vous le livre donc en entier en une fois :

#include <SPI.h>

#include <RF24.h>

#define PIN_CS 10

#define PIN_CE 9

RF24 radio(PIN_CE,PIN_CS);

const uint64_t pipeA = 0xF0F0F0F0E1LL;

const uint64_t pipeB = 0xF0F0F0F0D2LL;

void setup() {

Serial.begin(115200);

Serial.println(F("Go go go!"));

radio.begin();

// Activer l’accusé de réception

radio.enableAckPayload();

// L’accusé de réception est dynamique

radio.enableDynamicPayloads();

// réglage de l’amplificateur

radio.setPALevel(RF24_PA_LOW);

//radio.setPALevel(RF24_PA_HIGH);

// réglage des canaux (pipe)

radio.openWritingPipe(pipeB);

radio.openReadingPipe(1,pipeA);

// En écoute

radio.startListening();

}

void loop() {

// Arrêt écoute

radio.stopListening();

Serial.println(F("Envoi"));

// Utilisation de micro comme message

unsigned long message = micros();

// envoi

if (!radio.write(&message, sizeof(unsigned long) )){

Serial.println(F("erreur"));

}

// Mise en écoute

radio.startListening();

// Enregistrement du début du délais

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

HACKABLE MAGAZINE n°16

27

EN COUVERTURE

LIAISON RADIO

unsigned long debut = micros();

boolean timeout = false;

// Tant que rien à lire

while (!radio.available()){

// 600ms de passé, on abandonne

if (micros()-debut > 600000 ){

timeout = true;

break;

}

}

// abandon pour cause de délais écoulé ?

if(timeout){

Serial.println(F("Erreur : timeout."));

} else {

// variable pour le message reçu

unsigned long reception;

// lecture des données reçues

radio.read(&reception, sizeof(unsigned long));

// enregistrement du moment de la réception

unsigned long fin = micros();

// Affichage

Serial.print(F("Message: "));

Serial.print(message);

Dans la trousse à

Serial.print(F(", reponse: "));

outils de l’utilisateur

Serial.print(reception);

de modules

Serial.print(F(", temps complet: "));

nRF24L01, comme

Serial.print(fin-message);

dans celle de

Serial.println(F(" microsecondes"));

l’amateur de radio

}

logicielle, les

adaptateurs SMA/

delay(1000);

RP-SMA trouvent

bonne place. Ces

}

simples « changeurs

de genre » pourront,

Les différences résident dans le corps de la boucle principale, mais utilisent la même à l’occasion, vous

logique d’attente et d’envoi de messages. Notez cependant, dans setup(), que l’utilisation sortir de belles

des variables contenant les adresses des pipes sont inversées. pipeB est utilisé en écri-

épines du pied...

ture (donc le pipe 0) et pipeA en lecture sur le pipe 1.

La gestion des délais repose entièrement sur les valeurs retournées

par micros() qui forment également le contenu du message envoyé. En fin de boucle, nous affichons les données de chaque envoi avec le contenu du message envoyé (message), la valeur du message reçu en réponse (reception) et le nombre de microsecondes séparant le moment de l’envoi (message également) de celui juste après la fin de la réception (fin).

3.3 Résultat

Une fois chaque croquis chargé dans les cartes Arduino, en commen-

çant par celui de réception/réponse, on constate en observant le moniteur série sur le second Arduino, le déroulement des opérations :

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

nRF24L01 : créez une liaison radio longue distance entre cartes Arduino Go go go!

Envoi

Message: 11916, reponse: 11916, temps complet: 1192 microsecondes Envoi

Message: 1014640, reponse: 1014640, temps complet: 1200 microsecondes Envoi

Message: 2017568, reponse: 2017568, temps complet: 1196 microsecondes Envoi

Message: 3020488, reponse: 3020488, temps complet: 1160 microsecondes Envoi

Message: 4023392, reponse: 4023392, temps complet: 1192 microsecondes Envoi

Message: 5026312, reponse: 5026312, temps complet: 1160 microsecondes Envoi

Message: 6029200, reponse: 6029200, temps complet: 1200 microsecondes Un peu plus d’une mil iseconde pour ce type d’application n’est pas quelque chose de bien important. Le nRF24L01 par défaut communique à une vitesse de 1Mbps, c’est plus que ne peuvent en gérer ici nos croquis dans ce contexte. Il est possible de changer cette vitesse avec la méthode setDataRate(), prenant en argument RF24_2MBPS, RF24_1MBPS ou RF24_250KBPS (uniquement disponible dans la version nRF24L01+ du composant). Cette méthode retourne un booléen à VRAI si l’opération est un succès et à FAUX dans le cas contraire. Notez que l’utilisation de cette méthode avec l’argument RF24_250KBPS vous permettra également de déterminer si votre module est un nRF24L01 ou un nRF24L01+ (en cas de doute).

POUR FINIR

Nous avons utilisé dans ces deux croquis toutes les fonctions de base fournies par la bibliothèque RF24 et qui sont décrites dans la documentation en ligne (http://tmrh20.github.io/RF24/classRF24.

html) en anglais (of course !). Sachez également que même sans accès au Web, cette documentation est présente dans le fichier RF24.h. Vous trouverez là, sous forme de commentaires toutes les explications dont vous pourrez avoir besoin.

Je tiens également à préciser ici que les exemples fournis avec la bibliothèque, bien que parfaitement intel igibles et démonstratifs ne sont pas aussi « accessibles » qu’on pourrait le penser. La plupart des croquis mettent en scène deux Arduino partageant un même code, changeant de comportement en fonction du rôle joué (et de la valeur d’une variable role). Ceci en plus de certains « raccourcis »

comme celui-ci :

byte addresses[][6] = {"1Node","2Node"};

peuvent être très déroutant pour qui n’a pas de connaissances suffisamment avancées en C/C++.

Nous avons là un tableau à deux dimensions contenant des octets. addresses[0] par exemple contient

«1Node« qui semble être un tableau de 5 caractères et donc d’octets. Mais c’est oublier qu’une chaîne de caractères en C est terminée par un octet nul, il s’agit en réalité de «1Node\0«, nous avons donc bel et bien 6 cases dans le tableau de byte qui, de ce fait, forment les 40 bits d’une adresse de pipe. Je trouve que cela complexifie inutilement le croquis qui, justement s’appel e, GettingStarted (« pour débuter »). .

Quoi qu’il en soit, sur la base de cet article, vous devriez être maintenant fin prêt pour tirer le meil eur de vos nRF24L01 et analyser sereinement les différents exemples fournis. Bonne exploration ! DB

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

HACKABLE MAGAZINE n°16

29

EN COUVERTURE

LIAISON RADIO

UTILISEZ UN NRF24L01

AVEC VOTRE

RASPBERRY PI

Denis Bodor

Nous venons de voir que la communication entre deux Arduino grâce aux modules nRF24L01 ne présente pas de grosses difficultés une fois la logique de fonctionnement du composant assimilée. Chose très

intéressante, le support logiciel sous la forme de la bibliothèque RF24

ne se limite aucunement aux Arduino. Tout a été pensé, dès le départ, pour permettre une utilisation sur de nombreuses plateformes et, bien entendu, la Raspberry Pi est l’une d’entre elles !

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez un nRF24L01 avec votre Raspberry Pi

Faire communiquer

deux cartes à

dtparam=spi=on

microcontrôleurs

Ce réglage peut également être fait via un sudo raspi-config, comme des Ardui-en passant par Advanced Options et SPI pour activer le support.

no est un bon point

Dans les deux cas, un redémarrage de la Raspberry Pi est

de départ, mais parfois, pour cer-

nécessaire, ce après quoi, le bus SPI sera activé et accessible,

tains projets les ressources dispo-

entre autres, via :

nibles ou tout simplement l’objectif

même du projet imposent l’utilisa-

$ ls -la /dev/spi*

tion de quelque chose d’un peu

crw-rw---- 1 root spi 153, 0 déc. 12 16:17 /dev/spidev0.0

plus musclé. C’est généralement

crw-rw---- 1 root spi 153, 1 déc. 12 16:17 /dev/spidev0.1

là qu’une carte comme la Rasp-

berry Pi entre en jeu en changeant

Nous pouvons ensuite passer à l’instal ation de tout le

totalement la donne.

nécessaire pour contrôler et utiliser les modules nRF24L01.

La bibliothèque que nous utiliserons est exactement la même

Le cas de figure le plus courant

que cel e pour Arduino. Les développeurs ont, en effet, écrit

alors est celui où un ou plusieurs

un unique code, qui fonctionne tout aussi bien sur toutes les

montages à base d’Arduino sont

plateformes supportées. Cette instal ation ne sera pas aussi

utilisés comme éléments distants

simple que cel e dans l’environnement Arduino et, bien que cela

(capteur, afficheur, contrôleur

ne me plaise pas énormément, devrait être faite à la main, indé-

mécanique, etc.) et la Raspberry

pendamment du système de gestion de paquets. Nous devrons

Pi comme système central orches-

récupérer les sources de la bibliothèque, la compiler et instal er

trant l’ensemble ou regroupant les

les éléments afin de pouvoir écrire du code en faisant usage.

informations col ectées.

La première étape consistera à instal er les paquets néces-

Nous al ons donc brièvement

saires pour la suite des opérations, avec sudo apt-get

ici ajouter un pendant Raspberry

update puis sudo apt-get install build-essential

Pi à la démonstration précédente,

make git. Il est probable qu’une partie de ces éléments soient 100% Arduino, en remplaçant tout

déjà présents sur votre Pi, ce n’est pas un problème, le cas

simplement l’une des deux cartes

échéant ils seront mis à jour.

par une Pi, et plus précisément

cel e qui envoie les messages et

La récupération des sources se fera avec la commande git

attend le retour pour ensuite affi-

directement depuis le dépôt officiel sur GitHub (cf. article dans

cher les détails des opérations.

le numéro précédent sur Git et GitHub) :

$ git clone https://github.com/TMRh20/RF24.git

1. PRÉPARATION

Clonage dans ‘RF24’...

remote: Counting objects: 3017, done.

ET INSTALLATION

remote: Total 3017 (delta 0), reused 0 (delta 0), pack-

reused 3017

Pour pouvoir utiliser un module

Réception d’objets: 100% (3017/3017), 1.29 MiB | 1.20 MiB/s,

nRF24L01 avec votre Pi, vous

fait.

Résolution des deltas: 100% (1780/1780), fait.

devez avant toutes choses activer

Vérification de la connectivité... fait.

le support SPI de la carte. Il y a

plusieurs façons de faire, mais je

Nous obtenons ainsi un répertoire RF24 dans le répertoire

passe généralement par l’édition

courant. Nous avons ici l’ensemble du code pour toutes les

du fichier /boot/config.txt afin

plateformes. Pour compiler tout cela pour la Raspberry Pi, nous

d’ajouter ou décommenter (retirer

commençons par nous placer dans le répertoire et configurer

le #) la ligne :

les sources :

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

HACKABLE MAGAZINE n°16

31

EN COUVERTURE

LIAISON RADIO

La connexion du module nRF24L01 ne pose pas de

problème particulier et est très similaire à la même

opération sur une carte Arduino. Notez au passage que

les limitations en termes de courant pouvant être fourni

sont également identiques. Pour utiliser le module à

pleine puissance (PA+LNA activés) une alimentation 3,3

V complémentaire sera nécessaire...

$ cd RF24

$ ./configure --driver=SPIDEV

Ici, nous choisissons d’utiliser le support SPIDEV. Je vous laisse le soin de consulter le site officiel pour d’autres options (dont MRAA). Nous passons ensuite à la compilation : $ make

[...]

[Linking]

arm-linux-gnueabihf-gcc -pthread -shared -Wl,-soname,librf24.so.1

-march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard

-Ofast -Wall -pthread -o librf24.so.1.2.0 RF24.o spi.o

gpio.o compatibility.o interrupt.o

Puis directement à l’instal ation :

$ sudo make install -B

[...]

[Installing Libs to /usr/local/lib]

[Installing Headers to /usr/local/include/RF24]

À ce stade, la bibliothèque est instal ée dans votre système (/usr/local/lib/librf24.so*) ainsi que les différents fichiers permettant d’écrire des programmes C et C++ (dans /usr/local/include/RF24). Mais ne nous arrêtons pas en si bon chemin et poursuivons en instal ant également le support Python.

Pour cela, commencez par instal er les paquets python-dev, libboost-python-dev et python-setup-tools avec sudo apt-get install. Rendez-vous ensuite dans le sous-répertoire pyRF24 et utilisez : $ ./setup.py build

running build

running build_ext

building ‘RF24’ extension

creating build

[...]

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez un nRF24L01 avec votre Raspberry Pi

Notez que cette opération prend beaucoup de

incluses en début de programme. Il ne s’agit pas

temps et consomme énormément de mémoire

réel ement de bibliothèques, mais de fichiers d’en-

vive. En cas de problème, quittez les applications

tête permettant au programme d’avoir un « point

inutiles et éventuel ement, le mode graphique.

d’accès » aux bibliothèques qui sont liées durant le

processus de compilation (édition de liens).

$ sudo ./setup.py install

[...]

De la même façon, il n’y a pas de setup() et de

Processing dependencies for

loop() dans un code C/C++ classique, mais une

RF24==1.2.0

fonction qui est appelée automatiquement à l’exécu-

Finished processing

tion du programme : main(), la fonction principale.

dependencies for RF24==1.2.0

En réalité, ce que fait un croquis Arduino est :

À ce stade, tout est instal é dans le système

int main(void) {

de la Pi et prêt à être utilisé. Il ne nous reste plus

init();

initVariant();

qu’à connecter le module à la carte, exactement

comme pour les Arduino, sans autre élément

setup();

nécessaire qu’une poignée de câbles :

for (;;) {

• 1 GND (masse) sur la broche 25, 9, 14, 30,

loop();

34 ou 39 de la Pi,

if (serialEventRun)

serialEventRun();

• 2 VCC (alimentation 3,3V) sur 1 ou 17,

}

• 3 CE sur 15 (gpio22),

return 0;

• 4 CSN sur 24 (gpio8),

}

• 5 SCK sur 23,

Nous avons une boucle for() répétant sans cesse

• 6 MOSI sur 19,

un appel à loop(), juste après l’appel à setup(). Avec

• 7 MISO sur 21.

un programme écrit en C ou C++, il vous suffit de faire

cela vous-même. Voici donc l’adaptation de notre cro-

quis Arduino, porté vers la Pi :

2. PORTAGE DU CROQUIS

#include <cstdlib>

ARDUINO

#include <iostream>

#include <sstream>

#include <string>

Il est temps de passer au code et une petite

#include <unistd.h>

surprise nous attend. En effet, comme la biblio-

#include <RF24/RF24.h>

thèque Arduino, et donc le code de base du

support, est en « langage Arduino » qui n’est

// CSN est géré par la Pi et CE est sur

// la GPIO 22

autre que du C/C++, la façon naturel e de l’utili-

RF24 radio(22,0);

ser avec une Raspberry Pi est aussi du C++. Ne

vous inquiétez pas, si vous n’avez jamais fait de

const uint64_t pipeA = 0xF0F0F0F0E1LL;

C ou de C++ sur une Pi, mais que vous écrivez

const uint64_t pipeB = 0xF0F0F0F0D2LL;

des croquis Arduino, vous ne serez pas vraiment

int main(int argc, char** argv){

dépaysé.

unsigned long message;

unsigned long debut;

Un croquis Arduino EST du C++. Quelques

bool timeout;

principes mêmes de l’écriture de programmes

unsigned long reception;

dans ce langage vous sont simplement dissimulés

unsigned long fin;

lorsque vous utilisez l’environnement Arduino.

printf("Go go go!\n");

Ceci concerne, par exemple, les « bibliothèques »

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

HACKABLE MAGAZINE n°16

33

EN COUVERTURE

LIAISON RADIO

radio.begin();

// Activer l’accusé de réception

radio.enableAckPayload();

// L’accusé de réception est dynamique

radio.enableDynamicPayloads();

// réglage de l’amplificateur

radio.setPALevel(RF24_PA_LOW);

// réglage des canaux (pipe)

radio.openWritingPipe(pipeB);

radio.openReadingPipe(1,pipeA);

// affichage d’un résumé de la configuration

radio.printDetails();

// En écoute

radio.startListening();

// boucle principale (comme le loop() Arduino)

while(1) {

// Arrêt écoute

radio.stopListening();

printf("Envoi\n");

message = millis();

// Envoi avec vérification d’erreur

if(!radio.write(&message, sizeof(unsigned long))) {

printf("Erreur : write.\n");

}

// Mise en écoute

radio.startListening();

// Enregistrement du début du délais

debut = millis();

timeout = false;

// Tant que rien à lire

while (!radio.available()) {

if (millis()-debut > 600) {

timeout = true;

break;

}

}

// abandon pour cause de délais écoulé ?

if(timeout){

printf("Erreur : timeout.\n");

} else {

// lecture des données reçues

radio.read(&reception, sizeof(unsigned long));

// enregistrement du moment de la réception

fin = millis();

// Affichage

printf("Message: %lu, reponse: %lu, temps complet: %lu\n", message, reception, fin-message);

}

// dodo 1 seconde

sleep(1);

}

return 0;

}

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez un nRF24L01 avec votre Raspberry Pi

On retrouve littéralement toutes les méthodes utilisées et toute

3. LE RESTE C’EST

la logique du programme avec simplement quelques petits change-

ments de-ci de-là. Point de Serial.println() ici, par exemple, mais POUR VOUS !

printf() affichant les messages directement sur la console. En grande Cet article succinct ne présente

majorité, les lignes de codes sont tout à fait identiques.

qu’une façon d’approcher le support

Pour compiler notre code et obtenir rapidement un programme exécutable, des nRF24L01, mais il en existe

le plus simple est de tout bonnement reposer sur ce qui est mis à notre dispo-d’autres. L’une d’entre el es consiste

sition, et donc les exemples livrés avec RF24. Nous nous plaçons donc dans à utiliser le module Python dont l'utile sous-répertoire examples_linux, y ajoutons notre fichier que nous appe-lisation est très similaire aux notions

lons rfsend.cpp et modifions le fichier Makefile en changeant la ligne : vues en C++. Notez cependant que

c’est là avant tout une question de

# define all programs

préférences, car contrairement à ce

PROGRAMS = gettingstarted gettingstarted_call_

qu’on pourrait penser, le C/C++ n’est

response transfer pingpair_dyn

pas forcément le langage le plus

compliqué à utiliser. Essayez par

en

exemple de convertir un entier long

# define all programs

comme une durée en millisecondes

PROGRAMS = rfsend gettingstarted gettingstarted_

en séquences d’octets (bytearray)

call_response transfer pingpair_dyn

en Python et vous vous rendrez

rapidement compte que le C/C++ fait

Ainsi, en plus des autres exemples, notre rfsend.cpp sera compilé cela d’une façon bien plus naturel e.

en une commande rfsend. Il ne nous reste plus qu’à nous plier d’un make pour construire tout cela, puis, lancer la commande en question : En termes de perspectives, le pré-

sent article en compagnie du précé-

$ sudo ./rfsend

dent, vous a normalement donné les

Go go go!

clés pour mettre en œuvre tous types

================ SPI Configuration ===============

de réalisations. On peut aisément

CSN Pin = CE0 (PI Hardware Driven)

imaginer ainsi un ensemble de cap-

CE Pin = Custom GPIO22

Clock Speed = 8 Mhz

teurs sur base Arduino équipés de

================ NRF Configuration ===============

nRF24L01, régulièrement interrogés

STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0

pour col ecter des mesures ou en-

RX_P_NO=7 TX_FULL=0

core une simple télécommande multi-

RX_ADDR_P0-1 = 0xf0f0f0f0d2 0xf0f0f0f0e1

canaux permettant de contrôler les

RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6

luminaires ou des actionneurs méca-

TX_ADDR = 0xf0f0f0f0d2

niques. Les principaux avantages

RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00

EN_AA = 0x3f

des nRF24L01 sont leur faible coût

EN_RXADDR = 0x03

et la portée de la communication. Là

RF_CH = 0x4c

encore, il y a de quoi imaginer bien

RF_SETUP = 0x03

des applications. .

CONFIG = 0x0e

DYNPD/FEATURE = 0x3f 0x06

Enfin, il serait également dom-

Data Rate = 1MBPS

mage de ne pas saisir l’occasion de

Model = nRF24L01+

s’essayer au C/C++ sur Raspberry

CRC Length = 16 bits

Pi et ainsi découvrir les joies de

PA Power = PA_LOW

la programmation « native » afin

Envoi

Message: 893376, reponse: 893376, temps complet: 1

de réaliser ses propres outils en

Envoi

ligne de commandes. Vous pourrez

Message: 894377, reponse: 894377, temps complet: 2

constater que les choses ne sont

pas très différentes de ce que vous

Le comportement est parfaitement similaire à ce que nous avons pu

connaissez déjà sur Arduino et que

constater entre les deux cartes Arduino, et pour cause, c’est la même la frontière est davantage imaginaire

bibliothèque et le même code de démonstration !

que pratique. . DB

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

HACKABLE MAGAZINE n°16

35

RADIO & FRÉQUENCES

SDR

POUR ALLER PLUS LOIN

EN RADIO LOGICIELLE :

HACKRF ONE

Denis Bodor

Nous avons traité précédemment dans ce magazine du fantastique

domaine de la radio logicielle (SDR) et de l’utilisation de récepteurs DVB-T pour recevoir toutes sortes de signaux radio. Le matériel

disponible s’est grandement diversifié depuis lors avec de plus en plus de récepteurs construits sur la même base RTL-SDR, mais conçus dans l’optique d’une utilisation radio. Une autre plateforme, moins économique, permettant d’aller plus loin encore est également

disponible : le HackRF One de Great Scott Gadgets.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Pour al er plus loin en radio logiciel e : HackRF One

Dans le second

numéro de

Hackable, il y a

maintenant plus

de deux ans,

nous avions exploré le monde de

la radio logiciel e via l’utilisation

de petites clés USB initialement

destinées à la réception de la TV

numérique TNT (DVB-T). Depuis,

ces périphériques n’ont pas vrai-

ment changé, mais se sont sensi-

blement améliorés.

En effet, bon nombre d’ama-

teurs et d’électroniciens ont

décidé, plutôt que d’utiliser du

matériel originel ement prévu

pour une tout autre utilisation, de

reprendre le même concept et la

Le HackRF One se présente

même architecture matériel e tout

Mais l’objet du présent article ne concerne

sous la forme d’un boîtier

en apportant des petites modifi-

pas ces produits, mais une catégorie de

plastique noir disposant

d’un connecteur micro-USB,

cations destinées à en améliorer

périphériques d’un niveau supérieur. En effet,

quelques leds et boutons

le fonctionnement. On retrouve à

qu’il s’agisse d’un récepteur USB TNT à 10€,

et de connecteurs SMA :

présent ces récepteurs RTL-SDR,

d’une version améliorée comme le NESDR

un pour l’antenne et deux

vendus sous différentes marques,

SMArt, le NESDR Mini ou le NESDR Nano,

pour des signaux d’horloge

optionnels.

un rien plus chers que les mo-

à quelques 30€, ou encore des équipements

dèles génériques de réception

plus performants comme le SDRPlay, le

TNT, garantissant davantage de

AirSpy ou le FunCube entre 150 et 200€,

qualité, de stabilité et parfois de

tous ont en commun une caractéristique : ce

fonctionnalités.

sont des récepteurs.

Tous ces périphériques se

Le HackRF One de Great Scott Gadgets,

distinguent les uns des autres par

comme le BladeRF de Nuand ou encore les

leurs gammes de fréquences utili-

USRP d’Ettus Research ne se limitent pas à

sables (de quelques mégahertz à

la réception de signaux, mais peuvent égale-

gigahertz), la fréquence d’échan-

ment émettre. C’est une tout autre catégorie

tillonnage impactant la largeur

de matériels.

de bande (gamme de fréquences

Je me dois de préciser ici que, dès lors qu’il

qu’il est possible de « voir »), la

s’agit d’émission de signaux radio, nous en-

stabilité de l’horloge vis-à-vis

trons dans un domaine strictement encadré.

de facteurs externes comme la

Quels que soient le matériel utilisé, les fré-

température, ou encore la qualité

quences utilisables, la puissance et d’autres

de fabrication et la gestion de la

caractéristiques, il s’agit d’éléments régis

dissipation thermique (si le péri-

au niveau légal. En l’absence d’une licence

phérique chauffe trop, il change

radioamateur, votre champ d’action est et

de comportement et la réception

DOIT être fortement limité. Techniquement,

est perturbée).

vous n’avez de base le droit d’utiliser que les

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

HACKABLE MAGAZINE n°16

37

RADIO & FRÉQUENCES

SDR

bandes ISM (Industriel, Scientifique et Médical),

le signal de base selon différents

cel es-là même utilisées par le Wifi (2,4 à 2,5 GHz

procédés appelés modulations.

et 5,725 à 5,875 GHz), les appareils sans fil comme

De l’autre côté de la liaison, la

les caril ons et capteurs (433,05 à 434,79 MHz) ou

tâche de celui qui réceptionne le

encore les bonnes vieil es télécommandes de radio-

signal consiste à extraire (démo-

modélisme et autres téléphones sans fil (26,957 à

duler) cette information du signal

27,283 MHz). Que les choses soient claires : vous

afin de la restituer le plus fidèle-

DEVEZ connaître et respecter la législation en

ment possible. L’exemple typique

vigueur dans votre pays, avec ou sans licence

de ce type de technique est le cas

radio-amateur ! Ceci ne souffre d’aucune exception,

de la diffusion de programmes

pas pour 5 minutes, pas même pour une demi-se-

radiophoniques, généralement

conde ou « juste pour voir » !

désignés par les termes de « radio

FM ». D’un côté, nous avons un

1. PETIT RAPPEL SUR LA

émetteur modulant un signal audio

sur une fréquence donnée (entre

RADIO LOGICIELLE

87,5 et 108 MHz) et de l’autre des

récepteurs, démodulant le signal

Historiquement, la réception et l’émission de

et restituant le son (postes radio,

L’emplacement pour

signaux radio ont été rendues possibles par la créa-

autoradios, etc.). Tout ceci est

l’antenne utilise un

tion de montages électroniques, d’abord à base de

entièrement matériel.

connecteur SMA

lampes puis de transistors. La technique consiste

comme la plupart des

à émettre des ondes électromagnétiques générées

La radio logiciel e, ou SDR en

équipements SDR,

et non RP-SMA,

par un circuit matériel et à les réceptionner de la

anglais pour Software Defined

plus courant sur les

même façon avec un autre circuit.

Radio, délègue une partie du

équipements Wifi par

traitement du signal à des pro-

exemple. Différentes

Pour véhiculer des informations via ces ondes,

grammes. La réception se fait,

leds permettent de

qu’il s’agisse de sons, de signaux intermittents

visualiser l’état et le

bien entendu, avec un matériel

(type morse) ou de données, on les mélange avec

fonctionnement du

dédié, mais les données brutes

périphérique.

desquel es doivent être extraites

les informations sont numérisées

par un convertisseur analo-

gique-numérique et envoyées à

un système informatique. C’est

là que l’aspect logiciel prend le

relais, pour toutes les tâches de

traitement comme le filtrage, la

décimation (sous-échantillonnage

pour ne garder qu’une partie des

données brutes), la démodulation,

le décodage et la restitution de

l’information transportée.

Cette technique n’est pas

récente, mais jusqu’à il y a

environ 5 ans les équipements

permettant de recevoir des

signaux radio, les numériser

et les envoyer à un PC, par

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Pour al er plus loin en radio logiciel e : HackRF One exemple, étaient relativement

un coût un peu supérieur, d’avoir un matériel encore plus

rares, coûteux et implicitement

adapté à la réception radio logiciel e, mais se basant sur

réservés à un public averti. Les

les mêmes composants et en particulier le même conver-

choses ont changé il y a quelques

tisseur analogique-numérique Realtek RTL2832U.

années grâce à quelques

Pour utiliser un tel matériel, qu’il s’agisse d’un récep-

développeurs Linux qui se sont

teur TNT/DVB-T ou d’un produit revu et corrigé, il suffit

aperçus que les périphériques

de le connecter à son PC, son Mac, sa tablette Android

USB de réception TNT (DVB-T)

ou sa Raspberry Pi en USB, puis d’utiliser l’un des nom-

n’étaient constitués que de deux

breux logiciels gratuitement disponibles (certains sont

éléments matériels : un tuner

des logiciels libres) : SDR#, Gqrx, HDSDR, Linrad, SDR

chargé de recevoir les signaux

Touch, etc.

radio (puce Elonics E4000), et

un convertisseur analogique-

Ces logiciels vous permettent de régler la fréquence

numérique (Realtek RTL2832U)

de réception, d’explorer les signaux, de les démoduler

envoyant le signal numérisé via

et d’extraire les informations utiles. Ce sont généra-

une connexion USB. L’ensemble

lement des outils génériques très intéressants pour

du traitement du signal jusqu’à

débuter et/ou explorer les ondes. En plus de ces outils,

l’affichage de l’image était

un certain nombre de programmes, souvent en ligne

donc fait de façon entièrement

de commandes, sont plus spécialisés et permettent de

logiciel e et il s’est avéré possible

col ecter des données, décoder des signaux spécifiques

de recevoir bien plus que la TNT

ou encore de calibrer votre récepteur.

avec ces périphériques : le projet

Enfin, nous avons l’incontournable GNU Radio, une

RTL-SDR venait de naître.

boîte à outils extrêmement complète doublée d’une

La disponibilité et le faible

interface graphique (GNU Radio Companion) permettant

coût de ce qui est à présent dési-

de construire de toutes pièces toute la partie logiciel e

gné sous le terme de « récep-

d’un ensemble de réception SDR, en fonction de ses

teur RTL-SDR » ont permis à

besoins.

toute une légion d’amateurs, de

Le gain de popularité du domaine, l’investissement de

programmeurs et d’ingénieurs

départ minime, la disponibilité du matériel et la masse

d’expérimentés dans le domaine

d’information en ligne disponible (en anglais) rendent

de la radio logiciel e, d’explorer

aujourd’hui l’initiation à la radio logiciel e et à l’exploration

librement le domaine. En quelques des ondes plus que jamais accessible par tout un cha-années, une masse importante

cun. Mais entre recevoir des signaux et en émettre, il y a

de projets, de documentations, de

presque tout un monde. .

logiciels et de supports pédago-

giques ont vu le jour.

Un certain nombre d’utilisateurs 2. LE HACKRF ONE

ont également entrepris de pous-

Début 2012, Michael Ossmann, initialement ingénieur

ser le matériel à ses limites en y

en sécurité informatique, décide de créer un périphérique

apportant des modifications per-

SDR à partir de zéro, plus performant que les récepteurs

mettant d’en augmenter la qualité

RTL-SDR et surtout capable d’émettre en plus de rece-

ou d’ajouter des fonctionnalités.

voir. Le périphérique, nommé HackRF One, voit ainsi

Ces hacks et modifications ont

le jour via l’entreprise que Michael a créée, Great Scott

conduit à une nouvel e génération

Gadgets, pour fabriquer une autre de ses créations,

de récepteurs USB, intégrant ces

l’Ubertooth, une plateforme d’expérimentation autour des

modifications et permettant, pour

technologies Bluetooth.

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

HACKABLE MAGAZINE n°16

39

RADIO & FRÉQUENCES

SDR

270€ et 340€ selon la source

et, vous l’avez compris, ce n’est

pas tout à fait la même tranche

budgétaire qu’un récepteur RTL-

SDR à moins de 30€. Il est vain

de comparer les deux types de

produits pour la simple raison que

le HackRF permet d’émettre et ne

repose pas du tout sur la même

architecture. Le fait est que ce

périphérique est le moins cher de

sa catégorie, face au BladeRF

x40 ou x115 de Nuand à quelques

500€ ou 1000€, ou encore aux

USRP d’Ettus Research entre

700€ et plus de 5000€ !

En plus de la capacité d’émettre

des signaux, le HackRF possède

des caractéristiques très intéres-

santes, même en réception :

• Une plage de fréquences

À l’intérieur du

très importante, entre 1 MHz

HackRF One, on

trouve les connecteurs

Le HackRF One, comme l’Ubertooth, est un

et 6 GHz. Ceci, comparé

d’extension

matériel libre (ou open source hardware en an-

aux récepteurs RTL-SDR

permettant d’étendre

glais). Bien que la définition soit relativement floue

avec une gamme générale-

les fonctionnalités

ou de connecter,

(ou interprétable à sa convenance), un matériel

ment située entre 24 Mhz et

par exemple, un

libre ou open source, comme un logiciel libre ou

1,7 GHz donne accès, entre

oscillateur plus stable

open source, offre une ouverture et des libertés

autres, aux bandes utilisées

et plus précis pour les

quant à son utilisation, sa reproduction et sa modi-

par le Wifi, le Bluetooth ou

applications de type

GPS et GSM.

fication. Dans le cas du HackRF One, Michael

encore les modules à base

fournit l’ensemble des éléments qui composent

de nRF24L01.

son périphérique (schémas, outils, documentation,

• Une fréquence d’échantil-

circuits, logiciels internes, etc.) tout en permettant

lonnage jusqu’à 20 mil ions

leur reproduction et leur modification. Technique-

d’échantillons par seconde

ment et légalement, n’importe qui disposant des

(20 MS/s). Cette caracté-

connaissances et des moyens adéquats peut

ristique, qui n’est que de

construire, produire et vendre des HackRF One

2,4 MS/s est la quantité de

(ce qui est d’ail eurs effectivement arrivé puisque

mesures par seconde qui

Gareth Hayes a lancé, il y a 2 ans, une campagne

peuvent être faites en numé-

de financement col aboratif Indiegogo pour pro-

risant le signal. Ceci impacte,

duire le HackRF Blue, un clone du HackRF One à

entre autres choses, la largeur

coût réduit).

de bande qu’il est possible

Le HackRF One est disponible à la vente en

d’observer en une fois. Avec

France sur Amazon par Great Scott Gadgets

un HackRF One et en calant

directement ou par NooElec, ainsi que chez

le récepteur, par exemple sur

Passion Radio Shop. L’objet vous coûtera entre

100 Mhz, il sera donc possible

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Compléter ma

collection en

papier ou en

M’abonner ?

PDF ?

Me réabonner ?

Pouvoir consulter la base

documentaire de mon

magazine préféré ?

C’est simple... c’est possible sur :

http://www.ed-diamond.com

 ... OU SÉLECTIONNEZ VOTRE OFFRE DANS LA GRILLE AU VERSO ET

RENVOYEZ CE DOCUMENT COMPLET À L’ADRESSE CI-DESSOUS !

Voici mes coordonnées postales :

Société :

Nom :

Prénom :

Adresse :

Les Éditions Diamond

Service des Abonnements

Code Postal :

10, Place de la Cathédrale

68000 Colmar – France

Ville :

Tél. : + 33 (0) 3 67 10 00 20

Pays :

Fax : + 33 (0) 3 67 10 00 21

Téléphone :

E-mail :

Vos remarques :

 Je souhaite recevoir les offres promotionnelles et newsletters des Éditions Diamond.

 Je souhaite recevoir les offres promotionnelles des partenaires des Éditions Diamond.

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

HACKABLE MAGAZINE n°16

41

En envoyant ce bon de commande, je reconnais avoir pris connaissance des conditions générales de vente des Éditions Diamond à l’adresse internet suivante : http://boutique.ed-diamond.com/content/3-conditions-generales-de-ventes et reconnais que ces conditions de vente me sont opposables.

ABO_formulaire2016_mags_R2.indd 15

29/09/2016 11:39

VOICI TOUTES LES OFFRES COUPLÉES AVEC HACKABLE !

RADIO & FRÉQUENCES

XXXXXX

POUR LE PARTICULIER ET LE PROFESSIONNEL ...

H+

H

G+

G

F+

F

E+

E

D

HK

Offre

* HK :

Les abréviations des of

CHOISISSEZ V

LES COUPLAGES « GÉNÉRAUX »

LES COUPLAGES « EMBARQUÉ »

ABONNEMENT

Prix

SUPPORT

MISC

HK*

HK*

HK*

HK*

HK*

HK*

HK*

HK*

HK*

HK*

6

6

6

6

6

6

6

6

6

6

6

Attention : La base Documentaire de Hackable n’est pas incluse dans l’of n°

n°

n°

n°

n°

n°

n°

n°

n°

n°

n°

TTC en Euros / France Métropolitaine

+

+

+

+

+

+

+

+

+

+

fres sont les suivantes : LM = GNU/Linux Magazine France | HS = Hors-Série | LP

HS 2

OS 4

OS 4

OS 4

OS 4

OS 4

OS 4

OS 4

OS 4

OS 4

n°

n°

n°

n°

n°

n°

n°

n°

n°

n°

+

+

+

+

+

+

+

+

+

GLMF

GLMF

GLMF

MISC

MISC

O

11

LP 6

LP 6

LP 6

LP 6

11

11

6

6

TRE OFFRE !

n°

n°

n°

n°

n°

n°

n°

n°

n°

+

+

+

+

+

+

MISC

HS 6

HS 3

6

HS 3

HS 6

HS 2

n°

n°

n°

n°

n°

n°

+

+GLMF 11 n°

fre.

H+1

H1

G+1

G1

F+1

F1

E+1

E1

D1

HK1

Réf

P

= Linux Pratique | OS = Open Silicium | HC = Hackable

APIER

T

301,-

200,-

129,-

100,-

183,-

125,-

1

105,-

arif TTC

19,-

65,-

39,-

PAPIER + PDF

H+12

H12

G+12

G12

F+12

F12

E+12

E12

D12

HK12

Réf

PDF 1 lecteur

T

452,-

300,-

194,-

150,-

275,-

188,-

179,-

158,-

arif TTC

98,-

58,-

DOCUMENT P

1 connexion BD

APIER + BASE

H+13

H13

G+13

G13

F+13

F13

E+13

E13

D13

Réf

493,-*

402,-*

193,-*

164,

287,-*

229,-*

193,-*

179,-*

T

85,-*

arif TTC

AIRE

- *



PDF 1 lecteur + 1 connexion BD

BASE DOCUMENT

H+123

H123

G+123

G123

F+123

F123

E+123

E123

D123

Réf

PAPIER + PDF +

T

639,-*

499,-*

258,-*

214,-*

379,-*

292,-*

253,-*

232,-*

1

arif TTC

18,-*

AIRE

PRO OU PARTICULIER = CONNECTEZ-VOUS SUR :

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

http://www.ed-diamond.com pour consulter toutes les offres !

ABO_formulaire2016_mags_R2.indd 16

10/11/2016 10:13

Pour al er plus loin en radio logiciel e : HackRF One d’observer les signaux entre

courant continu. Un exemple est le LNA4ALL, un

90Mhz et 110Mhz, contre

petit amplificateur faible bruit prenant place entre le

97,6 Mhz et 102,6 Mhz avec

connecteur d’antenne du HackRF et l’antenne el e-

un récepteur RTL-SDR.

même. Celui-ci peut être alimenté de façon externe

• Tout comme avec les maté-

ou, dans sa configuration Bias-T (ou bias tee),

riels RTL-SDR, les échantil-

directement par le HackRF One.

lons sont encodés sur 8 bits.

Tout ce charabia technique n’est sans doute pas clair

Ceci représente la résolution

si vous débutez en radio logiciel e ou n’avez, pour l’heure,

maximum de chaque échan-

fait que quelques essais avec un récepteur RTL-SDR et

til on ou tranche numérisée.

une application comme SDR# ou Gqrx. Dans les grandes

Comparé à un BladeRF et

lignes, le HackRF One, du point de vue de la réception,

ses échantil ons 12 bits, le

peut opérer sur bien plus de fréquences, en vous per-

HackRF One se place donc

mettant de voir plus de signaux à la fois, tout en offrant

en retrait sur ce point, mais

davantage de fonctionnalités. Ceci, en plus de la capacité

pour la moitié du prix.

d’émettre des signaux, justifie à mon sens parfaitement

l’investissement de quelques 300€. . à condition que vous

• Des amplificateurs contrô-

en fassiez quelque chose, bien entendu.

lables à plusieurs étapes

du cheminement du signal.

Ceci permet de régler le gain

3. UTILISATION DU HACKRF

(l’amplification) avec une plus

grande précision et donc

ONE

d’arriver à capter des signaux

Le HackRF One, comme le BladeRF ou les récepteurs

faibles, normalement noyés

RTL-SDR, bénéficie d’un support dans la plupart des logi-

dans le bruit de fond, tout en

ciels que ce soit sous Windows, Mac OS ou GNU/Linux.

limitant la distorsion pour les

Attention cependant, car si tous les récepteurs RTL-SDR,

signaux plus forts.

quel que soit leur coût, origine et qualité, partagent le

• Plusieurs connecteurs

même support (pilote, prise en charge, outils spécifiques,

internes permettant d’ajou-

etc.) et sont compatibles entre eux, ce n’est pas le cas du

ter des cartes d’extension

HackRF One. En d’autres termes, il faut que l’application

(existantes ou faites maison).

ou l’outil en ligne de commandes que vous al ez utiliser,

Un excel ent exemple est le

supporte directement le HackRF One.

PortaPack H1 permettant

Les applications génériques, de SDR# à GNU Radio

d’utiliser le HackRF One de

en passant par Gqrx et RF Analyzer (Android) prennent

manière autonome en fournis-

généralement en charge tous les périphériques les plus

sant un écran, une batterie,

populaires, et donc le HackRF One. Certains outils

une interface utilisateur et

cependant, souvent utilisables en ligne de commandes,

différentes applications.

sont spécifiques aux périphériques RTL-SDR. C’est le cas,

• Une possibilité logiciel e

par exemple de rtl_power dont nous avons parlé dans

pour alimenter une antenne

Hackable n°9, de Dump1090 pour la réception des signaux

active ou un amplificateur

ADSB des aéronefs ou encore de rtl_433 permettant

externe directement par le

de décoder et d’afficher les messages de très nombreux

connecteur d’antenne. Le

produits utilisant les fréquences autour de 433 Mhz

HackRF One est en mesure

(télécommandes, sondes météo, caril on, etc.). Il existe

d’alimenter ainsi un montage

cependant parfois des déclinaisons « HackRF » de ces

en 3,3V jusqu’à 50mA en

outils, souvent parfaitement fonctionnel es, en attendant

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

HACKABLE MAGAZINE n°16

43

RADIO & FRÉQUENCES

SDR

que l’ensemble des outils et applications ne

Pour cela, nous al ons utili-

passent sur SoapySDR, un support unique pour

ser GNU Radio Companion, un

plus d’une douzaine de périphériques différents.

HackRF One et, idéalement, un

Il n’est pas possible, dans cet article, de couvrir

récepteur RTL-SDR pour vérifier

tout ce qu’il est envisageable de faire avec un

notre transmission. Je pars ici du

HackRF One, car l’étendue des possibilités

principe que si vous vous intéres-

offertes par un simple périphérique RTL-SDR est

sez au HackRF One, vous avez

déjà énorme, et si l’on ajoute la capacité d’émettre,

sans doute déjà investi, comme

cela démultiplie d’autant les possibilités. Nous

moi, dans un ou plusieurs récep-

al ons donc nous concentrer sur un exemple

teurs économiques de ce type

pratique simple et classique consistant à repérer

(si ce n’est pas le cas, ce n’est

un signal, l’enregistrer et le réémettre pour prendre

sans doute pas une bonne idée

la place de l’émetteur initial.

de commencer avec un HackRF

One). Ce complément au HackRF

Notre victime sera, une fois n’est pas

One est relativement important

coutume, une télécommande de prise électrique.

pour vous assurer que vous trans-

De marque AquaFORTE, cel e-ci utilise une

mettez bel et bien le bon signal

fréquence de 433,92 Mhz et une modulation

sur la bonne fréquence.

similaire à cel e que nous avons étudiée dans le

numéro 12 avec un autre modèle. Le message

La première étape de notre

envoyé par la télécommande à la prise et la façon

expérience consistera à, tout

dont il est encodé n’est pas important ici. Nous

d’abord, repérer le signal qui nous

al ons, en effet, nous en tenir à l’émission radio

intéresse. Pour cela, dans GNU

el e-même et profiter des avantages offerts par

Radio Companion nous utiliserons

le HackRF One pour enregistrer le signal et le

un bloc « osmocom Source »

rejouer.

en spécifiant une fréquence de

Le graphique

présente deux

pics lorsque la

télécommande est

utilisée. Celui de

gauche n’a rien à

voir avec le signal,

il s’agit d’un artefact

du convertisseur

analogique/

numérique appelé

« DC spike ». Le pic

de droite en revanche

provient de la

télécommande et est

pile sur 433,92 Mhz.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Pour al er plus loin en radio logiciel e : HackRF One

Notre diagramme

GNU Radio

réception proche de cel e de la

DC spike, systématiquement présent en réception SDR.

Companion nous

télécommande, sans pour autant

Certains supports dans les logiciels SDR permettent

permet d’utiliser

être précisément la même. Ici, la

de masquer ce signal, mais techniquement parlant il

le HackRF One et

mention « 433,92 Mhz » est pré-

est toujours présent. Or, ici, nous voulons enregistrer

d’enregistrer les

signaux reçus sous

sente sur la télécommande el e-

ce que nous recevons et le rejouer, si le DC spike est

forme de données

même et nous réglons donc

mélangé au signal convoité, il sera plus difficile de le

brutes dans un

la fréquence sur 433,85 Mhz

filtrer et de réutiliser notre enregistrement.

fichier, tout en

les visualisant en

(433.85e6). La fréquence

Pour stocker notre réception dans un fichier,

temps réel.

d’échantillonnage ou sample rate

inutile de démoduler quoi que ce soit. Il nous suffit

peut être réglée jusqu’à 20000000

d’enregistrer les données brutes (raw) fournies par

avec le HackRF One, mais nous

le matériel. Cel es-ci prennent la forme d’une série

nous contenterons de 2000000.

de deux valeurs en virgule flottante, formant de

Pour observer le signal, nous

concert un nombre complexe, désigné sous le nom de

ajoutons un bloc « QT GUI

données I/Q ou de signal numérique en quadrature.

Frequency Sink », puis connec-

Je ne rentrerai pas dans le détail ici, car ce n’est pas

tons les deux blocs en cliquant

pertinent pour l’exercice, mais j’ai expliqué ce principe

sur l’étiquette bleue du premier

dans le second numéro de la revue.

puis cel e du second. Il ne reste

Pour enregistrer ces données, nous ajoutons à notre

plus qu’à exécuter le diagramme

diagramme un bloc « File Sink » en précisant un nom

et observer ce qui se passe en

de fichier dans ses propriétés et le connectons à la

pressant le bouton de la télé-

sortie du bloc « osmocom Source ». À présent, ce que

commande.

nous al ons voir en lançant l’exécution sera enregistré

Bien entendu, nous voyons

immédiatement dans le fichier.

apparaître le signal de la télécom-

Nous pouvons ensuite immédiatement vérifier l’enre-

mande, précisément sur la fré-

gistrement en créant un nouveau diagramme qui va

quence attendue. Pourquoi ne pas

apparaître sous la forme d’un onglet et ajouter un bloc

avoir réglé la réception sur cette

« File Source » en spécifiant notre fichier, ainsi qu’un

fréquence ? Tout simplement en

nouveau bloc « QT GUI Frequency Sink ». Mais atten-

raison de l’autre pic qui apparaît

tion ! En connectant simplement ces deux éléments,

de façon continue. Celui-ci pro-

rien dans le diagramme ne précise le débit de données,

vient du convertisseur ADC pré-

contrairement au diagramme précédent, cadencé par le

sent dans le HackRF One, c’est le

taux d’échantil onnage du bloc « osmocom Source ».

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

HACKABLE MAGAZINE n°16

45

RADIO & FRÉQUENCES

SDR

Il nous faut donc ajouter un nouveau bloc,

• Notre enregistrement contient

« Throttle » (« accélérateur » ou « étrangleur ») qui

du bruit, une masse énorme

va contrôler le débit en fonction du taux d’échantil on-

de bruit, qui n’est pas gênant

nage spécifié (à 2000000 donc). En exécutant notre

en réception, mais qui, une

nouveau diagramme, nous voyons exactement la

fois amplifié va être émis en

même chose que lors de la capture, à la différence

même temps que le signal qui

que, par défaut, une fois les données du fichier par-

nous intéresse, sur toute la

courues, le processus recommence en boucle.

bande de fréquences utilisée

À ce stade, il pourrait être tentant d’ajouter, tout

(de 2 Mhz de large !).

simplement, un bloc « osmocom Sink », alter ego

Il nous faut donc réduire les

de « omsocom Source », mais pour l’émission de

données au seul signal qui nous

données/signaux, et tout bonnement le connecter

intéresse et pour ce faire, nous

à la sortie du bloc « File Source » (en supprimant

al ons commencer par ajouter un

« Throttle »). Mais nous avons plusieurs problèmes :

bloc « Simple Squelch ». Celui-

ci permet de rendre muet des

• L’enregistrement ne contient pas uniquement

signaux s’ils sont en dessous d’un

le signal qui nous intéresse, mais également le

DC spike

certain niveau de puissance. En

dont nous avons parlé précédemment

rejouant notre enregistrement,

(et peut-être d’autres signaux). En envoyant les

nous pouvons facilement visuali-

données au HackRF One, nous al ons donc

ser la puissance de notre signal

aussi émettre un signal sur la fréquence corres-

exprimée en décibels (dB). Nous

pondant à ce pic.

pouvons alors utiliser cette valeur

• Nous devons amplifier le signal reçu avant de

dans les propriétés du bloc en

l’émettre, car il ne peut pas être transmis aussi

guise de seuil (threshold), ici à

faiblement qu’il a été enregistré.

-35 dB.

En utilisant notre

fichier et en filtrant

les signaux qu’il

contient, nous

arrivons à isoler

uniquement

ce qui nous

intéresse. On voit

ici clairement que

seule une bande

de fréquences

données est

conservée. Le bruit

en bleu est limité

à quelques -80 dB

alors que notre

signal, en brun/

vert monte à -7 dB.

Notez la présence

du DC spike, mais

très fortement

atténué.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Pour al er plus loin en radio logiciel e : HackRF One

Ce diagramme final

permet d’utiliser notre

enregistrement, filtrer son

Ceci règle une partie du pro-

Il nous suffit maintenant de connecter les blocs

contenu en ne gardant

blème, mais il ne s’agit pas d’un

que ce qui nous intéresse

les uns aux autres (« File Source », « Throttle »,

filtre, et lorsque notre signal

pour ensuite l’envoyer

« Simple Squelch », « Band pass Filter » puis

au HackRF One. Notez

dépassera le seuil, l’ensemble des

« QT GUI Frequency Sink ») et d’exécuter le

les deux blocs inférieurs

données sera utilisé, y compris le

diagramme pour visualiser le résultat. Bien

formant un ensemble

bruit et le DC spike. De plus, notre

totalement séparé nous

entendu, les propriétés définies vont totalement

permettant, avec un

signal est extrêmement faible, nous dépendre du signal reçu et de l’enregistrement récepteur RTL-SDR en

devons l’amplifier. Un bloc appelé

effectué. À ce stade, il s’agit de jouer avec

supplément, de visualiser

« Band pass Filter » nous permet

ces réglages jusqu’à obtenir un signal le plus

le signal émis par le

de régler ces deux points en une

HackRF One.

« propre » possible.

fois puisqu’il permet de ne laisser

Une fois satisfait du résultat, il est temps de

passer qu’une « bande » donnée

passer à l’émission en ajoutant le bloc « osmo-

de fréquence et de spécifier un

com Sink », en paral èle à « QT GUI Frequency

gain pour augmenter la puissance

Sink » et en supprimant « Throttle » devenu alors

du signal qui nous intéresse.

inutile. Dans les propriétés, on prendra soin de

En ajoutant ce bloc, nous pou-

régler la fréquence d’émission exactement sur

vons spécifier dans ses propriétés

cel e que nous avons utilisée pour la capture

une fréquence de coupure haute et

et l’enregistrement. N’oubliez pas, notre signal

basse ainsi qu’une largeur de tran-

n’est pas pile sur cette fréquence. On règlera

sition (pour avoir une atténuation

également l’amplification (IF gain) entre 1 et 47,

graduel e en limite de la bande spé-

en commençant par une valeur réduite et en aug-

cifiée). Ici, j’utiliserai respectivement

mentant jusqu’à obtenir une réaction de la prise

les valeurs de 50 KHz, 100 Khz et

télécommandée.

30 Khz, limitant effectivement le

À ce stade, si vous possédez un récepteur

filtrage à une bande de 50 Khz de

RTL-SDR, il est intéressant de l’utiliser en

large, isolant notre signal.

ajoutant un nouveau bloc « omsocom Source »

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

HACKABLE MAGAZINE n°16

47

RADIO & FRÉQUENCES

SDR

L’exécution du

diagramme final

nous présente deux

graphiques. En

haut, notre signal

filtré tel qu’envoyé

au HackRF One et

en bas ce même

signal détecté par le

périphérique RTL-

SDR. Et comme on

peut s’y attendre, la

prise télécommandée

réagit comme si

nous avions utilisé la

télécommande...

et en le connectant à un nouveau bloc « QT GUI Frequency

CONCLUSION

Sink ». Ceci nous permettra de voir le signal effectivement

émis par le HackRF One. Pour que Gnu Radio puisse faire la

Comme vous pouvez le

différence entre les deux périphériques utilisés, nous devons

constater, le HackRF One bien

changer les propriétés des deux blocs osmocom. On règlera

que pouvant être utilisé comme

le « Device Argument » de l’un à hackrf= suivi de la fin du

un récepteur RTL-SDR avec

numéro de série du HackRF One et l’autre à rtl=0 pour

les applications courantes, ne

utiliser le premier récepteur RTL-SDR présent.

délivre son réel potentiel qu’à

condition de mettre en œuvre

En exécutant le diagramme, la prise télécommandée réagit des outils et des techniques plus et nous visualisons aussi bien le signal utilisé par le HackRF

avancés, nécessitant générale-

One que celui détecté par le récepteur RTL-SDR. On pourra

ment davantage d’investissement

ensuite ajuster le gain dans les propriétés de « osmocom

personnel. Il ne s’agit pas d’un

Sink » pour augmenter la puissance du signal si besoin.

jouet et même si de nos jours

Cette démonstration est transposable à bien des

certains ont tendance à dépen-

produits utilisant une communication radio. Sonnette sans

ser facilement quelques 600€

fil, télécommande de porte de garage, sondes diverses,

pour un smartphone dernier cri

et même parfois certaines télécommandes d’ouverture

pour remplacer un précédent

centralisée de véhicule. Inutile cependant de vous le rappeler, modèle encore parfaitement dans tous les cas, n’utilisez et ne testez que vos propres

fonctionnel, ces quelques 300€

produits et instal ations, et restez toujours dans les bandes représentent une somme à ne

de fréquences ISM !

pas investir à la légère.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Pour al er plus loin en radio logiciel e : HackRF One

Il faut également comprendre

que le HackRF One reste une

solution économique et financiè-

rement accessible (par rapport à

d’autres matériels) et, bien enten-

du, que cela impacte ses perfor-

mances et caractéristiques. Deux

reproches sont généralement

évoqués à propos de ce périphé-

rique : l’absence de ful -duplex et

le manque de précision de l’oscil-

lateur interne.

Le HackRF One fonctionne

en half-duplex, il peut recevoir

et émettre, mais pas en même

temps. Michael Ossmann, au

moment où j’écris ceci, finalise

une carte d’extension pour le

HackRF One, appelée Neapolitan

Board, permettant d’ajouter cette

fonctionnalité au HackRF One.

Pour le coût d’un simple ajout,

il sera donc bientôt possible de

corriger ce problème sans avoir

à investir, par exemple, dans un

Nuand BladeRF.

L’architecture interne du HackRF

One n’a pas grand-chose à voir

commande est toujours quelque part entre

Concernant la stabilité de

avec celle d’un récepteur RTL-

Shenzhen et l’Alsace (j’espère).

l’oscil ateur, dans l’état actuel des

SDL si ce n’est dans les grandes

choses, la plupart des utilisations

lignes. On voit ici clairement

Là encore, tout ceci est relativement

deux des principaux éléments du

envisageables avec un HackRF

technique et demande des connaissances

périphérique, un microcontrôleur

One sont parfaitement réalisables.

plus avancées que la simple utilisation

NXP et un composant

Si en revanche, vous souhaitez

d’applications plus « ludiques ». En

programmable appelé FPGA de

chez Xilinx. Ces deux éléments

étudier des signaux et standards

poussant davantage dans ce sens, c’est

traitent les données issues

nécessitant une grande précision

selon moi, à ce moment que les choses

du convertisseur analogique/

(GPS, GSM, etc.), vous al ez

deviennent réel ement amusantes. Ceci

numérique (et numérique/

rencontrer des difficultés. Là

demande du temps, beaucoup d’investis-

analogique) avant transmission

en USB. Ces deux éléments

encore, une modification simple

sement et de recherches, mais c’est en

peuvent être reprogrammés pour

du HackRF One est possible, en

arrivant finalement à programmer un outil

améliorer le fonctionnement

lui fournissant un signal d’horloge

pour le HackRF One qu’on se rend réel e-

du HackRF One (mise à jour)

de 10 Mhz plus stable (via l’entrée

ment et pleinement compte de son utilité et

ou accueillir des programmes

destinés à un usage spécifique.

CLKIN ou le port d’extension).

son intérêt.

Ceci prend généralement la forme

Acquérir un HackRF One ou tout autre

d’un oscil ateur TCXO (0,5 ppm),

matériel du même type, n’est pas la simple

monté sur un circuit et enfiché

dépense d’une somme conséquente, mais

dans le HackRF One. Je n’en

plutôt un engagement à vous torturer

ai pas encore fait l’essai, ma

l’esprit et surtout à aimer ça. . DB

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

HACKABLE MAGAZINE n°16

49

DÉMONTAGE, HACKS & RÉCUP

CARTE À PUCE

FAITES PEUR À VOS AMIS

EN LISANT LEUR CARTE

BANCAIRE !

Denis Bodor

Oui, c’est un titre accrocheur... C’est fait exprès, je n’ai pas pu me retenir. Dans les faits ce qui va suivre n’a absolument rien d’illégal rassurez-vous. Le but est avant tout de faire prendre conscience

au plus grand nombre la présence de technologies que vous ne

soupçonnez pas nécessairement et qui sont partout autour de vous, y compris dans votre poche, bien cachées dans votre porte-feuille...

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Faites peur à vos amis en lisant leur carte bancaire !

Même si j’évoque les termes de « carte ban-caire » dans le

titre de l’article, le sujet ou plutôt

l’outil que nous al ons découvrir ici

ne se limite pas à cela. Cardpeek,

de son petit nom, permet de lire le

contenu de smartcards respectant

le standard ISO/IEC 7816. Ce

standard se divise en 4 parties

définissant le format physique

de la carte jusqu’à la syntaxe

des données qui lui permettent

de communiquer. Il est amusant

d’ail eurs de remarquer que ISO

Nous transportons

7816-1 est ce qu’on appel e géné-

partout avec nous

une quantité non

ralement, dans le langage familier,

• cartes SIM des téléphones mobiles ;

négligeable de cartes

un « format carte de crédit », 85 x

• cartes d’assuré social Vitale 2 ;

de toutes sortes :

54 x 0,76 mm (peut-être utile afin

• porte-monnaie électroniques Moneo ;

carte bancaire, titre

de transport, carte de

d’impressionner un interlocuteur

• chronotachygraphes numériques (qui remplacent

fidélité, carte d’assuré

dans une discussion).

les « disques » papiers des camionneurs) ;

social, etc. Avec nous

où que nous allions

Cardpeek est l’œuvre d’Alain

• cartes OpenPGP permettant le chiffrement et la

et pourtant, nous

Pannetrat et est une application

signature avec PGP/GnuPG ;

ne savons pas ce

disponible pour GNU/Linux,

• cartes Mifare Classic de NXP (cf. Hackable

qu’elles contiennent

Windows et macOS. Nous al ons ici

réellement. Jetons

n°10).

donc un œil...

en faire usage, bien entendu, avec

une Raspberry Pi puisque l’outil

existe dans Raspbian sous forme

1. LE MATÉRIEL NÉCESSAIRE

de paquet installable d’un simple

petit coup de

Cardpeek est en mesure de lire le contenu de

sudo apt-get

cartes à puce et de cartes sans contact, mais ceci

install cardpeek (qui instal e

également

demande, bien entendu l’utilisation de périphériques

cardpeek-data).

Cardpeek est capable de lire et

spécifiques. Cardpeek n’accède cependant pas

interpréter les informations de :

directement aux périphériques ni même aux cartes,

mais passe par un intermédiaire, un service, prenant

• cartes EMV : typiquement les

la forme d’un démon PC/SC (pour Personal Compu-

cartes bancaires, VISA,

ters with Smart Cards). Il vous faudra donc instal er

MasterCard, etc. ;

ce service en plus de Cardpeek sur votre Raspberry

• passeports biométriques sans

Pi, via les paquets pcscd et pcsc-tools.

contact ;

Vient alors la problématique du lecteur ou plutôt

• cartes d’identité belges eID ;

des lecteurs. Si vous comptez explorer le domaine,

• titres de transport de type

il vous faudra deux types de lecteurs : un lecteur de

Navigo/Calypso et compa-

smartcard (carte à puce) et un lecteur sans contact

tibles (MOBIB, VIVA, RavKav,

(RFID/NFC). Ce second type a déjà été évoqué

etc.) ;

dans les pages du numéro 10 et en particulier dans

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

HACKABLE MAGAZINE n°16

51

DÉMONTAGE, HACKS & RÉCUP

CARTE À PUCE

Voici le matériel utilisé pour cet article, en compagnie d’une Raspberry Pi. Tous ces lecteurs fonctionnent sans le moindre problème avec PC/

SC et Cardpeek et vous permettront d’en apprendre beaucoup sur ce l’article sur l’utilisation d’un lecteur NFC avec

que vous avez réellement dans vos poches...

une Pi. Le modèle le plus couramment utilisé

est l’ACR122U d’ACS que vous trouverez

pour moins d’une trentaine d’euros sur eBay

par exemple. Ce n’est pas le modèle de meil-

Ce minuscule lecteur de smartcards pliable de SCM est sans

leure qualité, en particulier pour jouer avec

le moindre doute mon préféré. Tellement plus pratique qu’un

les tags NFC, mais il est directement pris en

lecteur standard et son câble, c’est un accessoire parfait pour

charge par le service PC/SC contrairement

le plus curieux et le plus impulsif des bidouilleurs...

à un modèle plus intéressant, le SCL3711

de SCM (très intéressant pour une utilisation

avec la libNFC, mais pas compatible CCID

et donc presque inutilisable avec PC/SC et

Cardpeek).

En ce qui concerne les cartes à puce, la

grande majorité des lecteurs sont compatibles

CCID et sont donc reconnus directement. Une

simple recherche de « smartcard reader CCID »

vous remontera une bonne quantité d’offres de

vendeurs eBay, mais tantôt également des sites

comme Banggood ou DealeXtreme. Pour les

essais faits durant la rédaction de cet article,

trois lecteurs ont été utilisés :

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Faites peur à vos amis en lisant leur carte bancaire !

• un lecteur SCM SCR335 relativement ancien ;

• un lecteur SCR 355 provenant d’une offre réservée aux abonnés TER afin de recharger leur abonnement en ligne ;

• et un adorable lecteur SCM SCR3500 pliable que je qualifierai très scientifiquement de

« parfaitement trop choupy mignon » :)

Un point très important doit être pris en considération concernant le lecteur RFID/NFC ACS

ACR122U : sa prise en charge par le noyau Linux sous la forme de deux modules chargés automatiquement (pn533 et nfc). Le support du noyau est un héritage direct du lien de parenté qui existe entre GNU/Linux et Android. Le noyau Linux est en effet au cœur d’Android, un système fonctionnant majoritairement sur smartphones et tablettes, du matériel généralement équipé de supports et de contrôleurs NFC. Ici cependant, cette prise en charge directe interfère avec le fonctionnement de PC/SC.

Ainsi à la connexion du lecteur ACR122U sur votre Pi, le noyau déclenche la prise en charge du matériel (sortie de la commande dmesg) :

usb 1-1.5: New USB device found, idVendor=072f, idProduct=2200

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

usb 1-1.5: Product: ACR122U PICC Interface

usb 1-1.5: Manufacturer: ACS

nfc: nfc_init: NFC Core ver 0.1

NET: Registered protocol family 39

pn533 1-1.5:1.0: NFC: NXP PN532 firmware ver 1.6 now attached

usbcore: registered new interface driver pn533

De de fait, lors du test du lecteur avec la commande pcsc_scan, le service PC/SC attend qu’un lecteur soit disponible indéfiniment :

$ pcsc_scan

PC/SC device scanner

V 1.4.23 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr> Compiled with PC/SC lite version: 1.8.11

Using reader plug’n play mechanism

Scanning present readers...

Waiting for the first reader...

Le problème est, bien entendu, que cette disponibilité n’arrive jamais puisque le noyau

« accapare » le périphérique qui n’est plus utilisable par ail eurs. Il faut donc explicitement dire au noyau d’ignorer ce matériel. Ceci se fait en ajoutant un fichier /etc/modprobe.d/

blacklist-libnfc.conf dans le système, contenant les noms des modules qui ne doivent jamais être chargés :

blacklist pn533

blacklist nfc

Après un petit redémarrage de la Pi (ou un déchargement manuel des modules avec sudo rmmod), le branchement provoque, au niveau noyau, une simple notification de connexion d’un périphérique USB :

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

HACKABLE MAGAZINE n°16

53

DÉMONTAGE, HACKS & RÉCUP

CARTE À PUCE

usb 1-1.4: new full-speed USB device number 4 using dwc_otg

usb 1-1.4: New USB device found, idVendor=072f, idProduct=2200

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

usb 1-1.4: Product: ACR122U PICC Interface

usb 1-1.4: Manufacturer: ACS

Côté test avec pcsc_scan, on peut alors voir que le lecteur est maintenant bien pris en charge et en attente d’une carte ou d’un tag à lire :

$ pcsc_scan

PC/SC device scanner

V 1.4.23 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr> Compiled with PC/SC lite version: 1.8.11

Using reader plug’n play mechanism

Scanning present readers...

0: ACS ACR122U PICC Interface 00 00

Fri Dec 2 11:03:04 2016

Reader 0: ACS ACR122U PICC Interface 00 00

Card state: Card removed,

2. UTILISONS CARDPEEK

Dès le lancement,

Cardpeek est une application graphique, el e devra donc être lancée depuis l’envi-Cardpeek vous

demande de

ronnement graphique PIXEL (qui est en réalité le gestionnaire de fenêtres OpenBox et sélectionner le lecteur

l’environnement LXDE avec un thème Raspberry Pi, il faut rendre à César ce qui est à à utiliser. Ceux-ci sont

César) ou en déportant l’affichage graphique sur une autre machine (ça tombe bien, il mis à disposition par le

y a un article sur le sujet dans ce numéro).

service PC/SC, si votre

lecteur n’apparaît pas

Le fonctionnement de Cardpeek est très intéressant et très bien pensé. Il est en dans la liste, assurez-réalité, en lui-même, une interface graphique chargée de dialoguer avec PC/SC pour vous que celui-ci n’a

pas été pris en charge

obtenir des informations des cartes ou tags, mais le travail d’analyse et de traitement directement par le noyau

de ces informations est fait par un ensemble de scripts écrits en langage Lua. Un jeu Linux, le rendant alors

de scripts est livré de base avec Cardpeek, mais cette architecture modulaire vous inaccessible par PC/SC.

permet, avec un peu d’efforts et de connaissances de

base, d’ajouter aisément vos propres scripts ou ceux

d’autres utilisateurs, pour d’autres cartes et tags.

Au démarrage de l’application, vous serez invité à

choisir le lecteur à utiliser. Dans bien des cas, il n’y en

aura qu’un, directement mis à disposition par le service

PC/SC (sauf si vous avez connecté le lecteur ACR122U

et un lecteur de cartes à puce en même temps).

Le bouton Analyzer en haut à gauche affichera un

menu des diverses options d’analyse de cartes dispo-

nibles (fournis par les scripts Lua par défaut). « atr »

est un script très basique permettant simplement

d’afficher l’ATR (Answer To Reset) d’une carte ou

d’un tag. C’est le message automatiquement envoyé

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Faites peur à vos amis en lisant leur carte bancaire !

lorsqu’il ou el e est réinitialisé(e)

et qui fournit des informations

sur le type de carte ou de tag.

Cardpeek peut, avec ces infor-

mations, tenter de déduire le

modèle, l’identité et l’utilité

d’une carte.

Mais le plus intéressant est

sans le moindre doute les autres

scripts disponibles et en particu-

lier l’entrée EMV du menu. Cel e-

ci vous permettra de col ecter et

d’afficher des données relatives

à une carte bancaire, que ce

soit avec un lecteur de carte à

puce ou l’ACR122U et une carte

disposant de la fonctionnalité de

paiement sans contact.

Les informations affichées

dépendent totalement du type

de carte, de son modèle et

Le lecteur des informations d’une carte bancaire supportant le paiement sans contact des fonctionnalités intégrées.

conduit parfois à des résultats très surprenants. Ici, ma carte Visa Gold me liste mes Il est intéressant de noter que

dernières transactions avec, comme ici, un paiement/achat de 26,18€ le 1er décembre...

d’anciennes cartes (peut-

être maintenant arrivées à

expiration) étaient vraiment très

La carte Navigo utilisée pour les tests contient en plus des informations personnelles sur le

« bavardes » en fournissant, par

porteur, un journal complet d’événements associés avec date, heure et lieux d’utilisation.

exemple le nom du porteur. Une

Effrayant !

véritable « fuite » d’informations

personnelles, en particulier

dans le cas d’une lecture sans

contact. Mais actuel ement, ces

informations sont beaucoup plus

limitées, mais toujours assez

impressionnantes.

Ma carte Visa Gold, par

exemple, fournit sans authentifi-

cation particulière, les dernières

transactions effectuées avec le

montant et la date sur une plage

d’environ deux mois. D’autres

modèles comme ma Visa

« standard » (bleue) d’une autre

banque ne fournit pas ces infor-

mations, pas plus que la Master-

Card d’une de mes col ègues.

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

HACKABLE MAGAZINE n°16

55

DÉMONTAGE, HACKS & RÉCUP

CARTE À PUCE

Notez que l’accès à ce type de

données ne présente aucun risque

pour la carte el e-même et en par-

ticulier pour le compteur de code

PIN. En effet, aucune authentifi-

cation n’est nécessaire pour les

obtenir, en d’autres termes le code

PIN n’est pas demandé. CardPeek

et le script EMV se limitent à la

consultation d’informations non

sécurisées, non protégées (mais

qui peut-être devraient l’être).

D’autres scripts et d’autres

cartes peuvent également être uti-

lisés, via une lecture avec contact.

C’est le cas, par exemple, de la

carte d’assuré social Vitale 2 pré-

sentant différentes données, par-

mi lesquel es nom, prénom et date

Une carte Vitale 2 contient bien plus d’informations que le script associé ne permet de de naissance de l’assuré ainsi que

traduire. On voit ici simplement le nom du porteur et son numéro d’assuré. Le reste est son NIRPP ou NIR (le bon vieux

relativement inintelligible pour le commun des mortels.

« numéro de sécu »). D’autres

informations sont présentes dans

Cardpeek est également capable de lire le contenu de cartes SIM de téléphones la carte, mais le script associé

mobiles. Ceci, à condition d’entrer le code PIN correct, vous permettra entre autres ne les décode pas et se contente

choses de récupérer le répertoire de contacts qui s’y trouve (et pouvoir réserver une d’afficher les données brutes.

table dans votre restaurant préféré, ouf, sauvé !).

Il vous est également possible

de lire des titres de transport

Calypso et compatibles comme

les cartes Navigo. N’ayant pas

à disposition une carte récente

de ce genre, je ne saurai être

totalement affirmatif quant aux

données contenues et dispensées

actuel ement. La carte usager en

ma possession a plus de 6 ans

et ne dispose pas de technologie

sans contact, mais el e fournit

joyeusement un lot d’informations

personnel es ainsi qu’un

journal complet d’événements

avec dates, heures et lieux

d’utilisation dans le métro parisien.

J’espère sincèrement que ce

genre d’informations n’est pas

accessible en mode sans contact

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Faites peur à vos amis en lisant leur carte bancaire !

avec les nouvel es cartes, voire ne

POUR FINIR

sont plus accessibles du tout sans

authentification. .

Il est très amusant, à l’aide

d’une Pi et de lecteurs adaptés, de

La technologie Calypso n’est

s’amuser à tenter de lire toutes les

pas utilisée que par la RATP,

cartes qui nous passent sous la

mais également par la SNCF ainsi

main. Mais il y a là quelque chose

que par des infrastructures de

de bien plus important. Jusqu’au

transport en commun de plusieurs

moment de faire ces manipula-

grandes vil es. Ici en Alsace par

tions pour la première fois (il y

exemple, les abonnements de

a plusieurs années), j’étais tota-

travail TER SNCF (carte Alséo)

lement ignorant du fait que ces

utilisent cette technologie, mais

informations étaient présentes

le script dédié ne semble pas en

et aussi facilement accessibles.

mesure d’interpréter les données

Même si la plupart du temps,

correctement, car el es sont

ces « fuites » sont bénignes, je

organisées de façon différente

trouve important d’en avoir plei-

d’un passe Navigo. Quoi qu’il en

nement conscience et d’en faire

soit, il est intéressant de noter

l’expérience par soi-même. C’est

Ne jetez pas le support

sur lequel est livrée

que les abonnés TER peuvent

une chose de l’apprendre via un

votre carte SIM. Non

« recharger » leur abonnement

article, un bil et sur un blog ou via une vidéo en

seulement vous y

mensuel directement en ligne, via

ligne, c’en est une autre de le voir, le constater de

trouvez des informations

un site dédié (service Dom’TER)

son propre chef.

qui peuvent être très

importantes pour

et un périphérique USB, vendu

Le monde des smartcards est captivant et ceci

débloquer la carte en

à l’abonné pour 5€. Il s’avère

s’applique au sens large du terme. J’inclurai ici,

cas de problème, mais

en réalité que le périphérique

en plus cela fera office

maladroitement et de façon erronée, dans cette

de support pour lire

en question est un lecteur

désignation tout autant les cartes à puces, les tags

une carte SIM avec un

SCM Microsystems SCR 355,

RFID/NFC, mais également les cartes et supports

lecteur standard : un

parfaitement utilisable avec

à piste magnétique. Toutes ces choses passent

petit morceau d’adhésif

PC/SC et Cardpeek. .

et le tour est joué !

dans notre vie comme de simples consommables

Enfin, un autre script intéres-

sans qu’on leur prête un quelconque intérêt tech-

sant intégré à Cardpeek est celui

nique et pourtant, il s’agit souvent de condensés

permettant de lire les cartes SIM

de technologie capables de vous faire passer des

de mobiles « GSM ». Attention

nuits blanches.

cependant, le code PIN de la carte

Cardpeek est un « point d’entrée » intéressant,

est demandé, il y a donc un risque

car il permet de se familiariser avec ces technolo-

de blocage en cas de nombre

gies (sauf les pistes magnétiques) et petit à petit

de tentatives infructueuses trop

en comprendre et en appréhender le fonctionne-

important. L’accès à une carte SIM ment. Si le domaine vous intéresse, il vous sera vous permettra, par exemple, de

relativement aisé d’al er plus loin en tentant de

lister les contacts qu’el e contient.

rédiger vos propres scripts ou d’améliorer ceux

Chose qui peut être relativement

déjà existants (Cardpeek dispose d’un manuel, en

pratique en cas de problème, si

anglais, très complet de ce point de vue). Prenez

votre smartphone est endommagé

garde cependant, c’est un jeu auquel on se prend

et que vous ne disposez pas

facilement, fouil ant, explorant et essayant de

d’autres solutions pour récupérer

percer les mystères et la signification de chaque

votre répertoire.

donnée... DB

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

HACKABLE MAGAZINE n°16

57

DÉMONTAGE, HACKS & RÉCUP

ÉLECTRICITÉ

GRAVEZ LE BOIS AVEC DE

L’ÉLECTRICITÉ !

Denis Bodor

L’électricité est quelque chose de fantastique ! Elle éclaire et chauffe nos lieux de vie et de travail, nous permet de communiquer, remplace avantageusement d’autres formes d’énergies, prolonge et sauve des vies, anime nos bien aimés ordinateurs et smartphones...

La fée électricité est partout, louée de tous pour son utilité, mais elle est également artiste à ses heures en dessinant pour le plaisir de nos yeux de magnifiques et intrigantes figures...

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Gravez le bois avec de l'électricité !

ATTENTION !

Les explications qui vont

suivre impliquent l’utili-

sation de tensions très

importantes et leur mise en

œuvre présente un risque

d’électrocution ou d’électri-

sation. Cet article détaille

la mise en œuvre de tech-

niques et de pratiques qui

sont présentées dans un

but purement pédagogique.

Ni l’éditeur, ni le magazine,

ni moi-même ne saurions

être tenus responsables

en cas d’accident si vous

tentez de reproduire ces

manipulations.

Disons-le clairement : ces

manipulations sont très dan-

gereuses et comportent des

risques. C’est à vous d’agir

en personne responsable,

de respecter les principes

de sécurité élémentaires

Figure de Lichtenberg

et de prendre toutes les

capturée dans un bloc

mesures de protection

d’acrylique de 8 cm

de côté, ici illuminé

nécessaires pour minimi-

par une led bleue

ser les risques d’accident.

(Source Wikipédia,

Utiliser des hautes tensions

photographie par

ne doit pas être fait à la

Bert Hickman, www.

teslamania.com).

légère, vous DEVEZ être

L’un des plus impressionnants phéno-

mènes électriques existant dans la

nature est sans le moindre doute la

foudre. Magnifique, impressionnante,

terrifiante parfois pour certains, capri-

cieuse, indomptable. .

conscient des risques et

Indomptable ? Pas si sûr ! Certes, il n’est pas ques-

agir en conséquence.

tion de jouer avec des mil ions de volts, bien que cela

reste possible à simuler (mais pas par nous), mais

de simplement tenter de retrouver, de capturer et de

conserver l’esprit et l’aspect de ce phénomène, au

point d’en faire une forme d’art.

Le physicien al emand Georg Christoph Lichtenberg

a eu la même idée en 1777 et a donné son nom à ces

« gravures » qu’on appel e à présent des figures de

Lichtenberg. Son idée consistait à utiliser un géné-

rateur capacitif afin de construire et accumuler une

charge électrostatique importante et la décharger

rapidement à la surface d’un matériau isolant

afin de conserver, tracés dans de la poussière,

le chemin et le dessin de cette décharge.

Inventant un principe qui est encore utilisé

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

HACKABLE MAGAZINE n°16

59

DÉMONTAGE, HACKS & RÉCUP

ÉLECTRICITÉ

Voici le dispositif

expérimental utilisé : un

transformateur de four

aujourd’hui dans les imprimantes laser (électro-

l’acrylique et le fracture. La forme

micro-onde, équipé en

photographie), Lichtenberg laissa ainsi et grâce de la décharge, similaire à cel e série sur le secondaire

à ses recherches (et bien d’autres choses), son

de la foudre (qui est également

d’un fusible et d’un

nom dans l’histoire.

une décharge électrostatique

condensateur, avec

une diode en parallèle.

Aujourd’hui encore, cette même technique

disruptive), reste gravée dans la

L’ensemble de ces

est utilisée pour produire ces figures dans

masse, créant de captivantes et

éléments provient du

four.

des blocs d’acrylique (polyméthacrylate de

uniques sculptures.

méthyle ou PMMA). Ceux-ci sont chargés

À ce stade, vous vous dites

par exposition à un faisceau d’électrons qui,

« Je n’ai pas d’accélérateur

en raison de leur énergie et leur vitesse,

linéaire sous la main, mais Denis

pénètrent dans l’isolant, décélèrent et y restent

va m’expliquer comment en faire

« coincés ». La charge accumulée atteint

un avec un trombone, du papier

une tel e densité et une tel e tension dans le

de chewing-gum et une vieil e

support qu’on flirte alors avec le claquage

lampe de poche ». Désolé, mais

(tension de claquage). On frappe alors le

non, je ne suis pas MacGyver

support avec une pointe, pénétrant légèrement

(incompatibilité capillaire), mais

le support et le claquage se produit,

ce que je peux vous proposer en

déchargeant en une fraction de seconde le

revanche est quelque chose d’un

matériau. Cette décharge crée des chemins de

peu plus accessible, pour obtenir

conduction dans le support, formant des arcs

les mêmes figures, plus calme-

électriques à haute température qui fondent

ment, gravées sur du bois.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Gravez le bois avec de l'électricité !

1. À LA

Et plus exactement, comment y parvenir sans mettre

RECHERCHE DE

nos vies en danger de façon inconsidérée ?

Dès lors qu’on parle de ce genre de choses et qu’on

VOLTS... DE PLEIN se renseigne sur le sujet, un élément apparaît rapide-PLEIN DE VOLTS ! ment récurrent : le transformateur de four micro-onde.

C’est une solution économique, facilement accessible

Vous l’avez compris, pour

et. . souvent une très mauvaise idée.

obtenir un quelconque résultat,

Un four micro-onde repose sur un élément appelé

nous avons besoin d’une tension

magnétron. Celui-ci permet de générer une onde élec-

suffisante. Certes, le fait d’utili-

tromagnétique à une fréquence plus ou moins précise

ser un support comme le bois et

qui excite les molécules d’eau, ce qui génère alors de

de ne pas utiliser de décharges

la chaleur. Pour fonctionner, un magnétron nécessite

électrostatiques nous dispense

l’utilisation d’une haute tension de l’ordre de quelques

d’avoir recours à des centaines de

2000 ou 4000 volts. De ce fait, en démontant un vieux

mil iers de volts, mais le principe

four micro-onde et en récupérant le transformateur et

que nous al ons mettre en œuvre

quelques autres composants, on dispose alors d’une

nécessite tout de même plusieurs

source de haute tension parfaitement utilisable. Mais. .

milliers de volts.

et ce « mais » est capital, un four micro-onde nécessite

La question est donc : com-

également beaucoup de courant qui n’est limité que par

ment obtenir une tel e tension ?

les caractéristiques du transformateur lui-même.

Le bois n’est pas

suffisamment

conducteur pour

permettre le

passage du courant.

Il est donc humidifié

avec une solution de

carbonate de soude

ou de sel, dans

l’eau.

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

HACKABLE MAGAZINE n°16

61

DÉMONTAGE, HACKS & RÉCUP

ÉLECTRICITÉ

Ces transformateurs utilisent

le courant domestique (230V) et

sont composés de deux bobines :

une primaire reliée à l’alimentation

domestique et une secondaire

fournissant quelques 2000 volts

avec un courant de l’ordre de

0,5 ampères en fonctionnement

standard. Cette seconde bobine

est d’une part reliée au châssis du

transformateur et d’autre part au

magnétron, ainsi qu’à un conden-

sateur et une diode de puissance.

Le problème ici n’est pas tant

la tension, mais le courant. Si

vous utilisez ce type de solution

pour obtenir une haute tension,

en cas de contact avec la sortie

Voici la toute première tentative de réalisation d’une figure de Lichtenberg. On voit du transformateur, c’est un demi-clairement le tracé se former petit à petit en plusieurs endroits et le parcours du ampère qui traversera massive-courant chauffant le tracé déjà formé.

ment votre corps. Là, nous ne

parlons pas d’une « châtaigne »

Lors de la mise hors tension, et après déconnexion, il est plus que probable que vous laissant le bras engourdi

le condensateur soit encore pleinement chargé. Il convient alors de relier les deux quelques minutes, mais d’un

électrodes pour le décharger. Prudence étant mère de sûreté, une règle métallique risque réel et important de décès

au bout d’un long manche à balai en bois est la solution la plus prudente que j’ai imaginé... eh oui, avec les gants en prime !

par électrocution !

Pire encore, comme le trans-

formateur forme une isolation gal-

vanique entre le courant domes-

tique et votre montage, les sys-

tèmes de protection qu’il s’agisse

d’un fusible, d’un disjoncteur ou

d’un interrupteur différentiel, ne

fonctionneront pas. En effet,

du point de vue de l’instal ation

électrique, la bobine primaire du

transformateur ne présentera pas

de fuite à la terre et ne dépassera

probablement pas la valeur maxi-

mum de courant admise, le cou-

rant continuera donc de circuler

dans votre corps sans interrup-

tion. Sachant qu’avec ce genre

de tensions, les contractions

musculaires peuvent parfaitement

vous « col er » littéralement au

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Gravez le bois avec de l'électricité !

La formation de la

conducteur, on parle ici de mort

ou tension maximum qu’un milieu peut supporter

figure s’accompagne

généralement d’un

quasi certaine si les conditions

avant la formation d’un arc électrique, de l’air est

dégagement important

jouent en votre défaveur.

de l’ordre de 3000V par mil imètre. Je vous laisse

de fumée. On voit ici

faire le calcul, mais vous l’avez compris, ici il n’est

sur la gauche un arc

La tension en œuvre, l’absence

électrique établissant

pas même nécessaire d’entrer en contact avec un

de protection, et les risques liés

un pont entre l’électrode

conducteur pour se mettre en danger.

et une zone davantage

à la technique que je vais décrire

conductrice. Ceci

rendent l’utilisation d’un transfor-

Ce qui nous amène donc à la solution que

provoque une brûlure

mateur de micro-onde infiniment

j’avais initialement choisi d’utiliser : le transforma-

et parfois l’apparition

plus dangereux qu’un choc élec-

teur pour enseignes néon (ou NST, de l’anglais

d’une flamme. Le risque

d’incendie est un autre

trique lié au « courant secteur ».

neon-sign transformer). Celui-ci est un équipe-

point important à prendre

Vous ne démontez pas une prise

ment destiné à alimenter des tubes originel ement

en compte dans ce genre

de courant sous tension, car cela

remplis avec du gaz néon pour des enseignes

d’expérience.

présente un risque, alors ne jouez

publicitaires. Notez que ce qu’on appel e souvent

pas inconsciemment avec quelque

par erreur des « tubes néon » devrait être norma-

chose qui peut, et va, vous tuer au

lement désigné par « tube fluorescent ». Nous ne

moindre faux pas.

parlons pas ici de bal ast pour ce type de tubes,

mais d’un tout autre type de luminaires.

Une autre option que j’ai éga-

lement vue mise en œuvre pour

Ces transformateurs présentent à mon sens

ce genre de chose est le trans-

plusieurs avantages. Ils fournissent une tension

formateur flyback généralement

importante, entre 2000 et 15000 volts, mais avec

présent dans les écrans à tube

un courant limité à quelques 15 à 30 mA. Le dan-

cathodique. Là, le problème est

ger est toujours là, bien sûr, mais dans une tout

sensiblement différent, car le cou-

autre échel e qu’avec un composant démonté

rant en sortie, de l’ordre de 20mA

d’un four micro-onde. Ils sont également prévus

est bien moindre, mais la tension

et fabriqués pour être utilisés comme des blocs

beaucoup plus importante, pou-

d’alimentation. De ce fait, ils sont protégés, encas-

vant al er jusqu’à 35000 V (crête à

trés dans un boîtier, isolés, souvent scel és et

crête). Avec ce genre de tension

résistants aux manipulations, exactement comme

très importante, la formation d’un

l’alimentation de votre ordinateur portable. Enfin,

arc électrique devient un énorme

il s’agit d’objets conçus et manufacturés en fonc-

problème. La rigidité diélectrique

tion des caractéristiques qu’ils possèdent et donc

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

HACKABLE MAGAZINE n°16

63

DÉMONTAGE, HACKS & RÉCUP

ÉLECTRICITÉ

Voici ma première

figure que je jugerai

équipés de connecteurs et de câbles adaptés aux

Je fais mention ici de cette

comme acceptable

sur un morceau de

tensions fournies (le plus souvent très souples et

mésaventure pour que vous ne

contreplaqué. On

gainés de silicone).

fassiez pas la même erreur. Ces

peut voir clairement la

alimentations pour néon sont de

forme caractéristique

Ce type de transformateurs se trouve générale-

plus en plus courantes, car plus

rappelant celle de

ment sur les sites d’enchères en ligne ou dans les

la foudre ou des

polyvalentes que le transforma-

boutiques web spécialisées dans les enseignes

décharges d’une

teur ferromagnétique classique et

bobine Tesla.

lumineuses et vous coûtera quelques 50€ pièce

adaptables à plusieurs modèles

(en cherchant bien). J’ai acquis deux exemplaires

d’enseignes. Pour produire des

de ce type de transformateur sur eBay auprès d’un

figures de Lichtenberg, il vous

vendeur anglais (tinytimjukeboxes). Il s’agit de mo-

faut un transformateur classique

dèles SP226V fabriqués par Evertron, fournissant

et non à découpage (ou électro-

3200V/24mA en 30KHz. Compacts, ils sont acti-

nique), plus difficile à trouver et

vables via un interrupteur connecté par une ficel e

surtout plus lourd (frais de port en

(isolant) et disposent d’un potentiomètre permettant

conséquence).

d’ajuster la luminosité du tube où ils sont normale-

ment connectés. Mais. . il ne fonctionnent pas pour

J’ai donc été obligé de me

ce type d’application ! En effet, il s’agit de « transfor-

rabattre sur la solution la plus

mateurs » à découpage s’ajustant automatiquement

dangereuse, littéralement terrifié

à la puissance nécessaire à l’alimentation d’un tube

à l’idée de faire une erreur. Chose

et cette fonctionnalité interdit leur utilisation ici (le

non seulement légitime, mais

transformateur ne détecte tout simplement pas de

également salvatrice. Le principe

tube, et pour cause).

est exactement le même que pour

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Gravez le bois avec de l'électricité !

d’autres appareillages comme

le passage du courant, le carbone étant plus conducteur

les outils électroportatifs ou les

que la solution, il offre moins de résistance au passage

machines d’atelier : c’est lorsque

du courant, et la brûlure se propage lentement en direc-

vous n’en avez plus peur que vous

tion de l’autre électrode. Les petites imperfections de

al ez faire une bêtise et qu’un acci-

la fibre du bois, la non-uniformité de l’application de la

dent va arriver.

solution, impactent le parcours du courant et guident de

manière chaotique le tracé du dessin.

2. DES FIGURES

Il en résulte des figures fractales où la moindre brûlure

ouvre un chemin pour le courant et propage l’effet. Le

DE LICHTENBERG tout guidé, dans les grandes lignes, par la position des électrodes.

SUR DU BOIS

Pour initier le passage du courant, il faut un élément

Le principe en œuvre ici est fort

partiel ement conducteur. L’eau pure n’est pas conduc-

simple, même s’il n’est pas aussi

trice, c’est pourquoi on utilise généralement un additif. Le

impressionnant qu’une décharge

sel est généralement la solution la plus simple et écono-

électrostatique faisant apparaître

mique, mais donne des résultats moyens tout en ayant

subitement la figure souhaitée. Il

un impact sur le bois et sa couleur. On peut alors préférer

consiste à utiliser un morceau de

le bicarbonate de soude, tout aussi facile à trouver en

bois, qui n’est pas suffisamment

supermarché, ou mieux encore, le carbonate de soude.

conducteur par lui-même et de

l’humidifier avec une solution de

Une solution de carbonate de soude est plus conduc-

carbonate de soude. On dispose

trice que cel e au bicarbonate. On obtiendra très facile-

ensuite les deux électrodes à

ment l’un à partir de l’autre, en chauffant le bicarbonate

chaque bout du support et on met

à une température de 100°C. Ceci peut être fait dans un

en marche le transformateur.

four classique (pas micro-onde). Il vous suffira de placer

le bicarbonate de soude dans un plat, enfourné pour une

Le courant qui circule alors fait

bonne heure et celui-ci se transformera en carbonate.

chauffer les électrodes qui brûlent

Notez cependant que le carbonate de soude, plus préci-

le bois. Cette carbonisation facilite

sément, le carbonate de sodium est irritant sur la peau,

Le circuit utilisé est

presque identique à

celui du four micro-

onde. Seule une

bobine secondaire

n’est pas utilisée ici,

celle fournissant une

basse tension avec

un courant important,

reliée au filament du

magnétron. Notez

que le secondaire

utilisé voit l’une de

ses connexions

reliées au châssis du

transformateur et à la

terre.

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

HACKABLE MAGAZINE n°16

65

DÉMONTAGE, HACKS & RÉCUP

ÉLECTRICITÉ

Une autre recommandation

importante : brûler du bois dégage

de la fumée, beaucoup de fumée.

Il est donc de bon ton de faire

ce genre de choses à l’extérieur

ou dans un local bien ventilé, et

d’éventuellement prévoir un sys-

tème d’extraction, même improvi-

sé (un aspirateur d’atelier fait mer-

veil e pour ce genre de choses).

La procédure en el e-même

est donc relativement simple :

humidifier le bois avec la solution

conductrice, positionner les élec-

trodes et activer l’alimentation,

Un vieux morceau de bois, poncé avec

pour voir la figure se dessiner plus

plus ou moins de rigueur peut trouver

ou moins lentement.

une seconde jeunesse une fois marqué

contrairement au bicarbonate de

par ce procédé. Mes différents essais

sodium. Mieux vaut donc utiliser

avec le présent sujet m’ont permis

un récipient réservé pour cet

d’apprendre que le ponçage jusqu’à

usage et éventuel ement mettre

3. CONSEILS DE

obtenir une surface bien lisse est

généralement indispensable pour un

des gants. Je rappel e, à toutes

SÉCURITÉ

résultat acceptable.

fins utiles, que le carbonate de

soude ou le bicarbonate de soude

Vous l’avez compris, technique-

n’est pas de la soude caustique

ment, réaliser ces figures n’est pas

(hydroxyde de sodium). Ne jouez

compliqué. Tout cela consiste à

pas avec la soude pour ce genre

le faire de la manière la plus sûre

d’application !

possible. Dans un premier temps,

Voici la face la

plus réussie de

cette pièce, les

autres ne méritant

malheureusement

pas d’être prises en

photo. La technique

doit encore être

améliorée jusqu’à

arriver à une

bonne probabilité

de réussite. On

voit clairement ici

l’impact des fibres

du bois sur le tracé

de la figure, qui

semble découpée

en tranches

horizontales... Ça

m’apprendra à faire

preuve de laxisme

dans mon ponçage !

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Gravez le bois avec de l'électricité !

ôtez-vous cette idée même de l’es-

prit. Il n’y a pas de façon sûre de

faire circuler un demi-ampère sous

4000V dans un morceau de bois

couvert d’un liquide conducteur !

C’est une opération dangereuse et

cela le restera quoi que vous fas-

siez. La seule manière d’être 100%

sûr qu’il ne vous arrivera rien est

de tout simplement vous abstenir

de le faire. Et c’est précisément ce

que je vous conseil e.

Pour ceux d’entre vous qui n’ont

Gros plan sur l’une des

pas l’intention de suivre ces sages

Ne portez pas de bijoux ou d’objets pouvant

électrodes en cours de

tracé. Ici, celle-ci est

paroles, que je n’ai moi-même

entrer en contact avec le montage. Pas de bagues, de

placée en bordure du

pas suivi, voici quelques conseils

clés, de pendentif, de montre, de smartphone. .

support afin d’éviter

élémentaires de prudence (que j’ai

Travaillez avec un éclairage suffisant. Vous

de laisser une « zone

vide » et on constate

suivis à la lettre). Il n’y a pas d’ordre

devez être en mesure de voir ce que vous faites et

clairement que le

à cette liste, tout est important.

d’envisager au mieux la situation.

médium ou MDF,

composé de particules

Ne faites pas confiance aux

Séparez clairement la zone de préparation et

de bois compressés,

interrupteurs. Débrancher le

la zone d’expérimentation. Tout ce qui peut être

permet un rendu bien

dispositif est le seul moyen d’avoir

fait loin de la source de courant doit l’être. Ces expé-

plus fin que le bois

standard naturel, car

la garantie qu’il n’est pas sous

riences impliquent de l’eau, qui ne fait jamais bon

parfaitement plat et

tension. À chaque fois que j’ai

ménage avec de l’électricité. Éloignez la solution, la

lisse.

manipulé l’installation, celle-ci

visserie, les outils. . de la zone d’expérimentation.

était physiquement déconnectée

Quelques pas de plus ne sont pas chers payés face

de toute alimentation.

au risque de renverser le carbonate de soude en

solution sur l’alimentation.

Ne travaillez pas seul. Ayez

quelqu’un à proximité en mesure

Portez des gants et des chaussures isolants.

de chercher du secours en cas

Achetez-vous des gants isolants électriques adaptés

d’accident et de vérifier que votre

aux tensions utilisées (classe 1) et isolez-vous du

propre protocole de sécurité est

contact avec le sol. N’oubliez pas que vous manipu-

respecté. Expliquez clairement à

lez également un liquide susceptible de laisser pas-

cette personne en quoi consistent

ser le courant et qu’il peut donc compromettre votre

vos manipulations et quels sont

isolation.

les risques.

Vérifiez tout, plusieurs fois avant chaque mani-

Ne laissez rien traîner. Un

pulation ou mise en route. Vérifiez, vérifiez, et revé-

environnement propre et rangé

rifiez encore. Lorsque vous êtes absolument sûr que

est un environnement plus sûr.

tout est en ordre. . vérifiez encore une fois ! N’assu-

Cette remarque est valable pour

mez jamais de quoi que ce soit, assurez-vous-en.

bien d’autres choses. La dernière

Méfiez-vous du condensateur. Déchargez le

chose que vous voulez c’est tré-

condensateur en reliant les deux électrodes, une fois

bucher sur un câble ou un bout de

le montage hors tension et déconnecté de l’alimen-

bois qui traîne et tomber sur votre

tation domestique. Mettez toujours le condensateur

dispositif sous tension.

en court-circuit lorsque le montage n’est pas utilisé.

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

HACKABLE MAGAZINE n°16

67

DÉMONTAGE, HACKS & RÉCUP

ÉLECTRICITÉ

Pensez à ce que vous faites et à rien d’autre. Votre atten-

barrières impossibles à franchir, soit

tion doit être entièrement dirigée vers vos manipulations. Si

des canaux où circule le courant

vous avez autre chose en tête, faites une pause et remettez-

en ligne droite. Le contreplaqué

vous à l’ouvrage l’esprit vide et clair. Si vous êtes fatigué,

est plus réceptif à la gravure, mais

remettez au lendemain, tout sera encore là, et vous aussi.

ne donne pas d’aussi bons résul-

Enfin, utilisez la règle de la main dans le dos (ou de la

tats qu’une plaque en aggloméré

main dans la poche). Ne manipulez le montage, même hors

comme celles généralement utili-

tension, même le condensateur déchargé, qu’avec une seule

sées pour les fonds de placards ou

main, la seconde étant placée dans votre dos (ou dans une

de tiroirs. Un ponçage est néces-

poche). Ceci ne garantit pas votre survie à un choc électrique,

saire pour permettre l’humidification

mais minimise le risque qu’une décharge passe par votre

et la pénétration de la solution.

cœur, et l’arrête.

La solution à base de sel ou de

carbonate de soude s’évapore rapi-

dement. Les électrodes ont ten-

4. TECHNIQUES ET ASTUCES

dance à chauffer, tout comme les

canaux carbonisés qui se forment

Les images qui il ustrent cet article proviennent d’une jour-

et où circule le courant. Aux abords

née entière d’expérimentation. Durant ce temps, j’ai découvert

de la figure, le liquide disparaît

un certain nombre de points intéressants.

jusqu’à ce que le courant ne passe

Le support est important pour de bons résultats. Il semblerait

plus. Doser la quantité de solution

que plus le bois est plat et lisse, plus les figures sont fines et vi-

à appliquer est dépendante du

sibles. Un morceau de bois à peine dégrossis, plein de veines et

support et de son absorption. Ce

de relief semble favoriser le passage du courant dans les endroits n’est pas une science exacte, il est où le liquide stagne. Les craquelures et fissures forment soit des

nécessaire de tâtonner à chaque

Après maints essais,

les résultats se font

de plus en plus

appréciables. Voici

celui obtenu en fin

de journée en deux

étapes. D’abord

coin supérieur droit

et inférieur gauche.

Arrêt. Déconnexion.

Application d’une

nouvelle couche

de solution et

reconnexion, via

le coin supérieur

gauche et inférieur

droit. Arrêt juste

avant le contact des

deux tracés.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Gravez le bois avec de l'électricité !

fois. Il faut également faire très

attention aux bordures du sup-

port, ayant tendance à accumuler

davantage de solution et donc à

fournir un passage préférentiel

au courant, sans créer de tracés

très artistiques. Deux ou trois

pages web préconisent d’utiliser

un vaporisateur pour humidifier le

support en cours de gravure. Ceci

me paraît être bien trop dangereux

pour être ne serait-ce qu’envisagé,

en ce qui me concerne.

L’utilisation d’un transformateur

de four micro-onde présente un

problème, car le courant fourni

est très important. La brûlure du

Gros plan d’une

support semble être bien plus

figure sur panneau

profonde que des figures réalisées

CONCLUSION ET

de particules.

avec un transformateur pour tubes

PERSPECTIVES

On distingue

bien chaque

néon. Ceci est particulièrement

petit chemin

visible lorsque les deux tracés

En débutant mes expérimentations, j’avais bon espoir

emprunté par le

qui se dessinent finissent par se

d’obtenir rapidement des résultats magnifiques. Ceci

courant ainsi que

rejoindre. Un arc électrique unique

n’a, bien entendu, pas été le cas. C’est en forgeant qu’on

le canal général

en direction

se forme, et un courant important

devient forgeron, paraît-il. Je ne sais pas si cela est effec-

de l’électrode

circule, gâchant souvent une figure

tivement applicable pour le travail du métal, mais pour la

opposée.

prometteuse. Mieux vaut inter-

réalisation de figures de Lichtenberg sur bois, c’est clai-

rompre l’expérience juste avant ce

rement le cas ! En fin de journée, mes « œuvres » étaient

contact.

nettement de meil eure qualité que dans la matinée. .

Il peut être intéressant de stop-

Contrôler avec précision la tension et le courant

per le tracé, débrancher l’alimen-

semble être capital pour obtenir des tracés moins

tation, décharger le condensateur,

aléatoires. Ceci demandera cependant davantage de

déconnecter les électrodes pour

recherche pour trouver des solutions adaptées, éven-

réappliquer la solution sur le sup-

tuel ement pilotées numériquement avec un pupitre de

port et éventuel ement déplacer

contrôle et une liaison isolée par fibre optique (comme

les électrodes pour forcer le des-

c’est le cas pour le kit musical One Tesla par exemple).

sin d’une nouvel e figure qui finira

Il pourrait également être intéressant de voir comment

par rejoindre la précédente.

guider le tracé, autrement qu’en fonction de l’application

De façon générale, c’est un

de la solution de carbonate de soude. Je pense, par

processus de répétition tentatives/

exemple, à l’utilisation de graphite (crayon) permettant,

échecs, pour arriver à un bon ré-

peut-être de tracer une forme générale que la figure

sultat. Il y a toujours une part aléa-

pourrait suivre.

toire et chaque figure est unique.

Enfin, l’option des électrodes mobiles est également

Il ne faut pas partir dans l’idée que

une piste à suivre, en permettant l’utilisation sous ten-

le premier tracé sera forcément

sion et l’application en direct en des endroits précis du

une réussite.

support. DB

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

HACKABLE MAGAZINE n°16

69

EMBARQUÉ & INFORMATIQUE

LIGNE DE COMMANDES

NE PERDEZ PLUS LA

MAIN SUR VOTRE PI

GRÂCE À GNU SCREEN

Denis Bodor

Le problème n’est ni nouveau ni rare, vous travaillez en ligne de commandes sur votre Raspberry Pi et êtes interrompu. Vous aimeriez bien retrouver votre session exactement comme vous l’avez laissé, mais si vous fermez le terminal ou vous vous déconnectez, vous vous retrouverez ensuite avec un shell tout neuf. Des solutions, il en existe plusieurs, l’une d’entre elles consiste à utiliser un multiplexeur de terminal comme GNU Screen.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Ne perdez plus la main sur votre Pi grâce à GNU Screen GNU Screen fonc- plus visible, mais en attentant, il est temps de découvrir tionne un peu

quelques fonctionnalités. Vous êtes sur une ligne de

comme une fe-

commandes (dans un shell Bash) gérée par Screen

nêtre de terminal

dans une fenêtre. Cette notion de fenêtre peut être vue

dans une session

comme un équivalent aux onglets d’un émulateur de

graphique, il offre un cadre pour

terminal comme LXTerminal.

l’exécution d’un programme (typi-

Lancez la commande top permettant d’afficher les

quement un shel ). Mais à la diffé-

processus en cours d’exécution sur votre Pi. Cette

rence d’un LXTerminal qui ne fonc-

commande s’exécute de façon interactive et la liste est

tionne qu’en mode graphique, GNU

rafraîchie tant que vous n’utilisez pas la touche q pour

Screen fera de même dans une

quitter.

console ou à l’intérieur même de

LXTerminal. Il dispose de sa propre

Utilisez à présent la séquence de touches Ctrl+a

gestion d’onglets, permettant d’avoir

(souvent notée ^A) puis c. Ceci aura pour effet de créer

plusieurs lignes de commandes

une nouvel e fenêtre Screen et vous verrez alors appa-

indépendantes, mais peut aussi et

raître une nouvel e ligne de commandes. À ce stade,

surtout être mis en attente (détaché)

la commande top est toujours en fonctionnement dans

pour être « repris en main » ensuite,

la première fenêtre, mais vous disposez d’une nouvel e

depuis une autre session ou même

ligne de commandes pour travailler.

à distance.

Vous pouvez à n’importe quel moment basculer de

l’une à l’autre fenêtre en utilisant Ctrl+a Ctrl+a. Vous

1. INSTALLATION

pouvez également utiliser Ctrl+a puis la barre d’espace

qui a pour effet de passer à la fenêtre suivante (en bou-

ET PREMIERS PAS

clant sur la première une fois arrivé à la dernière). Vous

pouvez accéder directement à la fenêtre de votre choix,

Instal er GNU Screen sur votre Pi

pour les dix premières fenêtres, en utilisant Ctrl+a puis

est un jeu d’enfant puisqu’un simple

le numéro de la fenêtre (en commençant par 0). Ici,

sudo apt-get install screen

Ctrl+a 0 vous montre la fenêtre avec top et Ctrl+a 1 la

fera l’affaire et vous disposerez

nouvel e fenêtre avec la ligne de commandes.

alors de la seule commande fournie

par le paquet : screen.

Une dernière solution pour basculer d’une fenêtre

à l’autre consiste à utiliser Ctrl+a ” (guil emet de la

En lançant cette commande,

touche “3”). Ceci provoquera l’affichage de la liste des

vous serez accueil i par un message

fenêtres existantes, vous permettant une sélection avec

précisant la version utilisée et la

les flèches haut/bas et un basculement en utilisant la

licence d’utilisation, ainsi qu’une

touche Entrée. Vous remarquez, qu’en plus du numéro

invitation à utiliser la barre d’espace

de fenêtre, un nom apparaît. Il s’agit par défaut de la

pour continuer. Et là. . rien du tout.

commande avec laquel e a été ouverte la fenêtre en

Vous vous retrouvez sur la ligne de

question. Ici bash est le shell obtenu à la création de

commandes tel e qu’el e se présen-

chaque nouvel e fenêtre.

tait précédemment. Mais ne vous y

trompez pas, vous êtes à présent

Vous pouvez utiliser Ctrl+a c autant de fois qu’il vous

effectivement dans GNU Screen, en

plaît pour créer autant de fenêtres/onglets qu’il vous

faut. Mais, il va vite devenir difficile de vous y retrouver

train de faire fonctionner un shel .

puisque, par défaut, Screen ne présente pas d’informa-

Vous verrons plus loin dans

tions sur le numéro de la fenêtre courante. Une solution

l’article comment modifier la confi-

pour remédier à ce problème consiste à changer le nom

guration pour rendre cet état de fait

de vos fenêtres.

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

HACKABLE MAGAZINE n°16

71

EMBARQUÉ & INFORMATIQUE

LIGNE DE COMMANDES

Revenez par exemple sur la

fenêtre 0 (Ctrl+a 0), puis utilisez

Ctrl+a A (majuscule). Screen

vous affichera, au bas de l’écran,

un message : « Set window’s title

to: bash ». Il vous suffira alors

d’effacer « bash » et de saisir le

nom de votre choix avant de vali-

der. Dès lors, le nom affiché suite

au Ctrl+a ” correspondra à celui

que vous avez spécifié.

2. GNU SCREEN

ET CONNEXIONS

DISTANTES

Avant l’arrivée en

masse de l’informatique

Le fait de disposer de fenêtres/onglets permettant d’utiliser la ligne de commandes personnelle, les

directement depuis la console sans avoir à lancer toute l’interface graphique est une ordinateurs étaient des

chose très pratique. Mais toute la puissance de Screen se fait jour dès lors qu’il s’agit machines massives

d’une utilisation intermittente. Il peut s’agir, par exemple d’une utilisation dans un ter-auxquelles on se

connectait à l’aide de

minal graphique puis d’une reprise en mode texte ou encore via la console série, mais terminaux. Bien que

aussi et surtout de connexion réseaux.

ce type d’équipement,

principalement composé

Se connecter à distance, en ligne de commandes, sur sa Raspberry Pi se fait très d’un écran et d’un clavier,

simplement avec SSH. Il suffit de préciser l’utilisateur et l’adresse IP de destination ai presque totalement

sous la forme ssh pi@192.168.10.10 par exemple. Et, bien entendu, cela fonctionne disparu aujourd’hui, le

tout aussi bien entre un PC sous GNU/Linux et la Pi, que depuis une machine Windows terme « terminal » est

resté (Source Wikipedia

(avec Putty par exemple), un Mac (SSH est instal é par défaut) ou même une autre Pi.

& ClickRick / IBM 3486

terminal / CC BY-SA 3.0).

Le fait de lancer Screen et d’utiliser le shell de cette façon vous permet alors de détacher Screen du terminal en cours d’utilisation (série, console, graphique), de le laisser suivre son cours avec toutes les commandes qui y sont lancées, pour enfin le réattacher à un nouveau terminal.

Pour détacher Screen du terminal en cours c’est tout simple, il vous suffit d’un Ctrl+a d, et vous vous retrouverez sur votre ligne de commandes habituel e, précédée d’un message comme « [detached from 973.pts-0.raspberrypi] ». Vous pouvez alors quitter votre terminal ou même fermer votre session en console, Screen sera toujours là à vous attendre. Ceci peut être très intéressant, par exemple si vous travail ez sur la Pi directement, puis devez vous éloigner pour ensuite établir une connexion SSH. Il vous suffira alors de réattacher Screen pour retrouver vos affaires là où vous les avez laissées.

Pour retrouver une session Screen détachée, s’il n’y en a qu’une seule, il vous suffira d’utiliser screen -r. Si la session n’a pas été détachée, parce qu’el e est toujours à l’écran et que vous avez dû partir précipitamment, pas de problème, vous pouvez la détacher à distance avec screen -D ou mieux encore, la détacher et la réattacher en une fois au terminal en cours avec screen -rD.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Ne perdez plus la main sur votre Pi grâce à GNU Screen Par défaut, Screen utilisera la seule session qu’il trouvera. Rien ne vous empêche cependant de lancer plusieurs fois screen avec, pour chaque session, ses propres fenêtres/onglets.

Si plus d’une session est en cours sur la machine, il vous faudra utiliser l’option -ls pour les lister :

$ screen -ls

There are screens on:

2327.pts-0.raspberrypi (03/11/2016 15:35:32) (Detached) 973.pts-0.raspberrypi (03/11/2016 11:41:43) (Attached) 2 Sockets in /var/run/screen/S-pi.

Il vous suffira ensuite d’utiliser screen -r (ou -rD) suivi du numéro figurant en début de ligne comme, par exemple ici, screen -r 2327. Ce chiffre correspond au numéro de processus ou PID de la commande screen que vous aviez lancée, suivi de l’identifiant de terminal (pts-0) et du nom d’hôte de la machine (raspberrypi). Dans la sortie de screen -ls sont également précisés la date et l’heure du lancement de la session Screen, ainsi que l’état de cette dernière (attachée ou non).

Pour vous faciliter les choses, et si le paquet bash-completion est instal é, il ne vous sera même pas nécessaire de tout saisir. Ici, par exemple, un simple screen -r 2 suivi d’une pression sur la touche de tabulation, complètera automatiquement la ligne.

Notez que si vous prenez l’habitude de lancer plusieurs sessions de Screen sur un même système, il pourra être judicieux d’utiliser des noms particuliers afin de repérer rapidement vos sessions. Les options -t et -S sont là pour ça. En lançant par exemple screen -t configuration -S maintenance, vous démarrerez une session appelée « maintenance »

avec une première fenêtre appelée « configuration ». La sortie de screen -ls ressemblera alors à ceci :

$ screen -ls

There is a screen on:

2482.maintenance (03/11/2016 15:48:42) (Detached) 1 Socket in /var/run/screen/S-pi.

Le numéro de processus est toujours là, mais le nom spécifié vous aidera à identifier la bonne session plus rapidement.

Une autre option qui peut s’avérer très intéressante, en particulier si vous aidez quelqu’un à distance, est -x. Cel e-ci a pour effet de vous attacher à une session non détachée. De ce fait, une même session sera utilisable dans deux terminaux, ou en d’autres termes, l’écran sera alors partagé. En dehors de l’assistance, ceci pourra être utile dans le cadre d’une formation afin que l’enseignant puisse observer l’activité d’un utilisateur et même intervenir pour corriger un problème. Il lui suffira de se connecter en SSH à la machine et d’utiliser screen -x.

Toutes ces options, -r, -rD ou -x peuvent s’accompagner de -p en précisant le nom donné à une fenêtre pour directement y accéder et s’éviter une manipulation supplémentaire après avoir réattaché la session.

Enfin, pour quitter une session de Screen ou fermer une fenêtre, rien de plus simple : il vous suffit de quitter le shell qui y est lancé avec exit ou Ctrl+d. Il vous est également possible d’utiliser Ctrl+a k pour « tuer » la fenêtre et le programme qui y est en cours d’exécution. Lorsque la dernière fenêtre est fermée, Screen quitte automatiquement la session et se termine.

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

HACKABLE MAGAZINE n°16

73

EMBARQUÉ & INFORMATIQUE

LIGNE DE COMMANDES

3. PERSONNALISATION DE GNU SCREEN

L’une des principales limitations qu’on rencontre en commençant à utiliser fréquemment GNU Screen concerne le fait que l’outil soit peu loquace. En effet, l’objectif initial du projet était d’ajouter des fonctionnalités aux terminaux tout en minimisant l’aspect intrusif. La première version de GNU Screen est apparue il y a presque 30 ans, un moment où la plupart des affichages en mode console se limitaient à quelques 80 colonnes (132 avec de la chance) et 25 lignes.

Occuper ne serait-ce qu’une ligne pour afficher des informations revenait à perdre un précieux espace à l’écran.

Aujourd’hui la masse d’informations qu’il est possible d’afficher dans une console ou dans un émulateur de terminal nous permet de consacrer un peu de cet espace pour des données moins importantes que le contenu primaire.

GNU Screen utilise un fichier de configuration qu’il vous est possible de personnaliser. Il se trouve dans /etc, mais il sera préférable de ne pas toucher à un tel fichier système et de simplement composer un .screenrc placé dans votre répertoire personnel. Celui-ci sera utilisé en priorité et vous permettra d’ajuster la configuration et le comportement de GNU Screen pour l’utilisateur concerné uniquement.

Vous pouvez créer ce fichier avec votre éditeur préféré (Vim, Nano, Emacs, etc.), il s’agit d’un simple fichier texte contenant une suite de directives. Je vais vous donner ici ma configuration personnel e qui me satisfait depuis des années.

Nous commençons donc par ajouter une ligne :

startup_message off

Ceci aura pour effet de faire disparaître le message d’accueil présent au lancement de Screen et vous permettra d’accéder directement au contenu de la première fenêtre. Ce faisant, il devient difficile de savoir que Screen vient d’être lancé, mais nous al ons corriger cela un peu plus loin.

Une seconde ligne sera :

vbell off

Par défaut, Screen utilise ce qu’on appel e un signalement visuel. En utilisant un terminal ou une console sur PC, une erreur de manipulation est généralement signalée par un signal sonore. L’al ergie des col ègues aux bips intempestifs ou l’absence de sortie audio conduisent généralement à l’utilisation d’une équivalence visuel e via une inversion rapide des couleurs à l’écran. C’est le signalement visuel ou visual bell (« cloche visuel e ») en anglais. Par défaut, Screen utilise ce système, qui est pratique pour une Pi, mais utilisant généralement une connexion SSH vers mes Raspberry Pi, je préfère revenir au bip classique. C’est là l’objet de cette ligne.

Passons maintenant aux choses sérieuses en ajoutant quelques informations de base concernant la session en cours :

hardstatus on

hardstatus alwayslastline "%{+b kw}%H%{kg}|%c|%{ky}%d.%m.%Y"

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Ne perdez plus la main sur votre Pi grâce à GNU Screen

hardstatus pour hardware sta-

tus line ou « ligne d’état matériel e »

en bon français, correspond à une

fonctionnalité présente sur d’anciens

terminaux physiques où une ligne

supplémentaire de l’écran était

matériellement dédiée à l’affichage

d’informations. Le fait de spécifier à

on cette option active l’utilisation et

l’émulation de cette ligne.

Nous pouvons ensuite, après

hardstatus alwayslastline

Notre configuration

plaçant la ligne au bas de l’écran, spécifier son contenu. Le format d’usage utilise des finale nous permet

d’avoir une session

séquences d’échappement qui, au premier regard, peuvent sembler absconses. Chaque de GNU Screen

séquence débute par % et possède une signification particulière. Si nous simplifions cel e présentant non

présentée ici, en retirant la gestion des couleurs, nous avons :

seulement des

informations

hardstatus alwayslastline "%H|%c|%d.%m.%Y"

complémentaires

sur le système en

bas d’écran, mais

Avec respectivement pour :

aussi, et surtout une

• %H : le nom d’hôte de la machine,

gestion d’onglets

bien visible et

• %c : l’heure courante au format « HH:MM » sur 24h,

sympathique à l’œil.

• %d : le numéro du jour dans le mois,

• %m : le numéro du mois dans l’année,

• %Y : l’année complète (par opposition à %y qui n’affiche que les deux derniers chiffres).

Les caractères | et . sont simplement ajoutés pour embel ir le tout et ajouter un peu de mise en forme. Ceci nous affichera donc quelque chose comme raspberrypi|11:33|04.11.2016

au bas de l’écran.

Il est possible d’ajouter des couleurs et du formatage de texte en utilisant des séquences comme :

• %{+b kw} : passage en gras et fond noir (k) avec tracé en blanc (w pour white),

• %{kg} : vert (g comme green) sur noir,

• %{ky} : jaune (y comme yellow) sur noir.

Nous aurons alors au final : le nom d’hôte en blanc, l’heure courante en vert et la date en jaune, le tout en gras. Ceci nous permettra déjà d’avoir des informations de base et l’indication que nous utilisons bien Screen et non le shell seul.

Enfin, nous ajoutons, dans le même esprit, une nouvel e ligne d’état avec l’option caption. Cel e-ci se distingue de hardstatus dans le sens où el e peut ne pas être toujours affichée. hardstatus est une vraie ligne d’état alors que caption n’est souvent affiché que s’il y a plus d’une fenêtre dans la session. Nous pouvons cependant forcer l’affichage et spécifier un contenu ainsi :

caption always "%{+u wk}%?%-w%?%{rk}/%n %t\%{wk}%?%+w%?"

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

HACKABLE MAGAZINE n°16

75

EMBARQUÉ & INFORMATIQUE

LIGNE DE COMMANDES

L’utilisation des séquences d’échappement et des couleurs est exactement la même que pour hardstatus, mais nous avons ici quelque chose en plus : une condition. L’idée est de lister tous les noms de fenêtres existantes et de mettre en avant cel e qui est active. En éli-minant la gestion de la couleur, nous avons :

caption always "%?%-w%?/%n %t\%?%+w%?"

Pour décrypter tout cela, commençons par le plus simple :

• %t : le nom de la fenêtre courante,

• %n : le numéro de la fenêtre courante,

• %-w : le numéro et le nom de toutes les fenêtres avant cel e en cours d’utilisation,

• %+w : le numéro et le nom de toutes les fenêtres après cel e en cours.

Nous pouvons donc, de base, déjà afficher ce qui nous intéresse avec ”%-w/%n %t\%+w” : numéros/noms de toutes les fenêtres avant la nôtre, de la nôtre, puis de toutes les autres. S’il n’y a pas de fenêtre avant la nôtre, nous affichons une chaîne vide, idem pour les fenêtres après la nôtre. Ceci n’est pas très propre et si vous souhaitez personnaliser davantage, mieux vaut prendre cette éventualité en compte.

C’est précisément là qu’intervient %? , signifiant : « afficher ce qu’il y a jusqu’au prochain

%? à condition que cela ne se résume pas à une chaîne vide ». Ceci nous permet de condi-tionner l’affichage des fenêtres avant et après la nôtre. %?%-w%?% signifie ici « afficher %-w s’il y a effectivement des fenêtres avant cel e en cours d’utilisation ».

Nous ne l’utilisons pas pleinement ici, mais cela pourra vous être utile pour créer votre propre Professionnels, Collectivités, R & D...

configuration, il est possible d’avoir une condition « sinon » avec %:. Ainsi, avec %?%-w%:*w%? , nous décrivons : « si la liste des fenêtres précédentes ne donne pas une chaîne, afficher cette M’abonner ?

Me réabonner ?

Permettre à mes

équipes de lire les

GNU Screen sera

Choisir le papier, le PDF,

magazines en PDF,

également utile pour

se connecter à la

la base documentaire,

consulter la base

console série de

votre Raspberry Pi.

ou les trois ?

documentaire ?

Il peut, en effet, être

utilisé sur un système

comme GNU/Linux

ou Mac OS X pour

communiquer avec la

Pi via un adaptateur

C’est possible ! Rendez-vous sur :

USB série comme

celui présenté ici.

Il suffit de le lancer

en spécifiant le port

http://proboutique.ed-diamond.com

série à utiliser (/dev/

ttyUSB0 par exemple)

et la vitesse (115200).

pour consulter les offres !

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) N’hésitez pas à nous contacter pour un devis personnalisé par e-mail : 76

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

abopro@ed-diamond.com ou par téléphone : +33 (0)3 67 10 00 20

ABO_formulaire2016_mags_R2-demi.indd 5

07/10/2016 14:58

Ne perdez plus la main sur votre Pi grâce à GNU Screen

liste, sinon afficher le caractère * ». Ceci étant

Midnight Commander) dès que je démarre pour la

valable pour caption comme pour hardstatus,

première fois une nouvelle Raspberry Pi sur Raspbian.

et pour n’importe quel e séquence d’échappe-

Il y aurait encore beaucoup de choses à dire sur

ment, nous obtenons une grande souplesse de

l’utilisation et la personnalisation de votre configu-

personnalisation (couleurs, information, carac-

ration. Il est possible, par exemple, d’utiliser Screen

tères supplémentaires, etc.).

comme émulateur de terminal pour se connecter à la

En résumé, ce fichier de configuration vous

console série d’une Pi, de diviser l’écran en plusieurs

permettra de supprimer le message d’accueil,

zones correspondant aux fenêtres et donc de garder

d’ajouter des informations colorées concernant

un œil sur l’ensemble d’une session, de personnaliser

le système en bas d’écran ainsi qu’une visuali-

les touches de raccourcis, ou encore de faire appa-

sation rapide des fenêtres/onglets disponibles.

raître dans la ligne d’état différentes informations

provenant de scripts.

POUR FINIR

Au-delà de la simple possibilité de détacher et

d’attacher des sessions, GNU Screen peut rapide-

J’utilise GNU Screen depuis des années et

ment devenir indispensable, pour peu qu’on prenne

ne pourrait plus m’en passer. C’est tout simple-

le temps de connaître l’outil et de l’adapter à ses pré-

ment l’un des quelques paquets que j’instal e

férences. Et c’est précisément ce que j’espère vous

systématiquement (en compagnie de Vim et

avoir donné envie de faire avec cet article. . DB

Professionnels, Collectivités, R & D...

M’abonner ?

Me réabonner ?

Permettre à mes

équipes de lire les

Choisir le papier, le PDF,

magazines en PDF,

la base documentaire,

consulter la base

ou les trois ?

documentaire ?

C’est possible ! Rendez-vous sur :

http://proboutique.ed-diamond.com

pour consulter les offres !

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) N’hésitez pas à nous contacter pour un devis personnalisé par e-mail : http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°16

77

abopro@ed-diamond.com ou par téléphone : +33 (0)3 67 10 00 20

ABO_formulaire2016_mags_R2-demi.indd 5

07/10/2016 14:58

EMBARQUÉ & INFORMATIQUE

WINDOWS

UTILISEZ VOS

APPLICATIONS

GRAPHIQUES RASPBERRY

PI DEPUIS WINDOWS

Denis Bodor

Je ne sais pas pour vous, mais personnellement j’utilise rarement ma Raspberry Pi connectée à un moniteur, sauf dans de rares exceptions.

Étant habitué depuis plus de 15 ans à utiliser la ligne de commandes, une simple connexion au moniteur série ou une liaison réseau SSH

est amplement suffisante. Parfois cependant, j’ai besoin d’utiliser une application graphique. Il existe un moyen de le faire, sans moniteur, aussi bien depuis une machine GNU/Linux que depuis Windows :

le X11 forwarding.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez vos applications graphiques Raspberry Pi depuis Windows

La solution généra-

lement préconisée

pour obtenir un

affichage graphique

déporté consiste à

utiliser un outil appelé VNC (Vir-

tual Network Computing). Ceci

est d’ail eurs décrit en détail dans

la documentation officiel e de la

Fondation et consiste à lancer un

serveur VNC (RealVNC) sur la Pi

pour ensuite utiliser un client VNC

sur Windows, Mac ou GNU/Linux

et obtenir un accès au bureau.

Cela est tel ement bien intégré

qu’il est possible d’activer cette

option directement dans les pré-

férences de l’interface graphique.

Mais voilà, je suis vieux jeu, et je

n’aime pas utiliser une solution

alors qu’une autre existe depuis

Ceci est un terminal X de

des lustres pour faire exactement

NCD datant des années

la même chose. . (comment ça

clavier, etc.) et permet à des clients d’afficher

90, une simple interface

« rétrograde » ? Pas du tout,

des « choses » (pixels, lignes, surfaces, arc de

moniteur/clavier disposant

d’une connexion Ethernet

« attaché à la culture UNIX »,

cercle, etc.) en passant par son intermédiaire.

et permettant d’utiliser des

nuance).

Sans rentrer outre mesure dans les détails

applications graphiques

exécutées sur un

VNC c’est très bien et très

techniques, X fournit une solution d’affichage

ordinateur distant. Ce qui

pratique, mais c’est oublier

unifiée et détachée du matériel. Quel que soit

est détaillé dans cet article

que, par défaut, le système

le type d’adaptateur graphique dont vous dispo-

revient, dans les grandes

lignes, à émuler ce type de

graphique prend ce type de

sez, que ce soit une Pi ou un PC avec une carte

matériel (Source

fonctionnalités en charge d’une

graphique, les « directives » utilisées par les

Wikipédia / Richard J.

autre façon depuis des temps

programmes sont les mêmes. Le programmeur

Kettlewell).

immémoriaux. Le système

n’a pas à se soucier du matériel, il demande sim-

Raspbian d’une Raspberry Pi est

plement que des pixels s’activent à l’écran.

basé sur Debian, une distribution

Pour simplifier encore avantage les choses,

GNU/Linux connue et utilisée de

des bibliothèques sont utilisées pour éviter de

longue date. Comme la quasi-

devoir gérer soi-même des choses comme le

totalité des distributions GNU/

dessin de boutons, de fenêtres, de boites de dia-

Linux, cel e-ci utilise un environ-

logue, de menus. . Ces bibliothèques fournissent

nement graphique reposant sur

ce qu’on appel e un toolkit graphique et les plus

X Window System (alias X11, X

connues sont GTK+, Qt, Motif, Lesstif, ou encore

Window ou tout simplement X).

Elementary. Le programmeur n’a ainsi qu’à

Le principe de fonctionnement est

demander « je veux une fenêtre, avec une barre

fort simple, X se charge de gérer

de menu, trois boutons à cet endroit. . » et tout

le système d’affichage graphique

ceci s’affichera parfaitement, quels que soient la

ainsi que la prise en charge des

plateforme et le matériel utilisé, du moment qu’un

périphériques d’entrée (souris,

serveur X est en marche.

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

HACKABLE MAGAZINE n°16

79

EMBARQUÉ & INFORMATIQUE

WINDOWS

X fonctionne en mode client/serveur. Nous avons

périphériques d’entrée, tout ceci

la partie serveur qui fait le travail et la partie cliente

circulerait « en clair » sur le ré-

qui dicte ce qui doit être fait. Et c’est là que les créa-

seau et pourrait, en principe, être

teurs de X, dès les premières heures de sa nais-

analysé et lu.

sance, ont eu une excel ente idée : faire fonctionner

On n’utilise donc presque

cette architecture client/serveur aussi bien locale-

plus ce type de communication

ment qu’à travers le réseau. En fait, c’était même le

et c’est pourquoi el e est désac-

concept de départ puisqu’à cette époque (milieu des

tivée à la base (les serveurs X

années 80) le principe même qui était alors en place

« n’écoutent » plus le réseau par

se résumait à un gros ordinateur et plein de termi-

défaut). Ce qu’il est possible de

naux pour pouvoir l’utiliser.

faire en revanche, c’est de lais-

Il est encore aujourd’hui possible de reposer sur

ser transiter ces données par un

ce mécanisme, après des dizaines d’années d’évo-

canal de communication qu’on sait

lution de X. Un client X peut, sur votre Raspberry Pi,

sécurisé, car chiffré et authenti-

afficher son interface sur un serveur X se trouvant

fié, en d’autres termes, via une

sur une autre Pi, un PC, un Mac, etc. C’est ce qu’on

connexion SSH. SSH permet

appel e du X11 forwarding.

d’établir une connexion en ligne

de commandes, parfaitement sé-

VNC en revanche utilise une approche différente

curisée, en spécifiant simplement

qui revient à « attraper » les pixels s’affichant dans

un nom d’utilisateur et l’adresse

l’interface graphique de la Pi, par exemple, et les

de la Pi, puis en utilisant le mot de

envoyer au travers du réseau pour les afficher dans

passe associé.

la fenêtre de l’application VNC. Ce fonctionnement

est plus proche de la notion de « bureau à distance »

Depuis une machine GNU/

tel e qu’on la retrouve dans Windows par exemple.

Linux, un Mac ou une autre Pi, cela

C’est un déport de l’affichage existant. En termes

se résume à une commande du

d’utilisation à proprement parler, VNC est générale-

type ssh pi@adresse et vous voi-

ment utilisé pour exporter tout l’affichage alors que le

ci avec un shell sur votre Pi cible.

X11 forwarding permet à une application graphique

C’est également faisable depuis

seule de s’afficher à distance. On se retrouve donc

une machine Windows en utilisant

d’un côté avec tout un bureau et de l’autre avec uni-

un client SSH comme PuTTY.

quement la fenêtre de l’application dans son environ-

Côté Pi, il faut simplement

nement graphique habituel, local.

s’assurer que le serveur SSH, qui

accepte ces connexions, auto-

1. PRINCIPE ET

rise effectivement le transfert de

données X11. C’est là quelque

VÉRIFICATION

chose d’activé par défaut, en

principe, mais il est de bon ton (et

L’affichage déporté permis par le X11 forwarding

rassurant en cas de problème) de

est intégré de base dans X et il fonctionne dans les

jeter un œil dans le fichier /etc/

deux sens : que vous ayez un serveur X en marche

ssh/sshd_config et de s’assurer

sur votre Pi et demandiez à des applications locales

qu’une ligne X11Forwarding yes

de s’y afficher ou, au contraire que vous ayez un

est bien présente et non com-

serveur X local et souhaitez lancer des applications

mentée (non précédée d’un #). Si

de la Pi s’y affichant. Mais ceci est par défaut bloqué

el e s’y trouve, votre configuration

pour des raisons de sécurité. En effet, qu’il s’agisse

est déjà prête pour la suite, vous

de l’affichage des pixels ou des informations des

n’avez rien de plus à faire.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez vos applications graphiques Raspberry Pi depuis Windows 2. ENTRE UN GNU/LINUX ET UNE PI

Toutes les distributions GNU/Linux s’accompagnent généralement d’un serveur X, d’une interface graphique et d’un client SSH. Tout ce que vous avez à faire se résume à ouvrir une fenêtre de terminal et d’entrer la commande ssh -X pi@adresse, où adresse est l’adresse IP de votre Raspberry Pi. S’il s’agit de votre première connexion en SSH, un message vous demandera de confirmer l’identité de la machine à laquel e vous tentez de vous connecter : The authenticity of host '192.168.10.234 (192.168.10.234)' can't be established.

ECDSA key fingerprint is 80:41:e0:af:74:08:96:d0:6d:6f:a1:0b:14:f8:5d:55.

Are you sure you want to continue connecting (yes/no)?

La connexion SSH permet deux choses : une communication chiffrée et une authentification.

Ce second point fonctionne dans les deux sens. Le client prouve qui il est en vous demandant de saisir votre mot de passe, mais inversement, le serveur prouve son identité en vous donnant son empreinte (fingerprint). Il s’agit d’un processus cryptographique et cette empreinte qui s’affiche ne peut provenir que du serveur disposant d’un certificat qui lui est propre.

À ce stade en principe, vous êtes censé vérifier que l’empreinte affichée correspond bien à la machine (la Pi) à laquel e vous tenter de vous connecter, pour vous assurer qu’on ne détourne pas votre communication. Cette empreinte unique à un système peut être obtenue sur la Pi avec la commande :

$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key

256 80:41:e0:af:74:08:96:d0:6d:6f:a1:0b:14:f8:5d:55

/etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)

Si la série de chiffres et de lettres est identique, vous savez que vous vous connectez à la bonne cible, et vous pouvez alors taper yes pour continuer. Votre mot de passe utilisateur vous sera ensuite demandé pour que, à votre tour, vous prouviez qui vous êtes. Une fois celui-ci validé, vous obtiendrez une ligne de commandes.

Notez qu’il vous est possible de « simplifier » la vérification de l’empreinte en utilisant l’option

-v côté serveur pour obtenir :

$ ssh-keygen -lvf /etc/ssh/ssh_host_ecdsa_key

256 80:41:e0:af:74:08:96:d0:6d:6f:a1:0b:14:f8:5d:55 /etc/ssh/ssh_host_

ecdsa_key.pub (ECDSA)

+---[ECDSA 256]---+

|.oo=o ...E |

|o.+ ooo |

|.=.o.+.. |

|..ooo o. |

| o.oo S |

| . o. |

| . |

| |

| |

+-----------------+

Et l’option -o VisualHostKey=yes (ou ajouter VisualHostKey=yes dans le fichier ~/.ssh/

config) côté client :

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

HACKABLE MAGAZINE n°16

81

EMBARQUÉ & INFORMATIQUE

WINDOWS

$ ssh -o VisualHostKey=yes pi@192.168.10.234

The authenticity of host '192.168.10.234 (192.168.10.234)' can't be established.

ECDSA key fingerprint is 80:41:e0:af:74:08:96:d0:6d:6f:a1:0b:14:f8:5d:55.

+---[ECDSA 256]---+

|.oo=o ...E |

|o.+ ooo |

|.=.o.+.. |

|..ooo o. |

| o.oo S |

| . o. |

| . |

| |

| |

+-----------------+

Are you sure you want to continue connecting (yes/no)?

Avec ces options, une représentation semi-graphique de l’empreinte accompagne la version textuel e. El e n’est pas forcément intéressante pour une première connexion, où une vérification méticuleuse s’impose, mais plutôt lors des connexions suivantes. Si le dessin change, quelque chose de pas très net est en train de se passer. .

Mais revenons à nos moutons. C’est ici l’option -X qui génère toute la magie du X11 forwarding. Avec la ligne de commandes obtenue arrive à présent automatiquement le transfert des données X. Ceci est rapidement vérifiable en utilisant :

$ echo $DISPLAY

localhost:10.0

$DISPLAY est une variable d’environnement. Cel e-ci, lorsqu’el e existe, contient la désignation de l’affichage que doivent utiliser les applications graphiques. Si vous utilisez cette commande dans un terminal dans l’interface graphique de la Pi, vous obtiendrez quelque chose comme

:0, à savoir l’affichage numéro 0. Ici, nous avons quelque chose d’autre : un nom de machine (d’hôte) et un numéro. localhost est un nom générique désignant la machine el e-même.

L’affichage désigné est donc le numéro 10, premier écran, de la machine el e-même.

Étrange, non ?

En réalité, SSH travail e en coulisse et se charge comme un grand de prendre tout ce qui arrive à cet endroit pour le faire transiter par ses propres canaux de communication (principe du « tunnel »). Ce qui ressort à l’autre bout de la connexion est alors envoyé directement au serveur X qui suppose qu’il s’agit d’informations locales (puisque fournies par le client SSH).

Du point de vue de X, le réseau n’est donc pas physiquement utilisé (du moins en dehors du système).

De ce fait, si vous lancez une commande graphique, comme xclock par exemple (paquet x11-apps), la fenêtre va apparaître non pas sur la Pi, mais sur l’écran de la machine où vous avez lancé la commande ssh.

Notez cependant que cel e-ci s’exécute bel et bien sur la Pi et non sur votre PC. Ceci signifie aussi que les fichiers que vous ouvrirez, par exemple, avec une application ainsi lancée, seront également ceux de la Pi. Il n’y a que la fenêtre qui s’affiche de votre côté, tout le reste se trouve du côté Raspberry Pi.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez vos applications graphiques Raspberry Pi depuis Windows

3. ENTRE UN PC

d’utiliser des versions Windows des programmes

WINDOWS ET UNE PI

GNU/Linux avec un minimum de changement

pour les développeurs. Ceci nécessite

Windows, contrairement aux distributions

cependant soit d’instal er les versions Cygwin

GNU/Linux n’est livré en standard, ni avec un

de tous les programmes et applications (dont un

client SSH, ni avec un serveur X. Il vous faudra

serveur X) soit de recompiler, pour Cygwin, ces

donc instal er ces deux éléments pour pouvoir

éléments en utilisant les sources originales.

utiliser ces fonctionnalités. Il existe plusieurs

Une autre solution consiste à se tourner vers

projets et plusieurs façons de faire et nous avons

un autre projet appelé Xming (http://www.

déjà évoqué dans les pages du magazine l’une

straightrunning.com/XmingNotes/) regrou-

des options : Cygwin (Hackable n°3).

pant un serveur X et un client SSH (PuTTY). Je

n’aime pas particulièrement la politique mise

en œuvre pour ce projet consistant à débloquer

l’accès à la dernière version dite « Website

Build », contre un don de 10 livres sterling ou

une contribution au projet. Cependant, dans une

démarche d’essai nous pouvons nous contenter

de la version publique disponible sur https://

sourceforge.net/projects/xming/files/Xming.

Cel e-ci est bien plus ancienne (version 6.9

contre 7.7), mais fonctionne très bien.

Vous devrez télécharger et instal er deux

éléments : Xming-6-9-0-31-setup.exe qui

est l’applicatif lui-même et Xming-fonts-7-7-

Xming permet d’installer en plus du serveur X différents

0-10-setup.exe qui est un ensemble complet

éléments, dont un client SSH qui n’est autre que le

de polices de caractères pour X. La procédure

classique PuTTY. Ceci vous évite donc de l’installer

en parallèle et donc de faire d’une pierre deux coups :

d’instal ation est aisée et assez typique de

graphique et mode texte.

Windows (c’est-à-dire le classique clic-clic-clic,

Suivant, Suivant, Terminer). Instal ez d’abord les Ce projet consiste à permettre l’utilisation de

polices et ensuite l’applicatif.

presque la totalité de ce qui existe sous GNU/

Linux dans Windows en se basant sur une

solution simple : une bibliothèque permettant

Au terme de la procédure d’installation, il vous sera

proposé de lancer automatiquement le serveur

Installer un serveur X sous Windows se fait comme

X. C’est une opération qu’il ne vous faudra pas

n’importe quelle application, une suite de clics

oublier lors des démarrages suivants, et ce avant la

frénétiques sur « Next » sans rien lire et le tour est joué...

connexion SSH à votre Pi.

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

HACKABLE MAGAZINE n°16

83

EMBARQUÉ & INFORMATIQUE

WINDOWS

En fin d’instal ation, une fenêtre avec une

Enfin, cliquez sur Open pour déclencher la

case précochée vous propose de lancer direc-

connexion. Lors de votre première connexion, le

tement le serveur X. Vous cliquez et. . rien ne

même phénomène que sous GNU/Linux va se

se passe. Du moins, rien de visible, si ne n’est

produire avec une demande de confirmation de

l’apparition d’une petite icône dans la barre des

l’empreinte du serveur, puis la demande de mot de

tâches (le systray) vous indiquant que le serveur

passe. Le résultat sera également le même une

fonctionne. En effet, un serveur X avec aucune

fois ce mot de passe validé : vous obtenez une

application ne souhaitant l’utiliser n’a finalement

ligne de commandes sur votre Pi.

rien à afficher. Il n’en reste pas moins qu’il est en

fonctionnement et prêt à faire son travail.

Les options d’instal ation par défaut permettent

la mise en place de PuTTY, sans doute le client

SSH le plus utilisé sous Windows. Vous trouverez

celui-ci directement dans le menu « Démarrer »

en cherchant son nom. Dans la fenêtre qui appa-

raît lors de son lancement, vous pouvez préciser

le nom d’utilisateur et l’adresse IP de votre

Raspberry Pi sous la forme pi@adresse.

L’option importante ici concerne le X11 forwarding.

Une fois celle-ci activée, vous pourrez lancer tout

aussi bien des commandes en « mode texte » sur

votre Raspberry Pi que des applications graphiques,

une fois la connexion établie.

Là, vous pouvez immédiatement vous amuser

à lancer n’importe quel e application graphique

et son affichage apparaîtra immédiatement (ou

presque) sous la forme d’une fenêtre Windows.

Mais ne vous y trompez pas, ces applications

s’exécuteront effectivement sur la Pi, avec les

bibliothèques présentes sur la Pi et tous les élé-

L’utilisation de PuTTY est relativement simple malgré

ments graphiques instal és sur la Pi (Figure en

la profusion d’options à l’écran. C’est ce qui arrive

haut, ci-contre).

lorsqu’on fait une application graphique pour un

programme pouvant prendre bien des arguments en

option en ligne de commandes. Heureusement, vous

pouvez ici gérer différents profils de connexion afin de

4. ENTRE UN MAC ET

ne pas tout paramétrer à chaque fois...

UNE PI

Pour utiliser le X11 forwarding, naviguez dans

Mac OS X (ou OS X, ou encore dernièrement,

les options sur la gauche, section Connexion, SSH

macOS) est à la base un système UNIX, comme

et X11, puis cochez la case Enable X11 forwarding.

GNU/Linux. Mais celui-ci n’utilise pas un système

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Utilisez vos applications graphiques Raspberry Pi depuis Windows

Les autres captures Windows de cet article ont bien été faites sous Windows 7 malgré leur apparence très XP. Ici, je suis délibérément (et d’affichage X11, mais une solution 100%

temporairement) repassé en thème Aero juste pour le plaisir de vos yeux et vous faire profiter du mélange X11 et Windows 7 (si ça c’est pas une Apple appelée Quartz. SSH en revanche,

preuve d’amour pour mes adorables lecteurs... bon maintenant on remet tout comme un émulateur de terminal,

tout comme c’était avant et on redémarre vite sous Debian !)

est disponible par défaut aussi bien pour

la partie serveur que cliente, vous n’avez

XQuartz remplace l’application X11 depuis Mac OS X 10.8.

donc rien à instal er à ce niveau.

L’installation se fera très simplement après téléchargement d’un Concernant le serveur X en revanche,

fichier DMG directement sur le site du projet qui est maintenant un effort communautaire auquel Apple prête assistance.

il faudra vous rendre sur https://www.

xquartz.org afin de télécharger un fichier

DMG, compatible Mac OS X 10.6.3 ou

supérieur, l’ouvrir et double-cliquer sur le

XQuartz.pkg qu’il contient pour procéder à

l’instal ation. Enfin, un message vous pré-

cisera que vous devez vous déconnecter

et vous reconnecter (fermeture/ouverture

de session) pour que les changements

soient pris en compte.

Il est amusant de remarquer qu’Apple,

lors de l’arrivée des Mac et de leur

« révolutionnaire » système Mac OS X,

a rapidement intégré une application

appelée simplement X11 permettant de

faire précisément ce que nous décrivons

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

HACKABLE MAGAZINE n°16

85

EMBARQUÉ & INFORMATIQUE

WINDOWS

.. applications graphiques Raspberry Pi. .

L’intégration du serveur

X dans Mac OS X est

bien plus élégante

ici. Tenant à afficher l’héritage UNIX du système,

précise cependant que « Apple

que dans Windows et

ne comporte aucun

provenant de NeXTSTEP (cf. Hackable n°4

est toujours impliqué dans le pro-

problème particulier.

et son article sur la résurrection d’une station

jet XQuartz. Nous nous assurons

Le serveur se lance

NeXTstation Turbo), l’intégration de X11 permettait

notamment que le logiciel X11

même de lui-même dès

d’exécuter facilement n’importe quelle application

fonctionne correctement sous

lors qu’on établit une

connexion SSH avec

X, recompilée sur un Mac. L’idée était, je pense,

macOS et avec les dernières ver-

l’option -X.

d’attirer les grâces des utilisateurs UNIX, leaders

sions de XQuartz ».

d’opinion dans le domaine technique, et cela a

Quoi qu’il en soit, passé cette

parfaitement fonctionné. Encore aujourd’hui, de

instal ation, vous disposerez d’un

nombreux utilisateurs GNU/Linux et surtout BSD,

serveur X11 parfaitement fonction-

optent pour un Mac lorsqu’ils cherchent un ordi-

nel. Mieux encore, et il faut bien

nateur portable (il faut dire que ce que sont les

reconnaître ça à Apple (malgré

seules machines à faire fonctionner facilement

plein d’autres choses moins plai-

GNU/Linux, Mac OS X, Windows et BSD).

santes), cette intégration est de

Avec le temps, le X11 d’Apple est ensuite

très bonne facture. Le simple fait

devenu une application optionnel e puis, avec la

d’ouvrir un terminal pour procéder

version 10.8 (Mountain Lion), cette option a totale-

à la connexion SSH avec l’option

ment disparu. X11 a donné naissance à XQuartz,

-X provoque le lancement du ser-

un projet communautaire initié par Apple, mais

veur X. Il n’est donc même pas

indépendant. Une page web du support Apple

utile de le lancer soi-même.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

.. applications graphiques Raspberry Pi. .

NE MANQUEZ

PAS LA NOUVELLE

FORMULE !

De plus, l’affichage est très rapide, contrai-

GNU/LINUX MAGAZINE n°200

rement à la solution Windows. Les tests que j’ai

effectués pour les trois systèmes ont été faits sur

une même machine, un MacBook Core 2 Duo

2.0 Unibody de 2009 (modèle A1278). GNU/Linux

et sa Debian 8 s’en sortent sans problème bien

entendu, Windows 7 Pro 32 bits et son Xming est

à la traîne avec une faible réactivité et des pro-

blèmes pour reconnaître l’organisation du clavier

Mac, et Mac OS X 10.7.5 s’en sort tout aussi

bien que GNU/Linux sinon légèrement mieux en

termes de réactivité.

POUR FINIR

La solution du X11 forwarding n’entre pas

directement en concurrence avec cel e repo-

sant sur VNC. L’objectif n’est en effet pas tout

à fait le même. Il ne s’agit pas ici d’un accès au

bureau à distance, mais de tout autre chose. La

Raspberry Pi que j’ai utilisée pour les tests, par

exemple, a été initialement instal ée sans inter-

face graphique (Raspbian Lite) et je n’ai, bien

entendu, pas eu besoin de l’instal er pour utiliser

ainsi des applications graphiques.

Un autre point important concerne l’architecture

même de l’ensemble. Le X11 forwarding impose

l’existence d’un serveur X et même si les trois sys-

tèmes courants que sont GNU/Linux, Windows et

macOS possèdent des solutions adaptées, il n’en

va pas de même sous Android, par exemple (il

existe des serveurs X comme XSDL, mais on ne

peut pas vraiment dire que ce soit utilisable).

CRÉEZ UNE

VNC repose sur l’utilisation d’une application

cliente et non d’un serveur d’affichage. Ceci

implique que l’application doit exister pour la

APPLICATION

plateforme que vous souhaitez utiliser, certes,

mais il ne s’agit que d’une application. Un autre

POUR VOTRE TV

exemple est celui de l’utilisation de VNC dans

un navigateur web. Il existe des extensions

pour Chrome et Firefox faisant office de clients

CONNECTÉE !

VNC alors qu’il n’existe pas d’équivalent X.

En résumé, il s’agit de deux solutions très dif-

férentes ayant chacune leurs avantages et leurs

ACTUELLEMENT

inconvénients. Il vous revient d’opter pour l’une ou

l’autre en fonction de vos besoins ponctuels. DB

DISPONIBLE

CHEZ VOTRE MARCHAND

DE JOURNAUX ET SUR :

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

HACKABLE MAGAZINE n°16

87

http://www.ed-diamond.com

pub_dec2016_half.indd 3

14/12/2016 13:44

EMBARQUÉ & INFORMATIQUE

BLUETOOTH

CONTRÔLEZ VOS

MONTAGES BLUETOOTH

DEPUIS VOTRE PI

Denis Bodor

Dans le précédent numéro, nous avons décrit comment ajouter

une connectivité Bluetooth à un projet Arduino et ainsi pouvoir lui communiquer des ordres depuis un smartphone Android. Mais il peut également être très intéressant de remplacer le smartphone par une carte Raspberry Pi et ainsi gagner en souplesse et surtout ne plus être dépendant d’une application figée, peu configurable, difficile, voire impossible à modifier.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Contrôlez vos montages Bluetooth depuis votre Pi

Comme je l’ai dit

dans le précé-

dent numéro,

s’attacher à la

création d’une

application pour smartphone,

qu’il s’agisse d’Android ou iOS,

n’est pas une tâche aisée. Il y a

beaucoup à apprendre et cela

demande un certain temps avant

d’acquérir une confiance suffi-

sante passé la première étape de

l’application « Bonjour monde ».

Si l’on souhaite contrôler ou

communiquer avec un montage

à base d’Arduino et d’un module

Bluetooth, il est bien plus simple

de le faire avec un système plus

facile à prendre en main : typi-

quement, une Raspberry Pi et

quelques lignes de Python. Mais

pour cela, encore faut-il connaître

La carte Raspberry

Pi 3 intègre de base

et savoir utiliser les bonnes com-

montage. Le croquis Arduino correspondant au

un support pour le

mandes permettant de contrôler le

montage que nous cherchons à contrôler est dispo-

Wifi et le Bluetooth

Bluetooth sur une Pi.

nible dans le dépôt GitHub du précédent numéro à

(Classic et Low Energy).

l’adresse https://github.com/Hackable-magazine/

Aucun accessoire

La Raspberry Pi 3 intègre le

Hackable15.

complémentaire ne sera

support du Wifi et du Bluetooth,

alors nécessaire, si ce

Classic comme Low Energy

n’est l’indispensable

radiateur permettant

(BLE), mais si vous ne disposez

1. PRENDRE EN MAIN LE

d’éviter des plantages en

que d’un précédent modèle, l’ajout

cas de très forte charge

d’une simple clé USB règlera vite

BLUETOOTH ET VÉRIFIER

du système. Le module

le problème et vous apportera

enfiché à gauche du

logo Pi est une horloge

les fonctionnalités souhaitées.

QUE TOUT MARCHE

permettant de conserver

Un modèle minuscule souvent

Il est possible de configurer et gérer le Bluetooth

l’heure entre deux

recommandé est fabriqué par

sur la Raspberry Pi en utilisant l’environnement gra-

redémarrages (module

RTC).

Plugable Technologies sous

phique, mais ceci reste très limité et très orienté vers

le nom USB-BT4LE. Celui-ci

l’utilisation de périphériques comme un clavier ou une

vous coûtera quelques 15€, se

souris Bluetooth. Ce qui nous occupe ici est sensi-

trouve facilement sur Amazon

blement différent puisqu’il s’agit non pas de faire en

par exemple et vous fournira

sorte que le système utilise le périphérique, mais de

les mêmes fonctionnalités que

contrôler directement un montage « maison » com-

cel es disponibles sur une Pi 3 (à

muniquant en Bluetooth.

l’exception du Wifi bien sûr).

De plus, en cas de problème, il est important de

Les explications qui vont suivre

connaître la mécanique qui se trouve sous le capot.

sont relativement génériques

Notre voie sera donc la ligne de commandes, offrant

et s’adapteront à n’importe quel

un accès complet à la configuration.

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

HACKABLE MAGAZINE n°16

89

EMBARQUÉ & INFORMATIQUE

BLUETOOTH

L’adaptateur généralement recommandé

et capable de fournir du Bluetooth à une

Pi (ou tout autre système) occupera une

place très réduite et ne vous coûtera qu’une

quinzaine d’euros. Une simple recherche de

« Bluetooth Plugable » sur Amazon et vous

trouverez votre bonheur...

La première manipulation que nous al ons effec-

tuer consistera à nous assurer que le Bluetooth,

aussi bien l’aspect matériel que logiciel, est effec-

tivement bien pris en charge. Pour ce faire, utilisez

simplement la commande hciconfig, qui devrait

alors vous retourner quelque chose comme :

hci0: Type: BR/EDR Bus: UART

BD Address: B8:27:EB:10:1F:A8 ACL MTU: 1021:8 SCO MTU: 64:1

UP RUNNING

RX bytes:108313 acl:0 sco:0 events:4865 errors:0

TX bytes:28350 acl:0 sco:0 commands:3343 errors:0

Notre adaptateur Bluetooth est désigné dans le système par hci0. Il possède comme adresse matérielle « B8:27:EB:10:1F:A8 », est actif et en marche (UP RUNNING). Cette commande provient du paquet bluez, mais il en existe d’autres, plus intéressantes fournies par le paquet bluez-tools. BlueZ est le nom du projet ayant en charge de fournir les fonctionnalités Bluetooth à GNU/Linux, que ce soit sous la forme de pilotes, de services ou d’outils, et ce aussi bien pour la Raspberry Pi que pour les distributions GNU/Linux sur PC.

bluez-tools nous fournit par exemple la commande bt-adapter nous permettant d’obtenir davantage d’informations :

$ bt-adapter -i

[hci0]

Name: raspberrypi

Address: B8:27:EB:10:1F:A8

Alias: raspberrypi [rw]

Class: 0x0

Discoverable: 0 [rw]

DiscoverableTimeout: 180 [rw]

Discovering: 0

Pairable: 1 [rw]

PairableTimeout: 0 [rw]

Powered: 1 [rw]

UUIDs: [PnPInformation,

00001800-0000-1000-8000-00805f9b34fb,

00001801-0000-1000-8000-00805f9b34fb, AVRemoteControl,

AVRemoteControlTarget]

On retrouve ici non seulement l’adresse matériel e, mais également le nom affiché du périphérique. Les produits disposant d’une connectivité Bluetooth sont identifiés par leur adresse qui est unique et par leur nom, qui peut être tantôt changé et qui, dans GNU/Linux, correspond par défaut au nom du système (nom d’hôte). Ici, ce nom pourra être modifié par l’édition du fichier /etc/bluetooth/main.conf et un redémarrage du service avec sudo service bluetooth restart.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Contrôlez vos montages Bluetooth depuis votre Pi

On voit également dans le résultat de la commande que notre adaptateur n’est pas visible de l’extérieur (Discoverable: 0), n’est pas en train de chercher des périphériques (Discovering: 0), mais est appairable (ou associable). La notion d’appairage (pairing en anglais) est fondamentale en Bluetooth, car il s’agit d’une sécurité permettant de limiter les accès aux périphériques tout en n’ayant pas besoin, à chaque fois, de montrer patte blanche.

Une fois deux périphériques appairés, généralement après vérification d’un code ou d’un mot de passe, ils peuvent communiquer librement. Les périphériques Bluetooth Smart ou Bluetooth Low Energy fonctionnent de façon un peu différente à ce niveau selon leur type, mais nous resterons concentrés ici sur le Bluetooth Classic.

Il est possible de manipuler notre adaptateur Bluetooth avec la commande bt-adapter et en utilisant l’option --set pour changer sa configuration. De la même manière, le paquet bluez-tools offre également la commande bt-device permettant de gérer les périphériques (détection, association, col ecte d’informations, etc.). Je trouve cependant plus facile d’utiliser un autre outil, fourni par le paquet bluez : bluetoothctl.

2. JOUER AVEC LES PÉRIPHÉRIQUES ET LES

APPAIRER

bluetoothctl est un programme interactif. Une fois lancé, vous obtenez une nouvel e ligne de commandes vous permettant de saisir des instructions propres à la gestion du Bluetooth.

Vous pourrez quitter cette interface en utilisant simplement la commande exit ou avec le raccourci Ctrl+d. Nous lancerons la commande ainsi :

$ bluetoothctl -a

[NEW] Controller B8:27:EB:10:1F:A8 raspberrypi [default]

Agent registered

[bluetooth]#

Notez que cel e-ci n’a pas besoin d’être lancée avec sudo, l’utilisateur par défaut ayant déjà les droits adéquats et la commande ne contrôlant pas directement le matériel, mais plutôt le service Bluetooth associé. L’option -a nous permet de faire en sorte de déclarer automatiquement un agent. En effet, le fait que le Bluetooth s’utilise également en mode graphique, directement sur le bureau, nécessite un mécanisme particulier.

Lors d’une association par exemple, il est nécessaire que l’utilisateur saisisse un code PIN

ou un mot de passe. Or ceci ne peut pas être proposé par un service travail ant en tâche de fond dans le système. Il est alors fait appel à un agent, présentant une fenêtre et attendant la saisie dont le contenu sera ensuite communiqué au service qui procèdera à l’association Bluetooth avec le périphérique.

Ici, via l’option -a, nous spécifions que nous n’avons pas besoin d’un agent externe, mais que la commande bluetoothctl el e-même servira d’interface et d’agent en même temps.

Ainsi, lorsque nous demanderons une association nous pourrons saisir le code ou le mot de passe correspondant dans la foulée.

Une fois la commande bluetoothctl lancée, nous pouvons afficher des informations sur notre adaptateur avec list et show. Ceci nous présente peu ou prou la même chose que les commandes précédentes. Si plus d’un adaptateur est présent sur le système, il est également Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°16

91

EMBARQUÉ & INFORMATIQUE

BLUETOOTH

possible de choisir celui à utiliser avec un

list puis une commande select suivie de

l’adresse matériel e de l’adaptateur.

La commande devices nous permet de

lister les périphériques disponibles, mais

s’il s’agit de votre première utilisation du

Bluetooth avec votre Raspberry Pi, cel e-ci

ne retournera probablement rien du tout. Il

nous faut en effet tout d’abord provoquer une

recherche des périphériques Bluetooth qui

nous entourent et donc demander à l’adapta-

teur de passer en mode découverte (discove-

ring à yes) avec la commande scan on.

Il existe des

adaptateurs Bluetooth

Si cette commande vous retourne un message « Failed to start discovery: org.

USB de toutes sortes.

bluez.Error.NotReady », assurez-vous via un show que l’adaptateur est bien en marche Cette petite collection

présente en bas à

(« Powered: yes »). Si ce n’est pas le cas, pliez-vous simplement d’un power on : droite un modèle

récent intégrant

[bluetooth]# power on

Bluetooth Classic et

Changing power on succeeded

Bluetoth Low Energy

[CHG] Controller B8:27:EB:10:1F:A8 Powered: yes

(BLE), à gauche

un vieux modèle

avant d’utiliser scan on :

d’entrée de gamme

et en rouge, un

périphérique industriel

[bluetooth]# scan on

de très bonne facture,

Discovery started

mais ne supportant

[CHG] Controller B8:27:EB:10:1F:A8 Discovering: yes

malheureusement pas

le BLE.

Au bout de quelques instants, le ou les périphériques qui peuvent être recherchés (discove rable) dans votre voisinage vont commencer à être listés :

[NEW] Device 00:19:5D:EE:A4:24 Hackable15

[NEW] Device 78:CA:39:BF:E4:DA iMac de yann

[NEW] Device 00:19:5D:EE:A4:1D HackableBT2

[NEW] Device 49:83:39:88:BE:21 49-83-39-88-BE-21

[CHG] Device 49:83:39:88:BE:21 RSSI: -91

[NEW] Device 78:E9:94:D7:DC:41 78-E9-94-D7-DC-41

[CHG] Device 78:E9:94:D7:DC:41 RSSI: -84

[CHG] Device 78:E9:94:D7:DC:41 RSSI: -95

[CHG] Device 78:E9:94:D7:DC:41 RSSI: -86

[CHG] Device 78:CA:39:BF:E4:DA RSSI: -82

[NEW] Device 43:07:CA:F8:FB:A8 43-07-CA-F8-FB-A8

[CHG] Device 43:07:CA:F8:FB:A8 RSSI: -99

[CHG] Device 43:07:CA:F8:FB:A8 RSSI: -87

[CHG] Device 43:07:CA:F8:FB:A8 RSSI: -97

[NEW] Device 79:58:75:F5:00:07 79-58-75-F5-00-07

Notez que la commande scan change l’état de l’adaptateur qui se met à la recherche de périphériques, mais que cel e-ci n’est pas bloquante. Les messages apparaissent au fur et à mesure alors que vous gardez la main sur l’outil. Les messages concernent aussi bien les découvertes de périphériques que les changements les concernant, comme la variation de la puissance du signal (RSSI) ou encore le fait d’obtenir le nom associé à Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 92

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Contrôlez vos montages Bluetooth depuis votre Pi

l’adresse matériel e. Gardez simplement à l’esprit que ces messages ne sont pas le résultat de votre commande, mais juste une information sur ce qui se passe.

Après quelque temps, vous pourrez utiliser la commande devices pour lister vos découvertes alentour :

[bluetooth]# devices

Device 00:19:5D:EE:A4:24 Hackable15

Device 78:CA:39:BF:E4:DA iMac de yann

Device 00:19:5D:EE:A4:1D HackableBT2

Device 49:83:39:88:BE:21 49-83-39-88-BE-21

Device 78:E9:94:D7:DC:41 78-E9-94-D7-DC-41

Nous voyons ici que plusieurs périphériques ont été trouvés. Certains donnent leur nom d’autres pas. Certains sont à moi et d’autres à quelqu’un dans le voisinage. Celui qui nous intéresse ici est « Hackable15 », c’est le module Bluetooth utilisé dans le précédent numéro en compagnie d’une carte Arduino permettant de contrôler la couleur d’une led depuis un smartphone Android.

Nous pouvons obtenir des informations sur ce périphérique :

[bluetooth]# info 00:19:5D:EE:A4:24

Device 00:19:5D:EE:A4:24

Name: Hackable15

Alias: Hackable15

Class: 0x0c0800

Paired: no

Trusted: no

Blocked: no

Connected: no

LegacyPairing: yes

Nous voyons ici son nom et adresse, mais également le fait qu’il ne soit pas associé, ni de confiance, ni bloqué, ni connecté. Nous apprenons également que ce périphérique supporte le legacy pairing, correspondant à une méthode d’association propre au Bluetooth 2.0 (normal puisqu’il ne s’agit pas d’un périphérique Bluetooth Low Energy). Nous pouvons éventuel ement tenter une connexion, qui est vouée à l’échec par définition sans association, afin d’obtenir tantôt plus d’informations et en particulier le ou les UUID permettant à l’outil de connaître les services disponibles et donc quelques caractéristiques supplémentaires. Exemple :

[bluetooth]# connect 00:19:5D:EE:A4:1D

Attempting to connect to 00:19:5D:EE:A4:1D

[CHG] Device 00:19:5D:EE:A4:1D Connected: yes

[CHG] Device 00:19:5D:EE:A4:1D UUIDs:

00001101-0000-1000-8000-00805f9b34fb

Failed to connect: org.bluez.Error.NotAvailable

[CHG] Device 00:19:5D:EE:A4:1D Connected: no

[bluetooth]# info 00:19:5D:EE:A4:1D

Device 00:19:5D:EE:A4:1D

Name: Barre72

Alias: Barre72

Class: 0x0c0800

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

HACKABLE MAGAZINE n°16

93

EMBARQUÉ & INFORMATIQUE

BLUETOOTH

Paired: no

Trusted: no

Blocked: no

Connected: no

LegacyPairing: yes

UUID: Serial Port

(00001101-0000-1000-8000-00805f9b34fb)

Cette dernière ligne nous indique que l’UUID rapporté par le périphérique décrit un port série (Serial Port). Parfois, en particulier avec des PC ou des Mac ayant la connectivité Bluetooth activée, il n’est pas même nécessaire de tenter une connexion et nous obtenons une liste bien plus complète de services :

UUID: Audio Source (0000110a-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb) UUID: Handsfree Audio Gateway (0000111f-0000-1000-8000-00805f9b34fb) UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb) UUID: Service Discovery Serve.. (00001000-0000-1000-8000-00805f9b34fb) UUID: Headset AG (00001112-0000-1000-8000-00805f9b34fb) UUID: GN (00001117-0000-1000-8000-00805f9b34fb) Mais revenons à notre périphérique « Hackable15 ». . La phase suivante consiste à associer ou appairer le périphérique en utilisant la commande pair suivie de l’adresse matériel e correspondante :

[bluetooth]# pair 00:19:5D:EE:A4:24

Attempting to pair with 00:19:5D:EE:A4:24

[CHG] Device 00:19:5D:EE:A4:24 Connected: yes

Request PIN code

[agent] Enter PIN code: 424242

[CHG] Device 00:19:5D:EE:A4:24 UUIDs:

00001101-0000-1000-8000-00805f9b34fb

[CHG] Device 00:19:5D:EE:A4:24 Paired: yes

Pairing successful

[CHG] Device 00:19:5D:EE:A4:24 Connected: no

Ce mélange de messages et de résultats doit être vu d’une part en :

[CHG] Device 00:19:5D:EE:A4:24 Connected: yes

[CHG] Device 00:19:5D:EE:A4:24 UUIDs:

00001101-0000-1000-8000-00805f9b34fb

[CHG] Device 00:19:5D:EE:A4:24 Paired: yes

[CHG] Device 00:19:5D:EE:A4:24 Connected: no

et d’autre part en :

[bluetooth]# pair 00:19:5D:EE:A4:24

Attempting to pair with 00:19:5D:EE:A4:24

Request PIN code

[agent] Enter PIN code: 424242

Pairing successful

Suite à la commande, l’outil a besoin du code permettant l’association. Celui-ci nous est alors demandé, puisque bluetoothctl lancé avec l’option -a embarque un agent. Nous entrons Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 94

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Contrôlez vos montages Bluetooth depuis votre Pi

La Raspberry Pi

Model B+ équipée

d’un adaptateur

USB disposera

d’une connectivité

Bluetooth identique

à sa grande sœur la

Pi 3. Disposés autour

de la Pi, quelques

modules Bluetooth de

différentes origines

utilisables très

facilement et pour

offrir une fonctionnalité

Bluetooth/série à

n’importe quel projet.

424242 correspondant au code que nous avions configuré au moment de paramétrer le module dans le numéro précédent. Suite à cela, la tentative d’association a lieu et réussit avec le message

« Pairing successful ».

Notre périphérique est maintenant associé, ce qui signifie qu’un lien de confiance existe entre notre système et lui, et qu’il n’est plus nécessaire de procéder à d’autres authentifications via un code. Notre périphérique apparaît maintenant aussi bien dans le résultat de la commande devices que dans celui de la commande permettant de lister les périphériques associés :

[bluetooth]# paired-devices

Device 00:19:5D:EE:A4:24 Hackable15

Bien entendu l’association, une fois en place, perdure après avoir quitté bluetoothctl et même entre deux redémarrages. Attention cependant, cel e-ci est liée à l’adaptateur et sa propre adresse ma-tériel e. En d’autres termes, si vous utilisez un adaptateur USB et le replacez par un autre (d’un modèle strictement similaire ou non), les associations ne seront plus en place et il faudra recommencer.

Pour « désassocier » un périphérique, le cas échéant, il vous suffira d’utiliser la commande remove suivie de l’adresse du périphérique. Notez à ce propos que pour réassocier ce même péri-phérique, il faudra au préalable qu’il soit à nouveau découvert (scan on) et présent dans la liste des périphériques (devices) dont les entrées expirent quelque temps après la découverte si la recherche est désactivée (scan off).

3. COMMUNIQUER EN BLUETOOTH AVEC PYTHON

À présent que notre montage Arduino est associé, nous pouvons communiquer avec lui. Il existe plusieurs techniques comme par exemple le fait d’utiliser la commande rfcomm du paquet bluez pour initier la connexion et ajouter un pseudo port série la représentant. On doit alors ensuite utiliser un outil de communication série ou un programme « maison » pour utiliser ce port et échanger des données avec le périphérique Bluetooth distant.

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

HACKABLE MAGAZINE n°16

95

EMBARQUÉ & INFORMATIQUE

BLUETOOTH

Une solution plus simple consiste à écrire un script Python se chargeant d’initier la connexion puis de communiquer avec notre montage. Pour cela, il faut disposer du module Python adéquat : python-bluez. Une fois instal é avec sudo apt-get install, nous pouvons faire un premier essai :

#!/usr/bin/python

# -*- coding: utf-8 -*-

import bluetooth

import time

import sys

# adresse du périphérique Bluetooth

bd_addr = "00:19:5D:EE:A4:24"

port=1

# tentative de connexion

print "Connexion..."

try:

sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)

sock.connect((bd_addr, port))

except:

print "Erreur lors de la connexion !"

sys.exit(1)

# Ca marche, sock représente la connexion désormais

print "Connecté."

time.sleep(2)

# Tentative de déconnexion

print "Déconnexion..."try:

sock.close()

except:

print "Erreur lors de la déconnexion !"

print "Déconnecté."

Ce script ne fait pas grand-chose, mais nous permet de vérifier le fonctionnement de la connexion. On utilise le module Python bluetooth en compagnie de l’adresse matériel e du péri-phérique auquel se connecter (et qui est désormais appairé). On crée alors un objet sock retourné par BluetoothSocket(). La syntaxe try/except nous permet de détecter un problème et d’y réagir facilement.

La liaison effectuée est une liaison série reposant sur le protocole Bluetooth RFCOMM, typique des modules qu’on peut utiliser avec des montages Arduino. Une fois la communication établie, notre script marque une pause de deux secondes puis invoque la méthode close pour mettre un terme à la liaison. Là encore, le try/except est bien pratique.

Le script une fois lancé nous affiche normalement simplement :

Connexion...

Connecté.

Déconnexion...

Déconnecté.

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

Contrôlez vos montages Bluetooth depuis votre Pi

Ce script forme un squelette qui peut nous servir de base pour tous nos projets. Dans le cas qui nous intéresse ici, nous voulons envoyer un message au montage permettant de choisir la couleur que doit prendre la led qui s’y trouve connectée. Ce message prend la forme de quelques octets : 0, 0, la valeur de rouge, de vert, de bleu et le caractère « ; ». Pour simplifier l’utilisation, notre outil va prendre en argument une valeur de teinte entre 0 et 359, puis transformer cel e-ci en rouge, vert et bleu, avec une saturation et une valeur maximum.

#!/usr/bin/python

# -*- coding: utf-8 -*-

import bluetooth

import sys

import colorsys

def hsv2rgb(h,s,v):

return tuple(int(i * 255) for i in colorsys.hsv_to_rgb(h,s,v))

bd_addr = "00:19:5D:EE:A4:24"

port=1

msg = bytearray("\x00\x00\x00\x00\x00;")

if len(sys.argv) != 2:

print "Donnez-moi une teinte (0-359) !"

sys.exit(1)

couleur = int(sys.argv[1])

if not (0 <= couleur <= 359):

print "Mauvaise couleur/teinte !"

print "Entre 0 et 359 svp."

sys.exit(1)

print "Envoi..."

try:

sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)

sock.connect((bd_addr, port))

except:

print "Erreur lors de la connexion !"

sys.exit(1)

msg[2],msg[3],msg[4] = hsv2rgb(couleur/360.0,1,1)

sock.send(str(msg))

try:

sock.close()

except:

print "Erreur lors de la déconnexion !"

Pour la conversion de couleur, nous utilisons le module colorsys qui est livré en standard avec Python et ajoutons une fonction simple, hsv2rgb, qui nous retourne les valeurs au bon format (entre 0 et 255 et non entre 0,0 et 1,0).

Nous préparons notre message sur la forme d’un bytearray, un tableau d’octets puis, après avoir vérifié que la valeur passée en argument correspond bien à nos attentes, nous le Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°16

97

EMBARQUÉ & INFORMATIQUE

BLUETOOTH

modifions avec les valeurs de couleur calculées. Le tout est enfin envoyé avec la méthode send() de notre objet sock sous la forme d’une chaîne de caractères à destination du montage Arduino.

Pour utiliser ce script et envoyer une couleur au montage, il nous suffit maintenant de l’appeler en lui passant un nombre entre 0 et 359. Immédiatement, la led connectée prend la couleur demandée. Mission accomplie !

4. POUR FINIR... OU PRESQUE

Étant d’un naturel à préférer la ligne de commandes aux interfaces graphiques, j’ai une tendance à tout naturel ement écrire des scripts et des programmes pour ce type d’interface.

Python permet cependant de développer rapidement des outils graphiques (Qt, Tk, Gtk+, etc.) qui peuvent offrir plus de souplesse avec, par exemple ici, un sélecteur de couleur similaire à l’application Android que nous avons vu dans le précédent numéro.

Mais hors du cadre de la liaison avec notre montage, une tel e communication Bluetooth entre Arduino et Raspberry Pi pourra satisfaire bien des besoins. On imagine ainsi aisément quelques exemples :

• sonde de température ou autre ;

Les adaptateurs USB

• afficheur LCD distant ;

Bluetooth industriels

se déclinent tantôt en

• imprimante thermique déportée ;

des modèles assez

• télécommande Bluetooth de moteurs ou servo ;

originaux. Celui-ci,

le Parani SD1000U

• contrôle de prises de courant ou de luminaires pour une solution domotique ; de SENA, n’est pas

• etc.

à proprement parler

un périphérique

Il est également possible de voir en la Raspberry Pi non pas un maître, mais un esclave, Bluetooth, mais

attendant des connexions de périphériques. Ceci demande un peu plus de configuration au apparaît comme

un port série

niveau système et nous reviendrons peut-être sur le sujet dans un prochain numéro. Dans ce fournissant une

genre de scénario, il devient alors possible d’obtenir une ligne de commandes de la part de la liaison transparente

Pi depuis un smartphone via une application faisant office d’émulateur de terminal.

sans avoir à utiliser

de pilote Bluetooth

Le Bluetooth est un terrain de jeu très intéressant qui offre une vaste compatibilité. Le Wifi spécifique.

aussi, me direz-vous, mais à la différence du Wifi, le Bluetooth fonctionne avec des équipements plus anciens ou

peu puissants, ne pou-

vant supporter le Wifi.

De plus, je trouve que

le Bluetooth, du fait de

prendre ici la forme d’une

liaison série, est bien plus

simple à mettre en œuvre.

Mais à chaque projet son

cahier des charges et ses

besoins. La clé du succès

c’est avant tout d’utiliser

les bons outils pour les

bonnes tâches. . DB

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

HACKABLE MAGAZINE n°16

http:/ www.hackable.fr/

DISPONIBLE DÈS LE 10 FÉVRIER

LINUX PRATIQUE HORS-SÉRIE N°38 !

DÉBUTEZ SOUS

LINUX AVEC LA

RASPBERRY PI !

Sous réserve de toutes modifications.

NE LE MANQUEZ PAS

CHEZ VOTRE MARCHAND DE JOURNAUX ET SUR :

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

pub_magazines_dec2016.indd 1

13/12/2016 09:27

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

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

Document Outline

- pour_aller_plus_loin_en_radio_logicielle

- petit_rappel_sur_la_radio_logicielle

- le_hackrf_one

- utilisation_du_hackrf_one

- conclusion

- ne_perdez_plus_la_main_sur_votre_pi_grac

- installation_et_premiers_pas

- gnu_screen_et_connexions_distantes

- personnalisation_de_gnu_screen

- pour_finir

- controlez_vos_montages_bluetooth_depuis_

- prendre_en_main_le_bluetooth_et_verifier

- jouer_avec_les_peripheriques_et_les_appa

- communiquer_en_bluetooth_avec_python

- pour_finir..._ou_presque

- utilisez_une_carte_sd_avec_votre_arduino

- les_cartes_sd_et_mmc

- utiliser_la_bonne_bibliotheque_et_premie

- lire_le_contenu_d_un_fichier

- creer_un_fichier_et_y_ecrire

- quoi_d_autre

- utiliser_vos_application_graphiques_rasp

- principe_et_verification

- entre_un_gnu_linux_et_une_pi

- entre_un_mac_et_une_pi

- pour_finir

- faites_peur_a_vos_amis_en_lisant_leur_ca

- le_materiel_necessaire

- utilisons_cardpeek

- pour_finir

- gravez_le_bois_avec_de_l_electricite

- a_la_recherche_de_volts..._de_plein_plei

- des_figures_de_lichtenberg_sur_du_bois

- conseils_de_securite

- techniques_et_astuces

- conclusion_et_perspectives

- utiliser_un_nrf24l01_avec_votre_raspberr

- preparation_et_installation

- portage_du_croquis_arduino

- le_reste_c_est_pour_vous

- nrf24l01creez_une_liaison_radio_longue_d

- a_propos_des_modules_nrf24l01

- le_nrf24l01_une_puce_intelligente

- arduino_bibliotheque_et_croquis

- premier_croquis

- second_croquis

- resultat

- pour_finir

Table of Contents

pour_aller_plus_loin_en_radio_logicielle

petit_rappel_sur_la_radio_logicielle

le_hackrf_one

utilisation_du_hackrf_one

conclusion

ne_perdez_plus_la_main_sur_votre_pi_grac

installation_et_premiers_pas

gnu_screen_et_connexions_distantes

personnalisation_de_gnu_screen

pour_finir

controlez_vos_montages_bluetooth_depuis_

prendre_en_main_le_bluetooth_et_verifier

jouer_avec_les_peripheriques_et_les_appa

communiquer_en_bluetooth_avec_python

pour_finir..._ou_presque

utilisez_une_carte_sd_avec_votre_arduino

les_cartes_sd_et_mmc

utiliser_la_bonne_bibliotheque_et_premie

lire_le_contenu_d_un_fichier

creer_un_fichier_et_y_ecrire

quoi_d_autre

utiliser_vos_application_graphiques_rasp

principe_et_verification

entre_un_gnu_linux_et_une_pi

entre_un_mac_et_une_pi

pour_finir

faites_peur_a_vos_amis_en_lisant_leur_ca

le_materiel_necessaire

utilisons_cardpeek

pour_finir

gravez_le_bois_avec_de_l_electricite

a_la_recherche_de_volts..._de_plein_plei

des_figures_de_lichtenberg_sur_du_bois

conseils_de_securite

techniques_et_astuces

conclusion_et_perspectives

utiliser_un_nrf24l01_avec_votre_raspberr

preparation_et_installation

portage_du_croquis_arduino

le_reste_c_est_pour_vous

nrf24l01creez_une_liaison_radio_longue_d

a_propos_des_modules_nrf24l01

le_nrf24l01_une_puce_intelligente

arduino_bibliotheque_et_croquis

premier_croquis

second_croquis

resultat

pour_finir