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

ÉDITO

SOMMAIRE

Cloud, cloud, cloud. .

Je ne sais pas ce que vous en pensez, mais je trouve

que ça devient pénible.

ÉQUIPEMENT

Qu’il existe une solution pour mettre ses informations

04

personnel es « dans le nuage », autrement dit, sur un

serveur web qui ne vous appartient pas avec une configu-

Dessoudez, changez et récupérez

ration logiciel e que vous ne contrôlez pas, ne me dérange

des composants

pas. Après tout, libre à chacun de décider si mettre ses

relevés de températures, ses évènements de détection de

mouvements ou encore la pression de ses radiateurs est quelque chose de raisonnable ou non.

ARDU'N'CO

Ce qui est plus dérangeant à mon sens c’est que cela devienne la solution par 14

défaut. Non parce que c’est simplement bien plus facile à configurer de cette manière, mais parce que tout semble fait pour rendre l’instal ation « individuel e » vraiment fas-Démarrez votre PC à distance

tidieuse et pénible. Parfois, cela en arrive même à prendre un petit côté « shareware »

avec une carte Arduino ou

des années 90 : vous pouvez instal er une version relativement ancienne très facilement sur votre Raspberry Pi, mais si vous souhaitez une version récente, soit vous ESP8266

utilisez le service en ligne proposé (cloud donc) soit vous devez être prêt à passer de longues nuits à apprendre, configurer, déjouer les pièges et vous énerver, car toute la chaîne de dépendance entre les éléments est à revoir manuel ement.

30

Un excel ent exemple concerne les solutions de dashboard permettant d’avoir une Recyclez un vieil écran VGA et utilisez-page web avec représentation graphique de vos données col ectées par des capteurs.

le avec votre Arduino

C’est presque systématique, dès que l’interface est travail ée, vous pouvez être certain que l’instal ation individuel e sera extrêmement éprouvante sinon cauchemardesque.

On est alors tenté de céder à l’envie de tout simplement se créer un compte et utiliser EN COUVERTURE

le service en ligne. Cela ressemble aux jeux « free to play » où on se rend rapidement compte que ce n’est pas si « free » que ça. .

42

Je comprends cependant la motivation des développeurs ou des sociétés derrière Créez votre portier audio

ces services et logiciels. Le développement coûte cher et il faut bien trouver un moyen de mettre du pain sur la table. Mais pour moi, moralement et philosophiquement, il y a connecté

des limites à ne pas dépasser. D’autant que dans d’autres domaines l’équilibre existe (comme WordPress ou Prestashop par exemple). Instal er un blog ou une boutique en ligne qui ressemble à quelque chose, seul, sans être développeur/sysadmin, n’est pas 56

insurmontable. Installer proprement un dashboard du même acabit est inaccessible à Portier audio connecté :

la quasi-totalité des hobbyistes. C’est triste. Énervant et triste. .

instal ation et configuration

Mais je suis d’un naturel buté et têtu. Donc non messieurs, je ne créerai pas de compte gratuit, mes relevés de températures me regardent moi et uniquement moi. Et lorsque je serai venu à bout du problème, bien sur terre et non dans les nuages, j’en EMBARQUÉ & INFORMATIQUE

ferai profiter le plus grand nombre (c’est vous ça, amis lecteurs). Na !

74

Ajoutez une sortie audio Bluetooth à

votre Raspberry Pi

Hackable Magazine

Plate-forme de Saint-Quentin-Fallavier.

Tél. : 04 74 82 63 04

est édité par Les Éditions Diamond

Service des ventes : Abomarque : 09 53 15 21 77

DÉMONTAGE, HACKS & RÉCUP

IMPRIMÉ en Allemagne - PRINTED in Germany

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

82

N° ISSN : 2427-4631

Commission paritaire : K92470

DOS n'est pas mort ! Il va même très

10, Place de la Cathédrale - 68000 Colmar

Périodicité : bimestriel

bien !

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

Prix de vente : 7,90 €

E-mail : lecteurs@hackable.fr

La rédaction n’est pas

Service commercial : cial@ed-diamond.com

responsable des textes,

illustrations et photos qui

REPÈRE & SCIENCE

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

lui sont communiqués par

http://www.ed-diamond.com

leurs auteurs. La repro-

Directeur de publication : Arnaud Metzler

duction totale ou partiel e des articles publiés dans Hackable Magazine 94

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 à Hackable Magazine, publiés ou non, ne sont ni rendus, ni renvoyés. Les Jonglez avec les versions de Raspbian

Réalisation graphique : Kathrin Scali

Responsable publicité : Valérie Fréchard,

indications de prix et d’adresses figurant dans les pages rédactionnel es sont données à titre d’information, sans aucun but publicitaire. Toutes pour profiter des applications les plus

Tél. : 03 67 10 00 27 v.frechard@ed-diamond.com

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é récentes

de leur ayant droit respectif.

Impression : pva, Landau, Allemagne

Distribution France : (uniquement pour les

Suivez-nous sur Twitter

dépositaires de presse)

ABONNEMENT

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

@hackablemag

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

47/48

À PROPOS DE HACKABLE...

Abonnements multi-supports

HACKS, HACKERS & HACKABLE

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°18

3

ÉQUIPEMENT

DÉSSOUDAGE

DESSOUDEZ, CHANGEZ

ET RÉCUPÉREZ DES

COMPOSANTS

Denis Bodor

Souder des composants est une activité qu’on finit forcément par

avoir dès lors qu’on s’intéresse peu ou prou à l’électronique. Les platines à essais sont, comme leur nom l’indique, principalement

faites pour... les essais. Ensuite il faut passer à quelque chose

de plus robuste et durable, et donc qui implique des soudures.

L’opération inverse est assez différente puisque le but n’est pas de créer mais, soit de récupérer un élément pour un autre usage, soit de changer un élément défectueux. Voyons ensemble comment

mener cela à bien avec différentes techniques utilisables...

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Dessoudez, changez et récupérez des composants

Souder un composant,

que ce soit en sur-

face ou traversant

n’est pas quelque

chose de très diffi-

cile avec un peu d’entraînement et

du matériel adapté. C’est une pra-

tique relativement facile à acquérir

puisqu’il s’agit, somme toute, de

mettre le composant en place,

appliquer de la chaleur avec la

panne du fer à souder et ajouter

de l’étain de soudure qui, une fois

Voici l’un des

fondu, se glissera presque de lui-

cauchemars du

même là où il doit aller.

tous ne la supportent pas de la même façon. Les compo-

déssoudage de

sants sensibles, et donc souvent les plus coûteux, dis-

composants :

L’opération inverse n’est pas

posent même, dans leur documentation technique

les énormes

aussi aisée, du moins pas pour

morceaux de circuit

(datasheet) d’une température maximum de soudure ain-

tous les composants. Deux cas de

généralement

si qu’un délai durant lequel cette température peut être

connectés à la

figure peuvent se présenter, soit le

appliquée. D’autres éléments, comme les connecteurs

masse et servant

composant à dessouder possède

par exemple, possèdent des supports en plastique qui

de radiateur. Mais il

deux ou trois pattes relativement

y a pire, les circuits

peuvent fondre en dégageant généralement des fumées

proches et il est possible de les

multicouches avec

tout aussi désagréables que nocives.

ce genre de choses

chauffer de concert, soit il dispose

à l’intérieur du

davantage de broches et dans ce

La question qui se pose alors est : pourquoi voulez-

substrat...

cas, la solution consiste à retirer

vous dessouder un composant ou un élément ?

l’étain, point par point, afin de libé-

rer le composant.

1. DESSOUDER POUR

Une approche « entre deux »

est possible dans certains cas

RÉPARER : MÉTHODE

puisqu’il est toujours possible

d’ajouter de l’étain pour dessou-

BARBARE OU PRESQUE

der le tout en une fois, mais ceci

Comme dit précédemment, on peut vouloir dessouder

ne fonctionnera pas avec, par

un composant pour le remplacer, car il est défectueux ou

exemple, un circuit intégré avec

supposé comme tel, ou alors, on veut le dessouder pour

une douzaine de broches ou plus.

le récupérer et s’éviter un achat (ou simplement parce

Cette technique peut paraître

que le temps presse). Dans le premier cas, la survie du

contre-intuitive, puisqu’on ajoute

composant ou de l’élément à dessouder importe peu,

de l’étain pour dessouder, pourtant mais votre attention doit se porter principalement sur la el e fonctionne à merveil e, mais. .

« survie » du circuit imprimé d’où est retiré le composant.

tout dépend la raison pour laquel e

on dessoude.

En effet, une température excessive ou une appli-

cation prolongée peut avoir des conséquences sur les

En effet, quel e que soit la tech-

pistes, tout comme une contrainte mécanique trop impor-

nique utilisée, il est nécessaire de

tante. Le calme et la patience sont généralement les

prendre en compte un élément

maîtres mots dans ce genre de situation. Je sais qu’il est

important : tous les composants

très énervant de s’affairer à la tâche et de voir le com-

n’aiment pas la chaleur, ou plutôt,

posant refuser obstinément de bouger, mais la dernière

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

HACKABLE MAGAZINE n°18

5

ÉQUIPEMENT

DÉSSOUDAGE

chose qui doit vous traverser l’esprit est de tenter de bru-

Parfois, une pince n’est même

taliser le composant. Ceci aurait pour effet d’endommager

pas nécessaire, certains conden-

le circuit, décol er une ou plusieurs pistes, voire de retirer

sateurs par exemple peuvent

un via (trou métal isé faisant généralement la liaison entre

être « arrachés » (par rotation),

les diverses couches d’un circuit imprimé).

ne laissant que leurs pattes qui

peuvent ensuite être dessoudées

Dans ce dernier cas, au mieux c’est un circuit double

proprement, comme l’a montré la

face et vous devrez trouver un moyen de re-router le

chaîne YouTube Mr Carlson’s Lab

signal d’une autre manière et au pire, il s’agit d’un circuit

(fantastiques vidéos si vous êtes

multicouche et. . vous voilà parti dans une chasse au tré-

anglophone et amateur d’électro-

sor pour retrouver ce qui est connecté à quoi. Ce qui le

nique vintage).

plus souvent est une tâche futile, car vouée à l’échec.

De manière générale, dès lors

Dans bien des cas, il est plus simple de détruire le

qu’il s’agit de réparer un circuit

composant devant être retiré. Pas pour le plaisir ou par

en changeant les composants (le

cruauté, bien entendu, mais pour faciliter le dessoudage.

plus souvent les condensateurs

Dans le cas d’un circuit intégré, par exemple, il est bien

puisque les problèmes viennent

plus efficace de délicatement sectionner les pattes du

généralement de là dans 80% des

composant pour ensuite les dessouder une à une. Il en

cas, sinon plus) la seule chose à

va de même, parfois, pour les composants plus petits

garder à l’esprit est de n’agir que

comme les leds, les résistances, les condensateurs ou

dans le but de laisser le circuit

encore les transistors. Ces derniers, tantôt vissés ou col-

intact. Peu importe l’état final du

lés à des radiateurs également soudés au circuit, doivent

composant retiré, la seule chose

être séparés mécaniquement avant déssoudage.

qui compte c’est le circuit et ses

Si votre objectif n’est pas de récupérer le composant,

pistes.

votre meil eure amie sera sans le moindre doute une

petite pince coupante de précision. Le genre de modèle

miniature spécialement destiné aux travaux d’électro-

2. LES

nique, avec une face plane permettant une coupure nette

DIFFÉRENTES

au ras du circuit. En procédant ainsi, il ne vous restera

plus ensuite qu’à retirer les pattes soudées une à une puis

TECHNIQUES DE

nettoyer les via avec une pompe à dessouder et/ou de la

tresse à dessouder, pour ensuite placer un nouveau com-

DÉSSOUDAGE

posant (cf. plus loin dans l’article).

Si vous souhaitez dessouder

Remarquez au passage que si votre objectif concerne

des composants afin de les réu-

le remplacement d’un circuit intégré, sur un ordinateur

tiliser, l’approche est totalement

des années 80 par exemple, il sera préférable de souder

différente. Là, l’état final du circuit

un emplacement pour circuit intégré plutôt qu’un nouveau

sur lequel ils se trouvent n’a au-

composant. Certaines de ces machines possèdent des

cune espèce d’importance et dans

composants relativement sensibles aux décharges élec-

certains cas il est même envisa-

trostatiques, comme par exemple le CIA 6526 (Complex

geable d’attaquer le circuit à la

Interface Adapter) du Commodore 64 (oui, encore lui,

disqueuse Dremel pour minimiser

c’est une obsession chez moi), pouvant être endommagé

l’effort de soudure/déssoudage.

en touchant simplement les connecteurs joystick. Dans ce

Le principal problème dans

genre de situations, si vous prenez le temps de dessouder

cette situation est de ne pas

le composant pour le remplacer, autant préparer le terrain

endommager le composant en

pour un éventuel prochain problème.

le faisant monter trop haut en

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Dessoudez, changez et récupérez des composants

température ou en le chauffant

(résistances par exemple), la meil eure technique consiste

trop longtemps. Vos principaux

sans doute à n’utiliser rien d’autre que la panne de son fer à

ennemis ici seront les grandes

souder et de l’étain.

surfaces de cuivre, souvent éta-

L’opération se résume à ajouter le l’étain jusqu’à ce que l’en-

mées, connectées à la masse

semble, en fusion, touche toutes les pattes et, normalement,

(ground plane). Ces surfaces

le composant tombe de lui-même. Il est possible de s’aider

permettent une importante dis-

sipation thermique qui, de fait,

d’une pince ou de tout simplement faire jouer la gravité en lui

réduisent la concentration de

donnant un petit coup de pouce via un mouvement sec du

chaleur à l’endroit où l’on souhaite

circuit. Vous pouvez également utiliser vos mains si vous avez

qu’el e soit la plus importante et

une certaine tolérance à la douleur, même si après quelques

rapidement appliquée : les pattes

« aïe » et « ouil e » on finit souvent, miraculeusement par se

des composants. Dans certains

souvenir où on a rangé sa pince préférée. .

cas, comme avec les transistors

Mais le fait d’ajouter de l’étain de soudure n’est pas simple-

et les MOSFET au format TO-220

ment une solution thermique pour déloger le composant. La

par exemple, ces surfaces sont

plupart des étains de soudure (neufs) contiennent du flux, un

d’ailleurs justement parfois utili-

composé chimique destiné à décaper et nettoyer le circuit et

sées comme « radiateur ». Il peut

la patte du composant lors de la soudure. Ce flux est égale-

être alors intéressant de s’atta-

ment utile pour passer la couche d’oxyde (ou de crasse) qui se

quer directement au circuit pour

forme souvent sur les vieil es soudures. Ceci permet aussi de

réduire la tail e de la surface et

diluer l’étain déjà en place avec le vôtre de façon à baisser sa

donc faciliter l’utilisation du fer.

température de fusion. En effet, selon le rapport étain/plomb,

Un autre cas de figure qui peut

la température peut grandement varier (source : le guide

se présenter concerne les circuits

« Better Soldering » de Wel er) :

multicouches comprenant tantôt

• 40/60 : 230°C ;

un ground plane interne. Il est

cependant plus rare de chercher à

• 50/50 : 214°C ;

récupérer des composants sur ce

• 60/40 : 190°C ;

type de circuit, comme les cartes

mères de PC, mais la solution est

• 63/37 : 183°C ;

exactement la même : réduire par

• 95/5 : 224°C.

tous les moyens possibles la tail e

Les étains sans plomb, maintenant obligatoires, ont généra-

de cette surface et donc, parfois,

lement un point de fusion autour de 220°C.

en venir à faire des petits mor-

ceaux avec le circuit.

Notez que, quels que soient l’étain et l’état du circuit, il est

important d’assurer une ventilation adéquate lors de l’opé-

2.1 Ajouter de l’étain

ration de déssoudage. Ceci est également valable de façon

générale pour une soudure, mais dans le cas qui nous occupe

Comme évoqué précédem-

ici, vous ne savez pas à quel produit chimique ou composé

ment, lorsque le composant à

vous avez affaire. Une bonne solution pour éviter de respirer

récupérer est de petite tail e,

ces fumées, qu’on se doit d’estimer nocives par défaut, est

que ses pattes sont peu nom-

d’utiliser un extracteur de fumées. Il en existe de toutes sortes

breuses et proches les unes

vendus dans le commerce, mais une excel ente solution éco-

des autres (transistors en boîtier

nomique consiste à recycler un ventilateur de PC et lui ad-

TO-92 ou leds, par exemple),

joindre un filtre à charbon actif. Le flux d’air aspiré du point de

ou qu’el es peuvent être des-

déssoudage capturera la majeure partie des éléments nocifs

soudées en plusieurs fois

et évitera que vous vous intoxiquiez pour rien.

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

HACKABLE MAGAZINE n°18

7

ÉQUIPEMENT

DÉSSOUDAGE

le maximum d’étain pour libérer

chaque patte, et donc à terme, le

composant tout entier.

Là, c’est un peu comme la légen-

daire question du vidage des sar-

dines pour le barbecue, nous avons

deux écoles et chacune d’el e a ses

fervents et dévoués paroissiens : la

pompe à dessouder (voir ci-après)

et la tresse à dessouder.

Le flux de soudure permet un nettoyage

Cette dernière se présente

des pistes, des pattes des composants et

Toujours du point de vue de la

comme un simple ruban de cuivre

de la tresse à dessouder. Ici une version

(ou d’un autre métal plaqué de

en pâte, mais il en existe de nombreuses

sécurité, il est également recom-

cuivre) tressé tantôt pré-imprégné

déclinaisons : liquide, en seringues,

mandé de porter des gants (type

en feutres, etc. Comme vous pouvez

latex, vinyle ou nitrile) et de vous

de flux. Son principe de fonction-

en juger vu l’état, ce genre de choses

laver les mains après toutes mani-

nement est simple, puisqu’il suffit

se consomme lentement et votre petit

de placer le bout de la tresse sur

durera donc longtemps...

pulations. Comme vous ne savez

pas exactement de quoi est com-

un point de soudure du compo-

posé l’étain en place, mieux vaut

sant et d’y poser la pane du fer

vous montrer prudent. La directive

à souder. La tresse chauffe, puis

RoHS visant à limiter l’utilisation

l’étain devient liquide et celui-ci

de substances dangereuses

est aspiré dans la tresse par capil-

larité. C’est exactement la même

comme le plomb et le cadmium,

chose que lorsque vous épongez

n’est effective que depuis 2006

de l’eau avec de l’essuie-tout.

et n’est pas applicable partout.

Dans le doute, mieux vaut donc

Une fois tout l’étain aspiré, il suffit

La tresse à dessouder n’est rien d’autre

éviter tout risque de contact ou

de retirer le fer et la tresse. L’étain

que du fil de cuivre tressé. Elle est

d’ingestion avec ces substances

généralement vendue en petits rouleaux

absorbé se solidifie en refroidissant

comme ceux-ci, par lot, pour quelques

inconnues.

et on coupe la partie imprégnée

euros.

de la tresse avec une pince avant

2.2 La tresse à

d’attaquer la patte suivante.

dessouder

Si la tresse n’est pas déjà

traitée dans ce sens, l’apport de

Lorsque le composant ou

flux de soudure facilite grande-

l’élément à dessouder/récupé-

ment les choses en permettant

rer possède de nombreuses

de supprimer l’inévitable couche

pattes (circuit intégré, réseau

d’oxyde se formant sur le cuivre.

de résistances, connecteurs

Le fer à souder a pour tâche ici de

DB25, optocoupleurs, etc.) ou

chauffer la tresse, l’étain, la patte

des pattes distantes les unes

du composant et la piste du circuit

des autres sans possibilité de

imprimé de façon à pouvoir aspi-

tout chauffer en une fois (relais,

rer le maximum, sinon l’intégralité,

transformateurs, connecteurs

de l’étain en place. Bien entendu,

d’alimentation, etc.), vous n’avez

jouer avec la panne du fer à sou-

plus qu’une solution : retirer

der de manière à décol er la patte

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Dessoudez, changez et récupérez des composants

Le principe de

fonctionnement

du composant du via où el e se

de la tresse

est simple : on

trouve facilite le retrait final.

fait chauffer la

tresse, la patte

La forme de la coupure de la

du composant

tresse joue également un rôle.

et l’étain et ce

Tail ée en biais, par exemple, el e

dernier, fondu,

sera plus à même d’être glissée

est aspiré par

capillarité dans

au plus proche du via pour net-

la tresse.

toyer tout résidu d’étain. Il existe

également plusieurs largeurs de

tresse à dessouder, utilisables en

fonction de la quantité de matière

à aspirer. Plus la tresse est large,

plus il faudra appliquer de cha-

Le principal problème de la tresse à dessouder est le risque

leur pour lui faire faire son travail.

de surchauffe et de décol age des pistes (dans le cas d’une

Personnel ement, je trouve qu’une

réparation). Ceci cependant est une affaire de technique et en

tresse de 2 mm de large permet

particulier du fait de se retenir d’appliquer trop de contraintes

de dessouder efficacement tous

mécaniques. La tresse ne fonctionnera pas mieux en appuyant

les composants intéressants.

de toutes vos forces ou en frottant la surface. Laissez faire

La tresse à dessouder se trouve

son travail au fer et à la tresse et, éventuel ement, ajoutez du

dans n’importe quel e boutique en

flux pour faciliter l’aspiration. Au bout de quelque temps, vous

ligne pour quelques euros, mais

développerez naturel ement une certaine sensibilité. . ou fini-

gardez à l’esprit que cela reste

rez par détester la tresse à dessouder.

un consommable. Il en existe de

plusieurs qualités et marques,

2.3 La pompe à dessouder

mais pour un usage courant l’achat

auprès d’un vendeur de ShenZhen

La pompe à dessouder est restée longtemps mon acces-

sur eBay est bien suffisant. On

soire préféré avant de me rendre compte finalement qu’il n’y a,

en réalité, pas de technique exclusive pour le déssoudage de

peut ainsi trouver des mini rou-

composants. On choisit simplement le bon outil en fonction de

leaux de 1,5m par lot de 5 entre 2€

la tâche à accomplir et de l’humeur du moment.

et 3€, port offert. Il suffit de cher-

cher « desoldering braid » pour

La pompe à dessouder ne nécessite pas de consommable

être inondé d’annonces en tout

et agit par aspiration mécanique. Il s’agit d’un outil de la tail e

genre...

d’un gros feutre, composé d’un cylindre et d’un piston mû par

Une pompe

à dessouder

manuelle se

résume à un

piston armé en

appuyant sur

l’arrière de l’objet.

On fait ensuite

fondre l’étain et

on déclenche

la gâchette. Le

ressort interne

pousse le piston

dans sa position

de départ et l’étain

est aspiré.

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

HACKABLE MAGAZINE n°18

9

ÉQUIPEMENT

DÉSSOUDAGE

petites pattes des composants et de préférence cel es qui

ne sont pas soudées à de grosses pistes ou de grandes

surfaces de cuivre. Dès lors qu’on retire la panne du fer,

la chaleur se dissipe et l’étain refroidit et il n’est pas rare

que l’aspiration arrive bien trop tard. Il est alors parfois

nécessaire de remettre de l’étain pour tenter de l’aspirer à

nouveau en une fois, ou de tout simplement basculer sur

la tresse à dessouder pour retirer ce qu’il reste.

Mais le point le plus pénible, à mon sens, dans l’utilisa-

tion de la pompe est le fait de devoir la nettoyer. Le corps

dans lequel se trouve le piston finit par se remplir de pro-

L’étain aspiré se

retrouve dans le

jections d’étain, couvrant la surface intérieure, le ressort,

corps de la pompe

un ressort. Pour l’utiliser, on

la tige interne, etc. Souvent, le ressort ne fait plus son

qu’il faut vider

fait tout d’abord fondre l’étain

travail tant l’ensemble est encrassé et il faut donc régu-

régulièrement et

à la base d’une des pattes du

lièrement dévisser l’embout puis procéder à un nettoyage

tantôt déboucher.

Un petit coup de

composant à dessouder puis,

intégral pour revenir à un fonctionnement normal.

lubrifiant après un

rapidement, on pose l’embout

nettoyage complet

Une pompe à dessouder vous coûtera entre 3€ et 15€

en téflon sur la patte et on

est généralement

(pour les modèles bling-bling de marque) et se trouve un

déclenche le mécanisme. Le

une bonne idée

pour garantir un

piston, poussé par le ressort

peu partout. Il existe même des modèles intégrés à des

fonctionnement

interne, recule rapidement,

fers à souder de 30W équipés de pannes creuses pour

correct.

créant une aspiration d’air qui

une dizaine d’euros. Je suis cependant assez réticent à

entraîne l’étain fondu avec el e.

cette combinaison n’offrant généralement aucune possibi-

Il est également possible d’utili-

lité de réglage de température et semblant plus adaptée à

ser la pompe et la panne du fer

des travaux d’électricité que d’électronique.

de concert, mais l’espace vide

alors présent rend l’aspiration

2.4 Il y a d’autres solutions

peu efficace.

L’usage de la pompe ou de la tresse est sans le

En principe, cette aspiration,

moindre doute la solution économique la plus courante.

si l’embout est bien appliqué et

Mais en dehors de cel e dont je vais parler dans un

l’étain encore bien liquide, per-

instant, il en existe d’autres. On peut par exemple citer

met de retirer toute la matière

l’utilisation d’une station de soudure à air chaud, sorte de

d’un coup, qui se retrouve alors

croisement entre un sèche-cheveux miniature et la sta-

dans le corps de la pompe.

tion de soudure/soudage. Utilisée généralement pour le

Après quelques opérations

soudage des composants de surface (SMD, CMS, etc.),

de ce type, l’étain finit invaria-

cel e-ci souffle de l’air chauffé à une température réglable

blement par presque boucher

entre 100°C et 500°C (selon le modèle) et permet donc de

l’embout, mais les concepteurs

dessouder des composants tout aussi facilement.

de l’outil ont pensé à tout. Il

suffit, en effet, d’armer le piston

Cette solution coûte cher et il est important de prendre

puis de pousser encore davan-

garde, en fonction des composants, à ne pas surchauffer

tage. Une tige interne sort alors

les composants, au risque d’endommager le précieux

par l’embout pour le libérer de

objet de votre convoitise.

l’étain excédentaire.

Une autre solution alternative est parfois intéressante

La pompe à dessouder

mais, là aussi coûteuse : l’utilisation d’un composé avec

fonctionne à merveil e sur les

un point de fusion très bas. L’une des marques les plus

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Dessoudez, changez et récupérez des composants

connues est Chip Quik qui se

station de déssoudage d’entrée de gamme acquise sur eBay.

présente comme une pâte ou un

Connaissant le bonhomme et son avis sur les matériels de ce

fil ressemblant à s’y méprendre à

type, j’ai été surpris de constater que, finalement, le verdict

de l’étain classique. L’idée est ici

n’était pas si catastrophique, voire plutôt bon. Le matériel

de faire fondre ce produit sur les

testé était une station de déssoudage ZD985 de marque

broches du composant de manière Rhino Tools mais, comme le précise Dave dans la vidéo, ce à ce qu’il se mélange avec l’étain

type de matériel est finalement générique et vendu sous bien

déjà en place. Son point de fusion

des marques et désignations.

étant bien plus bas que l’étain

J’ai donc ainsi, en relative confiance, jeté mon dévolu

classique (environ 80°C) et com-

sur un modèle assez similaire, voire presque totalement

prenant des composés chimiques

identique, vendu sous la désignation ZD-8915 sur eBay

et des al iages ramollissant l’étain

auprès d’un vendeur espagnol appelé « japangameon-

en place tout en refroidissant très

line » (mais d’où ces vendeurs pêchent leur nom ?). Le prix

lentement, la soudure ne tient tout

de l’objet, quelques 130€, plus 40€ de port (outch !) était

simplement plus et le composant

identique aux nombreuses offres de ZD985 également

peut alors être retiré rapidement et

présentes (les ZD985 et/ou ZD915 peuvent être trouvé

sans effort.

tantôt aux alentours de 120€ port inclus). En dehors de

Le produit en question coûtant

l’aspect du matériel, celui-ci se différencie par le fait que

quelques 15€ ou 20€ pour 70 cm

le réceptacle d’étain était transparent et potentiel ement en

de fil, il est évident que cette solu-

verre, alors que celui du modèle ZD985 est en plastique

tion sera réservée aux compo-

et opaque. Misant sur le fait que le reste du matériel serait

sants ou aux situations où d’autres

de la même qualité que le modèle testé par Dave, et les

solutions ne sont pas envisa-

entrail es identiques, j’ai donc pris ce petit risque qui s’est

geables ou trop risquées. Utiliser

finalement avéré être gagnant.

5€ d’étain spécial pour récupérer

Le principe de fonctionnement de la station de soudage

un composant neuf à quelques

est une simple fusion entre la station de soudage et la

euros n’a pas vraiment de sens.

pompe à dessouder. La base de l’appareil intègre ainsi

l’alimentation, l’électronique de contrôle de température et

3. UNE STATION

une pompe permettant l’aspiration de l’étain fondu.

DE DÉSSOUDAGE,

ÇA CHANGE LA

VIE !

J’ai toujours jonglé entre les

trois techniques de déssoudage

déjà décrites ici, me satisfaisant

La station de

des bienfaits et des lacunes de

déssoudage est un

croisement entre la

chacune sans pour autant vouloir

station de soudage et

investir dans un équipement plus

la pompe. La panne

conséquent et plus cher.

au bout du pistolet est

creuse et une pression

Et puis récemment j’ai vu une

sur la gâchette

vidéo de la chaîne YouTube EEV

déclenche la mise en

route de la pompe

Blog où le très australien Dave

électrique placée dans

Jones se risquait à tester une

la base de la station.

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

HACKABLE MAGAZINE n°18

11

ÉQUIPEMENT

DÉSSOUDAGE

• deux filtres prenant place dans

le raccord côté base,

• quatre filtres se plaçant à

l’arrière du réservoir sur le

pistolet,

• trois tiges (type cure-pipe) per-

mettant de nettoyer les pannes

creuses.

Les trois pannes sont livrées éta-

mées et bouchées par de l’étain, la

première opération consiste donc à

raccorder l’ensemble, mettre la base

en route, laisser chauffer la panne

Ce modèle

et jongler entre aspiration et usage

de station de

Le pistolet qui est relié à cette base, à la fois avec

d’une des tiges pour déboucher

déssoudage,

un câble et un tuyau souple, se compose d’une panne

l’orifice. Ceci fait, on peut faire son

d’entrée de

gamme, est

creuse et d’un réceptacle permettant d’accueil ir

premier essai en plaçant la panne

d’un niveau de

l’étain. L’activation du corps de chauffe et le choix de

autour d’une patte de composant,

qualité tout à

la température sont gérés par la base et le déclen-

agitant légèrement l’ensemble pour

fait respectable,

chement de la pompe se fait via une gâchette sur le

libérer la patte à mesure que l’étain

contrairement à ce

que la coque en

pistolet lui-même.

fond, puis en déclenchant l’aspira-

plastique pourrait

Ce modèle spécifique (je ne saurai l’affirmer pour

tion. Et effectivement, tout comme le

laisser penser.

les autres) est livré avec :

modèle ZD985, le déssoudage est

rapide et sans bavure.

• un câble d’alimentation (un peu court) avec une

prise EU,

Il y a des moments dans la vie

• un support métal ique pour poser le pistolet,

où on se dit qu’on aurait vraiment

pu gagner un temps précieux en

• une éponge pour nettoyer la panne,

faisant preuve d’un peu d’ouverture

• un jeu de trois pannes de tail es différentes,

et davantage de curiosité. Ce pre-

mier essai était l’un de ceux-là. Ces

Un petit coup d’œil

matériels semblent être disponibles

à l’électronique

depuis un certain temps et même

de la bête montre

si l’investissement reste non négli-

que l’afficheur LCD

geable (quelques 170€) par rapport

est rétroéclairé à

l’aide d’un module

à la pompe ou la tresse à dessouder,

en plastique tenu

le gain en souplesse, en vitesse et

en place avec de

en facilité est énorme. Récupérer un

la colle thermique.

connecteur DB9 ou DB15 se fait en

Personnellement,

je prends

un temps record, tout comme celui

littéralement ceci

d’un petit transformateur, un circuit

comme un appel

logique ou même un MOSFET de

à modifier cette

puissance généreusement soudé.

partie du matériel !

La plupart du temps, les composants

tombent tout simplement du circuit

une fois l’étain aspiré sur la dernière

broche.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Dessoudez, changez et récupérez des composants

Les composants récupérés sont

Après quelques

expérimentations

parfaitement propres, tout comme

hasardeuses, et

le circuit. Le matériel est donc par-

le retrait des leds

faitement adapté aussi bien pour la

blanches, trois

leds rouges 3 mm

récupération sauvage que pour les

super-lumineuses

réparations. Bien entendu, le bud-

(8000 mcd) sont

get à prévoir doit être en rapport

finalement collées

avec l’usage du matériel. Pour un

à la cyanoacrylate

et soudées en

usage intensif, ce type de produit

parallèle. Le

sera très certainement insuffi-

résultat est plutôt

sant, et pour une simple utilisation

convaincant...

très occasionnel e la dépense

ne sera pas justifiée. Sachant

et son côté très « IBM » (j’ai remarqué ensuite que le

qu’une station de déssoudage de

voyant s’al umant lors du déclenchement de la pompe

marque (Wel er, Hakko, JBC, etc.)

était bleu, ceci sera corrigé sous peu). Il est également

représente une coquette somme

fort probable que je déplace le bouton de mise sous

à quatre chiffres au minimum, ce

tension de l’arrière à l’avant de la base, car l’emplace-

matériel est, je pense, un juste

Et voilà, ma station

ment initial n’est vraiment pas pratique (malgré la fonc-

de soudage

équilibre pour un usage hobbyiste.

tion de mise en veil e automatique qui ne fait que bais-

est maintenant

esthétiquement

Du point de vue qualitatif, l’indis-

ser la température à 200°C, mais n’éteint pas l’appareil).

unique avec son

pensable démontage de l’appareil

Le matériel étant maintenant réel ement mien, il va

écran rouge. Il ne

révèle une construction relative-

rejoindre le reste de mon matériel en bonne et due

reste plus qu’à

ment robuste et de qualité. Certes

place, à portée de main, prêt à servir à la moindre

déplacer le bouton

de mise en route en

le plastique utilisé pour la coque

occasion ! DB

façade et elle sera

est vraiment peu rassurant mais, à

parfaite !

l’intérieur, tout est parfaitement isolé

et assemblé proprement sans pour

autant jouer dans le haut de gamme.

La pompe est, par exemple, montée

sur des supports souples pour limiter

les vibrations, les raccords des tubes

sont renforcés avec des col iers, la

terre est sertie et fixée correctement

avec une vis et non soudée, la plu-

part des vis sont sécurisées avec du

vernis, etc.

Le seul détail qui me chipotait

était d’ordre cosmétique et phi-

losophique (cf. précédent édito).

J’ai donc profité de l’ouverture de

l’engin pour apporter ma touche

personnelle en changeant la cou-

leur du rétroéclairage de l’écran du

blanc vers le rouge avec un résultat

du plus bel effet, en accord avec

le mélange noir/rouge du boîtier

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

HACKABLE MAGAZINE n°18

13

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

DÉMARREZ VOTRE PC

À DISTANCE AVEC

UNE CARTE ARDUINO

OU ESP8266

Denis Bodor

Vous savez comment ça marche, à chaque fois que vous avez besoin

d’un fichier il se trouve à l’autre bout du réseau sur une machine qui n’est pas en marche... Il existe des solutions intégrées permettant de démarrer un PC à distance, ceci s’appelle le Wake-on-LAN.

Malheureusement, cette fonctionnalité n’est pas toujours présente

et/ou utilisable. Pourquoi alors ne pas construire un montage

permettant de presser le bouton à votre place, à distance ?

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

Le Wake-on-LAN ou 1. UN MONTAGE POUR

WoL est une fonction-

nalité standardisée

CONTRÔLER LE DÉMARRAGE

dans les réseaux

Ethernet permettant de

DU PC

démarrer une machine à distance.

Notre approche ici consistera à utiliser une carte Arduino

Cel e-ci est souvent configurable

équipée d’un shield Ethernet, mais nous envisagerons éga-

dans le BIOS de la machine, mais

lement une solution Wifi équivalente dans le même temps,

ce n’est pas toujours le cas. Parfois reposant sur un module ESP8266 (type ESP-12 et/ou l’option est totalement absente, et

NodeMCU). Les bibliothèques Ethernet pour le shield et

tantôt el e ne permet qu’une sortie

ESP8266WiFi pour l’ESP8266 sont suffisamment similaires

de mise en veil e. Dans mon cas,

pour que 90% du code reste identique, quel e que soit la solu-

c’est cette seconde option qui

tion choisie, filaire ou non.

est disponible, mais la machine

en question étant équipée de

Le principe de base reposera sur un serveur Telnet fonc-

quelques 16 Go de mémoire je n’ai

tionnant sur le microcontrôleur et permettant d’entrer des

pas pensé à prévoir une partition

commandes et d’obtenir des réponses. Cette interface, acces-

de swap dans mon système

sible à partir de n’importe quel e machine du réseau (ou éven-

GNU/Linux lors de son instal ation.

tuel ement au travers d’une box) fournira un moyen de contrô-

Or justement, en cas de mise en

ler un relais directement connecté en paral èle du bouton de

veil e profonde, le contenu de la

mise sous tension. Nous utiliserons également une entrée de

mémoire est copié dans cette par-

la carte, connectée à l’intérieur du PC à une source de +5V

tition avant extinction de l’alimenta-

afin de vérifier que la machine est sous tension. Ceci, couplé

tion. Pas de partition, pas de mise

avec le test d’un service réseau sur le PC, nous permettra de

en veil e profonde. .

savoir si la machine est ou non en fonction et en ligne, afin de

s’abstenir d’utiliser le bouton de façon abusive.

Mais la problématique va au-

delà de ce petit désagrément. En

Plusieurs remarques sont nécessaires pour expliquer

effet, le Wake-on-LAN ne règle

ces choix. Mon objectif ici est de mettre sous tension à dis-

le problème de la mise en route

tance une machine GNU/Linux pour, ensuite, m’y connecter

à distance que pour une certaine

via SSH. Il doit être possible d’obtenir un fonctionnement

catégorie de matériel compatible.

identique avec une machine Windows en utilisant un bureau

Un vieux PC, une machine de

à distance, VNC et/ou des outils comme ceux fournis par

col ection (comme un NeXT ou un

Cygwin.

vieux Mac), un stockage réseau

Autre point important, mes machines sont généralement

(NAS), une imprimante, ou n’im-

connectées entre el es par un VPN (réseau privé virtuel) les

porte quel équipement connecté en interconnectant dès leur mise en marche. Ceci permet de les réseau filaire ou en Wifi, a toutes

rendre accessibles où qu’el es se trouvent (et où que je me

les chances de ne pas supporter

trouve) à partir du moment où on est connecté au VPN. Géné-

une tel e fonctionnalité. Enfin, le

ralement, une machine dans le lot est toujours al umée, car

Wake-on-LAN ne fonctionne, bien

dédiée à la réception SDR (radio logicielle) et donc connec-

entendu, qu’en connexion filaire et

tée au VPN. L’idée, en ce qui me concerne est donc de me

non en Wifi. Mettre un PC en route

connecter, où que je sois, à mon VPN, puis à cette machine (en

s’il ne dispose pas d’une connexion

SSH), puis à partir de là, me connecter en Telnet sur le mon-

Ethernet demande un peu plus

tage décrit ici pour mettre en route le PC équipé du montage.

d’ingéniosité que de simplement

Le VPN utilisé est OpenVPN, qui est utilisable aussi bien sous

utiliser des fonctions mises à dis-

GNU/Linux que sous macOS ou Windows, mais d’autres solu-

position par le constructeur.

tions peuvent également être envisagées, y compris configurer

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

HACKABLE MAGAZINE n°18

15

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

Mise en œuvre

Ceux utilisés ici sont des Cosmo

classique d’un

optocoupleur

K1010 récupérés d’un circuit impri-

avec ici à droite le

mé d’onduleur. Le fonctionnement

côté PC (fil rouge

de ce composant est relativement

d’un connecteur

d’alimentation pour

simple puisque la lumière de la led

disque par exemple)

agit comme la base du transistor

et à gauche le côté

qui laisse alors passer le courant

Arduino/ESP8266.

du col ecteur vers l’émetteur. Il suffit

On voit clairement

que les deux parties

de relier la led via une résistance à

sont électriquement

la partie qui contrôle et le col ecteur

isolées l’une de

du transistor, via une résistance de

l’autre.

rappel à la tension d’alimentation,

et à la partie contrôlée. L’émetteur

sa box ou son routeur Internet pour rendre accessibles

du transistor et la cathode de la led

une ou plusieurs machines du réseau local depuis l’exté-

sont tous deux reliés à la masse de

rieur (port forwarding et/ou DMZ).

leur circuit. Nous avons donc une

Vous l’avez compris, le montage n’est accessible ici

isolation galvanique entre les deux

que par le réseau local et ce choix est délibéré. Telnet,

parties. Du point de vue du PC, il

le protocole utilisé, consiste en un simple échange de

ne s’agit que d’al umer une led via

caractères sans aucune protection ou chiffrement. La

un des connecteurs d’alimentation

seule sécurité en place est la restriction de l’accès phy-

interne (disque, ventilateur, led

sique (Ethernet) ou le chiffrement du Wifi. Une commu-

power, USB, etc.).

nication Telnet (ou RSH) circulant sur le net peut être lue

Les relais nécessitent générale-

sans le moindre problème et c’est précisément la raison

ment un peu plus de circuiterie, car

d’être de protocoles chiffrés et sécurisés comme SSH.

il n’est pas pensable de contrôler

Malheureusement, aussi bien pour Arduino que pour

directement la bobine du relais via

l’ESP8266, ceci est hors d’atteinte et nous devons nous

une broche d’une carte Arduino,

contenter de communication « en clair » (l’ESP8266 offre

par exemple. On utilise donc en

des solutions comme WiFiClientSecure pour l’HTTPS,

principe un transistor, une diode

mais l’approche devrait être alors totalement différente).

et une résistance afin de piloter

Je vous recommande donc fortement de ne pas rendre

la bobine via un courant circulant

ce montage directement accessible depuis Internet.

à la base du transistor. Il ne vous

En dehors de l’aspect purement « réseau », notre projet

sera cependant pas nécessaire de

devra pouvoir contrôler le bouton de mise sous tension du

construire ce circuit vous-même,

PC et vérifier si la machine est en route ou non. Il n’est,

car des modules intégrant tout cela

bien entendu, pas question de connecter directement

(et tantôt également un optocou-

l’Arduino ou l’ESP8266 à la fois à une alimentation USB et

pleur) sont disponibles entre 1€ et

électriquement au PC, nous utiliserons donc un relais pour

2,5€ sur eBay, Amazon, etc. Ces

contrôler la mise sous tension (avec des contacts en paral-

modules sont prévus pour être

lèle à ceux du bouton intégré au boîtier) et un optocoupleur

utilisés avec des cartes comme

pour détecter la présence d’alimentation dans le PC. De

Arduino et requièrent simplement

plus, deux leds (une verte et une rouge) nous permettront

une masse, une alimentation et un

de rapidement notifier l’état de l’instal ation pendant le

signal de contrôle.

fonctionnement du serveur Telnet.

Notez que le plus souvent ces

Un optocoupleur se résume à une led (généralement in-

modules utilisent une logique

frarouge) et un phototransistor réunis dans un petit boîtier.

inversée : le relais est actif lorsque

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

la broche de contrôle est à la

1.1 Version Arduino + shield

masse. Ceci peut paraître surpre-

Ethernet

nant, mais c’est quelque chose de

fort pratique. En effet, par défaut

La version Arduino avec shield Ethernet est un peu

lors de la mise sous tension, les

plus simple que cel e reposant sur l’ESP8266/NodeMCU,

broches de cartes comme Arduino

car utilisant 5V. Ceci nous permet de contrôler directe-

sont généralement configurées en

ment l’activité du module relais depuis une broche de

entrée et cel es-ci ne sont donc

la carte (A0 ici). Les leds de notification sont également

pas connectées à la masse. De

directement connectées aux broches 7 (vert) et 6 (rouge).

ce fait en configurant, dans le

La seule partie un peu plus complexe est cel e concer-

croquis, d’abord l’état de la broche

nant l’optocoupleur utilisant une résistance de rappel de

avec digitalWrite() puis en la

10 Kohm entre la tension d’alimentation et le col ecteur

passant en sortie avec pinMode(),

du phototransistor ainsi qu’une connexion au port utilisé

votre module relais ne sera jamais

en lecture côté Arduino (5) et à la masse. La logique est

à la masse et ne s’activera donc

ici inversée, lorsque la led de l’optocoupleur n’est pas

pas lors d’un démarrage ou d’un

al umée, l’Arduino va lire un niveau haut et lorsqu’el e l’est

reset de la carte Arduino.

un niveau bas. En d’autres termes, si le PC est en route,

Remarques : que vous optiez

l’Arduino lira LOW et non HIGH.

pour la solution Arduino ou

Notez que nous partons ici du principe que la led de

ESP8266, lisez les deux parties qui

l’optocoupleur est connectée à une alimentation +5V et

suivent. Les explications sont inter-

que la résistance de 470 ohms est donc calculée dans ce

changeables et se complètent l’une

sens. Si vous voulez tester une autre tension (+12V par

l’autre, quel e que soit la plateforme.

exemple), il faudra adapter la valeur de la résistance.

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

HACKABLE MAGAZINE n°18

17

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

1.2 Version ESP8266/NodeMCU/

contrôlant un si faible courant

WeMosD1

avec une si petite tension).

Cependant, l’optocoupleur

Dans les grandes lignes, le principe de fonctionnement est

nous permet de régler le pro-

ici identique à celui d’une carte Arduino et son shield Ethernet,

blème de niveau de tension

seuls les ports utilisés sont différents. Les leds et l’optocou-

en séparant la partie 3,3V de

pleur de détection de mise sous tension sont agencés de la

cel e en 5V.

même façon, mais nous devons contourner un petit problème :

l’ESP8266 fonctionne en +3,3V, il est donc incapable de

Nous utilisons ici l’optocou-

contrôler le module relais directement (ceci sera toutefois

pleur exactement à l’inverse

dépendant du module en question et de son transistor intégré).

de la partie détection de

tension côté PC, mais avec

Ici, le module utilisé ne possède pas d’optocoupleur qui

une petite subtilité. En effet,

règlerait le problème automatiquement et nous devons donc

nous ne contrôlons pas la led

l’ajouter nous-mêmes. Ceci présente l’avantage d’offrir en

en appliquant une tension

principe une isolation supplémentaire, mais comme nous

pour l’al umer, mais préférons

avons connecté l’alimentation du module relais à l’ESP8266,

inverser les niveaux logiques.

cet avantage disparaît (ce n’est pas bien grave avec un relais

Par défaut, la led est donc

connectée à la tension d’ali-

mentation via une résistance

et sa cathode est reliée à

l’ESP8266. De ce fait en

passant la sortie à l’état haut,

la led s’éteint, le col ecteur

du phototransistor va à la

masse et le relais s’active.

Ceci nous permet d’avoir un

comportement adapté pour

le démarrage du montage ou

sa réinitialisation : le relais ne

s’active pas tout seul.

Notez que ce circuit pourra

également être utilisé avec le

montage Arduino, mais cela

ne présente que peu d’intérêt.

Comme la masse et l’alimen-

tation du module relais sont

connectées à la carte, il n’y

a pas d’isolation et le fait

que l’Arduino ne pilote pas le

module relais directement ne

change rien à l’affaire. Dans

l’absolu, une isolation parfaite

pourrait être souhaitée, mais

ceci implique l’utilisation de

deux blocs d’alimentation

séparés (un pour la carte et

un pour le module relais).

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

Les modules ou

cartes ESP8266

se déclinent en

de nombreuses

versions et

sont tous

utilisables avec

l’environnement

Arduino, sous

réserve d’installer

un support

complémentaire

via le gestionnaire

de cartes.

2. LA LOGIQUE DU CROQUIS

Et pour l’ESP8266 :

Quel e que soit la plateforme choisie, le croquis fonc-

tionnera de la même manière étant donné que la biblio-

#include <ESP8266WiFi.h>

thèque Ethernet pour Arduino et ESP8266WiFi reposent

// port IP à tester

peu ou prou sur le même principe de fonctionnement

#define TESTPORT 22

et que seuls les classes et types changent. Les croquis

// broche de la led relais/erreur

complets pour ce projet sont relativement volumineux et

#define RLEDPIN D6

ne seront donc pas reproduits dans leur intégralité ici.

// broche de la led online

#define OLEDPIN D5

Vous pourrez néanmoins les télécharger sur le dépôt

// broche de test +5V

GitHub du magazine (https://github.com/Hackable-

#define TESTPIN D1

magazine). Nous nous contenterons ici de voir les élé-

// broche du relais

ments clés.

#define RELAIS D7

// temps de pression

Notre croquis commence, comme toujours, par l’inclu-

#define RELDELAY 500

sion des bibliothèques utilisées et par la définition des

// taille max de commande

macros facilitant la désignation des broches et valeurs

#define BUFSIZE 16

utiles. Côté Arduino, nous avons donc :

TESTPORT est le port TCP/IP

#include <SPI.h>

sur lequel le montage va tenter

#include <Ethernet.h>

une connexion pour vérifier si

la machine cible (le PC) est en

// port IP à tester

fonction ou non. En effet, nous ne

#define TESTPORT 22

nous contenterons pas de sim-

// broche de la led relais/erreur

plement vérifier l’alimentation via

#define RLEDPIN 7

// broche de la led online

l’optocoupleur, mais nous assu-

#define OLEDPIN 6

rerons également que la machine

// broche de test +5V

répond. Ici le port 22 correspond

#define TESTPIN 5

au service SSH permettant l’accès

// broche du relais

distant en ligne de commandes.

#define RELAIS A0

Sur une machine Windows, il fau-

// temps de pression

#define RELDELAY 500

dra choisir le port correspondant

// taille max de commande

au service auquel vous souhaitez

#define BUFSIZE 16

accéder. Notez que le protocole

utilisé n’a pas d’importance, tout

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

HACKABLE MAGAZINE n°18

19

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

ce que nous voulons faire c’est obtenir une connexion et, si

cela fonctionne, nous la terminerons aussitôt. Ceci est bien

plus simple que de tenter un ping (ICMP), car ne nécessitant

pas de bibliothèque supplémentaire.

RELDELAY correspond au délai de fermeture du contact

du relais. 500 mil isecondes devraient être largement suffi-

santes pour simuler une pression humaine sur le bouton. Et

enfin, BUFSIZE nous permettra de fixer une limite à la tail e

des lignes reçues sur notre serveur. Le jeu de commandes

envisageables est relativement réduit et il n’y a aucun inté-

rêt à traiter des lignes complexes de 255 caractères tout en

consommant énormément de mémoire. Tout ce qui dépasse-

ra 16 octets sera ignoré purement et simplement. Les autres

La version ESP8266

macros déclarées parlent d’el es-mêmes et désignent les

du montage a été

broches utilisées.

construite ici avec

ce module, un clone

Viennent ensuite les déclarations des variables globales avec, pour l’Arduino : de WeMos D1 mini,

lui-même compatible

// adresse MAC

NodeMCU 1.0, acheté

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x0F, 0xA0};

sur eBay pour moins

byte testip[] = { 192, 168, 10, 166 };

de 4€ auprès d’un

vendeur chinois appelé

sale1213 .

// hôte distant (cible)

EthernetClient testclient;

// hôte distant (client telnet)

EthernetClient client;

// serveur telnet

EthernetServer server(23);

Et pour l’ESP8266 :

const char* ssid = "nomAPwifi";

const char* password = "mot2passe";

byte testip[] = { 192, 168, 10, 166 };

// hôte distant (cible)

WiFiClient testclient;

// hôte distant (client telnet)

WiFiClient client;

// serveur telnet

WiFiServer server(23);

Comme vous pouvez le voir, ces deux morceaux de croquis sont très similaires et ne changent que par le type d’objets déclarés. Dans le cas de l’interface Ethernet, nous devons en revanche préciser l’adresse matériel e, généralement marquée sur une étiquette sur le shield. Côté ESP8266, nous aurons besoin du nom du point d’accès wifi auquel se connecter et du mot de passe. Ces informations seront utilisées dans la fonction setup() pour établir la connexion au réseau.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

Côté objets déclarés, dans les deux cas nous avons

testclient qui représentera la connexion à la machine

cible pour tester son état. client sera le point de

connexion d’un client à notre montage, en Telnet, et en-

fin, server représente notre montage lui-même. Diffé-

rentes méthodes peuvent être utilisées avec ces objets

pour gérer les connexions et lire/écrire des données.

À ce stade, le décor est planté et nous pouvons nous

pencher sur des fonctions utiles que nous utiliserons

dans la boucle principale loop() ou dans setup().

L’une d’entre el es est destinée à faciliter l’affichage de

l’adresse que nous al ons obtenir soit par connexion

filaire, soit en Wifi. C’est l’adresse à laquel e notre mon-

tage sera joignable en Telnet :

Les optocoupleurs

utilisés pour ce projet

// Affichage IP

n’ont pas été achetés,

void printIPAddress(){

mais dessoudés du

Serial.print("Mon adresse est ");

circuit imprimé d’un

for (byte i = 0; i < 4; i++) {

onduleur hors d’usage

Serial.print(Ethernet.localIP()[i], DEC);

(batterie usée). Il s’agit

Serial.print(".");

de composants Cosmo

}

K1010, mais n’importe

Serial.println();

quel modèle courant fera

}

l’affaire.

Là encore, il faut faire une distinction entre Arduino et ESP8266, mais ceci se résume à une simple fonction, Ethernet.localIP() dans un cas et WiFi.

localIP() dans l’autre. La méthode localIP() retourne l’adresse en question et nous créons une boucle for pour parcourir et envoyer au moniteur série les quatre octets de l’adresse, joliment présentés.

Une autre fonction utile est cel e permettant de tester la disponibilité de la machine cible. Cel e-ci ne fait qu’utiliser des méthodes sur des objets existants et est donc commune aux deux plateformes :

// Test de connexion

bool isOnline(int essais, int msec) {

int i = 0;

client.println("Test du +5V sur la machine");

// si on ne détecte pas de 5V on ne va pas plus loin

if(digitalRead(TESTPIN))

return 0;

client.print("Test de la machine sur le port ");

client.print(TESTPORT);

// on boucle autant d'essais demandés

while(i < essais) {

client.print(".");

if(testclient.connect(testip, TESTPORT)==1) {

// le serveur répond

Serial.println("Connexion ok");

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

HACKABLE MAGAZINE n°18

21

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

testclient.stop();

client.println();

// on s'arrête là

return 1;

} else {

// essai suivant après pause

Serial.print("Erreur ");

Serial.println(i);

delay(msec);

i++;

}

}

client.println();

// On arrive ici uniquement si le nombre

// d'essais est dépassé

return 0;

}

Notre fonction retournera 0 si la machine cible n’est pas al umée et accessible, Il est étonnamment

et 1 dans le cas contraire. Pour faire ce test, nous utilisons deux paramètres pas-parfois moins cher

sés en argument : le nombre d’essais à faire et le délai entre ces essais en mil i-d’acheter des modules

secondes. Notre fonction est générique et sera utilisée pour tester la cible avant relais déjà équipés

l’utilisation du relais/bouton, mais également après, pour éventuel ement nous de leds, transistor et

diode sur les sites

assurer que la machine ait bien démarré. En utilisant un nombre d’essais impor-d’enchères en ligne

tant, espacés d’une durée conséquente, nous pouvons donc laisser le temps au que les composants

PC de démarrer et devenir accessible.

à l’unité seuls auprès

d’un détaillant en

L’objectif ici est de faire au plus court. Inutile de tester la connexion à la machine électronique. Et en plus,

si cel e-ci n’a pas de courant. Nous commençons donc par vérifier l’état de la ça permet de gagner du

broche connectée en entrée à l’optocou-

temps...

pleur et retournons immédiatement 0 s’il n’y

a pas d’alimentation (broche à l’état haut).

Dans le cas contraire, nous pouvons tenter

la connexion via une boucle décomptant le

nombre d’essais demandés. Dès que nous

avons une réponse, nous retournons 1, la

machine est disponible. Si le nombre d’es-

sais est épuisé, par dépit, nous retournons

0, la machine est bien en marche, mais la

connexion ne fonctionne pas.

La programmation c’est comme la

cuisine, on prépare les ingrédients et les

ustensiles, puis on peut se faire plaisir.

Tout est maintenant prêt et nous pouvons

entrer dans le vif du sujet en configurant

notre montage et en initiant la connexion,

via la fonction setup(). Dans le cas d’une

carte Arduino avec le shield Ethernet, ceci

est relativement rapide :

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

void setup() {

digitalWrite(RELAIS, HIGH);

pinMode(RELAIS, OUTPUT);

pinMode(RLEDPIN, OUTPUT);

pinMode(OLEDPIN, OUTPUT);

pinMode(TESTPIN, INPUT);

Serial.begin(115200);

Serial.println("Demande DHCP...");

if (Ethernet.begin(mac) == 0) {

Serial.println("Erreur de configuration via DHCP");

while (1) {

// erreur DHCP

digitalWrite(RLEDPIN, HIGH);

delay(250);

digitalWrite(RLEDPIN, LOW);

delay(250);

}

}

printIPAddress();

server.begin();

digitalWrite(OLEDPIN, HIGH);

}

Tout tourne ici autour de Ethernet.begin() prenant en argument l’adresse MAC du shield. Si nous obtenons une adresse en retour et que la résolution DHCP a fonctionné, cette méthode retourne une valeur différente de 0 et nous affichons l’adresse obtenue avec printIPAddress() avant d’activer le serveur sur le port 23 (Telnet) et d’al umer la led verte (on est « en ligne »). Dans le cas contraire, un problème est survenu et nous n’al ons pas plus loin, nous partons dans une boucle infinie faisant clignoter rapidement la led rouge.

Pour l’ESP8266, les choses sont un peu plus complexes, car la tentative de connexion n’est pas bloquante. Nous devons donc demander la connexion puis attendre en testant le résultat dans une boucle :

void setup() {

uint8_t i = 0;

pinMode(RELAIS, OUTPUT);

digitalWrite(RELAIS, HIGH);

pinMode(RLEDPIN, OUTPUT);

pinMode(OLEDPIN, OUTPUT);

pinMode(TESTPIN, INPUT);

Serial.begin(115200);

WiFi.begin(ssid, password);

Serial.print("\nConnexion a ");

Serial.println(ssid);

while (WiFi.status() != WL_CONNECTED && i++ < 20)

delay(500);

if(i > 20){

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

HACKABLE MAGAZINE n°18

23

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

Serial.print("Erreur de connexion sur ");

Serial.println(ssid);

while (1) {

// erreur DHCP

digitalWrite(RLEDPIN, HIGH);

delay(125);

digitalWrite(RLEDPIN, LOW);

delay(125);

}

}

printIPAddress();

server.begin();

server.setNoDelay(true);

digitalWrite(OLEDPIN, HIGH);

}

La connexion est établie avec WiFi.begin() prenant en argument le nom du point d’ac-cès et le mot de passe associé. Nous devons ensuite vérifier le résultat de WiFi.status() jusqu’à obtenir WL_CONNECTED indiquant une connexion ou que le nombre d’essais soit dé-

passé (20 ici). Les itérations dans la boucle while terminées, la valeur de i nous renseigne sur l’état de l’opération et nous faisons clignoter la led rouge en cas de problème. Comme pour la carte Arduino, si tout se passe bien, le serveur est activé et la led verte de même.

La phase

d’expérimentation

se fait, comme

toujours, sur

platine à essais à

grand recours de

câbles. On voit ici à

gauche le module

de contrôle avec

l’ESP8266, à droite

la partie simulant le

PC avec sa propre

alimentation et à

l’arrière le module

relais.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

3. LA BOUCLE PRINCIPALE

La boule principale, comme toutes ses consœurs, fera la majeure partie du travail. El e consiste en une succession d’états conditionnels :

• on récupère la connexion d’un client à notre serveur Telnet dans l’objet client,

• on s’assure que nous avons des données à lire,

• on récupère ces données si el es ont une tail e acceptable,

• on analyse le contenu et extrait une chaîne utilisable faisant office de commande,

• puis on réagit en fonction de la commande obtenue, si cel e-ci est connue et valide.

Cette fonction loop() est identique pour la carte Arduino et pour l’ESP8266, en dehors de deux éléments : l’initialisation de la communication avec le client et le renouvel ement DHCP.

En effet, ce second point est géré directement en coulisse par ESP8266, mais doit être traité manuel ement pour le shield Ethernet sur Arduino. En temps normal, un serveur (Telnet ou autre) dispose d’une adresse IP fixe, mais j’ai préféré ici garder une certaine souplesse et cela implique quelques lignes de code en plus.

En début de loop() sur Arduino, nous déclarons notre tampon destiné à recevoir les données et récupérons la connexion si un client est présent :

void loop() {

// stockage des données reçues

char clientline[BUFSIZE];

// récupération de la connexion d'un client

client = server.available();

Ceci est sensiblement différent avec l’ESP8266 :

uint8_t clientline[BUFSIZE];

if (server.hasClient()){

if (!client || !client.connected()){

if(client) client.stop();

client = server.available();

Serial.println("Connexion d'un client");

}

}

Tout d’abord, nous avons la déclaration du tampon, qui doit être un tableau de type uint8_t, et non de char, pour ne pas provoquer une erreur à la compilation. Ensuite, la gestion des connexions de l’ESP8266 ne permet pas de simplement utiliser server.available() pour obtenir un objet valide, mais nous devons tester la présence d’une connexion avec hasClient() sur l’objet serveur (nous-mêmes). Ceci nous permet de gérer le cas d’une connexion terminée, que nous pouvons alors « nettoyer » avec client.stop().

Le reste de la fonction loop() consistera alors à nous assurer de la connexion, puis à obtenir les données sous la forme d’une chaîne :

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

HACKABLE MAGAZINE n°18

25

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

// on a un client ?

if (client && client.connected()) {

// oui. Combien d'octets à lire ?

int toread=client.available();

if(toread > 0) {

// plus d'octets que la taille dispo ?

if(toread>=BUFSIZE) {

// trop long !

while(client.available()) {

// on lit sans rien garder

client.read();

}

} else {

// effacement du tampon

memset(clientline, 0, sizeof(clientline));

// lecture des données

client.read(clientline, toread);

// conversion en chaîne

String commande = String(clientline);

// Suppression des blancs et CRLF en fin

commande.trim();

// Affichage de l'ordre reçu

Serial.print("Commande lue: [");

Serial.print(commande);

Serial.println("]");

// ordre vide après suppression CRLS ou espace ?

if(commande.length()==0) {

} else [...]

client.available() nous retourne le nombre d’octets à lire, envoyés par le client. Nous utilisons cette valeur pour déterminer si nous pouvons ou non les gérer. Si la valeur dépasse la tail e de la zone mémoire dédiée (notre tableau, en gardant une place pour le marqueur de fin de chaîne \0), la supposée commande est déjà inacceptable. Dans ce cas, nous « dépilons » les données avec client.read() sans rien en faire.

Dans le cas contraire, nous devons tout d’abord transférer les données dans le tampon clientline avec client.read() en lui passant en argument un pointeur vers où mettre ces données, et leur tail e. Dès lors clientline contient une chaîne de caractères, mais non un objet String Arduino. Nous convertissons alors les informations avec String(clientline) pour obtenir commande, puis nous utilisons la méthode trim() pour nous débarrasser d’éventuels blancs et caractères non imprimables en fin de chaîne. Notez qu’il serait possible de traiter la chaîne sans faire usage du type String, mais ceci simplifie grandement les choses.

Il ne nous reste plus alors que la commande el e-même. . s’il reste encore quelque chose.

Point que nous testons avec la valeur retournée par la méthode length(). Si cette valeur est différente de 0 (chaîne vide), alors nous avons quelque chose à faire.

La suite est relativement simple puisqu’il s’agit d’enchaîner les else if() en utilisant la méthode equals() de l’objet commande pour tester des équivalences. C’est là que vous pouvez implémenter n’importe quel ordre devant être accepté. Exemple pour démarrer la machine : Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 26

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

} else if(commande.equals("boot")) {

// test de connexion

if(isOnline(1,1)) {

client.println("\e[1;31mMachine deja en fonction!\e[0m");

} else {

// l'hôte ne répond pas, il doit être éteint

client.println("\e[1;32mMise en route de la machine.\e[0m");

// allumage

digitalWrite(RELAIS, LOW);

digitalWrite(RLEDPIN, HIGH);

delay(RELDELAY);

digitalWrite(RELAIS, HIGH);

digitalWrite(RLEDPIN, LOW);

}

} else [...]

Chaque condition if reposant sur equals() est la mise en oeuvre d’une commande donnée. Ici, si la commande est "boot" , nous commençons par vérifier si la machine n’est pas déjà en fonction, si tel n’est pas le cas, nous activons le relais ainsi que la led rouge durant un bref moment. Ceci aura pour effet de simuler la pression sur le bouton de démarrage du PC.

NOTE : Les caractères étranges comme \e[1;31m dans les messages sont des sé-

quences d’échappement ANSI permettant d’ajouter un peu de couleur. \e[1;31m démarre l’utilisation du rouge en premier plan, \e[1;32m fait de même pour le vert, et e[0m revient à Une fois le montage

correctement testé,

il ne reste plus qu’à

passer à la réalisation

sur plaque perforée qui

prendra la forme d’un

shield « maison » placé

directement sur le shield

Ethernet.

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

HACKABLE MAGAZINE n°18

27

ARDUINO'N'CO

DÉMARRAGE À DISTANCE

un affichage « normal ». Vous pourrez trouver facilement les correspondances couleur/code via une petite recherche sur le Web.

Une fois toutes les commandes implémentées, il reste à traiter le cas d’une commande inconnue et, enfin, finir par afficher une invite pour que le client connecté puisse taper la prochaine commande :

} else {

// commande inconnue

client.println("Hein?");

}

}

// invite de commandes

client.print("mon> ");

Pour l’ESP8266, le croquis s’arrêtera là, mais pour l’Arduino avec son shield Ethernet il faudra encore gérer le renouvel ement DHCP avec ce petit morceau de code (placé en dehors de toutes conditions précédemment définies, bien sûr) :

// gestion du bail DHCP

switch (Ethernet.maintain()) {

case DHCP_CHECK_RENEW_FAIL:

Serial.println("Error lors du renouvellement!");

digitalWrite(OLEDPIN, LOW);

break;

case DHCP_CHECK_RENEW_OK:

Serial.println("Renouvellement ok");

printIPAddress();

digitalWrite(OLEDPIN, HIGH);

break;

case DHCP_CHECK_REBIND_FAIL:

Serial.println("Error lors de la demande");

digitalWrite(OLEDPIN, LOW);

break;

case DHCP_CHECK_REBIND_OK:

Serial.println("Demande ok");

printIPAddress();

digitalWrite(OLEDPIN, HIGH);

break;

default:

// rien

break;

}

Il faut reconnaître que nous avons là un croquis (et un article) d’une tail e relativement consé-

quente et je n’ai pas listé toutes les commandes supportées. C’est là ce avec quoi il est commun de finir, dès lors qu’on travail e sur une connectivité réseau et un serveur s’utilisant de façon interactive.

Bien entendu, les croquis pour Arduino et pour ESP8266, disponibles au téléchargement sur GitHub, sont complets et pourront être directement utilisés/modifiés. Les commandes définies à cette date pour mes besoins personnels sont : bye ou quit pour terminer la connexion, boot pour utiliser le bouton, bootw pour faire de même, mais ensuite vérifier le démarrage Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 28

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Démarrez votre PC à distance avec une carte Arduino ou ESP8266

Voici la version

ESP8266 du projet

avec isOnline(5,1000), sta ou

en va-et-vient permettant d’alimenter ou non un

finalisé qui a pris

status pour afficher l’état de la

équipement (lampe, imprimante, disque externe,

place directement

machine et lpress pour une pres-

machine à café, etc.). Attention cependant, si

dans le boîtier PC.

sion longue de 5 secondes sur le

vous souhaitez contrôler ainsi le courant domes-

Le relais est alors

relié au bouton

bouton en cas de plantage (cel e-

tique, une isolation galvanique dans les règles

de démarrage

ci n’est pas dans les croquis télé-

de l’art est indispensable et cela implique égale-

et la détection

chargeables, car trop dangereuse

ment une mise en boîtier du montage.

d’alimentation se fait

sans ajouter une confirmation).

via un connecteur

Ce projet est initialement destiné à une seule

placé sous le circuit.

machine de type PC, mais il reste, aussi bien

Reste ensuite à

utiliser un bloc

4. VARIATIONS

sur Arduino que sur ESP8266, bon nombre de

d’alimentation type

broches à utiliser. Il est donc parfaitement envi-

« chargeur de

POSSIBLES

sageable d’étendre les fonctionnalités en contrô-

smartphone » et à

lant plusieurs PC ou périphériques en multipliant

faire passer le câble

Sur la base de ce projet, il est

à l’extérieur du PC

les optocoupleurs et les relais. Il pourrait égale-

possible d’extrapoler pour pouvoir

pour le brancher

ment être intéressant d’ajouter d’autres modules

sur l’onduleur à

contrôler bien d’autres choses

comme une horloge RTC afin de garder une

proximité...

qu’un PC. En effet, tout repose ici

trace des activations dans un journal ou encore

sur l’utilisation du réseau pour ne

finalement que contrôler un relais.

de connecter une sonde de température pour

Celui-ci est connecté au bouton

informer de l’état de santé de la machine.

de mise sous tension, mais rien

Enfin, côté logiciel, on peut également envi-

ne vous empêche de contrôler

sager la mise en place d’une authentification par

directement une prise d’alimenta-

mot de passe ou un système de confirmation

tion du courant domestique. Bien

pour les ordres donnés. Les évolutions possibles

entendu, dans ce cas il ne s’agira

ne manquent pas et, en ce qui me concerne,

pas simplement d’une brève im-

je pense que le projet ne s’arrêtera pas à cet

pulsion, mais d’un fonctionnement

article, et je l’espère, pour vous non plus. . DB

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

HACKABLE MAGAZINE n°18

29

ARDUINO'N'CO

ÉCRAN VGA

RECYCLEZ UN VIEIL

ÉCRAN VGA ET UTILISEZ-

LE AVEC VOTRE ARDUINO

Denis Bodor

Aujourd’hui tout est numérique ou presque, et ceci est valable pour le dernier bastion analogique qui restait sur nos PC : l’affichage. Même si les connecteurs VGA sont encore tantôt disponibles sur les machines neuves, la connectique la plus utilisée est définitivement HDMI et DVI.

Il y a donc naturellement, dans la nature, une ribambelle d’écrans VGA prenant la poussière dans leur coin. Ne pourrait-on pas les « sauver »

d’une disparition certaine grâce à une carte Arduino ?

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Recyclez un vieil écran VGA et utilisez-le avec votre Arduino

C’est ainsi, la technologie évolue et

c’est une très bonne chose (sauf

quand des zozos californiens décident

qu’un connecteur audio est inutile

juste pour vendre des accessoires).

Vouloir utiliser un écran VGA sur un PC moderne

aujourd’hui relève presque du masochisme. En

comparaison de la qualité d’image obtenue avec

une sortie numérique comme le HDMI, l’image d’un

moniteur VGA semble. . « sale », démodée, presque

dérangeante.

Il reste cependant quelques usages pour un moni-

teur VGA :

La plupart des moniteurs VGA LCD permettent un réglage

du « pixel clock » et de la phase du signal car, contrairement

• comme écran secondaire en complément d’un

à un écran à tube cathodique, les pixels affichés sont

affichage principal en DVI ou HDMI ;

physiquement définis. En cas de mauvaise interprétation

• avec un vieux PC ou portable par nostalgie ;

du signal, un effet de moirage et/ou des artefacts peuvent

apparaître, en particulier lors de l’affichage de texte. La

• via un convertisseur péritel/composite pour une

détection automatique de la fréquence et la phase du signal

ancienne console (l’image ne sera pas pire que

sont généralement provoquées par un bouton « auto » à la

l’originale) ;

disposition de l’utilisateur, après qu’il ait affiché un damier de pixels blancs et noirs.

• via un adaptateur économique HDMI/VGA avec

une Raspberry Pi (on en trouve pour moins de 6€ sur

eBay) ;

• VSYNC est un signal similaire, mais

• mais aussi, via un montage simple, avec une carte

déterminant le début et la fin d’une

Arduino.

image complète, d’un écran, d’un en-

semble de lignes. HSYNC et VSYNC

Lorsque je dis « montage simple », il faut plutôt com-

sont typiquement des signaux en 5V

prendre « ultra-simpliste » puisqu’en l’occurrence il ne s’agit

(parfois 3,3V).

que d’utiliser quatre résistances en plus de la connectique.

Ceci est suffisant pour générer un signal susceptible d’être

• R, G et B donnent l’intensité des trois

« compris » par un écran VGA, mais les possibilités offertes

composantes de couleur pour un pixel :

sont relativement faibles.

rouge, vert et bleu. Il s’agit d’une

tension entre 0V et 0,7V définissant

la quantité de chaque couleur et

1. UN SIGNAL VGA ANALOGIQUE

permettant ainsi d’obtenir n’importe

quel e nuance. Ces tensions doivent

AVEC ARDUINO ?

être synchronisées avec les autres

signaux de façon à déterminer avec

La transmission d’informations vidéos vers un moniteur

précision la couleur de chaque point.

analogique repose sur la génération synchronisée de plu-

Comme ces signaux ne sont pas faits

sieurs signaux, 5 en totalité :

de niveaux de tension prédéterminés

• HSYNC, le signal de synchronisation horizontale. Il faut

(0 ou 0,7V), on parle de signaux analo-

imaginer le dessin sur le moniteur comme un rayon

giques et, par extension, de moniteurs

balayant l’écran (dans un tube cathodique). Celui-ci se

analogiques, par opposition au DVI qui

déplace, de votre point de vue de gauche à droite et de

est un protocole purement numérique

haut en bas, ligne par ligne. Le signal HSYNC est une

(ce sont des données binaires qui sont

impulsion marquant le début et la fin d’une ligne ou, en

transmises à l’écran et donc avec des

d’autres termes, il borne l’affichage horizontal.

niveaux de tension discrets).

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

HACKABLE MAGAZINE n°18

31

ARDUINO'N'CO

ÉCRAN VGA

Et là, vous devez vous demander naturel ement « mais

pour nous. Ce point se résume au

qu’est-ce qui détermine le nombre de points par ligne ? »

fait que pour afficher une image de

ou plutôt, comment est définie la résolution horizontale ?

640×480 pixels sur un écran, au re-

La réponse est simple, c’est le moniteur qui l’estime

gard des signaux et des impulsions,

en fonction des modes qu’il connaît et de la fréquence

il faut envoyer une image sensible-

de rafraîchissement vertical (VSYNC). La fréquence à

ment plus grande permettant de

laquel e les pixels horizontaux sont déterminés, ou plus

prendre en compte le balayage de

exactement la largeur de ces pixels, repose sur la notion

l’écran par le faisceau d’électrons

de pixel clock qui, sur certains moniteurs LCD, peut être

(dans un tube cathodique). Le

ajustée manuel ement dans les réglages de l’écran ou

temps que l’écran ramène le fais-

détecté automatiquement. Ceci permet d’éviter un effet

ceau en haut à gauche de l’écran

de moirage en jouant sur la fréquence du pixel clock et la

une fois arrivé en bas à droite,

phase du signal.

par exemple, il est nécessaire de

Vous l’aurez compris, la création d’un signal vidéo

continuer d’envoyer des informa-

analogique interprétable par un écran VGA repose donc

tions, même si el es ne sont pas

entièrement sur une question de fréquences et de tempo-

affichées. Il en va de même lorsque

risations qui, si el es ne sont pas exactes, empêcheront

le faisceau revient à gauche après

le signal d’être interprété correctement. Mais de plus, tout

être arrivé en fin de ligne.

doit être parfaitement synchronisé puisqu’il faut envoyer

Cependant, même en dehors de

les valeurs des composantes de couleur au bon moment

ce point et en regardant simplement

tout en gardant à l’esprit que c’est là quelque chose qui

les définitions du standard VESA,

doit être fait constamment. Il ne s’agit pas d’envoyer des

on se rend rapidement compte

données d’affichage comme avec un écran LCD alpha-

qu’on risque de rencontrer un pro-

numérique (HD44780) ou un module TFT couleur en

blème avec une carte Arduino. Le

SPI (voir Hackable n°4), il faut en permanence rafraîchir

mode 640×480 par exemple, utilise

l’écran. Dès qu’on arrête, plus rien ne s’affiche.

une fréquence HSYNC de 37,5 Hkz

Notez ici que je fais délibérément l’impasse sur un point

et VSYNC de 75 Hz (il existe aussi

important, mais qui n’entre pas en ligne de compte pour la

un mode 85 Hz). Ceci peut sembler

réalisation du projet puisque nous n’al ons pas écrire le code

peu, mais on arrive à un pixel clock

qui génère le signal, mais utiliser une bibliothèque qui le fera

de 31,5 Mhz, ce qui signifie que la

Le montage très

simple à la base,

une fois assemblé

sur plaque

pastillée, peut

être un peu plus

travaillé que le

schéma de départ.

Ici des cavaliers

permettent de

choisir très

facilement

deux des trois

composantes de

couleur, même

si rouge/vert est

le duo le plus

intéressant.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Recyclez un vieil écran VGA et utilisez-le avec votre Arduino

carte Arduino devrait pouvoir définir

les valeurs de rouge, vert et bleu

à cette fréquence. . alors que le

microcontrôleur n’est cadencé qu’à

16 Mhz. Ceci sans compter le fait

qu’une image de 640×480 pixels,

même monochrome est constituée

de 370200 pixels et donc de 38400

octets, ce qui est plus que les

32768 octets de flash disponibles

et 18 fois plus que le volume de

SRAM présente. Le mode 640×480

est donc clairement hors de por-

tée. . sauf si on décide de tricher !

Gérer les fréquences HSYNC

et VSYNC est déjà difficile, mais

tout à fait possible en utilisant les

timers intégrés au microcontrôleur

Atmel AVR d’une carte Arduino

UNO par exemple. Mais il n’est pas

Deux résistances de

470 ohms et deux de

possible, même en oubliant l’aspect

bibliothèque Arduino en 2015 (https://github.

68 ohms, il n’en faut

analogique et en décidant arbitrai-

com/smaffer/vgax). C’est cette bibliothèque,

pas plus pour brancher

rement d’utiliser les couleurs sans

VGAX, que nous al ons utiliser ici.

une carte Arduino UNO

nuance, en tout ou rien, de jouer sur

à un écran VGA et

obtenir une image. Seul

les broches de la carte à une fré-

Cette bibliothèque vous permettra, à l’aide

problème cependant,

quence d’environ deux fois cel e sur

de 4 résistances (deux de 68 ohms) et deux de

le code de génération

processeur. Ce qu’on peut faire, en

480 ohms, d’afficher des pixels, une image ou du

du signal vidéo

revanche, c’est décider de ne pas

texte avec une résolution de 120×60 pixels (mais

accapare totalement le

microcontrôleur et il est

changer de couleurs à chaque pixel, la résolution pour le moniteur sera 640×480).

très difficile d’envisager

mais à chaque groupe de pixels.

Vous ne pourrez utiliser que 4 couleurs et ceci

une utilisation vraiment

Le moniteur pensera avoir affaire à

comprend le noir (pas de couleur), 2 couleurs au

avancée avec le peu de

mémoire qu’il reste.

une image de 640×480, mais nous

choix parmi rouge, vert et bleu, et une quatrième

ne considèrerons, d’un point de vue

couleur, résultat de la combinaison des deux

autres en synthèse additive :

des données, qu’une résolution bien

inférieure.

• rouge + vert = jaune,

• rouge + bleu = magenta,

Cette astuce, et beaucoup de

travail et d’expérimentations, ont

• bleu + vert = cyan.

permis à Nick Gammon d’obtenir

Comme vous pouvez le constater, nous

un affichage VGA à partir d’une

sommes loin d’un affichage digne d’un ordinateur

carte Arduino UNO et de proposer

familial des années 80. Un honorable et modeste

un code fonctionnel en 2012 sur

Commodore 64 est en effet capable d’afficher des

son forum (http://www.gammon.

graphismes de 320×200 en 16 couleurs, mais il

com.au/forum/?id=11608). Ses

réalise cela via un circuit intégré dédié (le VIC-II)

résultats et son code ont ensuite

comme la totalité des machines de l’époque. Ceci

été réutilisés et améliorés par

n’est pas très différent de l’architecture actuel e

Sandro Maffiodo pour créer une

des PC et Mac utilisant un processeur graphique

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

HACKABLE MAGAZINE n°18

33

ARDUINO'N'CO

ÉCRAN VGA

(GPU) intégré au processeur ou à la

carte mère ou sous forme de carte

additionnel e. Une solution similaire

existe pour Arduino sous la forme

d’un shield (Gameduino), mais ceci

suppose un budget bien supérieur

au coût de quelques résistances et

connecteurs de récupération.

2. LE MONTAGE

La partie la plus difficile dans ce

Au niveau du câblage et de l’interface, le montage

montage consiste à trouver un

connecteur VGA et à repérer les

est simplissime puisque cela consiste tout bonnement

signaux. Bon nombre de moniteurs

à relier la carte Arduino UNO aux broches du connec-

modernes sont toujours livrés avec

teur VGA via des résistances. Les signaux HSYNC et

des câbles VGA inutiles qu’il suffira

VSYNC sont branchés respectivement aux broches 3 et

de « torturer ». Notez qu’il est de

bon ton de garder les connexions les

9 de la carte. En ce qui concerne les couleurs, ceci se

plus courtes possible pour limiter les

Voici le brochage

fera via des résistances de 470 ohms.

interférences et garantir une stabilité

standard d’un

des signaux.

connecteur

Les moniteurs possèdent une résistance interne de

VGA avec les

75 ohms entre les broches 1, 2 et 3 et la masse et le fait

signaux que nous

d’utiliser une valeur de 470 ohms pour les signaux de

allons utiliser.

trôleur comme deux broches d’un

Les broches

couleur prend donc la forme d’un montage en diviseur

ensemble de huit (le PORTD).

au centre du

de tension. Lorsqu’une sortie de la carte Arduino est à

C’est une astuce de programma-

connecteur sont

l’état haut, les 5V sont donc divisés proportionnel ement

tion permettant de garantir, dans

les masses que

au ratio entre chacune des valeurs de résistance et la

nous connectons

une certaine mesure, les délais

ensemble et il

somme des deux : 75/(75+470)x5V = 0,69V, presque les

précis d’activation de ces broches,

ne reste que les

0,7V indiquant une intensité maximum.

mais cela vous interdit aussi d’uti-

trois couleurs et

les signaux de

Il n’est pas possible de faire varier cette tension

liser n’importe quel e autre broche

synchronisation à

comme le ferait une carte graphique de manière à jouer

du PORTD (broches 0 à 7 d’une

gérer.

sur l’intensité des cou-

UNO) pour un autre usage.

leurs. Ceci ne vient pas du

En termes de réalisations pra-

fait qu’une carte Arduino

tiques du circuit, on pourra bien

ne pourrait pas matériel e-

sûr tout simplement vampiriser un

ment le faire avec, encore

câble VGA standard, retrouver les

une fois, des diviseurs de

fils correspondant aux broches

tension, même si la carte

et souder directement les résis-

ne dispose pas de vraies

tances. Il sera préférable cepen-

sorties analogiques (via

dant de prévoir quelque chose

un DAC), mais plutôt d’un

de plus robuste, en utilisant par

problème d’architecture

exemple une plaque pastil ée pour

interne et de perfor-

agencer les résistances et éven-

mances. Sandro Maffiodo

tuel ement prévoir une solution

utilise les broches 7 et 6

mécanique permettant la sélec-

pour définir les couleurs

tion des composantes de couleur

utilisées. Celles-ci sont

avec des cavaliers. En ce qui

gérées par le microcon-

me concerne, j’ai préféré garder

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Recyclez un vieil écran VGA et utilisez-le avec votre Arduino

le câble VGA intact et utiliser un

Ajoutez simplement une bibliothèque et un peu

connecteur récupéré d’une vieille

de code pour supporter une horloge (RTC) et ce

carte graphique.

chiffre sera alors divisé par trois. On est donc très

très rapidement à l’étroit.

Dans tous les cas, il est de

bon ton de garder les câbles non

L’utilisation des broches de la carte est égale-

blindés les plus courts possible

ment très limitée de bien des façons. Le PORTD

afin de garantir une bonne inté-

tel qu’il est utilisé ici est totalement indisponible,

grité des signaux et, par la même

mais les fonctionnalités de communication série

occasion, réduire les émissions

ou encore en SPI sont également passées sous

parasites.

silence. Les broches utilisées pour les signaux ne

sont pas modifiables et sont intimement liées à

l’utilisation des timers. Ceux-ci sont tous utilisés

3. UTILISER LA

pour la génération du signal vidéo et n’importe

BIBLIOTHÈQUE

quel e autre interruption impactera l’intégrité de

l’affichage. De plus, étant donné l’utilisation alter-

Le premier croquis

VGAX

native des timers, les fonctions comme delay()

permettant de tester

ou millis() ne sont plus accessibles et il faudra

le montage consiste à

Avant toute chose, précisons

utiliser des équivalents mis à disposition par la

afficher des pixels de

façon aléatoire. Ceci

ici qu’une carte comme une

bibliothèque.

permet non seulement

Arduino UNO n’est pas une pla-

de se familiariser avec

teforme réel ement adaptée à ce

De façon générale, la carte Arduino va littéra-

la bibliothèque, mais

type de choses et que tout ceci

lement passer le plus clair de son temps à pro-

également de tester

l’ensemble. L’image

tient davantage du fait de relever

duire le signal vidéo et n’importe quel traitement

prolongé non interruptible perturbera l’affichage.

doit s’afficher de

un défi qu’autre chose. Ce qu’a

façon stable et sans

réalisé Sandro Maffiodo, et Nick

parasite.

Gammon avant lui, est un hack et

non quelque chose de réel ement

viable et utilisable pour un projet

standard.

Certes, cela fonctionne et

une image peut être affichée

sur un moniteur VGA, mais les

limitations sont très nombreuses.

Nous avons déjà évoqué le fait

de ne pouvoir utiliser que deux

des trois composantes de couleur

disponibles et la restriction quant

à l’utilisation des broches du

PORTD. Mais ce n’est pas tout,

loin de là.

La mémoire d’affichage, ou

framebuffer, occupe 1800 octets.

Avec la mémoire utilisée pour le

fonctionnement de la bibliothèque,

cela ne laisse que quelques 200

octets de mémoire vive utilisables.

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

HACKABLE MAGAZINE n°18

35

ARDUINO'N'CO

ÉCRAN VGA

L’affichage de texte est l’une des

utilisations réellement pratiques pour

ce type de projet. Il faut cependant

garder à l’esprit qu’il reste bien peu de

ressources pour gérer les informations

devant être affichées. Hors de

question, par exemple, de présenter

un texte provenant du moniteur série,

celui-ci n’est tout simplement plus

utilisable...

La bibliothèque

VGAX de Sandro

Maffiodo n’est pas

installable directement

depuis le gestionnaire

de l’environnement

Arduino. Vous devrez

donc la récupérer sur

https://github.com/smaffer/vgax et la copier dans un sous-répertoire libraries de votre répertoire de croquis. Ceci fait, au prochain lancement de l’environnement Arduino, cel e-ci sera utilisable et les exemples viendront s’ajouter à ceux déjà présents dans le menu.

Pour commencer, et faire un premier test, le plus simple est encore d’utiliser l’exemple RandomPixels, que je reprends ici, commenté et légèrement modifié :

#include <VGAX.h>

// Objet représentant l’écran

VGAX vga;

void setup() {

// initialisation

vga.begin();

}

// Compteur

uint8_t cnt;

void loop() {

// affichage d’un pixel aléatoire

vga.putpixel(rand()%VGAX_WIDTH, rand()%VGAX_HEIGHT, cnt%4);

cnt++;

}

Après inclusion de la bibliothèque et déclaration de l’objet vga nous permettant d’utiliser l’écran, celui-ci est initialisé avec la méthode begin() dans la fonction setup(). Il n’y a pas d’argument, ni pour la déclaration, ni pour l’initialisation, car rien ne peut être modifié. Le code de la bibliothèque est totalement optimisé pour l’utilisation des timers et broches associées et ne sert qu’une fonction et une seule.

Notre fonction loop() est simpliste. Après avoir déclaré une variable globale cnt, loop() ne fait que placer des pixels aléatoires à l’écran. La méthode putpixel() prend en argument une position horizontale, verticale et une couleur entre 0 et 3 correspondant respectivement au noir, à la première couleur, Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 36

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Recyclez un vieil écran VGA et utilisez-le avec votre Arduino la seconde et le mélange des deux. La syntaxe utilisée ici, avec %, est cel e du modulo, le reste de la division euclidienne (la division « normale » qu’on a apprise à l’école). Les macros VGAX_

WIDTH et VGAX_HEIGHT correspondent respectivement à la largeur de l’écran en pixels et sa hauteur. Là encore l’opération modulo est utilisée sur la valeur aléatoire retournée par rand(), nous obtenons donc toujours une valeur entre 0 et VGAX_WIDTH-1, ou VGAX_HEIGHT-1.

La méthode putpixel() est bien pratique si nous voulons dessiner à l’écran pixel par pixel, mais parmi les différentes fonctionnalités proposées, quelques unes sont bien plus pratiques.

Nous pouvons, par exemple, afficher du texte :

#include <VGAX.h>

// fichier de police

#include "font.h"

// objet écran

VGAX vga;

// notre chaîne de caractères

static const char str0[] PROGMEM="VGA AVEC ARDUINO";

void setup() {

// initialisation

vga.begin();

// effacement écran

vga.clear(0);

// affichage du texte

vga.printPROGMEM(

(byte*)fnt_nanofont_data, // police

FNT_NANOFONT_SYMBOLS_COUNT, // nombre de symboles

FNT_NANOFONT_HEIGHT, // hauteur caractères

3, // séparation horizontale 1, // séparation verticale

str0, // chaîne à afficher

0, // emplacement X

VGAX_HEIGHT/2-FNT_NANOFONT_HEIGHT/2, // emplacement Y

3); // couleur

}

void loop() {

vga.delay(100);

}

Un écran VGA, bien entendu, n’a aucune notion de « texte » ou de police de caractères, c’est donc à notre croquis de définir les symboles correspondant aux caractères utilisés. La bibliothèque met à disposition une page web et un bout de code JavaScript permettant, à partir d’une image construite avec un logiciel de dessin, de créer des lignes de code définissant la correspondance caractère/symbole. Pour utiliser cet outil, vous devrez ouvrir le fichier 2bitfont.html avec votre navigateur web. Celui-ci se trouve dans un sous-répertoire tools, directement dans le répertoire de la bibliothèque, dans votre carnet de croquis.

Pour composer une nouvel e police de caractères, vous devez créer un fichier image où les symboles des caractères ASCII de 33 à 128 sont présentés sur une seule ligne. La hauteur de Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°18

37

ARDUINO'N'CO

ÉCRAN VGA

l’image en pixels correspond à la hauteur des symboles et ceux-ci doivent être noirs sur blanc et séparés les uns des autres par une colonne de pixels blancs (si un symbole intègre une colonne blanche, placez-y un pixel rouge). La largeur maximum d’un symbole est de 8 pixels.

Ouvrez la page web avec votre navigateur, sélectionnez le fichier image à utiliser, spécifiez un nom de variable et cliquez sur « GENERATE ». Vous obtiendrez normalement des lignes de code à intégrer directement dans votre croquis ou, comme ici, dans un fichier font.h à inclure dans votre projet :

//font generated from BITFONZI - by Sandro Maffiodo

#define FNT_NANOFONT_HEIGHT 6

#define FNT_NANOFONT_SYMBOLS_COUNT 95

//data size=570 bytes

const unsigned char

fnt_nanofont_data[FNT_NANOFONT_SYMBOLS_COUNT][1+FNT_NANOFONT_HEIGHT]

PROGMEM={

{ 1, 128, 128, 128, 0, 128, 0, }, //glyph '!' code=0

{ 3, 160, 160, 0, 0, 0, 0, }, //glyph '"' code=1

[...]

{ 3, 96, 192, 0, 0, 0, 0, }, //glyph '~' code=93

{ 4, 48, 64, 224, 64, 240, 0, }, //glyph '£' code=94

};

En ce qui concerne l’utilisation de cette variable avec la méthode printPROGMEM(), vous remarquerez que les macros FNT_NANOFONT_SYMBOLS_COUNT et FNT_NANOFONT_HEIGHT

sont définies pour vous. Tout ce qu’il vous reste à faire dans les arguments de la méthode est donc de spécifier l’emplacement du début du texte, l’espacement vertical (retour à la ligne avec \n dans la chaîne) et horizontal (espace), et la couleur du texte entre 0 et 3, comme pour putpixel().

Si vous ne voulez pas vous amuser à générer votre propre police de caractères, vous pouvez tout simplement, réutiliser celle de l’exemple BitFont inclus avec la bibliothèque.

Une autre méthode très intéressante à utiliser est copy(). Cel e-ci permet de copier les données d’une variable directement à l’écran. Exposé ainsi, ceci ne semple pas très amusant, mais c’est pourtant ce qui vous permet d’afficher des images très facilement. Ces images sont placées dans des variables exactement comme les symboles d’une police de caractères et un autre outil à votre disposition sous forme d’une page web vous permettra de les générer.

Cette page 2bitimage.html fonctionne comme la précédente, à la différence qu’ici c’est toute l’image qui est utilisée en une fois.

Composez ainsi une image d’une tail e égale à 120×60 avec votre logiciel de retouche d’images préféré (The Gimp par exemple) en prenant soin de ne la créer qu’avec les quatre couleurs utilisables (rouge, vert, jaune et noir). Ouvrez ensuite la page web et sélectionnez le fichier à traiter. Nommez la variable comme il vous plaît puis cliquez sur « GENERATE ».

Notez que la notion de nuance de couleurs n’existe pas ici. De ce fait, un pixel de l’image étant par exemple à 70% rouge deviendra tout simplement un pixel rouge. Il est donc recommandé de travail er votre image dans un premier temps en 24 bits puis de la passer ensuite en couleur indexée (4 couleurs) pour avoir un aperçu du résultat final.

La méthode copy() part du principe que les données font la tail e de l’écran, il n’est donc pas question de travail er à partir d’une image d’une tail e différente de 120×60. D’un autre Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 38

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Recyclez un vieil écran VGA et utilisez-le avec votre Arduino

côté, le seul argument de la

méthode est un pointeur sur la

variable contenant les données :

vga.copy((byte*)img_var-

name_data) (varname étant ici

le nom utilisé dans la page web

pour générer le code). Notez que

le code généré déclare un tableau

de unsigned char, un type

classique en C/C++, mais que la

méthode attend un point vers des

byte. De ce fait on « force » ou

cast, le type en le précisant entre

parenthèses avant le nom de la

variable ((byte *), un pointeur

sur un/des byte).

D’autres méthodes sont dispo-

nibles permettant, par exemple,

Remplir la mémoire

de travail er avec des sprites,

qualité de ce point de vue, là encore, nous frôlons les

d’images composées

de petites images pouvant être

limites absolues de ce que peut faire un ATMega328a

spécifiquement et les

« tamponnées » à l’écran, à partir

d’une carte Arduino UNO.

afficher les unes à la

de données issues du générateur

suite des autres est

une utilisation possible

d’image. Pour connaître l’en-

et accessible dans ce

semble des méthodes disponibles, 4. PROBLÈME ET SOLUTIONS

genre de situation.

il vous suffit de jeter un œil dans

De quoi, par exemple,

J’ai pu, comme d’autres utilisateurs de cette biblio-

embellir une vitrine de

la bibliothèque el e-même et en

thèque, constater que le comportement du croquis

magasin ou attirer le

particulier dans le fichier VGAX.h,

changeait en fonction de la version de l’environne-

regard à peu de frais

où se trouve également la docu-

ment Arduino utilisée. En version 1.6.4, le code et les

et bien plus facilement

mentation en commentaire.

qu’avec des leds.

exemples de Sandro Maffiodo fonctionnent sans le

Vous pouvez également

moindre problème, mais il en va tout autrement avec

inclure VGAXUtils.h en lieu et

la version 1.6.13 ou 1.8.1. Il semblerait en effet que

place de VGAX.h afin de pouvoir

l’optimisation du code réalisée lors de la compilation

utiliser quelques primitives gra-

impacte directement les délais précisément ajustés

phiques basiques comme le tracé

dans la bibliothèque.

de lignes, rectangles, cercles,

Les symptômes liés à ces changements sont un

disques, etc.

scintil ement de l’image, presque permanent, qu’il y

Enfin, il est à noter que la

ait changement ou non dans les pixels affichés. L’effet

bibliothèque VGAX permet égale-

est davantage présent lorsque l’image est rafraîchie

ment de générer du son en bran-

rapidement. L’exemple MarioSprites par exemple,

chant un buzzer entre la broche

destiné à afficher de manière aléatoire une petite

A0 et la masse. Ceci est intégré

image donne un résultat presque entièrement com-

de base dans le fonctionnement

posé de parasites et de « bavures » à l’écran.

général de la bibliothèque et

Le problème provient très certainement d’une opti-

n’impacte donc pas la génération

misation faite par le compilateur, mais déterminer son

du signal vidéo. Ne vous atten-

origine précise est un coût en temps qui ne vaut pas

dez pas cependant à une grande

la chandel e. Le code de Sandro Maffiodo repose sur

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

HACKABLE MAGAZINE n°18

39

ARDUINO'N'CO

ÉCRAN VGA

le concept initial de Nick Gammon, mais intègre également

ché, puis on permute les tampons

des optimisations de Charles Lohr initialement développées

pour changer l’image. C’est la

pour son serveur Minecraft pour microcontrôleurs Atmel

technique du double buffering).

AVR. Lire le contenu de la bibliothèque est très instructif,

mais appréhender son fonctionnement n’est pas une tâche

aisée et rapide.

CONCLUSION

Il semblerait cependant que le problème de délais/tempo-

Oui, il est possible de générer

risation réside dans la fonction ISR(TIMER2_OVF_vect) (qui

un signal vidéo analogique avec

est le vecteur d’interruption pour le débordement du timer 2).

une carte Arduino, mais ceci ac-

Ce code dans VGAX.cpp contient, entre autres, des lignes

capare totalement les ressources

en assembleur, et en particulier des instructions nop (pas

de la carte et ne nous laisse que

d’opération) destinées à « perdre » des cycles d’horloge pour

peu de marge de manœuvre pour

obtenir la fréquence adéquate pour HSYNC :

faire quelque chose de véritable-

ment utile. Quelques réalisations

[...]

pratiques existent toutefois sur le

"no_audio: \n\t"

Web, comme un jeu de Pong par

" nop \n\t" //c1

exemple, mais cela reste davan-

" nop \n\t" //c1

" nop \n\t" //c1

tage des challenges et démons-

//" nop \n\t" //c1

trations de compétences en pro-

" nop \n\t" //c1

grammation qu’autre chose.

" nop \n\t" //c1

" nop \n\t" //c1

Il reste toutefois des choses rela-

" rjmp end \n\t" //c2

tivement accessibles et utiles à faire

[...]

avec ce type de montage comme

l’affichage d’images ou de textes

Une ligne est déjà commentée par défaut et le fait de faire

stockés en flash en fonction de

de même pour trois autres semble régler le problème, du

l’état de broches restant utilisables

moins avec l’environnement en version 1.8.1. Ceci est, bien

(ou tout simplement d’une tempo-

entendu, un horrible bricolage à peine digne d’être qualifié

risation). La mise en œuvre d’une

de rustine, mais comme dit précédemment, l’ensemble des

horloge sous forme de module RTC

limitations déjà existantes ne justifie pas, selon moi, une

en i2c est également envisageable

investigation plus poussée.

en tolérant le scintil ement lors de

Notez également que la question de la compatibilité du

la lecture des informations. Ceci

code de la bibliothèque avec une carte Arduino Mega 2560

peut être valable également pour un

a été soulevée dans les discussions sur GitHub concernant

affichage de température et d’hy-

cette bibliothèque. À l’heure actuel e, aucun résultat fonc-

grométrie avec un module BME180

tionnel n’est ressorti de ces discussions. Les quelques pro-

(voir Hackable n°14) qui sera alors

grammeurs qui s’y sont essayés ont fini par jeter l’éponge,

bien plus visible qu’un afficheur

l’effort ne justifiant pas le gain. Le fait de pouvoir utiliser la

LCD ou à leds.

bibliothèque VGAX sur une carte Mega permettrait de dispo-

Quoi qu’il en soit, si vous avez

ser, en principe, de davantage de mémoire pour les croquis,

un vieux moniteur VGA qui traîne,

mais les limitations en termes de performances et de résolu-

quatre résistances n’est pas cher

tion resteraient inchangées. Tout au plus ceci permettrait de

payé pour vous amuser à explorer

revoir le fonctionnement de la bibliothèque de façon à utiliser

le domaine et peut-être fouil er un

un double tampon d’affichage. Ceci, en principe, devrait

peu dans les entrail es de la biblio-

éliminer le scintil ement de l’image lors de la création d’une

thèque pour en tirer quelques

animation (un tampon étant modifié alors que l’autre est affi-

leçons.... DB

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

aff jdev 2017_Mise en page 1 03/03/2017 15:31 Page1

aff jdev 2017_Mise en page 1 03/03/2017 15:31 Page1

aff jdev 2017_Mise en page 1 03/03/2017 15:31 Page1

JD

J

E

D

V 20

2 1

0 7

1

Jo

J u

o r

u n

r é

n e

é s

e Dé

D v

é e

v l

e o

l p

o p

p e

p m

e e

m n

e t

n

t L

o

L g

o i

g c

i i

c e

i l

e

Science des données et apprentissage automatique

Sci S

e y

n s

c te èm

de es s deom

n b

n a

é req

s ueét sa e

p tp irnete

nt rin

s e

s ta d

g e

e sa o

utboje

mts

atique

Inf

S ryassttèru

m cetu

s rees

m blo

a g

r iqcuie

é ls eest ientt s

ercineent cdee o

s uovbejrettes

InfrPaasrtarlu é

ctliusrm

e e

s litoin

gi écriaelnlte e

s t evt irstcuia

e lniscae tioounverte

Pa Irnalglé

élniiser

m ie

e ietit nw

é e

r b

a ndt eest d

vi ortnunaéliessation

IPnro

g g

é r

niaem

ri m

e a

ett io

w ne d

b ed leas m

d a

o tniè

n réees

Pro B

gr ig

a d

m a

m taat ieot nS déec luar ité

matière

U

Bi sgi ndeast al oegt ic

S iéecl e

ursité

U G

si énneie

s llo

o g

gi ic

ci ie

el lles

Génie logiciel

Conception graphique : Benoît Colas, Université Toulouse - Jean Jaurès / CPRS - DAR. Photographie : © Armand Rotereau.

JDEV2017

Conception graphique : Benoît Colas, Université Toulouse - Jean Jaurès / CPRS - DAR. Photographie : © Armand Rotereau.

Webcast

Webcast

4,

4 5,

5 6,

6 7

7 jui

u l e

l t

e 20

2 1

0 7

1

Ai

A x-

x M

- a

M r

a s

r e

s i

e l e

l

e Un

U i

n ve

v r

e s

r i

s té

t ,

é la

a Ca

C n

a e

n b

e i

b èr

è e

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) JournéesDév elopemnt Logicre

Information, programme, réservation et inscription :

http://devlog.cnrs.fr/jdev2017

l

Information, programme, réservation et inscription :

http://devlog.cnrs.fr/jdev2017

http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°18

41

Scien desonées taprentisage utomaique

Systèmes mbarqués etinret dsobjets

Infrastucres logicels etcien ouvert

Parléisme itnérat evirtualiston

Ingéier tweb dsonées

Progam tion dela mtière

Big date Sécurité

Usine logicels

Génie logicel

.

u

a

e

r

e

t

o

R

d

n

a

m

r

A

©

:

e

i

h

p

a

r

g

o

t

o

h

P

.

R

A

D

-

S

R

P

C

/

s

è

r

u

a

J

n

a

e

J

-

e

s

u

o

l

u

o

T

é

t

i

s

r

e

v

i

n

U

,

s

a

l

o

C

t

î

o

n

e

B

:

e

u

q

i

h

p

a

r

g

n

o

i

t

p

e

c

n

o

C

Webcast

4, 567 juilet2017

Aix-Marseil Universté, laCnebièr

Information, progame, résevation etiscrption :

htp:/devlog.cnrs.f/jdev2017

EN COUVERTURE

INTERPHONE

CRÉEZ VOTRE PORTIER

AUDIO CONNECTÉ

Eric Le Bras

Les grandes surfaces de bricolage proposent une variété de modèles de portiers (ou « interphones ») audios ou vidéos. Filaire ou sans fil, analogique ou numérique, le point commun de ces appareils

communicants est de reposer sur des conceptions propriétaires et

fermées. Le plus souvent ces produits ne sont pas interopérables, et sont conçus pour ne fonctionner qu’avec le récepteur fourni. Pourtant, des logiciels libres basés sur des protocoles ouverts sont disponibles et permettraient d’adapter facilement l’appareil à l’usage que souhaite en faire son propriétaire. D’où l’envie de modifier un de ces appareils pour en faire un portier IP.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Créez votre portier audio connecté

Dans un premier la base de protocoles, biblio-

temps, j’avais jeté

thèques, langages et matériels

mon dévolu sur un

ouverts et documentés. L’idée

modèle sans fil du

finale était de me servir de la

commerce. Dès les

platine de rue pour établir une

premiers essais, je dus me rendre

liaison téléphonique avec un

à l’évidence : les performances

portable ou le téléphone fixe de

attendues n’étaient pas vraiment

la maison, en exploitant le ré-

au rendez-vous. D’une part la mé-

seau domestique et la connexion

diocre qualité sonore et le niveau

internet.

de bruit rendaient la conversation

Budget final : une quinzaine

très difficile, voire impossible

d’euros (sans le boîtier, et sans

au-delà de quelques mètres de

le câble réseau).

distance entre émetteur et récep-

teur ; d’autre part, l’autonomie de

l’appareil, alimenté par 4 piles de

1. UN PEU DE

type AA, était limitée à quelques

Fig. 1 : La platine de rue.

En apparence, un simple

semaines de fonctionnement. Ce

CONCEPTION

interphone du commerce

dernier point aurait pu (il est vrai)

La fonctionnalité attendue se présente de la ma-

sans fioriture... en

être réglé en amenant l’énergie

apparence, seulement !

nière suivante : lorsque le visiteur presse le bouton

jusqu’au portail (un bloc d’alimen-

de l’interphone, une communication est établie

tation était fourni), mais. . si j’avais

avec un smartphone ou le téléphone fixe de la mai-

eu en projet d’amener des câbles

son. Une fois la connexion établie, les deux per-

depuis la maison jusqu’au portail,

sonnes peuvent converser. Si l’occupant des lieux

pourquoi aurais-je choisi ce coû-

décide d’accorder son sésame au visiteur, il peut

teux modèle sans fil ?

commander l’ouverture du portail ou du portil on en

La nécessité de tirer du câble

appuyant sur une touche du téléphone. On prévoit

s’imposa toutefois rapidement avec

également une fonctionnalité de raccrochage auto-

le projet de motoriser le portail. Ce

matique au bout d’un délai prédéfini, dans le cas

chantier fût l’occasion d’amener

où l’appel aboutit à la messagerie vocale.

le 230 volts depuis la maison, et,

L’interphone repose sur l’utilisation du proto-

puisque j’en étais à instal er des

cole SIP, et de divers autres protocoles associés.

gaines et du câblage, j’en profitai

Ces protocoles sont standardisés par l’IETF, et

bien évidemment pour tirer un

constituent aujourd’hui la norme pour réaliser des

câble réseau. Ainsi me disais-je,

communications téléphoniques sur réseau de don-

j’aurai tout loisir ensuite de mettre

nées (VoIP). L’interphone se comporte comme un

en œuvre une solution d’interphone téléphone IP (un user agent SIP), au détail près que réellement fonctionnelle.

le numéro appelé est paramétré à l’avance. Lorsque

La tentation était dès lors pré-

la connexion est sol icitée, il s’enregistre sur un ser-

sente de récupérer le boîtier et les

veur (un « trunk SIP ») puis établit une communica-

éléments périphériques de feu le

tion vers le destinataire défini dans les paramètres

portier sans fil, pour en faire un

(un identifiant SIP, cet identifiant pouvant éventuel-

véritable interphone connecté ou

lement correspondre à un numéro de téléphone, en

portier IP. Une étude des solutions

l’occurrence le téléphone fixe de la maison).

existantes m’amena à concevoir

Les fonctionnalités SIP sont fournies par la

mon propre équipement, sur

librairie libre PJSIP [1].

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

HACKABLE MAGAZINE n°18

43

EN COUVERTURE

INTERPHONE

1.1 À propos du trunk SIP

communication ; cette limitation

n’existe que lorsque le numéro de

Le protocole SIP sert à initier une session entre

téléphone fixe est appelé. Si le

deux (ou plus) user agents (téléphone IP, smartphone, correspondant est un user agent softphone ou autre). Les user agents n’étant généra-SIP connecté directement au net,

lement pas joignables directement par leur adresse

même en passant par le trunk de

IP (adressage dynamique ou derrière un pare-feu),

Free, pas de problème.

ils doivent s’être authentifiés auprès d’un registrar en

utilisant leur propre identifiant SIP et mot de passe.

Les informations pour acti-

Cet identifiant est semblable à une adresse e-mail,

ver le service SIP de Free se

et se présente sous la forme nom@registrar (par

trouvent ici : http://www.free.fr/

exemple : clint.eastwood@sip.linphone.org).

assistance/89.html.

Notons qu’il existe toutefois la possibilité de

Si vous n’êtes pas abonné

connecter entre eux deux user agents sans authen-

Freebox, vous devrez créer un

tification préalable auprès d’un registrar. Ceci

compte auprès d’un trunk gra-

suppose que l’adresse IP de l’appelé soit connue

tuit. La procédure pour créer

et accessible. Dans ce cas, une session en mode

un compte sur Linphone.org

peer to peer est initiée entre les deux user agents.

est simple : rendez-vous sur

Le client récepteur peut être un téléphone SIP du

https://www.linphone.org/

marché, voire un récepteur conçu sur le même

free-sip-service.html puis

modèle que l’interphone. Hormis ce cas particulier

renseignez les informations

(non mis en œuvre dans le projet actuel, mais envi-

demandées. Le username sera

sageable comme évolution), il faudra s’en remettre

le nom d’utilisateur qui vous

à la situation la plus habituel e, et donc posséder

identifiera auprès du registrar.

un compte auprès d’un registrar (un trunk SIP).

Une fois votre compte créé, vos

L’offre est abondante, et généralement gratuite

informations de connexion se

lorsque le service se limite à la mise en relation de

présentent ainsi :

user agents SIP connectés à Internet. Les services

payants s’adressent plutôt aux entreprises, et per-

mettent en plus les communications vers des numé-

ros de téléphone.

À ce sujet, Free permet aux abonnés Freebox

d’accéder à son propre trunk SIP, utilisé par la fonc-

tion téléphonie de la Freebox. Par rapport aux ser-

vices gratuits, l’intérêt est de pouvoir appeler tous les

numéros de téléphones fixes en France, y compris le

Fig. 2 : Mes paramètres SIP

propre numéro de l’abonné (en revanche les numéros

chez Linphone.org.

de mobiles ne sont pas joignables - ceci n’est pas un

véritable problème, car il reste possible de joindre un

À noter que l’hébergeur

smartphone Android connecté au net comme nous

français OVH propose comme

le verrons plus loin). C’est à ma connaissance le

alternative un service « VoIP

seul moyen gratuit (pour un abonné Freebox) d’utili-

Découverte » au tarif de 1,19 € par

ser l’interphone avec le téléphone fixe du domicile.

mois, accessible aux particuliers,

En bonus, vous disposerez d’une messagerie en

permettant les appels vers les

cas d’absence. Une limitation toutefois : je ne suis

fixes en France ainsi que 40 des-

pas parvenu à détecter les codes DTMF générés

tinations. Je n’ai pas testé cette

par l’appui sur les touches du téléphone pendant la

solution.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Créez votre portier audio connecté

2. CÔTÉ

MATÉRIEL

Le choix de la plateforme

matériel e s’est porté sur la

carte Orange Pi Zero. Il s’agit

d’une carte de développe-

ment bâtie autour du SoC

Al winner H2+. Les raisons

qui ont présidé à ce choix

sont les suivantes :

• présence d’un port ré-

seau RJ45 100 Mbps ;

• Wifi intégré, avec une

antenne laissant présa-

ger une certaine portée

(à l’essai, la portée s’est

révélée suffisante pour se

Fig. 3 : Contrairement à

connecter à une box située à

sa cousine Raspberry

environ 25 m avec traversée

512 Mo est certainement le plus avantageux.

Pi Zero, Orange Pi

d’un mur porteur) ;

Zero est dotée de deux

Cependant, il est toujours intéressant de savoir

interfaces réseau. Elle

• alimentation PoE optionnel e

que seulement 11 % de cette capacité s’avère

arbore fièrement sa

petite antenne Wifi ainsi

(non testée) ;

nécessaire à l’usage.

que son port RJ45

• entrée micro et sortie ligne ;

La Raspberry Pi Zero, un temps envisagée, pré-

100 Mbit/s. Au premier

sente un encombrement comparable, toutefois el e

plan, on remarque

• encombrement réduit (46 x 48

également les 26 trous

est fournie sans connectivité réseau (la Pi Zero W

du GPIO, où manquent

mm). Ce facteur était dicté par

existe depuis peu, mais reste difficile à trouver en

encore les broches.

l’objectif initial d’embarquer la

France), sans entrées/sorties audios, et avec une

carte dans la platine de rue.

puissance notablement inférieure (mono cœur 1 GHz,

Toutefois nous verrons dans

là où l’Orange Pi Zero dispose d’un quadruple

un second temps que ce n’est

cœur 1,2 GHz). L’arrivée récente de cette dernière

pas cette conception qui fut

(novembre 2016) est donc apparue comme particu-

finalement retenue. Reste que

lièrement opportune pour ce projet, et est parvenue

la présence des entrées/sor-

à vaincre les réserves initiales concernant les limites

ties audios (ainsi que 2 ports

du support (documentation et logiciels) fourni par le

USB, une sortie vidéo et un

constructeur ainsi qu’une communauté limitée.

récepteur infrarouge) sur un

connecteur 13 broches facilite

L’Orange Pi Zero présente également un GPIO

malgré tout grandement l’inté-

de 26 broches reprenant la disposition du Raspberry

gration dans une réalisation

Pi 1. Ce connecteur permettra l’interfaçage avec le

embarquée ;

bouton et les leds de la platine de rue, ainsi que les

commandes d’ouverture du portail et/ou du portil on.

• faible coût (6,70 € avec

À noter que ce GPIO n’est pas équipé d’origine. Vous

256 Mo, 8,62 € en version

devrez donc souder 2 headers de 13 broches au pas

512 Mo). Avec moins de deux

de 0,1 pouce (2,54 mm) dans les trous prévus avant

euros d’écart, le modèle

de l’utiliser.

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

HACKABLE MAGAZINE n°18

45

EN COUVERTURE

INTERPHONE

Notons au passage que la carte ne possède pas de sor-

relais doivent fonctionner

tie HDMI, ce qui la positionne d’emblée comme une plate-

avec une logique de com-

forme tournée vers l’embarqué.

mande sous 3,3 volts. Très

souvent ces cartes sont

Le site communautaire linux-sunxi.org est un bon point

équipées d’un optocoupleur.

de départ pour trouver des informations techniques sur les

Dans ce cas, piloter le relais

cartes basées sur la gamme de SoC Al Winner [2].

revient à al umer ou éteindre

En plus de la carte, vous aurez besoin de :

une led, ce qui facilitera le

raccordement avec le GPIO

• Un module d’amplification. La sortie ligne n’offre pas

(voir l’article consacré aux

suffisamment de puissance pour « driver » le haut-

relais dans Hackable n° 7).

parleur de 0,5 W qui équipe la platine de rue. Suivant

Toutefois, la sécurité appor-

les conseils d’un ami chinois, nous avons choisi le

tée par l’optocoupleur ne sera

PAM8403, un module d’amplification classe D de 3 W

effective qu’à condition que le

disponible au prix dérisoire de moins d’un euro chez

relais ait sa propre alimenta-

les commerçants de l’empire du Milieu (à ce prix-là,

tion. La tension commandée

prenez-en deux ou trois - si vous ne savez pas pourquoi

n’étant pas dangereuse, nous

maintenant, l’usage en viendra bien un jour !). Veil ez

n’avons pas opté pour cette

à bien choisir un modèle équipé d’un potentiomètre de

solution.

réglage du gain, indispensable pour ce montage. Le

module contient deux canaux. La puissance d’un seul

canal étant largement suffisante pour notre application,

3. SCHÉMA DE

on utilisera indifféremment le gauche ou le droit.

PRINCIPE

• Un micro électret. Dans notre cas, nous avons réuti-

lisé celui équipant la platine de rue, mais un modèle

Le schéma complet est pré-

quelconque acheté ou récupéré sur un ancien appareil,

senté ci-dessous. Ce schéma

périphérique PC ou jouet devrait faire l’affaire. Pour être

comporte une partie numérique

utilisable avec l’Orange Pi Zero, le micro électret néces-

connectée au GPIO (à gauche)

site un circuit d’alimentation et de filtrage que nous

et une partie analogique reliée

pouvons réaliser facilement avec quelques résistances

au connecteur 13 broches (à

et condensateurs (deux résistances 0,25 W 6,8 kΩ

droite).

et 4,7 kΩ, un condensateur électrolytique 47 μF et un

Une alimentation unique peut

condensateur céramique 1 μF).

être utilisée pour l’Orange Pi Zero

• Un haut-parleur. Nous avons réutilisé le haut-parleur

et le PAM8403 (ce dernier pou-

0,5 W présent sur la platine de rue.

vant fonctionner avec une tension

d’entrée comprise entre 2,5 volts

• Un bouton poussoir et une ou plusieurs leds. Dans

et 5,5 volts), mais attention : si

le cadre de notre réalisation pratique, nous avons

vous alimentez l’Orange Pi Zero

réutilisé les composants déjà disponibles sur l’inter-

via le port micro USB, vous ne

phone existant (voir plus loin).

pourrez pas alimenter le PAM8403

• Une alimentation 5 V 2000 mA (voir paragraphe

via les broches +5V et GND de

suivant).

l’OPZ. Le courant sera insuffisant

et l’Orange Pi Zero ne démar-

• En option : un ou plusieurs relais pour commander

rera pas. La solution consiste à

l’ouverture du portail et/ou de la gâche. Le plus simple

alimenter l’Orange Pi Zero non

est peut-être de faire l’achat d’une « breakout board »

par le port micro USB, mais direc-

équipée du nombre de relais désiré. Attention : les

tement via les broches +5V et

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Créez votre portier audio connecté

Fig. 4 :

Schéma de

principe de

l’interphone

connecté.

GND du GPIO. L’ampli PAM8403

alimentation 5 V continu universel e du type de cel es

prélèvera le courant nécessaire

proposées sur eBay en recherchant « 5V DC 2A univer-

indifféremment sur les autres

sal switching power supply ».

broches disponibles du GPIO ou

Passons maintenant en revue le raccordement des

du connecteur 13 broches, les

différents éléments avec l’Orange Pi Zero.

broches +5V et GND étant toutes

reliées électriquement entre elles.

Ceci revient donc à raccorder les

3.1 Micro

deux appareils en parallèle sur la

Un électret est un microphone statique, qui ne génère

même alimentation.

pas de courant par lui-même (à la différence d’un micro-

En résumé, l’Orange Pi Zero

phone dynamique, dont la vibration de la membrane

sera alimenté via les broches

induit un courant dans une bobine se déplaçant dans

4 (+5V) et 6 (GND) du GPIO, le

le champ magnétique d’un aimant fixe). Un microphone

PAM8403 est alimenté via les

statique doit être relié à une source de courant. L’onde

broches 1 (+5V) et 2 (GND) du

sonore captée par la capsule va moduler ce courant.

connecteur 13 broches.

Le schéma de montage testé et retenu dans le cadre de

L’alimentation doit être suf-

notre projet provient du site www.sonelec-musique.com,

fisante pour faire fonctionner

une mine d’informations concernant notamment l’utilisation

les deux appareils. Nos essais

des micros électrets, et dont nous vous recommandons la

montrent que deux ampères suf-

lecture [3]. Ce montage simple nécessite seulement deux

fisent. On pourra soit utiliser une

résistances et deux condensateurs pour exploiter la cap-

alimentation USB, en coupant la

sule. Il a donné satisfaction dans le cadre du projet, avec

prise micro USB pour récupérer

des longueurs de câble raisonnables. Si toutefois ce mon-

les fils correspondant au +5V et

tage ne fonctionne pas correctement pour vous, ou si le

à la masse, soit se procurer une

câble entre le montage et l’Orange Pi Zero doit être d’une

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

HACKABLE MAGAZINE n°18

47

EN COUVERTURE

INTERPHONE

Fig. 5 : Le schéma de montage

du circuit d’alimentation du

passage du courant continu d’ali-

micro électret.

mentation vers l’étage de pré-am-

plification, en utilisant à nouveau

un condensateur.

Les résistances R1 et R2

permettent de limiter le courant

d’alimentation. Selon les carac-

téristiques de la capsule, il peut

s’avérer nécessaire d’adapter

leurs valeurs. En l’absence d’infor-

mations précises, et si le niveau

du signal s’avère insuffisant ou

trop important, c’est l’expérimen-

certaine longueur, vous pourrez trouver un montage plus

tation et le tâtonnement qui nous

avancé, exploitant les entrées micro différentiel es MIC1P et

guideront.

MIC1N, sur le diagramme schématique de l’Orange Pi Lite

Le condensateur C1 sert à

disponible sur le site de Xunlong [4].

filtrer l’alimentation de la capsule.

Notre micro électret possède deux pattes. L’une (reliée

Dans de nombreuses applications

au boîtier de la capsule) doit être connectée à la masse.

les capsules électrets sont ali-

L’autre patte sert à la fois à alimenter le micro et à récu-

mentées à l’aide d’une pile, ce qui

pérer la modulation qui sera transmise à l’étage de pré-

ne nécessite pas de filtrage. Le

amplification. El e est connectée d’une part à la source

condensateur de filtrage ne s’im-

d’alimentation (broche MIC-BIAS de l’Orange Pi Zero), via

pose donc que dans le cas pré-

deux résistances et un condensateur de filtrage. Le signal

sent où nous souhaitons alimenter

quant à lui est prélevé sur la même patte et envoyé sur la

la capsule via la broche MIC-BIAS

broche MIC1P. Comme l’alimentation et la sortie du micro

de l’Orange Pi Zero, prévue pour

se font sur la même patte, il est nécessaire de bloquer le

cet usage. Son rôle est de filtrer

les bruits parasites et les ronfle-

ments transmis par l’alimentation.

Le condensateur C2 a pour

rôle de bloquer le courant d’ali-

mentation continu et de ne laisser

Fig. 6 : Cette carte

d’extension se fiche sur

passer en sortie que la partie

le connecteur d’entrées/

modulée correspondant au signal

sorties 13 broches de

capté par la capsule.

l’Orange Pi Zero. Elle est

dotée d’un micro électret,

Le circuit sera relié aux broches

d’une sortie audio/vidéo

suivantes du port 13 broches :

jack, de deux ports USB

et d’un capteur infrarouge.

• alimentation : broche

À moins de deux euros,

MIC-BIAS (10) ;

c’est un moyen pratique et

économique de commencer

• sortie : broche MIC1P (11).

à tester les possibilités

Notez que la broche MIC1N

audios de l’Orange Pi

Zero avant de s’attaquer

(12) n’est pas utilisée pour

à la réalisation des

ce montage ;

circuits nécessaires pour

l’interphone.

• masse : broche GND (2).

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Abonnez-vous !

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°18

49

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_formulaire2017_mags_R2.indd 15

15/02/2017 12:01

EN COUVERTURE

Bon d’abonnement

CHOISISSEZ VOTRE OFFRE !

PAPIER + BASE

SUPPORT

PAPIER

DOCUMENTAIRE

Prix TTC en Euros / France Métropolitaine*

1 connexion BD

Offre ABONNEMENT

Réf Tarif TTC

Réf

Tarif TTC

HK

6n° Hackable

HK1

39,-

HK13

169,-

LES COUPLAGES AVEC NOS AUTRES MAGAZINES

i

6n° Hackable

+

6n° MISC

i1

79,-

i13

419,-

6n° Hackable

+

i+

i+1

99,-

i+13

439,-

6n° MISC

+

2n° Hors-Série

J

11n° GNU/Linux Magazine France

+

6n° Hackable

J1

105,-

J13

399,-

J+

6n° Hackable

+

J+1

159,-

J+13

459,-

11n° GNU/Linux Magazine France

+

6n° Hors-Série

K

6n° Hackable

+ 6n° Linux Pratique

K1

75,-

K13

329,-

K+

6n° Hackable

+

K+1

99,-

K+13

359,-

6n° Linux Pratique

+

3n° Hors-Série

LA TOTALE DIAMOND !

L

11n° GLMF + 6n° HK* +

6n° LP

+ 6n° MISC

L1

189,-

L13

839,-

11n° GLMF +

6n° HS

+ 6n° HK* +

6n° LP

+

3n° HS +

L+

L+1

289,-

L+13

939,-

6n° MISC

+

2n° HS

Les abréviations des offres sont les suivantes : LM = GNU/Linux Magazine France | HS = Hors-Série | LP = Linux Pratique | HK = Hackable Particuliers = CONNECTEZ-VOUS SUR :



http://www.ed-diamond.com

pour consulter toutes les offres !

*Les tarifs hors France Métropolitaine, Europe, Asie, etc. sont disponibles en ligne !

Professionnels = CONNECTEZ-VOUS SUR :

http://proboutique.ed-diamond.com

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) pour consulter toutes les offres !

50

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

*Les tarifs hors France Métropolitaine, Europe, Asie, etc. sont disponibles en ligne !

ABO_formulaire2017_mags_R2.indd 16

15/02/2017 12:01

Créez votre portier audio connecté

3.2 Ampli et haut-

des composants séparés. Dans ce dernier cas, ou bien en

parleur

cours de phase d’expérimentation, il vous faut au moins un

bouton poussoir et une led.

Comme vu plus haut, les

broches power + et - de l’amplifi-

Le circuit imprimé contient :

cateur PAM8403 sont à relier aux

• deux boutons (sérigraphiés S3 et S4) connectés en

bornes +5V (1) et GND (2) du port

paral èle sur un fil unique, donc en réalité une seule

13 broches.

fonction possible. On note la présence d’un emplace-

La sortie LINEOUT R ou L

ment pour un troisième bouton (S1), relié à un fil séparé,

(broche 7 ou 8) du connecteur

mais non équipé ;

13 broches de l’Orange Pi Zero

• deux leds jaunes (D1 et D2) connectées à un fil unique,

est raccordée à la broche input

destinées à l’éclairage de la platine ;

L ou R du PAM8403. La broche

input G du PAM8403 est reliée

• une led bicolore rouge/verte (D17), connectée à 3 fils.

électriquement à la broche

Les fonctions des fils sont les suivantes :

power -. El e est donc déjà de fait

reliée à la masse de l’Orange Pi

Fil Sérigraphie

Fonction

GPIO

Zero. Pour cette raison, il n’est

Violet Boutons S3 et S4

Bouton d’appel

24 1

pas nécessaire de la connecter

via un fil supplémentaire.

Bleu Masse

20

Les broches rout (sortie droite

Vert Bouton S1 (non présent)

+ et -) ou lout (sortie gauche + et -)

Jaune LED bicolore D17 +

1

sont à raccorder au haut-parleur.

Orange LEDs D1 D2 + (jaune)

Éclairage carte de visite

12

Le choix du canal droit (R) ou

gauche (L) n’a aucune importance.

Rouge LED D17 – rouge

5

Par contre, une fois le choix fait il

Marron LED D17 - vert

3

faut s’y tenir pour l’ensemble du

circuit !

Les leds sont montées en série avec des résistances

calculées pour une alimentation de 6 volts. Les sorties

3.3 Boutons et leds

numériques de l’Orange Pi Zero délivrant 3,3 volts, nous

ne prenons aucun risque à ne pas changer la valeur des

Dans le cas de la réutilisa-

résistances ! À l’expérience, la perte d’intensité n’a pas posé

tion de notre interphone, nous

de problème. Nous avons donc conservé les résistances

avons voulu conserver ceux qui

d’origine.

équipaient d’origine l’interphone.

Ceux-ci sont regroupés sur un cir-

On remarque que la led bicolore D17 est du type « anode

cuit imprimé sérigraphié, dont sort

commune ». Cela signifie que la led dispose d’une unique

une nappe de 7 fils aboutissant à

borne plus, et de deux bornes moins (une pour chaque

un connecteur femel e. Bien sûr il

couleur). Cette caractéristique du composant implique un

conviendra d’adapter le montage

mode d’utilisation inhabituel. Les cathodes (fils rouge et

à votre cas particulier. Le principe

marron) peuvent être connectées à la masse (comme pour

restera toujours le même, selon

une led classique), mais dans ce cas l’activation de la led

que vous réutilisiez un matériel

al umera les deux couleurs en même temps (on obtient de

existant, ou que vous choisissiez

l’orange), sans qu’il soit possible d’obtenir le rouge ou le vert.

1 Le SoC intègre des résistances de rappel (pul -down) ou de tirage (pul -up) qui peuvent être activées sur les broches du GPIO. Il n’est donc pas nécessaire d’ajouter ce composant pour le bouton d’appel.

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

HACKABLE MAGAZINE n°18

51

EN COUVERTURE

INTERPHONE

La solution consiste à connecter chaque cathode, non pas

4. PASSONS À

à la masse, mais à une sortie numérique distincte du GPIO,

et à alimenter le composant en connectant l’anode au +3,3

LA RÉALISATION

volts. Lorsque la sortie numérique est à l’état haut (+3,3 volts),

aucun courant ne circule, et la couleur correspondante est

PRATIQUE

éteinte. Lorsque la même sortie numérique est à l’état bas

4.1 Montage sur

(0 volt), le courant circule et la couleur est al umée. La logique

habituel e est donc inversée, l’état bas al umant la led, et l’état

platine à essai

haut l’éteignant. Selon l’état de chacune des deux sorties

Avant de passer à la réalisation

numériques, quatre états sont donc possibles :

finale, nous vous recomman-

Sortie 1 (cathode

Sortie 2 (cathode

État led

dons de tester soigneusement

couleur rouge)

couleur verte)

l’ensemble de la solution à l’aide

d’une platine à essai. Assurez-

Haut

Haut

Éteinte

vous que vous disposez de tous

Bas

Haut

Rouge

les composants nécessaires, et

servez-vous du schéma présenté

Haut

Bas

Verte

plus haut (figure 4) pour réaliser le

Bas

Bas

Orange

montage.

Une fois le montage effectué,

reportez-vous plus loin dans ce

numéro à l’article consacré à la

partie logiciel e et configuration

de l’interphone, et vérifiez le bon

fonctionnement de votre proto-

type. Ceci fait, il sera tant de sortir

fer à souder, lime et perceuse

pour passer à la phase ultime.

4.2 Installation finale

Fig. 7 : Schéma de raccordement

L’interphone était fourni d’ori-

de la led bicolore. Comme il s’agit

d’un cas particulier de réutilisation

gine avec un coffret d’alimenta-

du matériel existant, nous ne l’avons

tion optionnel (l’appareil pouvant

pas présenté dans le schéma général

également être utilisé sur piles

présenté plus haut.

sans ce coffret). Après avoir

dans un premier temps envisagé

l’instal ation de l’Orange Pi Zero

3.4 Relais de commande d’ouverture

et de l’ampli dans la platine de

La commande d’ouverture/fermeture du portail ou du portil-

rue, j’ai finalement choisi de n’y

lon nécessite l’utilisation d’un relais par commande. La partie

laisser que le strict nécessaire (le

commande du relais sera reliée à une broche numérique du

micro, son circuit d’alimentation

GPIO, au +5V et à la masse. Le circuit de puissance sera lui

et le haut-parleur, cette partie

connecté au circuit de commande de l’ouvrant (portail ou por-

constituant mon « module de com-

til on), lequel doit posséder deux bornes destinées à comman-

mande ») et de détourner le coffret

der l’ouverture et la fermeture par fermeture du contact pen-

de sa destination originale, pour y

dant une durée d’environ 1 s. Ces deux bornes sont prévues

déporter l’Orange Pi Zero et l’am-

généralement pour connecter une serrure ou un poussoir.

pli (le « module de service » !) :

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Créez votre portier audio connecté

Fig. 8 : Vue de l’intérieur du « module de service ».

On remarque l’ampli PAM8403 en haut, fixé à l’aide

de son potentiomètre, le relais en bas à droite, et le

cabochon de l’antenne wifi en haut du boîtier, qui à

l’origine équipait la platine de rue.

convenables pour devenir un jour futur

le point de départ d’une station météo

connectée, d’autant qu’il recèle de suffi-

samment d’espace libre pour y instal er

confortablement capteur de pression,

d’humidité et de température !

Bien sûr une situation autre pourrait ame-

ner à une réalisation différente. Néanmoins,

voici comment se présente l’interphone

connecté à notre domicile :

• Fixé au côté extérieur du pilier, le mo-

dule de commande, contenant le micro

électret, son circuit d’alimentation, le

haut-parleur, les boutons et les leds.

• Pour des raisons pratiques : malgré sa petite

tail e, l’intégration de l’Orange Pi Zero dans ce

volume contraint prévu pour un autre usage

s’est avérée difficile à réaliser, notamment à

cause du connecteur RJ45 et de la néces-

sité d’y faire arriver le câble réseau (tout le

câblage devant arriver par l’arrière du boîtier).

Le boîtier d’alimentation est bien plus pratique

à cet égard : dimensions confortables, joint

d’étanchéité, et très facilement aménageable

au cutter, à la perceuse ou au Dremel.

• Pour des raisons de dissipation thermique :

l’entrée de la maison est orientée plein sud ;

il était donc à craindre que l’exposition de

la platine bourrée d’électronique au soleil

d’été provençal, en l’absence quasi totale

d’aération, ne nuise au bon fonctionnement

de l’ensemble.

• Pour des raisons de sécurité, il a semblé

plus sûr de ne laisser que le strict néces-

saire côté rue.

• Enfin, cerise sur le gâteau, le module de

service étant instal é à l’intérieur, donc sur

le côté nord du pilier, à environ 1,60 m de

hauteur, il remplit des conditions plus que

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

HACKABLE MAGAZINE n°18

53

EN COUVERTURE

INTERPHONE

• Sur la face intérieure du pilier, en vis-à-vis du

module de commande, le module de service, débar-

rassé de son ancien contenu, et logeant conforta-

blement l’Orange Pi Zero, l’amplificateur PAM8403,

ainsi que le relais de commande d’ouverture du

portail. Le coffret est connecté au module de com-

Fig. 9 :

mande au moyen d’un câblage traversant le pilier.

La réalisation pratique,

avec le module de

Du coffret partent également : le câble réseau, qui

commande, le module

se raccorde à son autre extrémité au switch à l’inté-

de service et le coffret

rieur de la maison, ainsi que quatre câbles partant

de commande du portail

vers le coffret électrique du portail, instal é à proxi-

contenant l’alimentation

5 volts.

mité du pilier. Deux câbles relient les bornes 5 volts

et masse du GPIO à une alimentation 5 volts qui a

été instal ée à l’intérieur dudit coffret, les deux autres

câbles connectent la partie « puissance » du relais

au bornier de la carte de commande du portail.

Les figures suivantes (figures 9 et 10) il ustrent la réa-

lisation finale.

Lors de la phase de réalisation finale, il est conseil é

de souder les fils de connexion aux broches, et de

protéger la soudure sous une longueur de gaine ther-

morétractable. Ceci permettra de fiabiliser l’appareil en

sécurisant les connexions dans la durée, et d’éviter de

possibles problèmes de faux contacts dus notamment à

la corrosion. Assurez-vous de la fiabilité des connexions

et de l’absence de courts-circuits, en vous servant au

besoin d’un multimètre.

Fig. 10 : Le circuit d’alimentation du micro

Voici pour la partie matériel e de l’interphone. Il ne

monté sur veroboard. Il faut faire attention

nous reste plus qu’à nous pencher sur le système et

à la polarité du micro lors du raccordement.

sa configuration. Ces points sont l’objet de l’article qui

Sur notre micro récupéré, le fil rouge (relié au

suit. ELB

boîtier) est la masse, et le fil noir l’alimentation

et le signal !

RÉFÉRENCES

[1] http://pjsip.org/

[2] https://linux-sunxi.org/

Orange_Pi_Zero

[3] https://www.sonelec-

musique.com/electronique_

bases_alim_micro_electret.

html

[4] http://www.orangepi.org/

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

EXPLORE A WORLD OF POSSIBILITIES*

À 5 MINUTES DE L’OCÉAN ET EN PLEIN CŒUR

D’UN PÔLE D’EXCELLENCE TECHNOLOGIQUE,

LE SITE DE BREST RECRUTE DANS LES MÉTIERS

DE L’INGÉNIERIE MATÉRIEL.

Numérique

Electronique

Traitement du signal

de puissance

(FPGA, VHDL)

Construction

Analogique RF

mécanique

Hyperfréquence

Moyens de tests

Envoyez votre CV à thales-brest-recrute@fr.thalesgroup.com et rejoignez-nous !

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com)* ENSEMBLE NOUS EXPLORONS UN MONDE DE POSSIBILITÉS

EN COUVERTURE

INTERPHONE

PORTIER AUDIO

CONNECTÉ :

INSTALLATION ET

CONFIGURATION

Éric Le Bras

Après avoir décrit l’architecture matérielle du portier connecté dans l’article précédent, il est maintenant temps de nous pencher sur

son fonctionnement logiciel. Nous allons aborder les composants

qui permettent de faire fonctionner le matériel et de gérer la partie communication, l’installation du système, la programmation et la

configuration de l’interphone.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration

Orange Pi est une

gamme de cartes

de développement

open source propo-

sée par le fabricant

chinois Xunlong [3]. À l’instar des

Raspberry Pi, l’Orange Pi Zero

nécessite l’instal ation d’un sys-

tème d’exploitation sur une carte

micro SD. Xunlong, via son site

www.orangepi.org, propose une

section téléchargement avec plu-

sieurs distributions pour chacune

de ses cartes. Pour la Pi Zero, pas

moins de 5 distributions sont pro-

posées, parmi lesquel es Ubuntu,

Debian (serveur ou LXDE) ou

Fig. 1 :

Android. Malheureusement, aucun

Le portier fait

• orangepi_PC_gpio_pyH3 [5] - Il s’agit d’une

intervenir plusieurs

des liens proposés ne m’a permis

librairie Python homologue à la librairie RPi.

couches logicielles,

de récupérer une des images. Soit

GPIO, permettant l’accès aux broches du GPIO

destinées à

le lien est mort, soit il amène à une

du SoC Al winner H3. Il faut savoir que le H2+

commander la partie

hardware (GPIO,

page en chinois. Heureusement, il

qui équipe l’Orange Pi Zero est simplement

réseau et E/S audio).

existe une distribution dédiée aux

un H3 moins la sortie HDMI 4K et le l’Ethernet

cartes de développement à base

Gigabit. Moyennant quoi, le H2+ est totale-

d’ARM, baptisée Armbian [4], qui

ment compatible avec le H3. C’est d’ail eurs la

supporte parfaitement la gamme

datasheet de ce dernier qui sert de référence

Orange Pi, et qui jouit d’une bonne

pour le H2+ [2]. La librairie a été développée

réputation dans les forums spécia-

pour la carte Orange Pi PC, toutefois on trouve

lisés. Une image pour l’Orange Pi

sur GitHub un fork prenant correctement en

Zero étant disponible au moment

charge l’Orange Pi Zero. C’est bien sûr cette

où je recevais ma carte, c’est donc

version que nous utilisons.

vers cette distribution que je me

• PJSIP/PJMEDIA [1] - Ces librairies fournissent le

suis tourné. Armbian est basée

support des protocoles SIP et RTP (via une API

sur Debian Jessie. Utilisateur de

nommée pjsua pour laquel e un module Python

Raspbian, vous serez en terrain

est disponible), ainsi que la gestion des médiums

parfaitement balisé.

(audio seul dans notre cas, mais les flux vidéos

Le fonctionnement du portier

peuvent également être pris en charge).

s’articule autour de plusieurs com-

• UDP/IP - Le protocole réseau non connecté,

posants logiciels, dont la figure 1

utilisé pour communiquer avec le trunk SIP.

montre l’organisation.

• ALSA - ALSA est une architecture de gestion

• Gestionnaire portier SIP -

des périphériques audios pour Linux. Il s’agit

C’est le programme Python

du standard en ce domaine, et la distribution

gérant les fonctionnalités du

Armbian gère parfaitement cet aspect sans

portier. Le code source est

nécessiter de configuration supplémentaire.

listé et expliqué plus loin dans

La couche média de PJSIP s’appuie sur les

cet article.

API exposées par ALSA.

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

HACKABLE MAGAZINE n°18

57

EN COUVERTURE

INTERPHONE

1. INSTALLATION DE

soit en configurant la carte en IP

L’ORANGE PI ZERO

fixe, soit, si votre routeur ou votre

box le permet, en affectant une IP

Vous aurez besoin d’une carte micro SD de 2 Go ou

à l’adresse MAC.

plus. La procédure pour récupérer et instal er Armbian

Une fois l’adresse récupérée,

sur l’Orange Pi Zero est la suivante :

l’ouverture d’une session sur la

• Télécharger l’image en se rendant dans la section

carte se fait via ssh, soit depuis

Download du site Armbian, onglet Server. Cliquer sur un PC Windows au moyen de

le lien Debian Jessie. L’ensemble des images Armbian PuTTY, Cygwin ou Ubuntu bash est accessible sous : https://image.armbian.com/.

pour Windows 10, ou depuis un

Pour notre projet, il faut télécharger cette image :

hôte Linux ou un Mac au moyen de

https://image.armbian.com/Armbian_5.24_

la commande ssh. Le principe est

Orangepizero_Debian_jessie_3.4.113.7z

exactement le même que pour une

carte Raspberry Pi, au besoin les

• Décompresser l’archive (avec 7-Zip sous Windows

articles déjà publiés dans Hackable

ou 7z sous Linux).

sur le sujet pourront vous aider.

• Graver l’image sur la carte micro SD avec Etcher [6]

La première connexion doit

(ou dd, ou encore Win32DiskImager).

utiliser le compte root, dont le mot

• Insérer la carte micro SD dans le lecteur de l’Orange

de passe par défaut est 1234.

Pi Zero.

La première session déclenche

l’exécution automatique d’un script

• Connecter la carte au réseau local à l’aide d’un

vous demandant de personnaliser

câble RJ45. La carte de possédant pas de port

ce mot de passe, puis de fournir

HDMI, vous ne disposerez au démarrage que du

les informations nécessaires à la

réseau Ethernet, ou la console série disponible (non

création d’un compte d’utilisateur.

expliquée dans cet article) pour communiquer. Le

Lors de vos prochaines sessions,

wifi ne sera utilisable qu’après configuration, donc

c’est ce compte que vous utilise-

pas au premier démarrage.

rez pour vous connecter, et non

• Alimenter la carte par le port micro USB via un PC

le compte root. Vous pourrez

ou un chargeur de smartphone/tablette. La carte

exécuter des commandes néces-

démarre.

sitant une élévation de privilèges

depuis ce compte, en utilisant la

Le premier démarrage est assez long (la distribution

commande sudo, ainsi qu’il vous

effectuant des opérations d’initialisation, dont la création

est recommandé lors de cette

d’un fichier de swap et l’extension automatique de la par-

initialisation.

tition pour utiliser la capacité totale de la carte SD). Lors

du démarrage, la carte va se voir attribuer une adresse

Comme le script d’initialisation

réseau par le serveur DHCP de votre routeur Internet

vous y enjoint, déconnectez-vous

ou de votre box. Pour pouvoir faire quelque chose avec,

(Ctrl-D), puis reconnectez-vous

vous devez impérativement trouver l’adresse réseau

avec votre nouveau login.

qui lui a été attribuée en consultant la liste des appa-

Mise à niveau du cache

reils connectés sur votre routeur, ou bien en utilisant le

apt-get :

programme Unix nmap depuis une autre machine. Vous

pourriez aussi vous inspirer de l’article Un afficheur LCD

% sudo apt-get update

pour connaître l’adresse d’un Raspberry Pi publié dans

le numéro 15 de Hackable. Dès que possible, nous vous

Installation des dernières ver-

recommandons d’attribuer une adresse fixe à la carte,

sions des packages instal és :

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration

% sudo apt-get dist-upgrade

Nous avons maintenant une

carte Orange Pi Zero fonction-

Configuration du fuseau horaire :

nel e, avec Armbian instal é et

configuré. Il est temps de passer à

% sudo dpkg-reconfigure tzdata

la suite du projet.

Si le wifi doit être utilisé, il peut être activé avec cette

commande :

2. RÉCUPÉRATION

% sudo nmtui-connect SSID

ET COMPILATION

La commande suivante permet de sélectionner le SSID

DES LIBRAIRIES

parmi les réseaux détectés :

Le programme Python qui va

% sudo nmtui-connect

gérer l’interphone repose sur

plusieurs composants supplé-

Les paramètres wifi sont enregistrés et survivent aux redé-

mentaires que nous devons au

marrages. Une mise en garde toutefois : il n’est pas recom-

préalable installer. La librairie

mandé de rester dans cette configuration si vous comptez

orangepi_PC_gpio_pyH3,

exploiter l’interface RJ45. En effet, les interfaces réseau filaires

comme vue plus haut, permet

et sans-fils étant toutes les deux activées, se pose un problème

de manipuler et lire les broches

de routage : Linux doit choisir entre l’une ou l’autre des deux

du GPIO. PJSIP prend en

interfaces actives pour router les paquets sortants. Si c’est

charge les fonctionnalités de

l’interface filaire qui est choisie : très bien, c’est probablement

téléphonie (communications et

ce que vous souhaitez. . Mais dans le cas contraire, vos pa-

médias). En plus de ces compo-

quets réseau vont voyager par wifi, alors qu’un câble réseau est

sants, nous aurons besoin des

connecté ! Pire : si la connectivité wifi est mauvaise, il se peut

paquets suivants :

même que vous rencontriez des difficultés à ouvrir une session

• libasound2-dev : fichiers

ssh. . Vous souhaiteriez que l’interface filaire (eth0) soit utilisée de définition pour la librairie

par défaut, et l’interface sans fil (wlan0) uniquement lorsque la ALSA (gestion des périphé-

première n’est pas disponible ? Ce n’est pas comme cela que

riques audios).

fonctionne le routage par défaut. Notez qu’une tel e configura-

tion est possible, mais on sort du cadre de cet article.

• libssl-dev : fichiers de

définition pour la librairie

Donc, si vous utilisez une connexion réseau RJ45, nous vous

OpenSSL prenant en charge

recommandons fortement de désactiver le wifi ainsi :

les connexions cryptées SSL/

TLS, requises par PJSIP. Ce

% sudo nmcli radio all off

paquet est déjà instal é de

. .voire de désactiver complètement le démon

base avec Armbian.

NetworkManager,

qui ne gère pas l’interface RJ45 :

• python-dev : fichiers de

définition et outils de déve-

% sudo systemctl stop NetworkManager

loppement pour les modules

% sudo systemctl disable NetworkManager

Python. Ce paquet est

Votre Pi vous dit merci : vous venez d’économiser le démar-

nécessaire pour compiler

rage de 8 process, et de libérer 4 Mo de RAM (et l’interface wifi

orangepi_PC_gpio_pyH3

peut toujours être gérée, comme c’est le cas pour l’interface

et PJSIP.

Ethernet, dans le bon vieux fichier de configuration /etc/

Ces paquets sont instal és sim-

network/interfaces).

plement via apt-get :

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

HACKABLE MAGAZINE n°18

59

EN COUVERTURE

INTERPHONE

% sudo apt-get install python-dev libasound2-dev

Récupération et instal ation de la librairie orangepi_PC_gpio_pyH3 :

% git clone https://github.com/nvl1109/orangepi_PC_gpio_pyH3.git

% cd orangepi_PC_gpio_pyH3

% sudo python ./setup.py install

Récupération, compilation et instal ation de PJSIP :

% cd ~

% wget http://www.pjsip.org/release/2.5.5/pjproject-2.5.5.tar.bz2

% tar xjf pjproject-2.5.5.tar.bz2

% cd pjproject-2.5.5

% ./configure --enable-shared

% make dep && make

% sudo make install

Instal ation de l’API Python :

% cd pjsip-apps/src/python

% sudo python ./setup.py install

Mise à jour du cache des librairies dynamiques :

% sudo ldconfig

2.1 Testons PJSIP

Si vous avez choisi d’utiliser le trunk SIP de Free et

activé ce service, vous pouvez dès à présent tester votre

instal ation. Si vous utilisez un trunk gratuit, il vous faut

commencer par configurer votre smartphone pour recevoir

les appels SIP. Sous Android, le protocole SIP est déjà

présent, il ne reste qu’à le configurer (il est possible, mais

pas nécessaire d’instal er une application tierce). Pour

cela, il vous faut trouver les paramètres VoIP. L’emplace-

ment dépend du constructeur et de la version Android. À

titre d’exemple sur mon appareil, le menu se trouve dans

Fig. 2 :

La configuration

l’application Téléphone, sous Paramètres, Paramètres avancés, des appels

Appel VOIP. Une fois le menu trouvé, il nous faut activer VOIP sur un

l’option Recevoir les appels, et ajouter un compte SIP. Les smartphone sous

paramètres nécessaires (nom d’utilisateur, mot de passe

MIUI8 (Lollipop).

Cet écran est

et serveur) vous ont été fournis lors de la création de votre

accessible via

compte SIP.

l’application

Téléphone, menu

Vous pourrez ensuite tester l’instal ation de PJSIP à

Paramètres →

l’aide de la commande pjsua.

Paramètres

avancés → Appel

% cd ~/pjproject-2.5.5/pjsip-apps/bin

VOIP.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration Si vous avez activé le service SIP de Free, exécutez cette commande :

% ./pjsua-armv7l-unknown-linux-gnueabihf --id sip:09xxxxxxxx@freephonie.net

--registrar sip:freephonie.net --realm "*" --username 09xxxxxxxx --password yyyyyyyy --reg-timeout 1800 --no-tcp

Si vous avez opté pour un compte Linphone.org, les paramètres à utiliser sont :

% ./pjsua-armv7l-unknown-linux-gnueabihf --id sip:nomutil@sip.linphone.org

–registrar sip:sip.linphone.org --realm "*" --username nomutil --password yyyyyyyy

Les messages échangés entre PJSIP et le registrar défilent à l’écran. Appuyez ensuite sur la touche Entrée : un menu apparaît, précédé de la liste des comptes. Vérifiez que vous lisez la ligne (l’URI correspond au paramètre --id que vous avez entré) :

*[ 1] sip:nomutil@serveursip: 200/OK (expires=1720)

Online status : Online

Si vous voyez le message ci-dessus, vous êtes connecté au registrar. Tapez ensuite m puis Entrée.

Après le prompt Make call:, entrez l’URI SIP de votre ligne (en rouge ci-dessous). Attention : le numéro de téléphone à entrer est votre numéro géographique, commençant par 01, 02, 03, 04 ou 05, et non le numéro en 09 fourni par Free :

Make call: sip:04zzzzzzzz@freephonie.net

Si vous avec un compte Linphone.org, ou pour tester l’appel VoIP sur votre smartphone : Make call: sip:nomutil@sip.linphone.org

Si tout se passe bien, votre téléphone sonne, vous pouvez décrocher ! Appuyez sur les touches du téléphone : si la détection des codes DTMF fonctionne, des messages apparaissent sur la console, indiquant la touche détectée. Si vous ne voyez pas de message, c’est probablement que vous avez appelé votre ligne fixe depuis le service SIP de Free. Vous ne pourrez dans ce cas pas utiliser cette fonctionnalité pour commander l’ouverture (voir plus haut le § « À propos du trunk SIP »).

3. LE PROGRAMME DE GESTION DU PORTIER

La gestion du portier est confiée à un programme Python chargé au démarrage sous forme de service. Le programme gère tous les aspects fonctionnels du portier :

• gestion du bouton d’appel et des leds ;

• gestion de la communication SIP ;

• déclenchement de l’ouverture du portail.

Le programme Python est intégré sous la forme d’un service systemd. Ce sera l’occasion d’introduire le système d’amorçage par défaut de Debian Jessie. Pour terminer l’instal ation de Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°18

61

EN COUVERTURE

INTERPHONE

l’interphone, vous devrez récupérer sur le GitHub du magazine et instal er les trois fichiers suivants (expliqués en détail dans les paragraphes ci-dessous) :

• /usr/local/bin/doorphone.py

• /lib/systemd/system/doorphone.service

• /etc/default/doorphone.

3.1 Le fonctionnement du programme

L’interphone est géré par le programme Python /usr/local/bin/doorphone.py.

Le programme est destiné à être démarré en tant que service par systemd (voir § suivant). Tout ce qui est envoyé par le programme sur la sortie standard par l’instruction print sera redirigé vers le journal par systemd.

Les modules nécessaires sont importés par ces instructions :

import os

import sys

import pjsua as pj

import threading

import signal

import datetime

from pyA20.gpio import gpio

from pyA20.gpio import port

from time import sleep

Pour pouvoir accéder au GPIO, le programme doit être exécuté par root. Les lignes suivantes, placées au début du programme, effectuent cette vérification :

import os

if not os.getegid() == 0:

sys.exit('Le script doit être démarré par root')

Les ports GPIO utilisés pour gérer les boutons, leds et relais sont déclarés dans des variables : led_yellow = port.PA7

led_red = port.PA11

led_green = port.PA12

relay_0 = port.PA15

relay_1 = port.PA16

call_button = port.PA13

Le GPIO est initialisé par le code suivant :

# Initialisation du module GPIO

gpio.init()

# Configuration des ports

gpio.setcfg(led_yellow, gpio.OUTPUT)

gpio.setcfg(led_red, gpio.OUTPUT)

gpio.setcfg(led_green, gpio.OUTPUT)

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration gpio.setcfg(relay_0, gpio.OUTPUT)

gpio.setcfg(relay_1, gpio.OUTPUT)

gpio.setcfg(call_button, gpio.INPUT)

# Activation de la resistance de tirage (pull-up) pour le bouton

gpio.pullup(call_button, gpio.PULLUP)

# Extinction de la led bicolore (mise à l'état haut, voir l'explication dans l'article)

gpio.output(led_red, gpio.HIGH)

gpio.output(led_green, gpio.HIGH)

# Eclairage de la carte de visite

gpio.output(led_yellow, gpio.HIGH)

# Initialisation des relais

gpio.output(relay_0, gpio.LOW)

gpio.output(relay_1, gpio.LOW)

Notez que la led bicolore (led_red et led_green), initialisée ici, n’est pas exploitée dans le reste du programme. Son utilisation reste à définir : ouverture du portail ? décrochage du télé-

phone ? tests, détection d’anomalies ? Il suffit d’ajouter les appels à gpio.output() aux bons endroits.

Le code suivant initialise la librairie PJSIP1, puis crée les objets nécessaires :

• Objet transport de type Transport() renvoyé par la méthode create_transport().

• Objet acc_cfg de type AccountConfig(), contenant les informations de connexion au trunk.

Les informations sont récupérées depuis les variables d’environnement par la méthode os.getenv(). Le second argument de cette méthode, si présent, est la valeur par défaut à utiliser en l’absence de la variable d’environnement. Les variables d’environnement sont définies dans le fichier /etc/default/doorphone (voir plus loin).

Le paramètre log_cfg passé à la méthode init()permet de définir un niveau de log, et de fournir la fonction à utiliser pour récupérer les informations tracées par la librairie : LOG_LEVEL=3

# Callback pour le logging de PJSIP

def log_cb(level, str, len):

print str,

(...)

# Créons l'instance de la librairie

lib = pj.Lib()

try:

# Initialisation de la librairie PJSIP

lib.init(log_cfg = pj.LogConfig(level=LOG_LEVEL,

callback=log_cb))

# Création d'un transport UDP

transport = lib.create_transport(pj.TransportType.UDP)

1 L’API Python PJSUA qui est utilisée est documentée sur le site du projet PJSIP

à la page http://www.pjsip.org/python/pjsua.htm.

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

HACKABLE MAGAZINE n°18

63

EN COUVERTURE

INTERPHONE

print "\nListening on", transport.info().host,

print "port", transport.info().port, "\n"

# Démarrage de la librairie PJSIP

lib.start()

# Création de la configuration du compte

acc_cfg = pj.AccountConfig()

acc_cfg.id = os.getenv('SIP_ID')

acc_cfg.reg_uri = os.getenv('SIP_REGISTRAR')

acc_cfg.auth_cred = [ pj.AuthCred(os.getenv('SIP_REALM', '*'), os.getenv('SIP_

USERNAME'), os.getenv('SIP_PASSWORD')) ]

acc_cfg.reg_timeout = int(os.getenv('SIP_REG_TIMEOUT', '300')) except pj.Error, e:

print "Exception: " + str(e)

gpio.output(led_yellow, gpio.LOW)

lib.destroy()

lib = None

sys.exit(1)

Le principe de fonctionnement du gestionnaire de portier repose sur la boucle suivante :

• Lecture de l’état du bouton d’appel.

• Si l’état est à 0 (bouton enfoncé), et que l’état précédent était à 1, appel de la fonction call_

button_handler() (voir plus loin).

• Si un appel est en cours, on calcule la durée de l’appel (différence entre l’heure courante et la date de début de l’appel lue dans la variable call_start) et on la compare à la valeur de call_timeout. Si la durée de l’appel dépasse la valeur configurée (120 secondes par défaut), on raccroche en appelant la méthode call.hangup().

• L’objet GracefulKiller() permet de détecter la réception d’un signal SIGINT ou SIGTERM

(ce dernier est envoyé au process par systemd lorsqu’il doit être arrêté, par exemple suite à une commande systemctl stop – voir plus loin). Si la variable killer.kill_now contient la valeur True, on sort de la boucle, et on exécute les instructions d’arrêt du service avant de quitter. La classe GracefulKiller() permet de gérer proprement la réception d’un signal d’arrêt. El e n’est pas listée ici, mais se trouve dans le source complet.

• Dans le cas contraire, on attend 0,2 seconde puis on réitère au début de la boucle.

call_start = None

call_timeout = datetime.timedelta(seconds=int(os.getenv('CALL_TIMEOUT', '120'))) call_nb = 0

bt_prev_state = 1

killer = GracefulKiller()

while True:

bt_state = gpio.input(call_button)

if bt_state != bt_prev_state:

bt_prev_state = bt_state

if bt_state == 0: # Le bouton a été enfoncé

# Effectuer l'appel

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration call_button_handler()

# Détection du timeout

if call_start <> None and (datetime.datetime.today() - call_start) > call_timeout: call.hangup()

# SIGINT ou SIGTERM reçu

if killer.kill_now:

break # Sortir de la boucle

sleep(0.2)

# Arrêt du service

gpio.output(led_yellow, gpio.LOW) # Extinction des feux

lib.destroy()

lib = None

print "Doorphone shutdown"

sys.exit(0)

L’appel est effectué par la fonction call_button_handler(). Il se décompose en deux étapes successives :

1. Création du compte. Cette opération effectue l’enregistrement auprès du registrar.

2. Création de l’appel.

Dans PJSIP, toutes les opérations qui ont à voir avec l’envoi et la réception de messages, tels que l’enregistrement auprès du registrar et la gestion d’un appel, sont asynchrones. Cela signifie que la méthode qui effectue l’opération se termine immédiatement, et que les diffé-

rents états sont ensuite renvoyés sous la forme de callbacks.

C’est la raison pour laquel e, après l’appel de create_account(), la méthode acc_

cb.wait() est appelée, afin que le make_call() qui suit ne soit appelé qu’après que l’objet MyAccountCallback()ait reçu du serveur la confirmation de l’enregistrement. Dans le cas contraire, le trunk refuserait d’effectuer l’appel.

def call_button_handler():

global lib

global acc

global call

global call_nb

if call_nb == 0: # Si pas d'appel en cours

call_nb += 1

acc_cb = MyAccountCallback()

acc = lib.create_account(acc_cfg, cb=acc_cb)

acc_cb.wait()

# Call user

call = acc.make_call(os.getenv('SIP_DEST_URI'), MyCallCallback()) Les callbacks sont des objets, dans lesquels des méthodes sont définies, dans le but de recevoir les notifications d’événements intéressant l’objet principal (le compte, l’appel). Ainsi, dans le gestionnaire de portier, nous avons défini deux callbacks : MyAccountCallback(), du type AccountCallback(), pour les évènements liés au compte, et MyCallCallback(), du type CallCallback(), pour ceux liés à l’appel.

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

HACKABLE MAGAZINE n°18

65

EN COUVERTURE

INTERPHONE

# Callback pour recevoir les évènements du compte

class MyAccountCallback(pj.AccountCallback):

sem = None

def __init__(self, account=None):

pj.AccountCallback.__init__(self, account)

def wait(self):

self.sem = threading.Semaphore(0)

self.sem.acquire()

def on_reg_state(self):

if self.sem:

if self.account.info().reg_status >= 200:

self.sem.release()

• wait : Appelée par call_button_handler(). Créé un sémaphore initialisé à la valeur 0.

L’appel de la méthode acquire() est bloquant parce que le sémaphore est à zéro, et sera débloqué par un appel à la méthode release() effectué à réception du statut 200 OK

(ci-dessous).

• on_reg_state : Cette méthode est appelée par l’objet Account() lors d’un changement de statut du compte. Si le statut renvoyé par le registrar lu dans reg_status est 200 (OK), l’appel de release() libère l’appel bloquant acquire() invoqué dans la méthode wait().

Ceci est possible parce que l’objet Account(), créé par l’appel à create_account() a créé un thread distinct du programme principal qui a appelé la méthode wait(), du fait du modèle asynchrone de PJSIP. Les méthodes wait() et on_reg_state() sont donc appelées dans des threads parallèles.

# Callback pour recevoir les évènements de l'appel

class MyCallCallback(pj.CallCallback):

def __init__(self, call=None):

pj.CallCallback.__init__(self, call)

# Notification when call state has changed

def on_state(self):

global acc

print "Call is ", self.call.info().state_text,

print "last code =", self.call.info().last_code, print "(" + self.call.info().last_reason + ")"

if self.call.info().state == pj.CallState.DISCONNECTED:

acc.delete()

call_start = None

call_nb -= 1

# Notification when call's media state has changed.

def on_media_state(self):

global lib

global call_start

if self.call.info().media_state == pj.MediaState.ACTIVE:

# Connect the call to sound device

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration call_slot = self.call.info().conf_slot

lib.conf_connect(call_slot, 0)

lib.conf_connect(0, call_slot)

call_start = datetime.datetime.today()

def on_dtmf_digit(self, digits):

global relay_0

global relay_1

print "DTMF received, digit=", str(digits)

if digits == "#":

relay = relay_0

elif digits == "*":

relay = relay_1

else:

return

# Ouverture portail ou gâche : fermer le contact pendant 1 s gpio.output(relay, gpio.HIGH)

sleep(1)

gpio.output(relay, gpio.LOW)

• on_state : Méthode appelée par l’objet Call() lors d’un changement de statut de l’appel.

Ici la méthode est utilisée pour supprimer le compte acc, et donc se désinscrire du registrar.

Comme nous n’effectuons que des appels sortants, nous n’avons pas besoin de rester en ligne une fois l’appel terminé. La variable call_start utilisée pour la gestion du timeout est réinitialisée. Le compteur d’appels en cours call_nb est décrémenté.

• on_media_state : Méthode appelée par l’objet Call() lors d’un changement de statut du média de l’appel. Le but de cette méthode est, lorsque le média est activé, de connecter le média au périphérique son (entrée micro et sortie ligne). On en profite pour initialiser la variable globale call_start avec l’heure système (cette variable sert à chronométrer l’appel, voir plus haut la gestion du timeout).

• on_dtmf_digit : Méthode appelée par l’objet Call() lorsqu’un chiffre DTMF est détecté (appui sur une touche du téléphone par le destinataire de l’appel). Si la touche # ou * est détectée, on ferme le contact du relais 0 ou 1 pendant une seconde puis on le rouvre, pour déclencher l’ouverture du portail ou de la gâche. Attention : certains relais ont une logique inverse : l’état bas (LOW) correspond au relais activé (fermé), l’état haut (HIGH) correspondant à l’état désactivé (ouvert). Si tel est le cas, vous devrez mettre à jour cette méthode, ainsi que l’initialisation de la broche vue plus haut. Notez que certains modules de relais possèdent des cavaliers permettant de choisir le type de comportement souhaité.

3.2 Intégration avec systemd

Depuis l’arrivée de Debian Jessie en 2015, le système d’amorçage par défaut est devenu systemd, en remplacement du vénérable SysV init.

Sous systemd, un service est configuré sous la forme d’un fichier dont le nom se termine par .service. Ces fichiers sont constitués de différentes sections (spécifiées entre crochets), chaque section étant constituée d’un ensemble de paires clé=valeur. Cette syntaxe n’est pas sans rappeler cel e des fichiers .ini de Windows, dont el e est indirectement issue, via les fichiers .desktop de Freedesktop.org.

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

HACKABLE MAGAZINE n°18

67

EN COUVERTURE

INTERPHONE

Voici le fichier /lib/systemd/system/doorphone.service servant à démarrer notre gestionnaire de portier :

[Unit]

Description=Doorphone manager

After=multi-user.target

[Service]

EnvironmentFile=/etc/default/doorphone

ExecStart=/usr/bin/python -u /usr/local/bin/doorphone.py

Restart=on-abort

[Install]

WantedBy=multi-user.target

La clé After= permet de spécifier à quel moment le service doit être démarré. multi-user.

target est un état cible du système (semblable à un runlevel sous SysV init). Il sert à activer un certain nombre de services système nécessaires dans un environnement non graphique. En gros, il correspond au runlevel 3 de l’ancien système : tous les services système sont démarrés, à l’exception du login graphique. Cette clé indique donc que le service de gestion du portier doit être démarré après tous les services dépendants de multi-user.target.

La clé EnvironmentFile= indique un fichier contenant des définitions de variables d’environnement devant être chargées avant le démarrage du programme. En l’occurrence, le fichier

/etc/default/doorphone contient les informations de connexion au registrar, ainsi que d’autres valeurs paramétrables (voir le contenu du fichier plus loin).

La clé ExecStart= est suivie de la commande à exécuter pour démarrer le service. L’argument

« -u » passé à l’interpréteur python force les entrées/sorties standards à être non buffurisées. Grâce à ce paramètre, tout ce qui dans le programme est affiché sur la sortie standard à l’aide de l’instruction print et est logué dans le journal de systemd, accessible par la commande journalctl.

Restart=on-abort signifie que le service sera automatiquement redémarré s’il se termine suite à la réception d’un signal non pris en charge par le programme.

La clé WantedBy= permet de spécifier une dépendance. Lorsque le service sera activé au boot du système, il sera déclenché par la cible multi-user.target. WantedBy= n’impliquant pas d’ordre de démarrage, pour que notre service soit démarré après les autres services déclenchés par la même cible, la clé After= est nécessaire.

Le fichier doorphone.service sera placé dans le répertoire : /lib/systemd/system/.

La commande suivante doit ensuite être exécutée pour que le service soit chargé automatiquement à chaque démarrage du système :

% sudo systemctl enable doorphone.service

Les commandes suivantes sont utiles dans les phases de test. Pour afficher l’état du service :

% sudo systemctl status doorphone.service

Démarrer manuel ement le service :

% sudo systemctl start doorphone.service

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration Arrêter manuellement le service :

% sudo systemctl stop doorphone.service

Désactiver le service (il ne sera plus démarré automatiquement) :

% sudo systemctl disable doorphone.service

Le contenu du fichier de configuration du gestionnaire /etc/default/doorphone, lu au lancement du service :

# Ce fichier contient les paramètres du gestionnaire de portier doorphone

# URI du compte local

# Freephonie :

# SIP_ID="sip:0123456789@freephonie.net"

# Linphone :

# SIP_ID="sip:nomutil@sip.linphone.org"

SIP_ID="sip:0123456789@provider.net"

# URI du registrar. Exemple : SIP_REGISTRAR="sip:freephonie.net"

# Freephonie :

# SIP_REGISTRAR="sip:freephonie.net"

# Linphone :

# SIP_REGISTRAR="sip:sip.linphone.org"

SIP_REGISTRAR="sip:provider.net"

# Identification du compte SIP

SIP_USERNAME="0123456789"

SIP_PASSWORD="monmotdepasse"

SIP_REALM="*"

# Intervalle de rafraîchissement. Ce paramètre est nécessaire pour Freephonie.

SIP_REG_TIMEOUT=1800

# URI de l'appelé

# Exemple : numéro de téléphone fixe

# SIP_CALL_URI="sip:111111111@freephonie.net;user=phone"

# Exemple : identifiant SIP

# SIP_CALL_URI="sip:nomutil@sip.linphone.org;transport=udp"

# Durée maximale de l'appel, en secondes. Nécessaire si l'appel aboutit sur la

# messagerie.

# Valeur par défaut 120 secondes

CALL_TIMEOUT=120

4. TESTONS LE TOUT

Vous êtes arrivés jusque-là, et avez effectué toutes les étapes de montage et d’instal ation de l’interphone ? Il est temps maintenant de tester tout cela !

Reliez les broches 5V et GND à l’alimentation : l’Orange Pi Zero démarre. Tout d’abord les leds du port RJ45 s’al ument, puis au bout d’une dizaine de secondes, la led de statut de la Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°18

69

EN COUVERTURE

INTERPHONE

carte (d’abord fixe, puis en clignotant). Si la led de statut ne s’al ume pas, cela signifie que la carte n’a pas réussi à démarrer le système instal é sur la carte microSD.

À la fin du démarrage (une poignée de secondes), la led de l’interphone doit s’al umer, signa-lant que le service a été correctement démarré. Vous pouvez vous connecter via ssh, et vérifier à l’aide de la commande suivante que tout est OK :

% sudo systemctl status doorphone.service

Sur la console, vous devez voir vers le bas de l’écran une ligne semblable à cel e-ci : Feb 26 13:04:09 opzb python[676]: Listening on 127.0.0.1 port 50468

L’interphone est pour le moment en attente.

Enfoncez et relâchez le bouton : cette action doit déclencher un appel vers le destinataire paramétré dans le fichier de configuration. Décrochez votre téléphone et vérifiez que la communication est bien établie.

Une fois en communication, appuyez sur la touche # du téléphone. Le relais doit s’enclencher pendant une seconde. Dans le cas contraire, vérifiez avec la commande précédente que le code DTMF a bien été détecté (cela peut ne pas être le cas si vous utilisez le trunk de Free et votre téléphone fixe).

En cas de problème, utilisez la commande précédente, ou vérifiez les messages dans le journal de systemd à l’aide de :

% sudo journalctl -u doorphone.service

5. SI VOUS VOULEZ UTILISER UN RASPBERRY PI

Si malgré nos arguments, vous avez choisi d’utiliser une plateforme Raspberry Pi à la place d’Orange Pi (ou si vous ne disposez pas de ce dernier et souhaitez commencer sans attendre), notre projet peut parfaitement s’adapter à la framboise. Vous devrez néanmoins faire attention aux spécificités suivantes.

Les Raspberry Pi ne disposent pas d’entrée audio. Vous devrez pour cela utiliser un périphé-

rique audio USB compatible. A priori le circuit d’alimentation du micro électret reste utilisable avec cette interface. En l’absence de la broche MIC-BIAS, vous pourrez utiliser une broche +3.3V ou

+5V. Notez qu’il existe également une carte audio disposant d’une entrée : la Cirrus Logic Audio Card, mais el e monopolise le GPIO et n’est donc pas utilisable pour notre projet. De plus le coût de cette carte d’excel ente facture (en gros le prix d’un Raspberry Pi 3), ne la destine clairement pas à cet usage.

Toujours au chapitre électronique, quelques différences sont à prendre en compte. Vous devrez utiliser le jack pour diriger la sortie audio du Raspberry Pi vers l’amplificateur PAM8403.

La technique d’alimentation via les broches du GPIO décrite plus haut reste a priori valable. Par ail eurs, pour tester l’état du bouton, une résistance de rappel (pul -down) ou de tirage (pul -up) devra être ajoutée au montage. On est ici en terrain connu et balisé, ce point ayant déjà été traité dans votre magazine.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Portier audio connecté : instal ation et configuration

Fig. 3 :

L’interphone à

l’essai.Tous les

composants d’un

téléphone VoIP

sont réunis ici, plus

le relais qui vient

d’être déclenché

(led rouge allumée,

et message de

détection de la

touche « # » dans

les messages

tracés).

Sous Raspbian, PJSIP peut s’instal er sous forme de paquets. Un apt-cache search pjproject renvoie les paquets existants (en version 2.1.0). Cependant l’API Python –

dont nous avons besoin – n’est pas disponible sous cette forme dans la distribution stable actuelle. Elle l’est cependant dans testing (en version 2.6.0) Vous devrez donc soit passer en testing, soit modifier le fichier /etc/apt/preferences pour pouvoir instal er des paquets de testing tout en restant en stable. À ce sujet, entrez sur votre moteur de recherche les termes « debian testing pinning », ou lisez tout simplement l’article dédié à la gestion des versions de paquets dans le présent numéro.

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

HACKABLE MAGAZINE n°18

71

EN COUVERTURE

INTERPHONE

Notez que ces paquets sont également accessibles

• Notifications (par exemple :

sous Armbian (donc sur Orange Pi Zero). Mais en voulant

envoi d’un SMS ou d’un e-mail

les utiliser, nous nous sommes heurtés à des problèmes

lorsque le bouton d’appel a

de gestion du périphérique audio, ce qui nous a conduits à

été utilisé).

revenir à la version 2.5.5, et à utiliser la compilation depuis

• Détection de clés RFID, ou de

les sources comme expliqué plus haut dans l’article. En

séquences de codes DTMF

cas de difficulté sur Raspberry Pi, cette méthode serait

générées par un smartphone.

également utilisable.

• Ajout de la vidéo (le protocole

Enfin, la librairie de gestion du GPIO orangepi_PC_

SIP ne se limitant pas à la

gpio_pyH3 est spécifique aux SoC Al Winner H3 et H2+.

voix).

Sur Raspberry Pi, vous devrez utiliser la librairie RPi.

GPIO, déjà abordée dans les colonnes de Hackable. Les

• Message vocal d’absence

API étant différentes, le code du programme Python devra

(déjà possible avec le trunk de

être adapté.

Free).

Notez que, si rien a priori ne s’oppose à ce portage,

• Réutilisation du combiné

nous n’avons pas testé cette solution. N’hésitez pas à nous

intérieur fourni avec le por-

faire part de vos réalisations. Toutes vos remarques, suc-

tier d’origine. Il s’agirait de

cès et/ou difficultés dans cette entreprise seront recueil is

transformer ce combiné –

avec bienveillance.

désormais inutilisable – en

téléphone VoIP, en utilisant

les mêmes composants que

CONCLUSION

pour le portier.

Cette réalisation aura été l’occasion de découvrir une

• Redirections sur non-réponse.

nouvel e carte de développement, d’apprendre à utiliser un

• Autres utilisations : contrôle

micro électret, de nous familiariser avec le protocole SIP et

de l’ouverture du portail et

la convergence informatique/téléphonie, de comprendre le

alerte en cas d’ouverture

fonctionnement de systemd, tout en fabriquant une solu-

anormale, station météo (voir

tion ouverte, maintenable et évolutive.

plus haut), borne wifi pour le

À l’usage, j’ai vérifié que cette solution fonctionne

jardin, voire (soyons fous) :

de façon fiable depuis son instal ation, et supporte très

diffusion de musique pendant

bien les contraintes liées à l’embarqué (notamment des

la période de Noël ! ELB

coupures de courant relativement fréquentes en cette

période de rigueur hivernale et d’utilisation fréquente de

gros consommateurs tels chauffages d’appoint, four, clim

RÉFÉRENCES

réversible et autre chauffe-eau. . Un motif justifié pour un

[1] http://pjsip.org/

projet personnel de régulation intel igente me direz-vous !).

Non seulement la performance de notre portier connecté

[2] https://linux-sunxi.org/

est sans comparaison avec l’appareil original, mais encore

Orange_Pi_Zero

nous avons vite découvert certains avantages, parmi les-

[3] http://www.orangepi.org/

quels la possibilité de dater les utilisations de l’interphone

dans le journal des appels du téléphone ou de recevoir des [4] https://www.armbian.com/

messages.

orange-pi-zero/

Plusieurs améliorations et évolutions sont déjà envisa-

[5] https://github.com/nvl1109/

gées (certaines pourraient mettre à profit des techniques

orangepi_PC_gpio_pyH3

déjà traitées dans Hackable) :

[6] https://www.etcher.io/

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

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

EMBARQUÉ & INFORMATIQUE

AUDIO BLUETOOTH SUR PI

AJOUTEZ UNE SORTIE

AUDIO BLUETOOTH À

VOTRE RASPBERRY PI

Denis Bodor

Comme pour d’autres configurations, le fait de disposer d’une

interface graphique facilite grandement la prise en charge de certaines fonctionnalités et/ou le support de certains matériels. Il arrive, cependant, que pour bon nombre de projets, cette interface graphique soit totalement inutile pour la simple et bonne raison que la Pi n’aura pas d’écran connecté en HDMI. Ceci complique un peu les choses

lorsqu’il s’agit utiliser uniquement la ligne de commandes, mais cela reste parfaitement faisable. Exemple avec un haut-parleur Bluetooth...

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

AUDIO BLUETOOTH SUR PI

Ajoutez une sortie audio Bluetooth à votre Raspberry Pi

Je dois l’avouer, la plu-

part de mes projets

à base de Raspberry

Pi ne nécessitent pas

d’écran, ni même un

clavier USB connecté. L’utilisation

de la carte, quel que soit son mo-

dèle, est, à mon sens, beaucoup

plus rapide et efficace en utilisant

la ligne de commandes, générale-

ment au travers d’une connexion

distante comme SSH et tantôt, en

cas de problème, via une console

série. De ce fait, naturel ement, je

privilégie généralement Raspbian

Lite à toutes autres versions du

système afin de limiter l’encom-

brement de la carte micro-SD et la

charge du processeur.

Ce type d’utilisation induit

généralement certains petits pro-

blèmes et, dans le cas qui nous

Voici le produit

occupe pour cet article, la néces-

utilisé pour cet

occasion, de permettre également l’utilisation

article, un SRS-X11

sité de comprendre comment le

de la PWM matériel e nécessaire, par exemple,

de Sony (59€).

système Raspbian est architecturé

pour la connexion de leds « intel igentes » type

Initialement destiné

et les choix qui ont été faits pour

WS2812b (alias NeoPixels) et APA106.

aux smartphones,

les différents éléments qui le

ce périphérique

Bluetooth fait office à

composent. Le sujet ici est de se

la fois d’enceinte et

passer de la sortie audio standard

1. BLUETOOTH ET

de kit mains-libres.

de la carte Raspberry Pi pour uti-

Parfaitement adapté

liser, en remplacement, une mini-

AUDIO

à un usage avec

une Raspberry Pi,

enceinte Bluetooth comme il en

Nous l’avons vu dans les numéros précé-

il permet d’éviter

existe des dizaines de modèles. .

dents, connecter un appareil Bluetooth à une

d’utiliser des haut-

afin que des zozos puissent se

parleurs de PC, plus

Raspberry Pi, qu’il s’agisse d’une 3 ou d’un

encombrants et non

balader dans la rue en nous cas-

autre modèle équipé d’un adaptateur Bluetooth

autonomes.

sant les oreil es (oui, j’ai un côté

USB, n’est pas quelque chose de très difficile. Il

vieux chnoque qui transparaît de

suffit d’utiliser les bonnes commandes, scanner

temps en temps).

le voisinage, repérer le périphérique, l’associer

Le principal intérêt d’utiliser une

et lui faire confiance pour permettre une recon-

tel e sortie audio Bluetooth, qui est

nexion automatique.

également cel e utilisée pour un

Lorsqu’il s’agit d’audio en revanche, les

casque sans fil, est non seulement

choses ne sont pas aussi simples et la notion

de fournir une sortie audio de

de « son » en Bluetooth couvre en réalité pas

bonne qualité et avec un bon vo-

mal de choses. Il faut donc savoir précisément

lume sonore sous un format assez

de quoi on parle. Les périphériques Bluetooth

compact, mais, par la même

utilisent des profils permettant aux fabricants

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

HACKABLE MAGAZINE n°18

75

EMBARQUÉ & INFORMATIQUE

AUDIO BLUETOOTH SUR PI

l’envoi de commandes de lec-

ture (lecture, avance rapide,

pause, morceau suivant,

La Raspberry

etc.) depuis un périphérique

PI 3 intègre

comme un casque ou une

directement

le support du

enceinte vers un appareil

Bluetooth (et du

comme un smartphone ou

Wifi), mais pour

une chaîne hifi compatible.

les modèles

précédents, il

Ces désignations se retrouvent

suffit d’ajouter

généralement sur les emballages

un adaptateur

des produits en vente et dans

USB Bluetooth

qui fournira

leurs spécifications techniques. .

exactement

quand on les trouve. À ce propos

les mêmes

d’ail eurs, je ne saurai que trop

fonctionnalités.

vous conseil er de bien vous ren-

seigner sur le Web avant l’achat

d’un haut-parleur ou d’un casque

Bluetooth.

J’avais fait l’acquisition il y a

de reposer sur des caractéristiques, des fonctionnalités

quelque temps d’un haut-parleur

et des protocoles standardisés, et donc de produire du

de ce type, de marque DCybel,

matériel qui fonctionnera avec d’autres équipements sans

modèle Mini Drum, et après une

nécessiter l’instal ation de logiciels spécifiques. C’est la rai-

fouil e méticuleuse du net, n’ai pas

son pour laquel e une enceinte, un casque ou un kit mains-

réussi à mettre la main sur une

libres d’une marque et d’un modèle donné fonctionnera

notice en PDF. Il semblerait que

tout aussi bien avec n’importe quel smartphone ou encore

ce produit ne soit qu’une déclinai-

n’importe quel e instal ation audio Bluetooth (comme cel es

son d’un modèle générique, exis-

présentes dans les voitures).

tant dans divers modèles (avec

ou sans emplacement micro-SD

Pour l’audio, il n’y a pas un profil, mais quatre :

par exemple), mais que personne

• HSP (HeadSet Profile ou profil casque) : fournit les

n’ait pris la peine de mettre à dis-

fonctionnalités de base pour établir la communication

position une documentation cor-

entre un smartphone ou un mobile et un casque ;

recte. Ni le réel fabricant qui reste

inconnu à ce jour (même après

• HFP (Hands Free Profile ou profil mains-libres) est une

démontage de l’objet), ni les dis-

amélioration du Profil HSP qui a été conçu pour per-

tributeurs/revendeurs. L’appareil

mettre le contrôle d’un téléphone portable depuis un kit

est donc associé à un smartphone

mains-libres dans une voiture par exemple ;

et j’ai fini par jeter l’éponge après

• A2DP (Advanced Audio Distribution Profile ou profil de

avoir tenté, par tous les moyens

distribution audio avancée) est destiné à la transmis-

possibles, de le rendre « décou-

sion de signaux audios stéréo d’une qualité supérieure

vrable » à nouveau.

au codage mono utilisé avec les profils HSP et HFP qui

Le produit en question étant

sont initialement destinés aux simples communications

également utilisable via un

vocales ;

connecteur jack comme une en-

• AVRCP (Audio/Video Remote Control Profile ou profil

ceinte amplifiée, j’ai donc décidé

de commande à distance audio/vidéo) est destiné à

de le mettre (brutalement) de côté

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Ajoutez une sortie audio Bluetooth à votre Raspberry Pi AUDIO BLUETOOTH SUR PI

(tout en pestant) pour un autre

son). Le changement intervint avec l’arrivée du noyau Linux

usage et de jeter (joyeusement

2.6, mais ceci ne régla qu’une partie des limitations.

cette fois) mon dévolu sur un autre

L’une des problématiques qu’ALSA ne règle pas concerne

modèle, fabriqué par Sony : un

la redirection des flux audios. Si l’on cherche, par exemple,

SRX-X11, cubique, avec davan-

à enregistrer le son émis via les haut-parleurs, comme

tage d’autonomie, de meilleure

ceux d’une vidéo lue ou d’une conversation en ligne, il faut

qualité générale et surtout avec

connecter la sortie audio d’une application à la fois à la sortie

une documentation qui restera

physique, mais également à l’entrée d’une autre application,

accessible pour un bout de temps.

le tout sans que cela ne demande de modification dans les

Mais revenons à nos moutons.

applications en question. Ce besoin d’une gestion plus avan-

Ces profils Bluetooth sont parfaite-

cée des flux audios a poussé à la création de choses comme

ment gérés par la pile BlueZ inté-

ESD (Enlightened Sound Daemon) utilisé par les environne-

grée dans les systèmes reposant

ments graphiques Enlightenment et GNOME à une certaine

sur Linux, comme Raspbian et

époque. ESD a ensuite cédé sa place à PulseAudio : un

toutes les distributions GNU/Linux

serveur de son se plaçant entre les applications et la prise en

(mais aussi Android pour les ver-

charge du matériel par le noyau.

sions qui n’utilisent pas Bluedroid).

PulseAudio est ce qu’on appel e un middleware, il prend

Mais il ne s’agit là que d’une partie

en charge toute la gestion sonore, l’interconnexion des

de la solution.

sources et des sorties et permet même une utilisation en

Le système audio de base

réseau. Ceci est si bien intégré que même les applications

des distributions GNU/Linux est

reposant uniquement sur ALSA sont prises en charge, via un

ALSA pour Advanced Linux Sound périphérique virtuel qui renvoie les données à PulseAudio, Architecture. Celui-ci fournit les

qui lui-même utilise ALSA pour produire le son. Cependant,

fonctionnalités audios et MIDI

PulseAudio n’est PAS un support matériel et n’est PAS inté-

pour l’ensemble du système,

gré au noyau, cela reste un programme au même titre qu’un

des pilotes jusqu’aux outils de

éditeur de texte ou qu’un outil en ligne de commandes.

configuration et de contrôle. Pour

utiliser une sortie audio Bluetooth

Avec BlueZ 5.0 et supérieur, le support Bluetooth ne

(A2DP), il faut cependant qu’un

dialogue donc plus directement avec ALSA pour fournir un

lien soit établi entre la gestion

nouveau périphérique audio, mais avec PulseAudio qui, à

Bluetooth et le système audio, et

son tour, se chargera de fournir aux applications des fonc-

là, se pose un problème : BlueZ

tionnalités pour l’utiliser.

depuis sa version 5.0 ne supporte

Lorsque vous démarrez une Raspberry Pi en mode gra-

plus ALSA, mais dialogue avec un

phique, PulseAudio est automatiquement lancé pour fournir

serveur de son.

à toutes les applications, et à l’environnement graphique

Le support ALSA était déjà

lui-même, des capacités sonores. C’est également le cas, la

une avancée notable réglant bon

plupart du temps, avec des distributions GNU/Linux comme

nombre de problèmes concernant

Ubuntu ou Debian.

la gestion audio dans Linux. Avant

Vous l’avez sans doute compris, Raspbian Lite n’intègre

son arrivée, ceci était pris en

pas par défaut PulseAudio et pour prendre en charge une

charge par une précédente solu-

enceinte Bluetooth dans cette situation, vous devrez donc

tion appelée OSS (Open Sound

non seulement configurer le support Bluetooth de votre sys-

System), mais qui possédait alors

tème, mais aussi instal er/configurer PulseAudio. Ceci fait,

certaines limitations pénibles

votre enceinte Bluetooth deviendra littéralement une « carte

(comme le fait qu’une seule appli-

son » et vous pourrez vous passer de la sortie standard de

cation à la fois pouvait émettre du

la Raspberry Pi.

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

HACKABLE MAGAZINE n°18

77

EMBARQUÉ & INFORMATIQUE

AUDIO BLUETOOTH SUR PI

2. INSTALLATION ET CONFIGURATION

Par défaut dans Raspbian, le support et les outils de gestion Bluetooth sont instal és par défaut. PulseAudio en revanche manque à l’appel et la première chose à faire sera donc d’instal er les paquets adéquats avec :

$ sudo apt-get install pulseaudio pulseaudio-utils pulseaudio-module-bluetooth Notez que PulseAudio, bien qu’étant un serveur fonctionnant en tâche de fond, n’est pas lancé automatiquement comme un service. Ceci est un point très important et les développeurs de PulseAudio sont très explicites à ce sujet. Il est regrettable de voir trop souvent des tutoriels en ligne passer totalement outre cet état de fait. Depuis la version 0.9.3 (nous en sommes à la 5.0), il est possible de demander à PulseAudio de fonctionner comme un service/démon, dans un mode appelé system mode. PulseAudio est conçu pour être lancé une fois « par utilisateur » et sous l’identité de cet utilisateur, le system mode implique des risques très importants en termes de sécurité, charge davantage le processeur en raison de la désactivation du partage de mémoire, limite les fonctionnalités et n’est absolument Lisez attentivement les

pas conçu pour un tel usage. De plus, il est parfaitement possible de faire sans ce spécifications techniques

du produit Bluetooth que

system mode...

vous comptez acheter.

Une fois PulseAudio instal é, la première étape consiste à associer votre magni-Le profil Bluetooth utilisé

pour nos manipulations

fique périphérique Bluetooth. Pour cela, il vous suffit de lancer bluetoothctl -a est A2DP. Le profil HSP

après avoir mis le matériel en mode « découvrable » (une pression longue sur le n’est pas supporté par

bouton d’al umage avec le SRS-X11) puis, dans l’interface qui vous est proposée : PulseAudio en version

5.0 et la version 6.0 n’est

• vous assurer que le contrôleur Bluetooth est en route avec power on, pas encore intégrée

dans Raspbian stable. Il

• rechercher de nouveaux périphériques avec scan on,

est peu probable qu’un

• appairer le matériel avec paire suivi de l’adresse Bluetooth du périphérique périphérique comme une

enceinte Bluetooth ne

détecté (FC:A8:9A:1D:8D:39 par exemple),

supporte pas A2DP, mais

• entrer éventuel ement un code

restez-y attentif...

PIN si le produit le demande,

• faire confiance au périphé-

rique fraîchement appairé avec

trust suivi, encore une fois, de

l’adresse Bluetooth,

• et enfin quitter bluetoothctl

avec quit.

Vous remarquerez sans doute que

votre périphérique va rester connecté

très brièvement puis se déconnecter.

Ceci est parfaitement normal étant

donné que nous n’avons absolument

rien fait pour maintenir la connexion.

PulseAudio n’étant pas lancé, la

connexion Bluetooth n’a aucune rai-

son de rester établie.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Ajoutez une sortie audio Bluetooth à votre Raspberry Pi AUDIO BLUETOOTH SUR PI

À présent, éteignez votre enceinte (ou votre

utiliser le système audio. Pour faire cela,

casque) et lancez le serveur PulseAudio avec

vous devez changer un paramètre dans

pulseaudio --start, puis al umez à nouveau

le fichier /etc/pulse/client.conf. Là,

votre périphérique (si des messages inquié-

modifiez simplement la ligne :

tants apparaissent c’est normal, ceci n’arrive

qu’au premier lancement lors de la création

; autospawn = yes

des répertoires). Normalement, celui-ci devra

immédiatement se connecter et être utilisable.

en

Vous pouvez vérifier sa prise en charge au ni-

autospawn = yes

veau Bluetooth avec bluetoothctl en utilisant

la commande info suivie de l’adresse du péri-

Le point-virgule (; ), comme le dièse

phérique, parmi les lignes affichées, vous devez

(#), permet de placer des commentaires

voir Connected: yes.

dans le fichier de configuration, le fait de

Vous pouvez également vérifier du côté

le retirer en début de ligne permet d’acti-

de PulseAudio en utilisant la commande

ver la ligne en question.

pacmd list-cards. À ce stade, vous devez

Il y aura un petit délai lors de la pre-

voir deux cartes disponibles : la sortie stan-

mière utilisation d’une application audio,

dard de la Raspberry Pi et le périphérique

le temps que PulseAudio démarre, mais

Bluetooth (mention %%driver: <module-

cela n’arrivera qu’une fois par démarrage

bluez5-device.c> dans la sortie ainsi que

le nom du matériel sous properties:).

Vous pouvez immédiatement tester la sortie

en utilisant l’outil paplay et en faisant suivre

cette commande d’un nom de fichier audio

(WAV, FLAC, etc. (mais pas MP3, pour cela

instal ez/utilisez mpg123)). Si tout est bien

configuré et instal é, le son sera automatique-

ment transmis au périphérique.

3. FINALISATION ET

PEAUFINAGE

Nous n’en avons pas encore fini. Pour l’ins-

tant, nous devons encore lancer le serveur

PulseAudio manuel ement. En effet, avec un

environnement graphique ce lancement se fait

en même temps que le démarrage de l’inter-

face et donc immédiatement après l’ouverture

de session pour un utilisateur (ou l’ouverture

automatique en tant que pi).

Ce problème peut être réglé autrement

qu’en utilisant le fameux system mode. Il

n’est pas nécessaire de lancer PulseAudio au

démarrage et pour tout le système, il suffit de le

faire au moment où une application demande à

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

HACKABLE MAGAZINE n°18

79

EMBARQUÉ & INFORMATIQUE

AUDIO BLUETOOTH SUR PI

CONNECT ÉVOLUE !

LISEZ CE NUMÉRO ET PLUS

Voici un DCybel Mini

Drum (20€) acheté il

y a plus d’un an. La

notice d’utilisation est

introuvable que ce

DE 15 AUTRES EN LIGNE !

soit chez moi (tout à

fait normal) ou sur le

Web (parfaitement

inacceptable).

La bestiole est

appairée avec un

smartphone et je

n’ai pas réussi, sans

manuel, à le rendre

« découvrable » à

nouveau. D’un autre

côté, j’ai toujours

préféré les cubes aux

cylindres et le noir au

rouge...

de la Pi. Il est également possible que cela ne fonc-

donc sa batterie comme si vous

tionne pas, mais c’est purement fonctionnel : tenter

écoutiez de la musique. Ceci est

de diffuser du son provoquera bien le lancement de

peut-être fonction du matériel

PulseAudio, mais si le périphérique est déjà al umé,

utilisé, mais dans le cas de mon

la connexion ne se fera pas forcément, car celui-ci

SRS-X11 c’est bel et bien le cas.

peut être en pause et donc non connecté. En étei-

Ce n’est pas un gros problème, je

gnant le périphérique et en le ral umant, tout rentrera

ne compte al umer l’enceinte que

alors dans l’ordre puisque, là, PulseAudio sera lancé

lorsque j’en aurai l’usage, et pen-

et le matériel ne repassera pas en veil e.

serai à l’éteindre ensuite (ou pas).

ACTUELLEMENT SUR CONNECT :

Ce point nous amène directement à un autre pro-

Enfin, il ne nous reste plus

blème. Avec PulseAudio lancé, il est possible que

qu’à désactiver quelque chose

le matériel coupe la connexion, mais, plus certaine-

qui est clairement devenu inutile :

• CE NUMÉRO

• 2 numéro

ment, que PulseAudio le fasse (et le matériel s’étein-

la sortie audio standard de la

dra alors automatiquement peu de temps après). En

Pi. Pour cela, éditez le fichier

• et + de 15 autres numéros

Hors-Série de

+

effet, par défaut, un module PulseAudio est auto-

/boot/config et ajoutez une

matiquement lancé : module-suspend-on-idle.

ligne dtparam=audio=off. Au

de Hackable

Hackable

Celui-ci désactive une sortie ou une entrée audio si

prochain démarrage de la carte,

cel e-ci n’est pas utilisée un certain temps.

la sortie sera désactivée et, éven-

tuel ement, il deviendra possible

Pour désactiver ce module définitivement, éditez

d’utiliser les leds type WS2812b

TOUT CELA À PARTIR DE 149 € TTC*/AN !

le fichier /etc/pulse/default.pa et cherchez une

avec la Pi.

ligne load-module module-suspend-on-idle.

* Tarif France Métropolitaine

Placez ensuite un

Et voila ! Vous avez à présent

# ou un ; en début de ligne, enre-

gistrez le fichier, puis redémarrez PulseAudio avec :

une Raspberry Pi avec une

sortie audio Bluetooth (et une

OFFRE DÉCOUVERTE CONNECT

$ pulseaudio --kill

entrée si le matériel possède un

$ pulseaudio --start

micro) parfaitement utilisable,

peut encombrante, mobile et,

1 MOIS GRATUIT, RÉSERVÉE AUX PROFESSIONNELS

Attention cependant, en faisant cela votre

selon le périphérique, de bonne

périphérique ne passera jamais en veil e et videra

qualité. DB

Appelez le 03 67 10 00 28 et donnez le code « HK18 » pour

découvrir Connect gratuitement pendant 1 mois !

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Pour tous renseignements complémentaires, contactez-nous via notre site internet : www.ed-diamond.com, par téléphone : 03 67 10 00 28 ou envoyez-nous un mail à connect@ed-diamond.com !

pub_magazines_avril2017.indd 11

11/04/2017 14:58

AUDIO BLUETOOTH SUR PI

CONNECT ÉVOLUE !

LISEZ CE NUMÉRO ET PLUS

DE 15 AUTRES EN LIGNE !

ACTUELLEMENT SUR CONNECT :

• CE NUMÉRO

• 2 numéro

• et + de 15 autres numéros

Hors-Série de

+

de Hackable

Hackable

TOUT CELA À PARTIR DE 149 € TTC*/AN !

* Tarif France Métropolitaine

OFFRE DÉCOUVERTE CONNECT

1 MOIS GRATUIT, RÉSERVÉE AUX PROFESSIONNELS

Appelez le 03 67 10 00 28 et donnez le code « HK18 » pour

découvrir Connect gratuitement pendant 1 mois !

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) Pour tous renseignements complémentaires, contactez-nous via notre site internet : www.ed-diamond.com, par téléphone : 03 67 10 00 28 ou envoyez-nous un mail à connect@ed-diamond.com !

pub_magazines_avril2017.indd 11

11/04/2017 14:58

DÉMONTAGE, HACKS & RÉCUP

DOS / RETRO PC

DOS N’EST PAS MORT !

IL VA MÊME TRÈS BIEN !

Denis Bodor

Souvenez-vous, ce n’était pas il y a si longtemps : CONFIG.SYS,

MSCDEX, batailler pour avoir 600ko de mémoire conventionnelle,

AUTOEXEC.BAT, les bons jeux d’Apogee Software, de LucasArts et de

Blizzard, les sharewares en tout genre qu’on achetait sur disquettes, le téléchargement sur des BBS... Ah souvenirs ! Mais tout ceci est-il vraiment un passé définitivement révolu ? Non, pas vraiment. Il est toujours possible d’émuler cet environnement mais, mieux encore,

on peut tout simplement recycler un vieux PC et faire renaître le bon vieux temps...

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

DOS n'est pas mort ! Il va même très bien !

J

La carte mère

utilisée pour ce

e sais ce que vous vous

vous vient à l’esprit est ce que j’estime être le chef

projet est une

dites : voilà une bien

d’œuvre de la carrière de Jeff Minter : le fantastique,

ebc569 de Nexcom

étrange approche dans

l’incontournable, l’indispensable Llamatron: 2112 !

qui intègre un

un magazine traitant

processeur VIA C3

Notre objectif sera donc ici de ressusciter de

à 800 Mhz, tous

surtout de Raspberry

vieux artefacts de PC pour en faire une machine

les périphériques

Pi et d’électronique numérique en

DOS parfaitement utilisable. La notion de « vieux »

nécessaires dont un

tout genre. Après tout, il existe

emplacement pour

est ici toute relative, car ceci peut al er du 486 au

des solutions permettant à une Pi

carte CompactFlash,

Celeron, en passant par les Pentium et autres pro-

elle est équipée

d’émuler un PC sous MS/DOS, la

cesseurs AMD, Cyrix, etc. Le choix, qui dépendra

d’une barrette de

plus connue est sans le moindre

en premier lieu de ce que vous aurez sous la main

256 Mo de SDRAM

doute DOSBox, s’instal ant via une

PC133.

ou en stock, est toujours à double tranchant. Plus

simple commande sudo apt-get un matériel sera ancien, plus il sera facile de le faire install dosbox.

fonctionner avec un système de la même époque,

Seulement voilà, si une tel e

mais moins vous risquez de trouver de matériel

solution fonctionne relativement

compatible (alimentation, clavier, cartes, mémoire,

bien sur PC, il n’en va pas de

etc.). Inversement, plus le matériel sera récent,

même sur une Pi : c’est lent. . c’est

plus vous aurez de chances de mettre la main sur

horriblement lent. Et s’il s’agit de

des périphériques utilisables, mais moins il sera

profiter pleinement des bons vieux

probable de trouver des pilotes pour autre chose

jeux de l’époque, cette lenteur

que Windows 95 ou supérieur. Or là, le but est clai-

n’est pas acceptable, en parti-

rement d’obtenir une machine DOS et non Windows

culier lorsque le premier jeu qui

(ce n’est pas la même magie).

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

HACKABLE MAGAZINE n°18

83

DÉMONTAGE, HACKS & RÉCUP

DOS / RETRO PC

C’est un peu surdimensionné,

mais el e présente l’avantage de

disposer de tout le nécessaire

directement intégré :

• processeur VIA C3 Nehemiah

à 800 Mhz (équivalent à un

Pentium III) ;

• carte graphique VGA

Savage4 intégrée au North

Bridge VIA 8606 ;

• carte audio compatible AC97

*et* Sound Blaster (cf. plus

loin dans l’article) intégrée au

chipset VT82C686B ;

La carte mère n’utilise

ni un connecteur

On ne s’en rend compte que lorsqu’on

• deux contrôleurs Ethernet

pour alimentation

AT ni ATX, mais

cherche un matériel précis, mais les périphé-

10/100 RTL 8139C ;

accepte directement

riques « vintages » commencent à sérieuse-

• quatre ports série 16C550 (on

des tensions de +5V

ment prendre de la valeur. Une petite recherche

sait jamais, ça peut servir) ;

(6A) et +12V (1A). La

sur eBay pour une carte son ISA 16 bits, par

solution a ici été de

souder directement

exemple, du type Sound Blaster, testée et en

• un unique slot PCI ;

un connecteur

état de marche, vous retourne des annonces

• des connecteurs/contrôleurs

d’alimentation

affichant des prix entre 50€ et 150€. Si votre

disquettes et E-IDE ;

Molex permettant

quête porte sur du matériel qui, à l’époque déjà,

la connexion d’une

• deux prises USB 1.1 et un

alimentation similaire

n’était pas à la portée de tous, comme une Gra-

connecteur PS/2 ;

à un disque dur ou un

vis Ultrasound (une « GUS » pour les intimes), la

lecteur CD-ROM.

tranche de prix sera davantage de 200€ à 450€ !

• un emplacement pour

Les cartes graphiques VGA ISA 16, VLB et PCI

carte CompactFlash fort

semblent moins impactées. . pour l’instant (mais

sympathique ;

une expédition punitive dans mon grenier est

• et tout un tas de connec-

d’ores et déjà planifiée pour retrouver, nettoyer,

teurs industriels (LVDS, TTL

classer et ranger bien proprement toutes ces

LCD, PC 104, interface PCI

petites choses qui gagnent clairement en valeur

propriétaire, GPIO, etc.).

chaque mois qui passe).

La carte supporte jusqu’à

512 Mo de SDRAM PC-133

1. PHASE 1 : LE MATÉRIEL

sous la forme d’un unique

Mon idée ici est certes de reconstruire un PC

emplacement DIMM 168, et

pour satisfaire mon envie de Llamatron mais, pour

disposait déjà d’une barrette

autant, il n’est pas question de me retrouver avec

de 256 Mo lors de son excava-

une tour massive de plus dans mon bureau (à force tion, largement suffisante pour de tout garder, on finit forcément par manquer de

l’usage visé.

place). Plusieurs options se présentaient à moi,

La documentation très expli-

mais j’ai finalement opté pour la plus compacte

cite et complète (c’est l’avantage

et intégrée : une carte mère EBC569 de Nexcom

d’utiliser une carte mère indus-

normalement destinée à un usage industriel.

triel e) précise que le ventilateur

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

DOS n'est pas mort ! Il va même très bien !

placé sur le processeur n’est pas

un connecteur Molex femel e récupéré sur un ventilateur

nécessaire à 400 Mhz et que la

pour processeur (le modèle s’intercalant entre l’alimentation

circulation d’air du châssis est

et un disque dur par exemple). Ceci m’a permis d’utiliser

alors suffisante. Cette configura-

une alimentation ATX et de brancher la carte mère comme

tion cependant se fait à l’aide de

un disque ou un lecteur CD.

cavaliers d’une tail e non standard

Ainsi, la carte mère, une carte CompactFlash de 32 Mo,

(au pas de 2mm et non de 2,54

une alimentation ATX, un lecteur CD-ROM IDE et un clavier

mm) et sera faite plus tard, pour

PS/2 et nous voilà fin prêts pour la partie logiciel e.

l’heure 800 Mhz et le ventilateur

feront l’affaire.

NOTE : La gestion de l’USB sur cette carte mère semble

soit avoir un problème, soit être très limitée à la base. L’uti-

De plus, côté alimentation,

lisation d’un clavier USB ail eurs que dans la configuration

le connecteur proposé n’a pas

du BIOS (accessible par la touche Suppr au démarrage) ne

besoin de toutes les tensions

fonctionnant pas et l’impossibilité de démarrer sur une clé

courantes avec les alimentations

USB, expliquent le choix du lecteur CD et du clavier PS/2.

AT ou ATX, seuls +5V (6A), +12V

(A1) et la masse sont nécessaires.

Autre avantage intéressant à ce

2. PHASE 2 : LE SYSTÈME

niveau, il est possible d’utiliser

une alimentation AT et ATX, via la

Pour notre gentil e bestiole, nous n’al ons pas courir après

prise en charge, directement par

de vieil es disquettes de MS-DOS, mais opter pour une solu-

la carte, de la broche PWR_ON/

tion bien plus récente et surtout, toujours maintenue et déve-

PS_ON (le fil vert). Les alimenta-

loppée : FreeDOS.

tions ATX, en effet, ne disposent

FreeDOS est un système d’exploitation complet, en logi-

pas d’interrupteur et ne se mettent

ciel libre et 100% compatible avec MS-DOS. Mieux encore il

pas en route automatiquement

intègre, comme nous le verrons plus loin, des fonctionnalités

lors de la connexion du courant (la

et des outils que tout utilisateur DOS de l’époque aurait pu

broche PWR_ON doit être reliée

rêver d’avoir. Développé depuis 1994 par Jim Hall et les nom-

et maintenue à la masse).

breux contributeurs du projet, FreeDOS peut être téléchargé

gratuitement et être instal é aussi bien dans un émulateur ou

La mise en route préalable

une machine virtuel e que sur du matériel bien réel.

de la carte mère se fera à

l’aide d’une alimentation ATX

magnifiquement équipée d’un

trombone entre PWR_ON et

la masse. Des tests préalables

avec une alimentation de labo-

Les alimentations

ratoire indiquent qu’en effet, à

ATX ne fonctionnent

800 Mhz, et avec un lecteur CD

pas comme un simple

bloc d’alimentation

également alimenté, des pics de

standard ou encore

courant importants surviennent

une alimentation

et font alors chuter la tension de

AT. L’astuce pour

l’alimentation qui n’arrive pas à

les mettre en route

consiste à mettre le

suivre ce régime. Le connecteur

signal PWR_ON (vert)

sur la carte mère, composé de

à la masse. Un simple

6 broches (+5, +5, GND, GND,

trombone fera l’affaire

le temps de trouver

GND, +12) n’étant pas très pra-

une alimentation d’une

tique, j’ai alors simplement soudé

taille plus acceptable.

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

HACKABLE MAGAZINE n°18

85

DÉMONTAGE, HACKS & RÉCUP

DOS / RETRO PC

La dernière version en date est la toute récente 1.2

Notez qu’en cas de partitionne-

(décembre 2016) qui peut être téléchargée directement sur

ment/formatage d’un disque dur, il

http://www.freedos.org/download/ pour trois types d’ins-

vous sera nécessaire de procéder

tal ation :

à l’instal ation en deux fois : dé-

• CD-ROM : C’est la méthode d’instal ation recomman-

marrage, formatage, redémarrage

dée. Il suffit de télécharger l’image ISO, la graver sur un

et installation.

support vierge et de démarrer la machine (virtuel e ou

Remarquez également que

non) dessus. En cas de problème de démarrage, une

le choix d’une CompactFlash

seconde image ISO (legacy) est disponible.

comme support de stockage n’est

• Disquette + CD-ROM : Cette solution est à préconi-

pas anodin. Les disques IDE ou

ser si votre machine n’est pas capable de démarrer

E-IDE se font rares et ceux géné-

directement sur un CD (cas typique des lecteurs CD

ralement encore disponibles au

connectés à une carte son par exemple). Là, la solu-

fond d’un tiroir ont déjà quelques

tion consiste à télécharger l’image de la disquette,

heures de vol. Un disque dur est

l’enregistrer sur le support avec win32diskimager sous

un périphérique mécanique et

Windows ou

ceci suppose une usure non négli-

dd sous GNU/Linux, et de graver l’image

ISO du CD-ROM. On démarrera alors la machine sur

geable et une durée de vie limitée.

la disquette et l’instal ation se poursuivra depuis le

Une bonne solution, si votre PC

CD-ROM.

ne dispose pas d’un emplacement

pour une carte CompactFlash,

• Support USB : C’est la solution qui semble la plus

consiste à utiliser un adaptateur

simple en théorie, mais tout dépendra de votre machine

IDE/CF qui est souvent un simple

et de sa capacité à démarrer sur une clé USB. Dans

circuit imprimé avec supports/

mon cas, cette solution n’a malheureusement pas été

connecteurs.

utilisable. Le BIOS de la machine propose un démar-

rage sur USB-HDD, USB-FDD, USB-CDROM ou USB-

En effet, les cartes Compact

ZIP, mais aucune de ces options n’a permis le démar-

Flash disposent de plusieurs

rage. J’ai donc été obligé de temporairement utiliser un

modes de fonctionnement dont

lecteur CD-ROM.

un appelé True IDE qui, comme

son nom l’indique, leur permet

L’instal ation en el e-même est relativement simple et

d’être vus comme des disques.

surtout traduite en français après une simple sélection dans

Un adaptateur vous coûtera une

un menu proposé dès le début de la procédure. L’espace

poignée d’euros qu’il s’agisse

disque étant très limité dans mon cas, avec une Compact-

d’un modèle avec une nappe 40

Flash de seulement 32 Mo (impossible de remettre la main

broches ou prenant directement

sur les autres en ma possession), la phase finale de l’instal-

place sur le connecteur IDE mâle

lation s’est limitée au choix le plus basique avec le minimum

de la carte mère. Une alimentation

d’outils installés.

est également tantôt nécessaire

Le BIOS de la carte mère

reconnaît la carte CompactFlash

comme un disque dur. Ceci

n’a rien de bien exceptionnel

puisque ce type de carte dispose

d’un mode de fonctionnement

spécialement prévu pour ce type

d’usage.

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

DOS n'est pas mort ! Il va même très bien !

sous la forme d’un connecteur

pour lecteur de disquettes ou de

disque dur.

3. PHASE 3 :

LES PROBLÈMES

Après l’instal ation et un premier

démarrage, comme on peut s’y at-

tendre, on retrouve tout le charme

d’un système DOS. En faisant

un peu travail er sa mémoire, les

réflexes reviennent naturel ement.

Inutile ici de revenir sur l’utilisation

même de DOS, si vous envisagez

de reconstruire un tel système c’est

par nostalgie et donc que vous

avez une certaine expérience qu’il

vous suffira de réveil er.

J’ai déjà évoqué le problème

du support USB avec cette carte

Si votre matériel de

mère qui n’est pas davantage pris

Tout ceci est très intéressant, mais il nous

récupération ne dispose

pas d’un emplacement

en charge par FreeDOS qu’il ne

faut nous attaquer à l’objectif principal : jouer.

pour carte CompactFlash,

l’est lors de tests avec une distri-

Pour ce faire, il nous faut un support audio.

il est facile de trouver des

bution GNU/Linux bootable appe-

Idéalement, pour ce genre de projet, la solution

petits adaptateurs IDE/

lée SystemRescueCd. Le clavier

consiste à utiliser une carte d’époque, mais à

CF pour quelques euros

vous permettant de faire

dans ce dernier cas est effecti-

moins d’avoir une Sound Blaster ou une carte

de même. Les disques

vement opérationnel, mais uni-

compatible comme une Sound Galaxy dans un

IDE ou E-IDE se font

quement une fois pris en charge

tiroir c’est plus problématique qu’il n’y parait.

rares de nos jours et ceux

directement par le noyau Linux. Il

que l’on peut récupérer

Dans mon cas, avec le périphérique audio

au fond d’un placard

semble donc que l’émulation d’un

intégré à la carte mère, les choses se présen-

sont généralement déjà

clavier standard par le BIOS ne

taient relativement bien. En effet, la configura-

passablement usés et

fonctionne pas.

tion du BIOS proposait justement un fonction-

prompts à montrer des

signes de faiblesse.

Si votre lecteur CD-ROM est

nement compatible Sound Blaster et permettait

encore physiquement présent

de spécifier les paramètres habituels : adresse,

après l’instal ation, celui-ci devrait

interruption et DMA (le bon vieux « 220 5 1 »).

apparaître comme le lecteur D:

C’était, cependant, sans compter la notion toute

et pourra être consulté sans le

relative de « compatibilité » (c’est comme le

moindre problème. Ceci vous

plug’n’play, la perte de poids sans effort et la

permettra d’utiliser le contenu du

peinture monocouche, cela n’existe tout simple-

CD-ROM de manière à pouvoir

ment pas).

installer des outils et programmes

Après de nombreuses recherches à la fois

supplémentaires si, comme moi,

dans les archives des listes de discussion

vous n’avez pas opté pour l’instal-

de FreeDOS et un peu partout sur le Web, il

lation complète.

s’avérait que le fameux mode compatible ne

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

HACKABLE MAGAZINE n°18

87

DÉMONTAGE, HACKS & RÉCUP

DOS / RETRO PC

une plateforme plus récente inté-

grant un contrôleur audio. Mieux

vaut, en principe, travail er avec

un matériel de l’ère DOS ou, au

moins pré-Pentium III, plus cer-

tainement en mesure de proposer

des pilotes DOS pour les périphé-

riques audios.

Si vous avez de la

4. PHASE 4 :

chance, et que la

carte mère n’est

dépendait pas simplement de la configu-

OH MON DIEU,

pas trop récente,

ration du BIOS, mais reposait également

vous trouverez dans

sur des programmes devant être lancés au

DOS FAIT ÇA ?!

la configuration du

BIOS des options

démarrage, chargés d’activer la sortie audio

À ce stade je vous laisse de-

permettant d’activer

et de servir de « relais » (synthèse FM).

viner ma satisfaction à pouvoir

une émulation

Sound Blaster. Ceci,

Retrouver ces programmes n’est pas

à nouveau contrôler un lama

dans mon cas, n’a

une mince affaire, car même si VIA propose

pour combattre des hordes de

cependant pas été

des archives contenant des vieux pilotes

boîtes de Coca, de cerveaux et

suffisant et implique

DOS pour le chipset VT82C686A/B (http://

de rouleaux de papier toilette

l’utilisation, en prime,

de pilotes DOS

download.viatech.com), ceci ne permet de

tout en sauvant de pauvres

relativement difficiles

récupérer qu’un seul des deux programmes,

ruminants sans défense. Mais

à trouver.

VIAUDIO.COM, permettant de corriger le fait

FreeDOS ne fait pas que four-

que la sortie audio est muette par défaut.

nir une solution alternative et

C’est finalement sur le forum vogons.

en logiciel libre à MS-DOS, il

org (http://www.vogons.org/viewtopic.

intègre des fonctionnalités mo-

php?t=33283) que la solution s’est faite

dernes permettant d’être plus à

jour, accompagnée des archives Zip pro-

l’aise avec cet environnement.

posés par un utilisateur ayant un problème

La première avancée notable

similaire. Ainsi, en chargeant VIAUDIO.COM

concerne la gestion de paquets.

puis VIAFMTSR.COM, enfin la sortie audio

En effet, l’instal eur FreeDOS uti-

est activée et utilisable comme une véritable

lise un mécanisme assez similaire

carte compatible Sound Blaster.

à ce qu’on trouve avec les distri-

Il suffit alors d’ajouter le lancement de

butions GNU/Linux. Plutôt que de

ces deux commandes, après avoir placé les

copier simplement les fichiers sur

deux fichiers dans C:\FDOS\BIN\, dans le

le disque, il utilise des archives Zip

fichier AUTOEXEC.BAT à la racine de C:, et le

contenant bien plus que les pro-

tour est joué.

grammes eux-mêmes.

La leçon à retenir ici est que le mélange

Sur le CD-ROM d’instal ation

de matériel récent et de technologies an-

se trouve ainsi des dizaines de

ciennes est très problématique. Je pense que

fichiers Zip instal ables individuel-

j’ai eu de la chance, car la nature industriel e

lement à l’aide de la commande

de la carte mère implique une utilisation

FDNPKG. Il suffit de s’y promener à

possible avec de vieux applicatifs DOS par

l’aide des commandes classiques

soucis de compatibilité avec des logiciels

(CD, DIR, etc.) pour ensuite instal-

métiers. Ce ne sera peut-être pas le cas avec

ler le paquet de votre choix avec :

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

DOS n'est pas mort ! Il va même très bien !

C:\> FDNPKG install gnubc.zip

doc\gnubc\readme -> C:\FDOS\doc\gnubc\

doc\gnubc\examples\primes.b -> C:\FDOS\doc\gnubc\examples\

doc\gnubc\examples\ckbook.b -> C:\FDOS\doc\gnubc\examples\

doc\gnubc\copying -> C:\FDOS\doc\gnubc\

doc\gnubc\bc.man -> C:\FDOS\doc\gnubc\

bin\bc.exe -> C:\FDOS\bin\

appinfo\gnubc.lsm -> C:\FDOS\appinfo\

Le paquet gnubc a été installé : 7 fichiers extraits, 0 erreurs.

Comme avec n’importe quel gestionnaire de paquets, il est également possible de lister ceux déjà installés :

C:\> FDNPKG listlocal g

assign 1.4

debug 1.25

defrag 1.3.2

dialog 1.1-20080819

fdnpkg 0.99.4

gnubc 1.02

graphics 2008-07-14

Et, bien sûr, vous pouvez désinstal er l’un d’eux sans problème :

Un autre avantage

de la carte

C:\> FDNPKG remove gnubc

CompactFlash est

effacement de C:\FDOS\doc\gnubc\readme en cours

sa taille relativement

effacement de C:\FDOS\doc\gnubc\examples\primes.b en cours

réduite. Ici au

effacement de C:\FDOS\doc\gnubc\examples\ckbook.b en cours

premier plan le

effacement de C:\FDOS\doc\gnubc\copying en cours

fameux chipset

effacement de C:\FDOS\doc\gnubc\bc.man en cours

VIA VT82C686B

effacement de C:\FDOS\bin\bc.exe en cours

intégrant, entre

effacement de C:\FDOS\appinfo\gnubc.lsm en cours

autres choses, la

carte son compatible

Le paquet gnubc a été enlevé.

AC’97 soi-disant

compatible Sound

Mais parmi les évolutions importantes on trouve éga-

Blaster...

lement le support réseau. Je ne parle pas ici de techno-

logies comme IPX/SPX très en vogue à la bel e époque,

mais d’un support TCP/IP permettant d’intégrer votre

machine DOS dans votre réseau actuel. Tout ceci re-

pose sur le fait de disposer d’un support logiciel adapté.

Dans mon cas, après quelques tentatives et échecs,

et pour les contrôleurs Ethernet RTL8139C intégrés, ce

support a pris la forme du fichier RTSPKT.COM, récupéré

sur http://www.georgpotthast.de/sioux/packet.htm.

Les pilotes pour cartes réseaux sont appelés des

Packet Drivers et sont constitués de programmes

devant être lancés soit manuel ement pour essai, soit

directement au démarrage depuis AUTOEXEC.BAT.

Dans le cas de RTSPKT.COM et du fait que ma carte

mère dispose de deux interfaces réseau, il m’a tout

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

HACKABLE MAGAZINE n°18

89

DÉMONTAGE, HACKS & RÉCUP

DOS / RETRO PC

d’abord fal ut tâtonner un peu. Avec une seule interface utilisant une puce RTL8139, il suffit de lancer la commande en lui passant en argument une valeur correspondant à l’interruption logiciel e à utiliser (typiquement 0x60). Avec deux interfaces présentes cependant, le pilote ne sait pas quel périphérique utiliser et demande donc de l’aide à l’utilisateur :

C:\> RTSPKG 0x60

Packet Driver for Realtek RTL8139 Family PCI/Cardbus Fast Ethernet Network Interface Cards, Version 3.40

Copyright 2000(c), Realtek Semiconductor Inc.

There are 2 network cards on your main board :

Card 1 SlotNo= 0x11. IRQ= 0xA I/O= 0xE800 NodeID= 00:10:F3:09:52:D4

Card 2 SlotNo= 0x12. IRQ= 0xB I/O= 0xEC00 NodeID= 00:10:F3:09:52:D3

Please select a Card No.(1-2):

[...]

Pour contourner le problème, il faut alors préciser cette information directement dans les arguments de RTSPKG en spécifiant l’interruption logiciel e, le numéro du bus et du périphérique (correspondant au slot de la précédente commande) :

C:\> RTSPKG 0x60 0x00 0x11

Packet Driver for Realtek RTL8139 Family PCI/Cardbus Fast Ethernet Network Interface Cards, Version 3.40

Copyright 2000(c), Realtek Semiconductor Inc.

Line Speed 100 Mbps

Full Duplex

System: [345]86 processor, PCI bus, Two 8259s

Packet driver software interrupt is 0x60

Interrupt number is 0xA

I/O port is 0xE800

My Ethernet address is 00:10:F3:09:52:D4

Ceci ne fait qu’instal er le pilote, mais ne fournit pas de connectivité TCP/IP pour autant. Pour cela, il nous faut instal er le paquet FDNET.ZIP qui fournit le support basique pour le réseau (configuration, client DHCP, etc.) et MTCP.ZIP pour disposer d’outils complémentaires (ping, FTP, Telnet, etc.). L’instal ation du paquet FDNET.ZIP comprend le fichier C:\FDOS\BIN\FDNET.BAT appelé depuis AUTOEXEC.BAT. On y retrouve une ligne concernant RTSPKG qu’il convient ici de modifier avec les arguments supplémentaires à 0x60. Bien entendu, si vous n’avez qu’une interface réseau, ceci n’est pas nécessaire. Le fichier FDNET.BAT tente de détecter automatiquement l’interface présente à l’aide de l’outil BERNDPCI.COM et lance le Packet Driver adéquat.

Une fois cette modification faite, et si tout fonctionne correctement, au prochain démarrage du système le pilote sera chargé, l’interface configurée via DHCP et la machine se verra attribuée une adresse IP (par votre box ou un serveur DHCP que vous avez sur votre réseau). À ce propos d’ail eurs, il semblerait que les outils livrés par le paquet MTCP.ZIP n’apprécient pas un bail DHCP

inférieur à 3600 secondes (une heure). Assurez-vous que votre configuration réseau prenne cette particularité en compte pour cette machine.

Vous avez désormais du réseau et vous pouvez tester cela en vous plaçant dans le répertoire MTCP et en utilisant PING pour vérifier la connectivité. Mais le meil eur reste à venir, car le gestionnaire de paquets FDNPKG est maintenant capable de fonctionner en réseau ! Vous pouvez ainsi Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 90

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

DOS n'est pas mort ! Il va même très bien !

chercher dans les paquets dis-

Même les

ponibles en ligne avec FDNPKG

périphériques les

plus anodins méritent

search suivi d’une chaîne de

d’être conservés.

caractères et, bien entendu,

Je ne pensais pas

en instal er un avec FDNPKG

réellement avoir

install suivi d’un nom (sans

besoin d’utiliser ce

l’extension

lecteur de carte à la

.ZIP).

forme et à la couleur

Un DOS avec une gestion

des plus ignobles...

et pourtant. Je vous

de paquets, des dépôts et une

le dis et je vous le

instal ation via le net, c’est plus

répète : ne jetez

que j’en aurai rêvé il y a. . ouh,

jamais rien !

je préfère ne pas compter, à

cette époque j’avais encore des

cheveux, beaucoup de cheveux

même.

Enfin, même si la gestion de paquets et le réseau sont une nouveauté fantastique, il reste une autre fonctionnalité toute aussi intéressante : le support USB. FreeDOS permet en effet de vous donner accès à des périphériques USB comme des supports de stockage. Pour cela, vous devrez instal er le paquet USBDOS vous fournissant différents outils et/ou pilotes.

Le comportement de ces outils est particulièrement lent sur mon instal ation, ce qui tend à confirmer un problème matériel, mais cela reste raisonnablement utilisable. La première chose à faire est de charger le support USB UHCI (Universal Host Controller Interface) en lançant la commande USBUHCI. Vous pourrez alors lister les périphé-

riques présents avec :

C:\> USBDEVIC

USBDEVIC 0.05, (C) 2008, Bret E. Johnson.

Program to display information about Devices attached to the USB Host(s).

DEVICE ADDRESSES

===============================================================================

Host Index: 0 Host Type: UHCI Bus Type: PCI IRQ#: 3 Root Hub Ports: 2

Vendor: 1106h = VIA Technologies Inc Product: 3038h

===============================================================================

DEVICES INTERFACES

============================================= ================================

L C I A O

ADRS o P o n l w

==== (hex) S o BUS n t t n Test VEND PROD Sub Pro p USB HUB r POWR f f I e Sub Pro RWak ID ID Cls Cls col d VER ADR t (mA) g c n DESCRIPTION d Cls Cls col

==== ==== ==== === === === = === === = ==== = = = ============== = === === ===

1 1106 3038 9 0 0 . 1.0 ... . s 0 1 0 0*Root Hub Y 9 0 0

VIA Technologies Inc

2 058F 6387 0 0 0 . 2.0 1 1 100 1 0 0*SCSI Trsp Bulk Y 8 6 80

Alcor Micro Corp

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

HACKABLE MAGAZINE n°18

91

DÉMONTAGE, HACKS & RÉCUP

DOS / RETRO PC

Nous voyons ici le hub racine (1106:3038) et un support de stockage (058F:6387). Nous pouvons alors lancer USBDRIVE qui se chargera de détecter les supports présents et traduira leur accès en lettre de lecteur. Ceci prend quelques secondes, mais au bout d’un petit temps d’attente, nous pouvons utiliser l’option S pour afficher l’état du programme (qui reste en mé-

moire, c’est un TSR ou programme résident) :

C:\> USBDRIVE S

USBDRIVE 0.18, (C) 2007-2009, Bret E. Johnson.

DOS Driver for up to 8 SCSI-compatible USB Mass Storage Devices.

Initialization Delay: 0 seconds

DOS Version: 7.10

Max Bytes per Sector: 512

Mount FAT32 Volumes: Yes

Max Sectors per Xfer: 1

USB INFO DISK/LUN DOS DRIVE

========= ================================================== ==========

I R W D

n H A I INT m r r d o d n L 13h v P Sect Byte i e s d t U Dsk M r Num Num Per Per Total Approx v Approx x t r f N Num d t Head Cyl Cyl Sect Sectors Capacity e Capacity

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

0 0 2 0 0 81h . . 255 242 63 512 003B7800h 1995 MB D: 524 MB

Unused USB Dvc/Intf Indexes: 1-3

Unused INT 13h Disk Numbers: 82h-88h

Unused DOS Drive Letters: E:-K:

Resident USBDRIVE has been updated with new information.

Nous voyons ici

qu’un lecteur D: est

disponible et qu’il

donne accès à un

espace de 524 Mo

Enfin ! Après

sur une clé USB de

tant d’efforts,

de recherches,

2 Go (la partition ici

de sueur,

présente était délibé-

d’énervement et

rément plus petite que

de souffrance...

l’espace disponible

vient la

récompense et le

afin de tester un éven-

plaisir de retrouver

tuel impact sur les

un jeu qui est

performances).

toujours aussi

amusant, loufoque

Ce lecteur peut

et déstressant,

être utilisé comme un

Llamatron 2112 !

(eh oui, DOOM

disque dur secondaire

aussi a été installé,

exactement comme

bien entendu)

vous le faites pour C:...

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

DOS n'est pas mort ! Il va même très bien !

ACTUELLEMENT

DISPONIBLE !

HACKABLE HORS-SÉRIE n°2

à la différence, dans mon cas, que ceci est

d’une lenteur affligeante. Mais ça fonctionne

et peut être bien utile dans certains cas.

CONCLUSION ET

FUTUR

L’objectif initial était de trouver une alter-

native viable à l’utilisation d’un émulateur afin

de profiter de vieux programmes et jeux. Je

pense que la démonstration a été clairement

faite que, avec un minimum d’efforts, il est

parfaitement possible de satisfaire notre

nostalgie dans sa teinte la plus originale et

surtout sans ralentissement pénible.

Mais nous avons aussi découvert que le

bon vieux DOS (et plus exactement Free-

DOS) a magnifiquement évolué alors que

la plupart des utilisateurs s’en désintéres-

saient, lui préférant d’horribles interfaces

colorées pleines d’icônes et de fenêtres

graphiques. Il y aurait encore beaucoup à

raconter sur FreeDOS et les logiciels qu’il

propose, mais je vous laisserai le plaisir

de découvrir cela par vous même. Notez

également qu’il s’agit d’un logiciel libre et

que les sources (C, C++ et assembleur) de

l’ensemble de ces outils sont disponibles et

ouverts à l’exploration.

Enfin, précision importante, je tiens à

DÉBUTEZ EN

souligner ici que tout ceci ne m’a strictement

rien coûté. Je n’ai finalement utilisé que du

matériel de récupération que bon nombre de

PROGRAMMATION

personnes considéreraient comme bon pour

le recyclage. Carte mère, CompactFlash,

clavier PS/2, écran LCD VGA, alimentation. .

il ne s’agit que de « restes », de rebuts, de

SUR RASPBERRY

vestiges d’un autre temps.

Bien sûr, à présent que tout fonctionne, il

PI !

est temps d’investir un peu, opter pour une

CompactFlash de plus grande tail e, trouver

un boîtier sympathique (voire construire un

meuble façon borne d’arcade), acheter une

alimentation mini-ITX silencieuse. . Mais

NE LE MANQUEZ PAS

tout ceci est une autre histoire. DB

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°18

93

http://www.ed-diamond.com

pub_fev2017_half.indd 4

14/03/2017 14:40

REPÈRE & SCIENCE

RASPBIAN / VERSIONS

JONGLEZ AVEC LES

VERSIONS DE RASPBIAN

POUR PROFITER DES

APPLICATIONS LES PLUS

RÉCENTES

Denis Bodor

Vous devez connaître le syndrome : un logiciel ou un outil dispose des fonctionnalités que vous souhaitez mais, bien entendu, la version disponible dans Raspbian stable n’est pas la bonne, il vous faut la suivante. Très souvent, cette fameuse version tant désirée existe bien, mais elle est dans la future version du système et vous n’avez vraiment pas envie de tout mettre à jour. Pas de problème, rien ne vous

empêche de faire vos petits mélanges maison...

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Jonglez avec les versions de Raspbian pour profiter des applications les plus récentes Avant de commencer • La version oldstable (anciennement stable) est tout sim-et si vous avez l’habi-

plement la précédente version stable. Cette version est la

tude de me lire régu-

7.0 et s’appel e Wheezy (c’est le pingouin en caoutchouc

lièrement, vous devez

avec un nœud papillon rouge).

vous douter qu’il ne

sera pas question ici de faire de

• La version testing (en test) qui est en principe assez utili-l’instal ation sauvage comme une

sable pour être testée, mais ne peut être encore considé-

brute épaisse. Jouer du

rée comme stable. C’est la future version 9.0 avec, comme

./confi-

gure && make && sudo make

nom de code Stretch (la pieuvre élastique violette).

install relève pour moi de la sau-

• La version unstable (instable) est la future version qui pour vagerie pure et forcer l’instal ation

l’instant n’est pas encore prête à être testée. À cette date,

de paquets n’est pas beaucoup plus

le travail a commencé sur cette version qui sera la 10.0 et

élégante. Non, loin de moi l’idée de

possède comme nom de code Buster (le petit chien qu’An-

vous faire faire ce genre de choses,

dy reçoit pour Noël dans Toy Story, mais qui n’apparaît

sauf cas d’extrême urgence. Il

au spectateur que dans Toy Story 2). Unstable est aussi

existe dans Raspbian une solution,

Sid (le gamin qui aime détruire les jouets dans le premier

tout en finesse, pour bénéficier

film et les transforme en monstres). Il faut s’imaginer Sid

des paquets dans une version plus

comme une sorte d’incubateur à distribution, un magma

avancée que cel e proposée par la

dans lequel tout peut changer et tout peut être détruit d’un

version stable. Il suffit de judicieu-

jour à l’autre. De ce magma, à un moment ou un autre,

sement configurer le système de

naîtra la prochaine version testing qui sera alors appelée

gestion de paquets APT.

Buster et maturera pour devenir, à terme, la version stable.

Sid en plus d’être le nom d’un personnage de Toy Story

1. UN PEU DE

signifie aussi Stil In Development (encore en développe-

ment) pour bien souligner l’état des paquets qui s’y trouvent

TERMINOLOGIE

et le fait que unstable pointe toujours sur Sid, contrairement

aux autres désignations et noms de code. Notez également

NE FAIT PAS DE

qu’il y a « pire » que Sid/unstable : experimental, mais là

MAL

vous êtes quasiment sûr d’avoir des problèmes. .

À un instant donné, il est possible de faire l’association entre

La distribution Raspbian est

nom de code et version (pas le numéro, le nom de la version).

un portage de Debian GNU/Linux

Aujourd’hui stable est Jessie, testing est Stretch, etc. Mais dès

pour Raspberry Pi. En cela, el e

que Debian 9.0 sera publié officiel ement, Jessie deviendra

repose exactement sur les mêmes

oldstable, Stretch sera stable et ainsi de suite, sauf unstable

principes, la même logique et les

qui sera toujours Sid. Les noms stable, testing ou encore uns-

mêmes outils de gestion que

table sont souvent désignés comme des « suites » (et tantôt

Debian GNU/Linux.

des « catégories ») dans la documentation Debian française,

Selon cette logique, il existe plu-

même si souvent on parle de « version » stable ou testing par

sieurs versions d’une distribution :

exemple.

• La version stable, testée et

Pourquoi souligner ce point ? Tout simplement parce que,

approuvée comme fiable et uti-

dans ce qui va suivre et dans les configurations donc nous

lisable en production. À l’heure

allons parler, il est possible de désigner les versions par leur

actuel e, cette version est la

nom de code où parle leur version (stable, testing, unstable,

8.0 et possède comme nom de

sid, etc.). En fonction de la désignation que vous utiliserez,

code Jessie (la cowgirl de Toy

vous al ez ou non, rester « ancré » avec une version, ou suivre

Story 2 et 3).

ou non l’évolution des changements de vie des distributions.

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

HACKABLE MAGAZINE n°18

95

REPÈRE & SCIENCE

RASPBIAN / VERSIONS

2. LES VERSIONS C’EST COMME

paquets qui ne concernent que

LA CUISINE, IL FAUT SAVOIR

cette plateforme (fut un temps, il

s’agissait d’un dépôt distinct).

MÉLANGER CORRECTEMENT

L’indicateur de distribution ici est

très important, car impactant direc-

Notre objectif ici n’est pas de créer un monstre avec un mé-

tement le comportement du sys-

lange de tout et n’importe quoi, mais de rester avec une version

tème de gestion de paquets en cas

stable de Raspbian tout en ajoutant, au besoin, des paquets

de mise à disposition d’une nouvel e

des versions provenant de testing.

version de la distribution. En utili-

Configurer la version de votre distribution revient, dans les

sant jessie, le dépôt utilisé sera

grandes lignes, à choisir tout simplement d’où viennent les

toujours le même, même lorsque

paquets qui la compose. En jetant un œil à la configuration

Stretch sera la version stable. Si en

d’une Raspbian fraîchement instal ée, on trouve dans le fichier

revanche vous utilisez stable pour

/etc/apt/sources.list une seule ligne non commentée :

désigner la distribution, lorsque

deb http://mirrordirector.raspbian.org/raspbian/ jessie

Jessie deviendra oldstable et que

main contrib non-free rpi.

l’ensemble des paquets de Stretch

sera regroupé dans le dépôt

Chaque ligne dans ce fichier définit une « source » depuis

stable, vous vous retrouverez avec

laquel e le système de gestion de paquets (APT) va récupérer

une ÉNORME mise à jour concer-

les paquets et les informations les concernant. Ces lignes défi-

nant la quasi-totalité des paquets

nissent donc des dépôts où sont stockés ces éléments.

déjà instal és. Ceci n’est pas forcé-

Pour comprendre le sens d’une tel e ligne, il faut la découper

ment souhaitable.

en détail ant chaque élément :

Le fichier sources.list peut

• deb désigne le type de dépôt, deb pour les paquets bi-contenir plus d’un dépôt et si vous

naires et deb-src les sources des paquets, si vous comp-

souhaitez pouvoir bénéficier de

tez les compiler et construire vous-même.

paquets provenant de testing

(donc Stretch actuel ement), vous

• http:/ mirrordirector.raspbian.org/raspbian/ précise l’URL

pouvez ajouter une ligne

ou adresse du dépôt. Généralement, il s’agit d’un serveur web

deb

(HTTP), mais cela peut également être un serveur FTP.

http://mirrordirector.raspbian.

org/raspbian/ stretch main

• jessie indique la distribution utilisée qui peut être, comme contrib non-free rpi.

ici, un nom de code, mais peut également être le nom de la

Après une tel e modification, il est

catégorie ou suite (stable, testing, etc.).

nécessaire de mettre à jour la liste

• main, contrib, non-free et rpi indiquent les composants des paquets disponibles avec sudo

qu’il est possible de prendre dans ce dépôt sous forme de

apt-get update. Ceci fait, votre

sections. Les paquets sont classés en fonction de leur com-

distribution sera en mesure d’instal-

patibilité avec les « Directives Debian pour le logiciel libre »

ler et de mettre à jour des paquets

(DFSG pour Debian Free Software Guidelines). main est la

provenant de l’actuel e testing MAIS

section regroupant les paquets qui se conforment aux direc-

ce fonctionnement et ce choix sera

tives, contrib contient les paquets qui s’y conforment, mais

automatique ! En d’autres termes,

qui ont des dépendances qui ne sont pas dans main (qui

maintenant que vous avez accès

nécessitent donc d’autres paquets en dehors de main) et

à deux versions de la distribution

enfin non-free regroupe les paquets qui ne se conforment

Raspbian, en tout logique, le sys-

pas aux DFSG et sont considérés comme n’étant pas des

tème de gestion de paquets va cher-

logiciels libres (selon Debian). Ici nous avons, en plus, rpi

cher à instal er les paquets les plus

qui est une section spécifique à Raspbian, contenant des

récents, des deux distributions !

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

Jonglez avec les versions de Raspbian pour profiter des applications les plus récentes Si à ce stade vous vous pliez d’un

• Pin-Priority: indique la priorité à utiliser

sudo apt-get dist-upgrade ou d’un

dans la sélection de paquets, plus el e est im-

sudo apt-get upgrade, tout votre

portante, plus el e « passera » avant une autre,

système va passer de Jessie à Stretch

avec ici 900 pour Jessie et seulement 100 pour

et vous al ez donc vous retrouver, si

Stretch.

tout se passe bien, avec une Raspbian

testing en tant que système sur votre

L’effet de cette configuration sera d’inverser la

Pi. Ce n’est cependant pas l’objectif que

logique qui fait qu’un paquet plus récent sera choisi

nous poursuivons ici et nous devons

pour l’instal ation. Cela reste vrai pour Jessie, mais

donc indiquer au système que nous

les paquets, même avec une version plus impor-

préférons Jessie à Stretch (même si les

tante, de Stretch ne seront plus prioritaires. En

pieuvres mauves sont plus amusantes

conséquence, après enregistrement de ce fichier,

que les cowgirls).

une commande comme sudo apt-get upgrade

n’instal era plus de paquets provenant de Stretch.

Ceci se fait en configurant jus-

tement les préférences d’APT en

Ceci signifie également qu’en utilisant sudo

ajoutant un fichier dans le répertoire

apt-get install suivi d’un nom de paquet, c’est

/etc/apt/preferences.d. Le nom

la version la plus élevée disponible pour Jessie qui

importe peu, mais c’est une bonne

sera instal ée. À titre d’exemple, si nous prenons le

habitude de le faire débuter par un

paquet vim, la version 2:7.4.488-7+deb8u1 est dis-

chiffre et que le choix du nom soit

ponible pour Jessie et la version 2:8.0.0197-1 pour

relativement explicite, 00stable-

Stretch et ainsi :

premier par exemple. Ce fichier

contiendra ceci :

$ dpkg -l vim

[...]

# Jessie en priorité maximum

ii vim 2:7.4.488-7+deb8u1 armhf Vi IMproved

Package: *

Pin: release n=jessie

$ sudo apt-get install vim

Pin-Priority: 900

[...]

vim est déjà la plus récente version disponible.

# Stretch en second

Package: *

0 mis à jour, 0 nouvellement installés,

Pin: release n=stretch

0 à enlever et 0 non mis à jour.

Pin-Priority: 100

Nous pouvons demander une instal ation d’une

Nous avons ici trois parties dési-

version précise du paquet en faisant suivre son nom

gnant chacune un comportement à

d’un = et du numéro de version choisie :

adopter. Chaque partie précise un

groupe de caractéristiques formant un

$ sudo apt-get install vim=2:8.0.0197-1

profil :

Lecture des listes de paquets... Fait

Construction de l'arbre des dépendances

• Package permet de spécifier les

Lecture des informations d'état... Fait

paquets concernés, ici tous (*) ;

Certains paquets ne peuvent être installés.

• Pin: désigne « l’épinglage », on

Ceci peut signifier que vous avez demandé

« épingle » la version (release)

l'impossible, ou bien, si vous utilisez

désignée par un nom de code

la distribution unstable, que certains paquets

n'ont pas encore été créés ou ne sont pas

(n=), respectivement jessie et

sortis d'Incoming.

stretch (vous pouvez aussi uti-

L'information suivante devrait vous aider à

liser a= pour spécifier stable ou

résoudre la situation :

testing) ;

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

HACKABLE MAGAZINE n°18

97

REPÈRE & SCIENCE

RASPBIAN / VERSIONS

Les paquets suivants contiennent des dépendances non satisfaites : vim : Dépend: vim-common (= 2:8.0.0197-1)

mais 2:7.4.488-7+deb8u1 devra être installé

Dépend: vim-runtime (= 2:8.0.0197-1)

mais 2:7.4.488-7+deb8u1 devra être installé

Dépend: libtinfo5 (>= 6)

mais 5.9+20140913-1 devra être installé

E: Impossible de corriger les problèmes, des paquets défectueux

sont en mode " garder en l'état ".

Ici, ceci ne fonctionne pas pour une raison très simple : cette version du paquet vim né-

cessite l’instal ation d’autres paquets, dans une version différente de cel es disponibles dans Jessie. Ainsi, comme nous n’avons pas donné la priorité à Stretch, les versions sélectionnées par défaut sont cel es de Jessie et non de Stretch, et ceci n’est pas compatible.

Nous avons effectivement « demandé l’impossible » et le message d’erreur est parfaitement explicite. Pour régler ce problème, il faut demander à apt-get de « viser » (target) la bonne distribution, en utilisant l’option -t et en précisant stretch : $ sudo apt-get install -t stretch vim

[...]

Les NOUVEAUX paquets suivants seront installés :

xxd

Les paquets suivants seront mis à jour :

libncurses5 libncursesw5 libtinfo5 vim

vim-common vim-runtime vim-tiny

[...]

Souhaitez-vous continuer ? [O/n]

Là, nous n’avons même plus besoin de préciser la version du paquet à instal er, le simple fait d’utiliser -t place apt-get dans un contexte où il pourra instal er le paquet et ses dépendances en considérant uniquement Stretch/. Bien entendu, une confirmation vous sera demandée et il est important de bien comprendre qu’un retour en arrière est impossible (ou du moins sera souvent très très problématique).

Le fait d’utiliser des préférences personnalisées pour APT et de pouvoir accéder aux paquets de deux versions de la distribution peut être très avantageux. Tantôt pour régler un problème et parfois simplement par curiosité, comme ici avec Vim 8.0 et tester les nouvel es fonctionnalités disponibles. Il faut cependant utiliser cela avec prudence et parcimonie, car si testing est appelé ainsi, et non stable, ce n’est pas par hasard. Les paquets qui s’y trouvent n’ont pas tous atteint le niveau de qualité requis pour être considérés comme stables. Les éventuels problèmes relèvent donc de VOTRE responsabilité.

Bien entendu tout ce que je viens de décrire ici est applicable pour unstable. Il est donc possible de configurer votre distribution pour bénéficier de toutes les versions possibles, tout en gérant les priorités de façon raisonnable et en instal ant les paquets en connaissance de cause. Il est cependant fortement déconseil é d’utiliser des paquets d’unstable pour un projet pour des raisons évidentes. En revanche, sur une Pi de test, cela peut être très intéressant. . DB

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

HACKABLE MAGAZINE n°18

http:/ www.hackable.fr/

1 6 -1 8

M A I PARIS

F R A N C E

2 0 1 7

WHERE INNOVATION GROWS

U N E A P P R O C H E H U M A I N E D E L A R O B O T I Q U E

SMART HOMES

INDUSTRY 4.0 &

MEDICAL & HEALTH

TECHNOLOGIES

SMART CITIES

HOSPITALITY

FIELD ROBOTICS

SUPPLY CHAIN SERVICES

& FORESIGHT

RETAIL & TOURISM

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) AP-PlanRobot 225x295-2017.indd 2

08/02/2017 14:42

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

- demarrez_votre_pc_a_distance_avec_une_ca

- un_montage_pour_controler_le_demarrage_d

- version_arduino_shield_ethernet

- version_esp8266_nodemcu_wemosd1

- la_logique_du_croquis

- la_boucle_principale

- variations_possibles

- ajoutez_une_sortie_audio_bluetooth_a_vot

- bluetooth_et_audio

- finalisation_et_peaufinage

- dos_n_est_pas_mort_il_va_meme_tres_bien

- phase_1le_materiel

- phase_2le_systeme

- phase_3les_problemes

- phase_4oh_mon_dieu_dos_fait_ca

- conclusion_et_futur

- jonglez_avec_les_versions_de_raspbian_po

- un_peu_de_terminologie_ne_fait_pas_de_ma

- les_versions_c_est_comme_la_cuisine_il_f

- recyclez_un_vieil_ecran_vga_et_utilisez-

- un_signal_vga_analogique_avec_arduino

- le_montage

- utiliser_la_bibliotheque_vgax

- probleme_et_solutions

- conclusion

- dessoudez_changez_et_recuperez_des_compo

- dessouder_pour_reparermethode_barbare_ou

- les_differentes_techniques_de_dessoudage

- ajouter_de_l_etain

- la_tresse_a_dessouder

- la_pompe_a_dessouder

- il_y_a_d_autres_solutions

- une_station_de_dessoudage_ca_change_la_v

Table of Contents

demarrez_votre_pc_a_distance_avec_une_ca

un_montage_pour_controler_le_demarrage_d

version_arduino_shield_ethernet

version_esp8266_nodemcu_wemosd1

la_logique_du_croquis

la_boucle_principale

variations_possibles

ajoutez_une_sortie_audio_bluetooth_a_vot

bluetooth_et_audio

finalisation_et_peaufinage

dos_n_est_pas_mort_il_va_meme_tres_bien

phase_1le_materiel

phase_2le_systeme

phase_3les_problemes

phase_4oh_mon_dieu_dos_fait_ca

conclusion_et_futur

jonglez_avec_les_versions_de_raspbian_po

un_peu_de_terminologie_ne_fait_pas_de_ma

les_versions_c_est_comme_la_cuisine_il_f

recyclez_un_vieil_ecran_vga_et_utilisez-

un_signal_vga_analogique_avec_arduino

le_montage

utiliser_la_bibliotheque_vgax

probleme_et_solutions

conclusion

dessoudez_changez_et_recuperez_des_compo

dessouder_pour_reparermethode_barbare_ou

les_differentes_techniques_de_dessoudage

ajouter_de_l_etain

la_tresse_a_dessouder

la_pompe_a_dessouder

il_y_a_d_autres_solutions

une_station_de_dessoudage_ca_change_la_v