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

ÉDITO

SOMMAIRE

Le passé commence à valoir cher !

Lorsque cela fait près de 25 ans qu’on nage dans

ÉQUIPEMENT

la technologie en suivant les marées, les remous et

les courants, parfois, des choses vous échappent. On

évolue en même temps que les produits, les logiciels

04

et les ressources qu’on utilise et sans petites piqûres

Un testeur universel de composants

de rappel de temps en temps, on en arrive, comme

pour 15€ ?

beaucoup, à prendre pour argent comptant tout ce qui

se trouve à notre disposition aujourd’hui.

Une façon de relativiser consiste à se pencher sur de vieux matériels et de ARDU'N'CO

vieux systèmes. Chose que j’ai dernièrement fait en offrant à ma station Silicon 10

Graphics Indy un écran via un adaptateur 13w3/VGA et en y instal ant IRIX 6.5.

La réalité m’est apparue, après maintes reconfigurations, en pouvant finalement Utilisez un Minitel comme écran pour

lancer Netscape Navigator 4.79 : la quasi-totalité des sites sont tout bonnement votre Arduino

il isibles ou inaccessibles, au mieux ils sont tel ement « lourds » qu’ils mettent une éternité à s’afficher.

26

Une autre façon consiste à faire un tour sur eBay dans la section « Informa-Fabriquez votre T-shirt interactif

tique vintage » et d’observer les prix. Les ordinateurs des années 80/90 valent avec un Lilypad Arduino

cher, parfois très cher, mais ce n’est rien comparé aux composants, périphériques et pièces détachées pour ces machines. Et lorsqu’on arrive à des éléments plus 38

spécifiques, comme par exemple un hub Ethernet proposant RJ45 (10BASE-T) et BNC (10BASE2), la solution la plus simple pour connecter une machine 10BASE2

OTA : programmez votre ESP8266

à un réseau moderne, cela devient tout simplement surréaliste !

en Wifi !

Le phénomène est fascinant. Des machines « inaccessibles » à leur époque sont temporairement devenues obsolètes et presque sans valeur, et sont maintenant en passe de devenir, en compagnie des machines et matériels d’antan plus EN COUVERTURE

populaires, à nouveau inaccessibles. Les portes du temps semblent se refermer sur cette période de l’histoire informatique, mais cette fois dans le bon sens du 48

terme (pour « ceux qui gardent »).

Utilisez Google Analytics pour la

Si vous en doutez, je vous conseil e, comme je l’ai conseil é à ce lecteur qui surveillance physique

m’a contacté et ayant un IBM PC XT complet dans son garage, de faire un tour dans les annonces de ventes et les enchères. Toutes ces merveil es n’ont plus QUE de la valeur sentimentale, les premières heures de l’informatique personnel e EMBARQUÉ & INFORMATIQUE

pour tous sont entrées dans leur phase « pièces de col ection ». Et je trouve que c’est une très bonne chose. .

60

mDNS ou comment retrouver

facilement votre Pi

Hackable Magazine

Plate-forme de Saint-Quentin-Fallavier.

Tél. : 04 74 82 63 04

est édité par Les Éditions Diamond

TENSIONS & COURANTS

Service des ventes : Abomarque : 09 53 15 21 77

IMPRIMÉ en Allemagne - PRINTED in Germany

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

72

N° ISSN : 2427-4631

Commission paritaire : K92470

Utilisez une alimentation sans fil pour

10, Place de la Cathédrale - 68000 Colmar

Périodicité : bimestriel

vos projets

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

Sites : https://www.hackable.fr/

DÉMONTAGE, HACKS & RÉCUP

lui sont communiqués par

https://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 est interdite sans accord écrit de la société Les Éditions Diamond.

82

Rédacteur en chef : Denis Bodor

Sauf accord particulier, les manuscrits, photos et dessins adressés à Réalisation graphique : Kathrin Scali

Hackable Magazine, publiés ou non, ne sont ni rendus, ni renvoyés. Les Créez votre ordinateur 8 bits sur

Responsable publicité : Valérie Fréchard,

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

sont données à titre d’information, sans aucun but publicitaire. Toutes les marques citées dans ce numéro sont déposées par leur propriétaire platine à essais : la mémoire

Service abonnement : Tél. : 03 67 10 00 20

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

Impression : pva, Landau, Allemagne

Distribution France : (uniquement pour les

Suivez-nous sur Twitter

ABONNEMENT

dépositaires de presse)

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

@hackablemag

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

65/66

Abonnements multi-supports

À PROPOS DE HACKABLE...

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 utili-ENCART JETÉ INCLUS

sant 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 haztitnps:

e a é /t w

é chwoiw

s .

i p ed

our r-edfliéatem

r c oetnd

e n .octioom

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

3

ÉQUIPEMENT

TESTEUR UNIVERSEL

UN TESTEUR UNIVERSEL

DE COMPOSANTS

POUR 15€ ?

Denis Bodor

Il y a deux éléments dans cette question qui sont troublants : le mot « universel » et le prix. Certes, un équipement comme un

multimètre est un outil capable de tester et mesurer plusieurs types de caractéristiques, mais il n’en est pas pour autant « universel ». Et, à 15€, on ne peut que supposer que le matériel en question ne sera sans doute pas un modèle de précision ou de qualité. Instinctivement, la réponse la plus logique semble donc être « non ». Pourtant, dans ce cas précis, on peut mitiger sa réponse...

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Un testeur universel de composants pour 15€ ?

Ce genre de testeur

se trouve un peu

partout en vente

sur le net, des

boutiques en ligne

aux sites d’enchère en passant

pas les classiques plateformes

de vente directe depuis les lieux

de production. « Testeur de com-

posants », « testeur universel »,

« testeur de transistors ». . la

désignation importe peu puisque

chacun semble y mettre son grain

de sel tant sur la désignation que

toutes traces d’un quelconque héritage et présentant

sur l’adaptation du projet d’ori-

presque systématiquement le produit comme une créa-

gine. La recette « magique » pour

tion originale.

ce type de matériel est cependant

toujours la même : un microcon-

En réalité, 99% de ces « testeurs » sont des évolutions

trôleur Atmel couplé à un affi-

des travaux de Markus Frejek, repris par Karl-Heinz Küb-

cheur LCD (alphanumérique ou

beler et enfin Markus Reschke jusqu’à ce jour. Ce qui était

graphique), quelques composants

à l’origine un « Transistortester AVR » a évolué au fil des

passifs et actifs et un support ZIF

années et des améliorations, en un testeur universel de

permettant de placer/retirer facile-

composants ne se limitant plus aux transistors et incluant

ment des composants.

le test de condensateurs, de résistances, de FET, de

triacs, de thyristors, de bobines, de diodes, etc.

L’idée, el e aussi, est tou-

jours la même : le code embar-

Retracer l’historique d’un tel projet, en particulier

qué dans le microcontrôleur

lorsque les constructeurs ayant réutilisé le circuit et le

utilise ses entrées/sorties pour

code dans le but évident d’en masquer l’origine, n’est pas

tester n’importe quel compo-

facile, mais on arrive finalement sur mikrocontroller.net

sant qui lui est présenté, il en

afin de rendre à César ce qui appartient à César, et saluer

déduit le type, le brochage

le travail des vrais créateurs de l’outil. Légalement parlant,

et mesure les valeurs de ses

le créateur original du projet, M. Frejek n’a pas spécifié de

caractéristiques.

licence d’utilisation tout en précisant qu’il s’agissait d’open

source et qu’une utilisation commerciale nécessitait une

prise de contact préalable. C’est K.H. Kübbeler et M.

1. GM328A, L’IDÉE Reschke qui, n’arrivant pas à contacter M. Frejek et ayant réécrit une très vaste partie du code, ont décidé en 2016

ORIGINALE

que la licence serait l’EUPL v1.1, une licence de logiciel

Le testeur de composants

libre, approuvée par la Commission européenne et com-

que l’on trouve sur presque tous

patible GPL, OSL, Eclipse, etc.

les sites, d’Amazon à Banggood

Les utilisateurs les plus curieux pourront donc

en passant par eBay ou Tindie,

remonter aux sources en pointant leur navigateur sur

semble s’être diversifié au point

https://www.mikrocontroller.net/articles/AVR_

ne plus plus vraiment voir un

Transistortester afin de récupérer les sources du firm-

quelconque ancêtre commun.

ware, ce qui leur permettra éventuel ement de faire évo-

Du moins c’est ce que certains

luer leur matériel, sous réserve d’identifier clairement ce

fabricants espèrent en effaçant

que le fabricant aura changé dans le concept et le circuit.

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

HACKABLE MAGAZINE n°21

5

ÉQUIPEMENT

TESTEUR UNIVERSEL

3. TESTS ET

UTILISATION

Pour les tests, j’ai acquis deux

déclinaisons du testeur, via eBay :

• Un modèle vendu sous la

désignation « All-in-1 Com-

ponent Tester Transistor

Diode Capacitance ESR

Meter Inductance BoBo », par

« d-light-factory » au prix de

12,68€ port inclus.

• Un autre, désigné par

« Component Tester Tran-

sistor Diode Capacitance

ESR Meter Mosfet NPN

PNP Inductanc » par

« haiy_95inliao », un peu plus

cher à 18,53€, port inclus.

Les deux modèles se pré-

2. IMPORTANT :

sentent de la même manière et

CECI NE REMPLACE PAS UN

possèdent certaines caractéris-

tiques identiques. Il s’agit de maté-

MULTIMÈTRE !

riel basé sur un microcontrôleur

Atmel ATmega328P à 8 Mhz, com-

L’utilisateur ou le hobbyiste ayant une certaine expé-

prenant un écran LCD graphique

rience du domaine n’aura sans doute pas besoin qu’on lui

de 64×128 pixels rétro-éclairé, un

rappel e, mais exactement comme cela est précisé dans

support ZIF permettant d’enficher

les sources de Markus Reschke, un tel produit n’est pas

les composants, une alimentation

une solution de remplacement pour un multimètre

par pile 9V, d’une série de trois

numérique ou tout autre vrai équipement de mesure

contacts pour les composants

électronique.

de surface, une led témoin d’ali-

C’est un testeur de composant qui, comme nous le ver-

mentation et un emplacement

rons, possède ses qualités et son utilité, mais en aucun cas

pour souder un connecteur 2×6

un appareil de mesure fiable. Aucun produit découlant de ce broches ICSP (pour reprogram-projet, même lorsqu’il est joliment présenté dans un boîtier,

mer l’ATmega328P).

ne possède ne serait-ce qu’un semblant de protection. Le

Les deux versions (et il en

produit ne survivra certainement pas à des tensions de plus

existe bien d’autres) se différen-

de 5 volts et n’est absolument pas destiné à voir connecter

cient surtout par le circuit lui-

à ses broches une quelconque source de courant.

même. Bien qu’assez similaires

Répétons-le donc clairement : ceci n’est pas un subs-

dans les grandes lignes, on voit

titut pour un multimètre de qualité, c’est un testeur

clairement que des choix diffé-

de composants dont le travail consiste à identifier ces

rents ont été faits. Le modèle le

derniers et procéder à un certain nombre de mesures

plus cher, avec un circuit imprimé

approximatives.

rouge, possède un bouton sup-

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Un testeur universel de composants pour 15€ ?

plémentaire permettant d’éteindre

complémentaires présentes dans les évolutions récentes

le dispositif, place l’écran sur

du code, et ce malgré la mention dans la description du

une carte fil e tenue par quatre

produit de « latest M328 version of the software, more

entretoises en métal, propose un

functions » (« dernière version du logiciel M328, plus de

emplacement pour un connecteur

fonctions ») tout en précisant « 2013 » par ci et « 2014 »

d’alimentation et, de façon géné-

par là (la dernière version libre, 1.29m, date en réalité de

rale semble de meilleure qualité

juin 2017).

et plus robuste.

La première impression laissée par ces produits n’est

Le premier modèle, quant à lui,

pas forcément très engageante. On voit clairement qu’il

semble plus proche du concept

s’agit d’une reprise approximative du projet original pour

original, ne proposant qu’un seul

en faire un matériel pouvant être produit à bas coût et en

bouton servant à la mise en fonc-

grande quantité. Dans les ceux cas, aucun effort n’est

tion et au test des composants.

réel ement fait pour valoriser l’origine du concept ou per-

L’extinction repose donc entière-

mettre une quelconque mise à jour aisée.

ment sur l’arrêt automatique ou

Dans la pratique, les deux modèles se valent (et pour

la déconnexion de la pile. L’affi-

cause, le code est mature et bon). Il suffit ainsi de placer

cheur LCD est soudé directement

un composant sur le support ZIF et de presser le bouton

sur le circuit imprimé dans une

« TEST ». Après une brève initialisation et l’affichage

position qui est relativement fra-

d’un message, le montage teste le composant pour en

gile. On notera également que le

déterminer le type puis affiche les résultats. Le support

circuit imprimé porte la mention

ZIF possède 14 connecteurs, mais il ne s’agit que d’une

GM328A et qu’un des messages

répétition des 3 lignes disponibles. Un marquage reprend

s’affichant à l’écran fait mention de

la nomenclature qui sera ensuite réutilisée à l’écran pour

mikrocontroller.net.

désigner les points de connexion. Ceci permet de placer

Côté firmware, nous avons éga-

un composant où qu’on veuil e en fonction de son format

lement une grosse différence. Le

tout en utilisant toujours les broches 1 et 2, ou 1, 2 et 3.

matériel au circuit rouge bien que

Si nous plaçons, par exemple, une led entre 1 et 2 et

de meil eure qualité fait l’impasse

procédons au test, un petit dessin d’une diode apparaît

sur certaines fonctionnalités

nous permettant déjà de déterminer rapidement anode

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

HACKABLE MAGAZINE n°21

7

ÉQUIPEMENT

TESTEUR UNIVERSEL

Un testeur universel de composants pour 15€ ?

de mesurer facilement un poten-

tiomètre. Il aurait été intéressant,

en plus de ces informations très

factuelles, que le rapport propor-

tionnel soit également affiché en

simulant un montage en diviseur

de tension, nous évitant ainsi de

faire des calculs.

Les condensateurs peuvent

également être testés, mais il

faudra faire très attention à leur

éventuel e charge, car le testeur

pourrait ne pas survivre le cas

échéant. Court-circuitez donc

systématiquement vos condensa-

et cathode, si les deux pattes ont la même tail e (suite à

teurs avant de les tester. La pola-

récupération par exemple). Dans le cas d’une led, le courant

rité n’est pas détectée/affichée

direct ne peut être déterminé/deviné, mais la tension, el e,

avec les condensateurs élec-

est mesurée, ainsi que la capacité.

trolytiques par exemple, mais la

valeur en farad est mesurée ainsi

Pour les composants comme les transistors, cela s’avère

que l’ESR. Pour rappel, l’ESR ou

encore plus intéressant car, là aussi, le brochage est dé-

Equivalent Series Resistance (en

tecté sans peine. Le testeur ne vous dira pas de quel com-

posant il s’agit, mais vous donnera cependant des caracté-

bon français « résistance série

ristiques intéressantes. En plaçant ainsi un transistor NPN

équivalente ») est une repré-

BC547b assez courant et standard, les deux modèles nous

sentation de la résistance d’un

indiquent plus ou moins les mêmes choses :

composant, généralement sur un

courant alternatif.

• c’est un transistor NPN (noté « BJT-NPN » ou « NPN »

à l’écran) ;

L’ESR est un peu valeur de la

différence entre théorie et pratique

• la base est sur 2, le col ecteur sur 1 et l’émetteur sur 3 ;

dans le cas d’un condensateur.

• le gain (noté « B » ou « hFE ») est de 428 (entre 125 et

Idéalement, un tel composant ne

900 dans la documentation) ;

présente pas de résistance, mais

• la tension de base/émetteur (notée « Vf ») est de

étant composé de matériaux qui

694mV ou 0,694V (Vbe est donné entre 0,55 et 0,72

présentent une résistance finie,

dans la doc).

dans les faits, il présente effecti-

vement une équivalence de résis-

Une diode nous donnera également des résultats inté-

tance. Cette valeur généralement

ressants en nous précisant bien entendu la polarité, mais

mesurée en dixième ou centième

également la tension directe, comme par exemple 0,684V

d’ohm, varie en fonction de la ten-

sur la diode 1N4007 testée, ce qui est tout à fait dans les

sion et de la capacité du conden-

spécifications.

sateur. Là où cela devient très

Les résistances donneront un résultat similaire en indi-

intéressant, et en particulier dans le

quant bien entendu la valeur en ohms avec une précision

cas des condensateurs électroly-

tout à fait acceptable. Un point très intéressant ici, il est

tiques, c’est qu’en vieil issant ou en

possible de mesurer deux résistances à la fois en les pla-

étant régulièrement exposés à une

çant entre 1 et 2, et entre 2 et 3. Ceci permettra également

source de chaleur, l’ESR augmente.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Un testeur universel de composants pour 15€ ?

ACTUELLEMENT

DISPONIBLE !

MISC HORS-SÉRIE n°16

Qui dit résistance, dit généralement dissipation

thermique et donc condition favorable à l’aug-

mentation de l’ESR, jusqu’à détruire le compo-

sant qui souvent est gonflé sinon ouvert.

Tester l’ESR d’un condensateur électroly-

tique permet donc de vérifier son état. Si vous

faites des réparations ou de la récupération, et

sachant que ces condensateurs sont généra-

lement la source de tous les maux, le testeur

pourra vous être utile. Attention cependant : il

n’est pas question de l’utiliser avec des com-

posants in situ et surtout, cela ne remplacera

pas un appareil dédié digne de ce nom (un

RLC mètre ou LCR meter en anglais). Mais si

une ESR importante est affichée (supérieure à

1/4 d’ohm), le composant est certainement bon

pour la poubel e.

4. MAIS EST-CE QUE ÇA

VAUT LE COUP ?

Ou plus exactement, « le coût », dans ce

cas précis. La réponse est affirmative, mais

uniquement comme équipement d’appoint et

certainement pas comme solution de rempla-

cement pour un bon multimètre. Ces testeurs

sont vraiment très pratiques dans le cadre

de ce pour quoi ils sont conçus : identifier et

tester des composants. Voyez cela comme un

chausse-pied, un testeur vous donnant des

bases pour ensuite compléter, le cas échéant,

en procédant à des mesures plus précises

SÉCURITÉ

avec un appareil spécialisé.

À titre personnel, l’intérêt réside princi-

palement dans le test des transistors et des

DES SYSTÈMES

MOSFET, composants actifs que j’utilise le

plus souvent. Pour les condensateurs, l’ESR

et les bobines, j’ai préféré opter pour un RLC

mètre (Keysight U1733C), mais ceci est un

SANS FIL

choix tout personnel, principalement motivé

par le fait que je fais de plus en plus de res-

tauration d’ordinateurs vintages. .

Le mot de la fin sera donc « oui ». Oui, cela

vaut le coup d’investir 15€ pour ce type de

NE LE MANQUEZ PAS

produit. DB

CHEZ VOTRE MARCHAND

DE JOURNAUX ET SUR :

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

HACKABLE MAGAZINE n°21

9

https://www.ed-diamond.com

pub_oct2017_half.indd 7

12/10/2017 12:27

ARDUINO'N'CO

MINITEL

UTILISEZ UN MINITEL

COMME ÉCRAN POUR

VOTRE ARDUINO

Denis Bodor

Le Médium Interactif par Numérisation d’Information Téléphonique, ou Minitel, rappellera sans doute bien des souvenirs à nombreux d’entre vous : son utilisation, son clavier mécanique, les services proposés, les 3615 suivis d’un prénom féminin, le bruit caractéristique de la porteuse du modem et le sifflement éprouvant de l’alimentation du tube

cathodique... Le Minitel, avec ses 30 ans de service, est un artefact de la culture et de la technologie française, mais annoncer sa mort en 2012

était prématuré. Ce vénérable équipement peut toujours être utilisé...

avec une carte Arduino.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez un Minitel comme écran pour votre Arduino

Je me souviens de l’été

1998, alors que je

bidouil ais et écrivais

les articles du tout pre-

mier numéro de Linux

Magazine France (on a ajouté le

« GNU/ » ensuite), je découvrais

les petits secrets du Minitel 1B et

sa prise péri-informatique. Il était

possible de l’utiliser comme un

terminal pour son PC sous GNU/

Linux, en utilisant une séquence

spéciale de touches afin de le faire

basculer en 80 colonnes tout en

supportant une plus haute vitesse

de communication (Fnct+T puis A,

Fnct+T puis E et Fnct+P puis 4).

À l’époque, l’USB et les cartes

Arduino n’existaient pas. Les PC

étaient équipés de ports série

RS-232 avec des niveaux de ten-

sion incompatibles avec le Minitel

(5V) et il fal ait assembler un petit

circuit de conversion (avec des

transistors ou un MAX232). C’est

au détour d’un marché aux puces

l’été dernier et en découvrant un

Minitel sur un étal, que l’idée m’est

venue, « il n’y a plus besoin de

conversion, le minitel et une carte

Arduino sont en 5V », et que la

Voici un Minitel

décision fut prise, « Ok, si c’est un

1B Telic Alcatel

1B et que la personne me le fait à

inaudible. Et effectivement, mon Minitel ne siffle plus

en provenance

20€ ou moins, je le prends ».

en ce qui me concerne. Donc, soit je suis tombé sur un

directe du marché

Minitel qui ne siffle pas, soit je n’arrive plus à entendre

aux puces du coin.

Et ce fut le cas. Je rentrais donc

cette fréquence du haut de mes 43 ans. Dans les deux

Il a besoin d’un

chez moi, tout heureux de mon ac-

cas, cela me va très bien !

petit nettoyage,

mais fonctionne

quisition et de pouvoir vérifier, par

parfaitement et

la même occasion, une certaine

pourra servir à la fois

théorie auditive. En effet, l’alimen-

1. UN PETIT MOT SUR LE

de terminal série en

tation THT du tube cathodique de

80 colonnes et de

système d’affichage

l’appareil émettait souvent un siffle-

MINITEL

Vidéotex pour

ment à une fréquence très élevée.

Je ne m’attarderai pas sur le sujet, la page Wikipédia

n’importe quel projet

Or cette fréquence est à la limite

sur le Minitel (https://fr.wikipedia.org/wiki/Minitel)

à base d’Arduino ou

des capacités auditives humaines

décrit de façon très complète l’histoire et la technologie

de Raspberry Pi.

et, en prenant de l’âge, el e devient

utilisée. Il est cependant amusant de noter qu’à la fin

imperceptible sinon totalement

des années 70 certains n’hésitaient pas à annoncer la

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

HACKABLE MAGAZINE n°21

11

ARDUINO'N'CO

MINITEL

Un Minitel est un appareil

relativement simple composé

d’un écran cathodique, d’une

alimentation, d’un modem V.23

et d’un circuit basé sur le proces-

seur Intel 8052, une RAM pour

la mémoire de l’affichage et une

ROM contenant la forme des

caractères. Contrairement à un

terminal série, qui généralement

n’utilise que les symboles des

lettres (plus quelques autres), le

Vidéotex utilise un mode alpha-

mosaïque où on peut afficher

non seulement les caractères

ASCII, mais également des sym-

boles d’un alphabet graphique

ou mosaïque. Cet alphabet est

composé de caractères de deux

La connexion de la carte

colonnes de points de 6 lignes,

Arduino passe par la

mort du papier devant l’arrivée d’un nouveau type

regroupant ainsi les 64 combinai-

prise péri-informatique

de support : la télématique, une véritable révolution

sons possibles de remplissage de

située à l’arrière du

Minitel. Attention,

technologique. Mais le papier est toujours là et

cette « gril e ».

tous les modèles n’en

reste le seul support durable, pratique, capable de

C’est grâce à cela qu’il était

possèdent pas, mais

retenir une information sur une très longue période,

celui le plus facile

possible d’avoir des pages pré-

et ce indépendamment d’une source d’énergie ou

à trouver à ce jour,

sentant un graphisme, aujourd’hui

le Minitel 1B, en est

d’une technologie complexe. Bref, on a pas encore

assez rudimentaire, s’affichant en

heureusement équipé.

trouvé mieux pour « enregistrer » du texte et des

réalité sur un écran de 25 lignes de

dessins pour un sacré bout de temps. Finalement,

40 colonnes (et donc de 75 lignes

le Minitel n’a pas tué le papier, mais Internet, lui,

de 80 pixels). Cette économie d’un

a bel et bien tué le Minitel, sans toutefois, lui non

vrai mode graphique a permis de

plus, tuer le papier.

produire des terminaux peu chers

Après de nombreuses expérimentations, en

tout en s’offrant au passage de la

Bretagne, en Île-de-France ou encore en Alsace,

place pour un peu de couleur. Un

le Minitel est finalement lancé commercialement à

Minitel est capable d’afficher

l’échel e nationale au début des années 80 par les

8 couleurs même si cel es-ci

PTT. Il se connecte, via le réseau téléphonique, à

n’apparaissent que comme des

un réseau appelé Télétel fonctionnant en Vidéotex.

niveaux de gris sur l’écran noir et

Dans l’absolu, le Minitel n’est qu’un équipement

blanc (du plus clair au plus foncé :

permettant de communiquer en Vidéotex, norme

blanc, jaune, cyan, vert, bleu,

Antiope, sur le réseau Télétel, mais rapidement

rouge, magenta et noir). Il est amu-

tout le monde a fini par parler de « services

sant de noter qu’avec la populari-

Minitel », de « serveur Minitel » et de « Minitel »

sation des modems peu coûteux

comme d’un ensemble. C’est en réalité le Vidéotex

et des émulateurs Minitel pour PC,

qui permet l’envoi de pages (écrans) composées

bon nombre de services ont été

de texte et de caractères semi-graphiques et donc

obligé de réviser leurs pages, car

l’utilisation du service.

ce qui pouvait être du plus bel effet

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez un Minitel comme écran pour votre Arduino

en 8 niveaux de gris sur un Minitel

En ce qui me concerne, le recyclage n’est à envisager

devenait absolument horrible en

qu’à la condition que le matériel ne puisse plus être utilisé.

couleur dans un émulateur.

Dans le cas du Minitel, certes 6,5 mil ions de terminaux ne

peuvent pas tous trouver une seconde vie, mais il me paraît

Il existe plusieurs modèles de

important de garder au moins un exemplaire en bonne

Minitel ayant des fonctionnalités et

condition, et d’en faire quelque chose. Après tout c’est un

des caractéristiques sensiblement

morceau d’histoire de notre culture qui, bien que mainte-

différentes, mais le plus commun

nant remisé dans les oubliettes lugubres de la technologie,

est sans doute le Telic d’Alcatel (qui

mérite de trôner en bonne place dans mon musée per-

signifie, au passage, « ALsacienne

sonnel au même titre que mes C64/128, ma NeXTstation

de Constructions Atomiques, de

Turbo, ma SGI Indy ou mon Acorn RiscPC (et non, ce n’est

Télécommunications et d’ÉLectro-

pas un tas de vieux trucs ou un capharnaüm technologique,

nique »), norme Minitel 1B (avec

c’est un « musée personnel », na !).

touches Fnct et Ctrl). Ce petit « B »

était important pour moi à l’époque,

car il signifiait « bi-standard » et

2. UN MINITEL ? MAIS POUR

caractérisait le fait de pouvoir pas-

ser l’appareil en 80 colonnes (mode

QUOI FAIRE ?

VT52) et son modem « retourné »

Le Minitel, et en particulier le 1B, peut servir à énormé-

pour émettre en 1200 bps et rece-

ment de choses aujourd’hui. L’utilisation la plus courante

voir en 75 bps et non simplement

est sans le moindre doute cel e en tant que terminal pour

l’inverse (norme V.23). Mieux en-

un PC GNU/Linux ou une Raspberry Pi. Cette pratique

core, il disposait d’une prise DIN 5 à

étant relativement courante et mise en œuvre de longue

l’arrière permettant de le connecter

date, el e est très vastement documentée, en français sur

à un PC pour échanger des don-

le Web, et je trouve qu’il serait déplacé et redondant d’en

nées directement (sans modem), et

faire étalage ici.

ce à 4800 bps. Tout ceci faisant qu’il

était et qu’il est toujours possible de

À l’autre extrême, si je puis dire, nous avons, par

l’utiliser assez simplement comme

exemple, la superbe réalisation de Pierre Genet qui a lit-

terminal pour une machine sous

téralement désossé son Minitel pour replacer la carte lo-

GNU/Linux ou BSD.

gique par un circuit de sa composition à base de LM1881,

La production de Minitel s’est

arrêtée en 2012, tout comme le

réseau/service Télétel lui-même,

le 30 juin 2012. Quelques 6,5 mil-

lions de Minitels ont été produits et

utilisés, et bien qu’une campagne

Le Minitel est

de démantèlement et de recyclage

capable d’afficher

plusieurs niveaux

des vieux appareils ait été mise en

de gris qui

place (assez tardivement semble-

correspondent en

t-il), il n’est guère étonnant de

réalité à 8 couleurs.

retrouver ces matériels, souvent

Ce croquis de

démonstration, livré

en très bon état et parfaitement

avec la bibliothèque

fonctionnels, dans les brocantes,

dédiée, nous

les marchés aux puces ou même

permet de constater

que ceci est

simplement au fond d’un placard

parfaitement pris en

dans un bureau.

charge.

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

HACKABLE MAGAZINE n°21

13

ARDUINO'N'CO

MINITEL

le transformant en moniteur vidéo noir et blanc (http://www.cfp-radio.com/realisations/rea48/

minitel-01.html). Une fois doté d’une tel e entrée composite, doublé d’un circuit audio, l’écran est parfaitement capable d’afficher de la vidéo provenant d’un lecteur multimédia, d’un ordinateur familial des années 80 ou même d’une Raspberry Pi. L’opération est cependant assez complexe, risquée (on joue avec quelque chose pilotant environ 25000 Volts) et implique la réalisation d’un circuit complet. C’est un peu lourd pour un article.

Le Minitel 1B est capable de servir de terminal pour bien des projets puisqu’il suffit de le passer en 80 colonnes et de changer la vitesse de communication via une séquence de touches, pour pouvoir s’en servir pour tout et n’importe quoi capable de communiquer via une liaison série TTL (0-5V). Ceci ne présente donc pas vraiment d’originalité puisqu’au final cela se résume à la connexion de deux fils (plus la masse) et une utilisation en lieu et place du moniteur série Arduino. C’est trop facile !

Il est bien plus intéressant de laisser le Minitel en mode Vidéotex et d’utiliser ses spécificités historiques, et je pense en particulier au mode alphamosaïque, avec dans l’idée de composer des pages mêlant texte et graphisme. La nature des informations à afficher sera laissée à votre en-tière discrétion, mais on imagine sans peine bien des usages (moniteur de température, horloge, borne interactive, etc.). Après tout, le Minitel n’est rien d’autre qu’un écran piloté via une liaison série, exactement comme on pourrait le faire avec un écran LCD en SPI ou encore avec un écran série Nextion (voir Hackable n°19).

Concernant la communication série via la prise péri-informatique DIN 5 située à l’arrière du Minitel, voici ce que disent les « Spécifications Techniques d’Utilisation » du Minitel 1B des PTT

(facile à trouver en ligne, en PDF) :

1.2 Niveaux électriques

Les niveaux électriques de la prise sont compatibles avec le niveau TTL

collecteur ouvert:

- un niveau de tension supérieur ou égal à 2,5V présenté sur une entrée (Rx ou PT) sera interprété comme un état logique 1;

- un niveau de tension inférieur ou égal à 0,4V présenté sur une entrée (Rx ou PT) sera interprété comme un état logique 0.

[...]

2 Caractéristiques des liaisons

Le module prise assure des échanges bidirectionnels simultanés en asynchrone à une vitesse programmable, dont la valeur en standard est de 1200 bauds.

2.1.1 Signaux Ts et Rx

La réception (signal Rx) et l'émission (signal Tx) des données par le Minitel s'effectuent par des liaisons du type série asynchrone. Le format des signaux est fixe avec 8 bits de données plus un bit de parité paire.

Ceci signifie deux choses importantes :

• une carte Arduino 5V (ou tolérante aux 5V) pourra parfaitement communiquer directement avec le Minitel, que ce soit via le port série physique ou avec la bibliothèque SoftwareSerial ;

• le format des données va nous poser problème, car la configuration par défaut sur Arduino est 8N1 : 8 bits de données, pas de parité et un bit de stop.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez un Minitel comme écran pour votre Arduino

Ce second point est cependant

développement ait ralenti, sinon stoppé. En effet,

gérable sans avoir à jouer avec

c’est en apportant quelques modifications à ce

des configurations avancées des

code, concernant la configuration de la vitesse

registres du microcontrôleur et/

de communication, que je me suis rendu compte

ou avec la modification de la

qu’une fonctionnalité similaire avait été proposée

bibliothèque SoftwareSerial.

en janvier 2017 (via une pull request dans le jar-

La documentation des PTT ne le

gon GitHub), sans pour autant trouver un écho,

Page 68 du

précise pas, mais il y a également

favorable ou non.

document « minitel

un bit de stop et le format est donc

J’ai donc décidé de forker le dépôt GitHub et y

1B Spécification

7E1 (7 bits, parité paire, 1 bit de

ai inclus mon code de configuration de la vitesse,

Techniques

stop). Autrement dit, l’un des bits

d’Utilisation » des

ainsi que quelques autres modifications (détec-

PTT se trouve la

de données en 8N1 est le bit de

tion des caractéristiques du Minitel connecté).

description de la prise

parité en 7E1, nous pouvons de ce

Pour la suite de cet article, cependant, vous pour-

DIN 5 située à l’arrière

fait le considérer manuellement à

rez donc utiliser aussi bien la bibliothèque pro-

de l’appareil, derrière

l’envoi comme à la réception, sans

une adorable petite

posée sur https://github.com/01010101/Minitel

trappe coulissante. Les

toucher à la configuration.

que sur https://github.com/Lefinnois/Minitel,

broches utilisées pour

la connexion à la carte

Et c’est précisément en creu-

puisque nous nous en tiendrons aux fonctionnali-

Arduino UNO sont la

sant de ce côté que je suis tombé

tés de base.

masse (2), Rx (1) sur 6

sur une bibliothèque Arduino

et Tx (3) sur 7.

écrite par Jérôme Saint-

Clair (alias « 01010101 »)

du Graffiti Research Lab

France de Paris. Cette

bibliothèque, nommée sim-

plement Minitel, permet

de faire précisément ce que

je souhaitais et bien plus

encore, afficher des pages

Vidéotex sur l’écran du

Minitel. Cette bibliothèque

est le résultat d’un projet

de son auteur consistant

à capturer des images

d’une webcam avec

Processing pour les en-

voyer sur le Minitel (http://

graffitiresearchlab.fr).

La vidéo de démons-

tration date d’environ 3 ans et le

La bibliothèque de Jérôme Saint-Clair repose

dépôt GitHub de la bibliothèque

sur SoftwareSerial et permet donc d’utiliser

(https://github.com/01010101/

n’importe quel es broches de la carte Arduino

Minitel) affiche des changements

en guise de ligne Rx et Tx. Par défaut, le Rx du

et mises à jour s’étalant entre

Minitel est connecté à la broche 6 et Tx à la 7, les

mai 2013 et avril 2016. Bien que

masses sont bien entendu mises en commun.

tout ceci soit relativement récent

L’aspect matériel s’arrête là, tout le reste est une

(version 0.2), il semblerait que le

question de code.

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

HACKABLE MAGAZINE n°21

15

ARDUINO'N'CO

MINITEL

PAS DE CONNECTEUR ? JE SORS LE PISTOLET À COLLE !

Voici une technique qui pour-

rait sans doute vous être utile

à l’occasion et dont je me sers

tantôt lorsque je ne trouve pas

ou n’ai pas sous la main de

connecteur adapté pour une

prise femelle. C’est celle que

j’ai utilisé avec mon Minitel

en attendant l’arrivée de mes

connecteurs DIN 5 par la poste.

À ma connaissance, elle n’a

jamais été décrite nulle part et

je dois avouer que je ne suis

pas peu fier de ma trouvaille :)

L’idée est la suivante : un

connecteur mâle n’est rien

d’autre qu’une série de broches

maintenues dans un certain

agencement par un support

généralement en plastique.

Pour obtenir un connecteur

mâle, il suffit donc d’utiliser

la prise femelle comme moule

pour y placer les connecteurs

et combler les interstices avec quelque chose qui soit temporairement fluide, mais se solidifie en un temps raisonnable : de la colle de pistolet à colle.

La réelle difficulté réside généralement dans la recherche de broches à la bonne taille. Dans le cas de la prise DIN 5 du Minitel, jumpers, trombones et câbles rigides pour platine à essais (voir le nu-méro précédent) étaient tous d’un diamètre insuffisant. Cela s’est terminé avec un brin de cuivre émaillé provenant d’un transformateur, qu’il a fallu débarrasser de son vernis isolant par grattage.

Une fois ces sections de brins soudées à des câbles/jumpers pour platine à essais, il a suffi de les placer dans les trous correspondants de la prise DIN femelle du Minitel et noyer le tout dans la colle. Il faut faire attention à correctement remplir l’espace entre les broches tout en évitant de saturer les bords, ce qui rendrait ensuite l’extraction difficile. On procède en plusieurs fois de fa-

çon à former un connecteur moulé autour des broches sans trop laisser de vide. Je recommande également de faire un petit essai en posant une petite goutte, de façon à s’assurer que la colle froide se retire relativement facilement du support.

Il suffit ensuite d’attendre que tout cela refroidisse pour délicatement, mais tantôt avec insistance, décoller le tout de la prise femelle en s’aidant, par exemple, d’un tournevis plat. On ébavure ensuite au cutter les coulures superficielles et les fils de colle tirés de-ci de-là, et le tour est joué.

Vous obtenez un connecteur, certes très laid, mais parfaitement fonctionnel.

Je suppose qu’il est possible d’améliorer la technique en utilisant un « fond » en papier pour éviter que la colle n’adhère à la prise et, éventuellement, faire un petit coffrage en carton ou en plastique pour obtenir une forme bien cylindrique. Cependant, la forme « vieux chewing-gum mâché » ne m’a jamais posé de problème.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez un Minitel comme écran pour votre Arduino

La connexion d’une carte

Arduino UNO à un Minitel

1B se résume à trois

simples câbles : un pour

la masse et deux pour la

communication série. Pas

un seul composant n’est

nécessaire puisque les

niveaux de tension sont

parfaitement compatibles

entre les deux équipements.

3. COMMUNIQUONS UN PEU AVEC LE MINITEL

La connexion de la carte Arduino au Minitel est simplissime et une fois le périphérique sous tension, nous n’avons plus qu’à envoyer nos instructions pour contrôler l’affichage. Grâce à la bibliothèque de Jérôme Saint-Clair, nous n’avons pas besoin de nous soucier du format de données ni même de la configuration. Il suffit de télécharger la bibliothèque depuis GitHub et la copier dans le répertoire libraries de son carnet de croquis. On a alors accès à un certain nombre d’exemples, dont MinitelDemo présentant l’ensemble des fonctionnalités.

Nous verrons la partie graphique un peu plus loin, mais dans un premier temps, penchons-nous tout d’abord sur le texte avec un premier croquis :

#include <SoftwareSerial.h>

#include <Minitel.h>

//Minitel m(6,7,4800);

// Objet représentant la connexion avec les valeurs

// par défaut

Minitel m;

void setup() {

// efface l'écran

m.clearScreen();

// mode texte

m.textMode();

// couleur avant-plan

m.textColor(WHITE);

// couleur arrière-plan

m.bgColor(BLACK);

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

HACKABLE MAGAZINE n°21

17

ARDUINO'N'CO

MINITEL

// texte à la position courante

m.text("Coucou le monde !");

// taille élargie en hauteur et largeur

m.charSize(SIZE_DOUBLE);

// texte à une position donnée

m.text("JE SUIS UN MINITEL", 1, 3);

// taille normale du texte

m.charSize(SIZE_NORMAL);

// déplacement du curseur

m.moveCursorTo(1, 4);

// affiche le texte à la nouvelle position

m.text("et je voudrais juste dire...");

m.charSize(SIZE_DOUBLE);

m.textColor(WHITE);

m.bgColor(MAGENTA);

m.text(" MERCI HACKABLE ! ", 1, 8);

m.bgColor(BLACK);

m.textColor(CYAN);

m.text(" POUR CETTE", 1, 10);

m.textColor(BLUE);

m.text(" NOUVELLE VIE", 1, 12);

m.textColor(GREEN);

m.text(" <3 <3 <3 <3 <3", 1, 14);

m.charSize(SIZE_NORMAL);

m.textColor(WHITE);

m.text("Vous aussi, adoptez un Minitel !", 1, 16);

// l'affichage de texte déplace le curseur

// Si on précise une position

m.text("Nous sommes gentils, propres et très ", 1, 18);

// le texte est mis au bout

m.text("affectueux avec les humains, surtout ceux ");

// et revient à la ligne automatiquement

m.text("qui lisent Hackable :)");

// mais il faut savoir où il s'arrête pour ne pas

// écraser le texte déjà affiché et écrire ensuite

// au bon endroit

m.textColor(BLUE);

m.text(" Ceci était un message du CSM", 1, 22); m.text(" (Comité de Soutien des Minitel)", 1, 23);

}

void loop() {

m.moveCursorTo(1, 4);

delay(2000);

}

Pour commencer à utiliser le Minitel comme afficheur, nous n’avons qu’à déclarer un objet de type Minitel, ici appelé m. On utilisera ensuite les méthodes de cet objet pour contrôler l’affichage. L’instanciation de m déclenche automatiquement la configuration du port série logiciel avec les broches 6 et 7 par défaut (mais aussi de Serial qui n’est pourtant pas nécessaire, j’ai retiré cela dans ma version). Il est cependant possible de préciser d’autres broches, par exemple avec Minitel m(8,9); .

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez un Minitel comme écran pour votre Arduino

Le Minitel utilise sa mémoire

vive comme tampon d’affichage

et un curseur peut être déplacé en

spécifiant une colonne et une ligne.

Par défaut, le curseur ne s’affiche

pas, mais il est possible de l’activer

avec cursor() et le désactiver avec

noCursor() (ou cursor(true)

et cursor(false)). Le texte qui

sera alors envoyé à l’écran sera

tout simplement placé à la position

du curseur. Nous voyons dans ce

croquis que la méthode text()

peut prendre en argument le texte à

écrire, mais aussi, éventuel ement

Une fois la

la position sous la forme de deux

que l’envoi d’un tel attribut « consomme » un caractère.

connexion

valeurs numériques. Utiliser

C’est pour cette raison qu’il faut placer un espace en début

réalisée, envoyer

du texte sur

moveCursorTo() ou spécifier les

de la chaîne de caractères devant adopter cet attribut. Ceci

l’écran du

coordonnées en argument de

est malheureusement la conséquence d’un choix technique,

minitel est un

text() est une affaire de goût, les

car le code envoyé pour changer la couleur, par exemple,

jeu d’enfant. Il

est possible de

deux fonctionnent.

occupe la place d’un caractère. Il faut faire avec. .

choisir la taille

Il faut cependant faire atten-

Enfin, contrairement aux exemples livrés avec Minitel,

du texte (parmi 4

options) ainsi que

tion à une chose importante :

nous avons ici tout placé dans la fonction setup()

la couleur d’arrière

lorsque vous changez la tail e des

pour n’afficher/envoyer qu’une fois la page à l’écran. En

et d’avant-plan

caractères (avec charSize()),

l’absence d’activité, l’écran du Minitel passe en veil e afin

(et même de

faire une faute

la hauteur de ces derniers peut

de ménager le revêtement interne du tube cathodique

d'orthographe).

être double (SIZE_DOUBLE

(image fantôme). Les exemples redessinent entièrement

ou SIZE_DOUBLE_HEIGHT) et

l’écran toutes les deux secondes mais, comme avec notre

cette dimension s’étend vers la

croquis, on peut simplement déplacer le curseur dans

ligne précédente. En d’autres

loop() pour obtenir le même résultat et garder éveil é

termes, si vous placez un texte

l’écran sans perdre du temps à dessiner.

de tail e SIZE_NORMAL en ligne

5, par exemple, le texte en SIZE_

4. UN PEU D’AIDE DE PYTHON

DOUBLE ou SIZE_DOUBLE_HEIGHT

devra être positionné en 7 pour ne

POUR LES IMAGES

pas écraser la ligne 5.

Afficher des graphiques en mode alphamosaïque

Bien que l’affichage soit en noir

n’est, en principe, pas difficile du tout. Le fonctionnement

et blanc, il vous est possible de pré-

même du système et la façon dont cela est géré par la

ciser, avant l’envoi d’un texte, une

bibliothèque Minitel rendent l’affichage d’un caractère

couleur d’avant-plan (textColor())

graphique des plus aisé. Il suffit de passer en mode gra-

et d’arrière-plan (bgColor()) parmi

phique et d’utiliser la méthode adéquate pour envoyer le

les valeurs BLACK, RED, GREEN,

caractère :

YELLOW, MAGENTA, BLUE, CYAN et

WHITE. Cette configuration reste

m.graphicMode();

active tant que vous ne rechangez

m.moveCursorTo(10, 5);

m.graphic("001111");

pas les couleurs. Notez cependant

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

HACKABLE MAGAZINE n°21

19

ARDUINO'N'CO

MINITEL

Les méthodes permettant le

changement de couleur d’avant

et d’arrière-plan sont les mêmes

que cel es utilisées pour le texte.

La méthode graphic() prend en

argument une chaîne de carac-

tères représentant, de gauche à

droite, la liste des pixels à al umer

(1) ou éteindre (0) sur une gril e de

2×3, en commençant par la pre-

mière colonne de la première ligne

et s’étendant de gauche à droite

et de haut en bas. "101010" don-

nera donc un caractère avec les

trois pixels de gauche à la couleur

d’avant-plan et les trois de droite

à celle d’arrière-plan. "110011"

al umera ainsi les deux pixels du

haut ainsi que les deux du bas.

Vous avez compris le principe. .

En commençant à travailler avec le mode alphamosaïque, on se rapproche des pages Vidéotex utilisées à l’époque. Voici donc notre solution pour remplacer Le problème n’est pas tech-Internet, les blogs, la boutique en ligne : le 3615 HACKABLE (sous réserve de nique, mais pratique. Pour afficher

validation par le gérant des Éditions Diamond, c’est pas gagné).

une image composée ainsi de,

disons, 30 pixels sur 30 pixels, il

faudra donc utiliser graphic()

Parmi les exemples livrés avec la bibliothèque Arduino, on retrouve des pages 150 fois (30/2 fois 30/3). On pour-Vidéotex qui rappelleront sans doute des souvenirs à certains et certaines...

ra cependant accélérer l’affichage

et simplifier les choses en utili-

sant la méthode repeat() pour

demander au Minitel de répéter

le dernier caractère le nombre de

fois passé en argument. Afficher

une ligne de 30 pixels (et donc

de 15 caractères) identiques

ainsi peut être fait en spécifiant

le caractère avec graphic() une

fois et en utilisant repeat(14)

avant de passer à la ligne suivante

avec moveCursorTo(). repeat()

fonctionne également avec les

caractères du mode texte.

Cette astuce/accélération tou-

tefois ne rend pas la tâche véri-

tablement plus facile. Une autre

solution, mais nous privant de

l’utilisation de repeat() consiste

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez un Minitel comme écran pour votre Arduino

à utiliser la méthode textByte() permettant de spécifier

une donnée à envoyer directement au Minitel. En plaçant

la valeur de chaque caractère dans un tableau, on peut

créer une boucle envoyant l’image complète, caractère

après caractère, ligne après ligne. Le résultat est plus

compact dans le croquis puisqu’il suffit de déclarer une

variable (un tableau de char) et surtout, il devient pos-

sible de facilement stocker plusieurs images pour les

afficher à souhait au moment et à l’endroit voulu (sans

avoir des croquis de centaines de lignes de code).

La question qui se pose naturel ement ensuite est

cel e concernant la manipulation de ces images et plus

La solution la plus

exactement, comment obtenir cette liste de valeurs à partir d’un format d’image plus

« propre » pour

simple à modifier. C’est là qu’on fera intervenir Python et le module PIL. Ceci pourrait utiliser la prise péri-informatique consiste

être réalisé avec n’importe quel langage (Java, Processing, C, Perl), mais il faut avouer à faire usage d’un

que Python est bien pratique pour rapidement coder ou prototyper quelque chose sur connecteur DIN 5

un coin de table (ou un coin de Raspberry Pi en l’occurrence).

mâle à souder. Mais

ceci n’empêche

L’idée est donc de créer une image en noir et blanc avec un logiciel adapté (Gimp, pas de bricoler une

PhotoShop, Paint, etc.) tout en s’assurant de correspondre aux besoins du système solution temporaire

en attendant que le

alphamosaïque :

matériel arrive...

• image en noir et blanc,

• largeur maximum de 40 colonnes de 2 pixels,

• hauteur maximum de 24 lignes de 3 pixels,

• le nombre de pixels en largeur doit être pair,

• le nombre de pixels en hauteur doit être multiple de 3.

Python permettrait de manipuler une image d’une tail e et d’un format quelconque de manière à la convertir selon ces critères, tout comme il est possible d’utiliser, sur une Pi, des outils comme ceux d’ImageMagick pour procéder à la conversion avant de faire intervenir notre script Python. L’idée étant de montrer qu’il est relativement aisé de programmer rapidement un script pour accomplir cette tâche, je suis parti du principe qu’en créant une image d’une dimension maximum de 80×72 pixels, qui a tout d’une icône donc, on devra de toute façon ajuster un certain nombre de pixels à la main. N’espérez pas pouvoir convertir une photo couleur de votre smartphone et obtenir un résultat satisfaisant en laissant simplement faire des outils ou des algorithmes.

Voici donc le script Python :

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sys

import os

from PIL import Image

# test argument

if len(sys.argv) != 2:

sys.exit("Veuillez préciser un nom de fichier (PNG, JPEG, etc)") Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) https:/ www.ed-diamond.com

HACKABLE MAGAZINE n°21

21

ARDUINO'N'CO

MINITEL

# essai ouverture image

try:

im = Image.open(sys.argv[1])

pix = im.load()

except:

sys.exit("Impossible d'ouvrir le fichier image")

# largeur et hauteur en pixels

width, height = im.size

# nom de la variable dans le croquis

nom = os.path.splitext(sys.argv[1])[0]

# vérifications

if width/2 > 40:

sys.exit("Erreur : L'image doit avoir 80 pixels de large maximum") if height/3 > 24:

sys.exit("Erreur : L'image doit avoir 72 pixels de haut maximum") if width % 2:

sys.exit("Erreur : L'image doit avoir une largeur multiple de 2") if height % 3:

sys.exit("Erreur : L'image doit avoir une hauteur multiple de 3") print "// Image: " + nom + "(" + str(width) + "x" + str(height) + ")"

x = 0

y = 0

print "#define L_" + nom + " " + str(width/2) print "#define H_" + nom + " " + str(height/3) print "\nPROGMEM const byte " + nom + "[]={"

while y < height:

print " ",

x = 0

while x < width:

val = 32

val += 1 if pix[x,y] > 0 else 0;

val += 2 if pix[x+1,y] > 0 else 0;

val += 4 if pix[x,y+1] > 0 else 0;

val += 8 if pix[x+1,y+1] > 0 else 0;

val += 16 if pix[x,y+2] > 0 else 0;

val += 32 if pix[x+1,y+2] > 0 else 0;

if y > (height-4) and x > (width-3):

print val,

else:

print str(val) + ",",

x += 2;

print ""

y += 3;

print "};"

Dans les grandes lignes, le fonctionnement est relativement simple puisque, après les vérifications d’usage, on parcourt simplement les pixels toutes les deux colonnes et toutes les trois lignes. De là, on inspecte les 5 pixels adjacents pour en déduire un caractère de 2×6 et encoder cela en une valeur. Le résultat est directement affiché à l’écran en ligne de commandes sous la forme d’une déclaration d’un tableau en C (le nom de la variable est tiré du nom de fichier de l’image) : Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 22

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez un Minitel comme écran pour votre Arduino $ ./img2gcharTAB.py logo.png

// Image: logo(64x60)

#define L_logo 32

#define H_logo 20

PROGMEM const byte logo[]={

32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, ...

32, 32, 32, 32, 32, 32, 32, 32, 64, 80, 92, 94, ...

32, 32, 32, 32, 32, 32, 88, 94, 95, 95, 47, 47, ...

32, 32, 32, 32, 88, 95, 95, 95, 95, 95, 95, 93, ...

32, 32, 64, 94, 95, 63, 39, 35, 35, 35, 75, 47, ...

32, 72, 95, 63, 33, 32, 64, 80, 60, 68, 90, 32, ...

64, 95, 63, 33, 32, 56, 83, 32, 80, 46, 35, 43, ...

74, 95, 53, 32, 74, 33, 95, 39, 33, 32, 32, 32, ...

74, 95, 61, 44, 95, 44, 95, 32, 32, 32, 32, 32, ...

74, 95, 53, 32, 74, 48, 95, 68, 80, 48, 32, 32, ...

32, 95, 95, 48, 32, 43, 80, 32, 47, 45, 80, 56, ...

32, 34, 95, 95, 84, 32, 32, 35, 35, 35, 75, 32, ...

32, 32, 34, 79, 95, 93, 92, 80, 80, 80, 90, 92, ...

32, 32, 32, 32, 34, 95, 95, 95, 95, 95, 95, 95, ...

32, 32, 32, 32, 90, 95, 55, 33, 32, 66, 79, 95, ...

32, 32, 32, 32, 95, 95, 74, 52, 92, 72, 55, 95, ...

32, 32, 32, 32, 79, 95, 86, 64, 92, 48, 90, 95, ...

32, 32, 32, 32, 34, 79, 95, 95, 95, 95, 95, 95, ...

32, 32, 32, 32, 32, 32, 35, 43, 47, 95, 95, 55, ...

32, 32, 32, 32, 32, 32, 32, 32, 72, 95, 63, 32, ...

};

Il suffira ensuite de copier/col er cela (ou rediriger la sortir avec > ) dans un .h qu’on intè-

grera à notre croquis Arduino dans un nouvel onglet et on pourra alors se pencher sur la fonction d’affichage :

void afficheImg(const byte *data, int l, int h, int posx, int posy) {

for (int y=0; y<h; y++) {

m.moveCursorTo(posx, posy+y);

for (int x=0; x<l; x++) {

m.textByte(pgm_read_byte_near(data+(y*l)+x));

}

}

}

Afin d’économiser au maximum la mémoire vivre de la carte, notez le mot-clé PROGMEM

forçant le stockage de ces données en mémoire flash, ainsi que l’utilisation de pgm_read_

byte_near() pour les lire. La fonction afficheImg() prend en argument un pointeur sur le début des données, la largeur en colonnes, la hauteur en lignes, ainsi que la position sur l’axe horizontal et vertical. Il ne s’agit bien entendu pas de pixels, mais de caractères alphamosaïques. On pourra ensuite dans setup() ou loop() utiliser tout simplement : m.graphicMode();

m.textColor(CYAN);

m.bgColor(RED);

afficheImg(logo, L_logo, H_logo, 5, 3);

Ceci affichera l’image stockée dans logo[] à partir de la colonne 5 de la ligne 3. Il ne vous reste donc plus qu’à vous amuser à créer et convertir des images ainsi, mélanger cela avec un peu de texte pour composer et obtenir de bel es pages Vidéotex pour vos projets.

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

HACKABLE MAGAZINE n°21

23

ARDUINO'N'CO

MINITEL

montre un nouvel exemple ajouté,

appelé MinitelInfo. D’autres

améliorations sont certainement

encore possibles.

Enfin, il y a tout l’aspect maté-

riel qu’il est possible d’explorer.

On peut envisager d’intégrer un

module Bluetooth dans l’appareil

et donc ne plus avoir à utiliser

de liaison série filaire. On peut

également s’écarter des cartes

Arduino et utiliser un ESP8266

pour apporter le Wifi à ce

vénérable équipement. Et, bien

entendu, sous réserve de faire

attention au niveau de tension,

On peut réaliser

ou de tout simplement utiliser un

toutes sortes de

pages en peu de

POUR FINIR

convertisseur USB/série, rien

temps à condition

d’utiliser les bons

Cet article déjà fort long ouvre la voie à bon nombre

ne vous empêche d’utiliser ou

outils et la bonne

d’améliorations. Nous n’avons, en effet, pas parlé de

d’intégrer une Pi. Frédéric BIS-

approche. Un script

l’utilisation du clavier, mais les exemples livrés avec

SON, alias Zigazou, a développé

Python permettant

la bibliothèque Minitel devraient rendre cela limpide.

un module PyMinitel pour Python

de créer une image

alphamosaïque à

Le script Python est aussi une piste à poursuivre, en

(https://github.com/Zigazou/

partir d’un fichier

incluant éventuel ement un prétraitement des images,

PyMinitel) qui offre plus ou

graphique prend,

mais aussi la conversion de 8 niveaux de gris en cou-

moins les mêmes fonctionnalités

certes, du temps

leurs du Minitel pour améliorer le rendu. Notez cepen-

que la bibliothèque pour Arduino.

à être développé,

mais accélère

dant que le mode alphamosaïque travail e avec des

Et si tant est qu’il soit néces-

grandement la suite

caractères de 2×6 et bien qu’il soit possible de changer

saire de le préciser, si vous

des opérations.

de couleur d’un caractère (2×3 pixels) à l’autre, un

trouvez un Minitel, gardez-le !

résultat parfait ne pourra être obtenu.

La campagne de recyclage a

provoqué un effet inattendu : ces

Enfin, la bibliothèque aussi peut être améliorée en

matériels commencent à se faire

incluant des fonctionnalités supplémentaires. Il est par

rares et donc cher. Un Minitel

exemple possible de faire en sorte que la vitesse de

1 ou 1B Telic peut toujours être

communication sur la prise péri-informatique soit aug-

trouvé pour environ 20€, mais

mentée (jusqu’à 4800 bps pour un Minitel 1B, soit 4 fois

un Minitel 2 vous coûtera déjà

plus vite que la normale), et ce sans avoir à utiliser une

un peu moins de 60€ (cher payé

séquence de touches au clavier. Ceci est intégré à ma

pour atteindre 9600 bps). Les

version de la bibliothèque, il suffit de spécifier la vitesse prix montent ensuite rapidement souhaitée en troisième argument lors de la déclaration

avec des modèles moins cou-

de l’objet de type Minitel (Minitel m(6,7,4800); ).

rants comme les Minitel NFZ 300

Autre fonction également ajoutée, la détection ou

ou les Minitel 2 de Philips. Le

plus exactement l’interrogation de la ROM du Mini-

Minitel est maintenant une pièce

tel qui annonce alors son type, son constructeur et

de col ection, traitez le vôtre

diverses caractéristiques. Ceci peut être obtenu en

avec respect et il vous le rendra

invoquant la méthode getMinitelInfo() comme le

au centuple... DB

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

ACTUELLEMENT DISPONIBLE

LINUX PRATIQUE N°104

INITIEZ-VOUS AUX BITCOINS

& CRYPTO-MONNAIES !

NE LE MANQUEZ PAS

CHEZ VOTRE MARCHAND DE JOURNAUX ET SUR :

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

https:/ www.ed-diamond.com

HACKABLE MAGAZINE n°21

25

pub_magazines_oct2017.indd 4

12/10/2017 14:18

ARDUINO'N'CO

T-SHIRT INTERACTIF

FABRIQUEZ VOTRE

T-SHIRT INTERACTIF AVEC

UN LILYPAD ARDUINO

Axelle Apvrille

Vous avez sans doute déjà vu des montres connectées, des bracelets sportifs connectés, mais le T-shirt connecté, là, quelle classe pour un(e) informaticien(ne) ! Il y a moyen d’allier vos penchants de « hacker » à vos talents artistiques. Mais cela peut aussi être l’occasion de quelques frustrations : j’ai failli jeter le T-shirt par la fenêtre (ou à la poubelle) au moins 3 fois. Alors si vous envisagez de vous lancer (dans le projet, pas par la fenêtre), lisez cet article !

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Fabriquez votre T-shirt interactif avec un Lilypad Arduino

Lorsque Sparkfun [1] a

sorti une gamme de

composants électro-

niques portables sur soi

(« wearable »), cela m’a

tout de suite intéressée. L’occasion

de faire quelque chose de joli, de

geek et d’original ! Cette gamme,

baptisée Lilypad, est faite de com-

posants électroniques que l’on peut

coudre sur un vêtement avec du fil

conducteur, et que l’on peut égale-

ment passer (délicatement quand

même) au lave-linge. Il existe de

nombreux composants : des LEDs,

boutons, capteurs et même des

Arduino.

Je me suis alors mise en tête de

Figure 1 : Vue

rapprochée

faire un T-shirt « intel igent », qui

Les composants de la gamme Lilypad, eux, sont sou-

du capteur de

utilise divers composants, sans tout

dés sur des mini circuits sur lesquels les entrées/sorties

température

de même viser trop compliqué pour

et alimentation sont reliées à des trous bordés de métal

Lilypad et de

une première réalisation. Mon objectif conducteur. L’idée est alors de coudre autour de ces trous deux boutons

Lilypad. Les

est d’avoir un T-shirt qui relève la

afin d’une part de fixer le mini circuit sur le vêtement, mais

composants

température ambiante et l’affiche de

aussi de connecter électriquement les circuits. Les fils

sont cousus

façon il ustrative sur un thermomètre

doivent aussi être protégés entre eux. Pour cela, j’ai utilisé

avec du fil

gradué à l’aide de plusieurs LEDs.

des bandes thermocollantes.

conducteur.

Ainsi, rien qu’en regardant le T-shirt,

Pour alimenter l’ensemble des circuits, il faut aussi bien

on peut savoir qu’il fait par exemple

entendu une alimentation. J’aborderai ce point plus tard

entre 15 et 20°C.

dans l’article, car j’ai rencontré de nombreux déboires.

1. ÉLÉMENTS

MATÉRIEL PRIX INDICATIF

Lilypad Arduino USB [2] ATmega32U4

27.00 €

C’est l’heure des courses (cf.

Capteur de température Lilypad MCP9700

5.40 €

tableau 1) ! Il nous faut un capteur

de température, des LEDs pour le

Fil conducteur en bobine de 9 mètres

3.25 €

retour visuel et un microcontrôleur

(en fait, il faut bien ça)

pour piloter l’affichage des LEDs en

5 LEDs Lilypad

5.40 € les 5

fonction de la température.

2 boutons poussoirs Lilypad (voir sections 3 et 4)

2 x 1.70 €

Pour relier les composants entre

Batterie e-Textile, ex. :

eux, c’est la spécificité de la cou-

https://www.sparkfun.com/products/13112

5.00 €

ture connectée, nous utilisons du

(voir section 9)

fil conducteur. Comme tout fil, le fil

Bande thermocol ante (voir section 10)

3.00 €

conducteur est distribué en bobine,

T-shirt

5.00 €

mais il est hélas plus cher, de couleur

métal isée uniquement, mais bien sûr

Total

57.45 €

c’est un excel ent conducteur !

Tableau 1 : Matériel indispensable à la réalisation du T-shirt connecté.

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

HACKABLE MAGAZINE n°21

27

ARDUINO'N'CO

T-SHIRT INTERACTIF

Enfin, pour tester avant de coudre, il est pratique

d’avoir des pinces crocodiles - à moins que vous ne pré-

fériez utiliser une platine à essai avec des fils scotchés

aux composants. Et bien sûr, il vous faut un T-shirt.

Faut-il être un as de la couture pour faire ce T-shirt

connecté ? Non ! D’ail eurs, je suis une très mauvaise

couturière. Il faut juste savoir faire le point avant [3], et arrêter des fils. C’est suffisant pour un T-shirt de base.

Vos compétences éventuel es supplémentaires vous

permettront sans doute des bonus artistiques !

Figure 2 : Première

étape : la LED est

AUTRES OUTILS UTILES

IMPORTANCE

cousue sur un tissu

Aiguil e à relativement gros chas

Indispensable

d’essai. La pile

bouton est insérée

Ciseaux

Indispensable

dans un porte-pile

Dé à coudre

Optionnel

bouton Lilypad que

j’avais.

Découd-vite

Quasi indispensable

Épingles

Quasi indispensable

Feutrine, tissus, col e à tissus, éléments décoratifs

Dépend du projet exact réalisé

Fer à souder

Dépend du projet exact réalisé

Machine à coudre

Dépend du projet exact réalisé

Pinces crocodiles

Optionnel, mais pratique

Voltmètre

Indispensable

Tableau 2 : Autre matériel ou outils utiles.

2. ÉTAPES DE MONTAGE

À moins d’être très expérimenté en couture connectée, coudre tous les composants pour tester ensuite est tout sauf une bonne idée, même pour un projet qui ne paraît pas compliqué. Au contraire, il vaut mieux procéder par petites étapes incrémentales et tout vérifier petit à petit :

1. Vérification de l’allumage d’une LED (voir Figure 2). Sur un bout de tissu sans importance, j’ai cousu une LED que j’ai alimentée par une pile bouton. Cela a permis de m’essayer au fil conducteur.

2. Lecture de la température en connectant le capteur de température au Lilypad Arduino USB. J’ai fait cette étape sans aucune couture, en reliant les composants avec des pinces crocodiles. On relie le + du capteur au + de l’Arduino, le – au –

et le S (signal) du capteur à, par exemple, A5 sur l’Arduino. Enfin, j’alimente l’Arduino par le port USB. Je détail erai un peu plus loin exactement comment lire la température.

3. Dessin du circuit complet, afin de savoir où coudre sur le T-shirt (voir Figure 3).

J’ai effectué mon croquis à l’aide de Fritzing [4].

4. Couture des éléments sur le T-shirt.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Fabriquez votre T-shirt interactif avec un Lilypad Arduino

5. Test et résolution des

problèmes – toujours pré-

sents sur un tel système :

nous verrons par la suite

ceux que j’ai rencontrés, et

comment les résoudre.

3. LIRE LA

TEMPÉRATURE

La documentation du capteur

Figure 3 :

Croquis du

de température [5] nous explique

circuit réalisé

que le voltage du signal S du cap-

à l’aide de

teur est fonction de la tempéra-

Fritzing.

ture. Précisément, le capteur est

censé fournir 0.5V à 0°C, 0.75V à

25°C etc., c’est-à-dire 10mV par

degré Celcius.

Le signal S du capteur est

relié, dans mon cas, à la broche analogique A5 du Lilypad Arduino USB. Pour lire la tension, on utilise la fonction analogRead(). Cel e-ci convertit l’interval e 0 - 3.3V (le Lilypad Arduino USB

fonctionne en 3.3V [2]) en un interval e 0-1023. Nous avons donc 3.3 / 1024 = 0.003223 volts par unité.

Dans un croquis Arduino, la lecture de la température se fait donc ainsi : int sensorPin = A5;

sensorValue = analogRead(sensorPin);

degreesC = ((sensorValue * 0.003223) - 0.5) * 100 ;

En essayant le circuit avec les pinces crocodiles, on se rend vite compte que la théorie est quelque peu éloignée de la pratique. Il y a à la fois un problème de fluctuation des données (la température lue varie d’une seconde à l’autre) et un problème de précision du capteur. Un capteur de température de meil eure qualité serait bien entendu une solution, mais la gamme Lilypad n’en propose qu’un seul, donc à moins de prendre un capteur de température en dehors de cette gamme et de le coudre sur le tissu, il n’y a pas d’alternative de ce côté. J’opte plutôt de tirer parti du capteur que j’ai :

1. Lisser les variations de température en effectuant 10 relevés de température et en prenant la moyenne comme résultat.

2. Calibrer le capteur en jouant sur le coefficient 0.003223 pour ajuster la température. Par exemple, si la température lue par le capteur est un peu basse par rapport à la réalité, je peux reprogrammer le Lilypad Arduino avec un coefficient légèrement plus élevé pour lire une température plus proche de la réalité.

Oui, mais reprogrammer le Lilypad Arduino USB nécessite un ordinateur à portée de main. On a beau être des geeks, on ne se promène pas avec un ordinateur attaché à son T-shirt ! Comment faire ? J’ai choisi d’ajouter deux boutons à mon circuit : un bouton signifiera « augmenter le Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) https:/ www.ed-diamond.com

HACKABLE MAGAZINE n°21

29

ARDUINO'N'CO

T-SHIRT INTERACTIF

coefficient » (et donc la température) et l’autre « diminuer le

borne « + ». Dans mon cas, j’ai

coefficient ». Ces deux boutons me permettront d’ajuster la

connecté la borne « + » de mes

température lue sur le T-shirt en fonction d’une température

5 LEDs respectivement aux sor-

de référence (station météo par exemple).

ties digitales 2, 3, 9, 10, et 11, et

la borne « - » à une masse com-

mune (voir Figure 3).

4. BOUTONS

Dans un croquis , on al ume une

Les boutons poussoirs Lilypad ont une borne « - », que je

LED avec digitalWrite(led,

connecte à la masse, et une borne signal (S) que je relie à

HIGH) et on l’éteint avec

une broche analogique du Lilypad Arduino USB (ex : A3).

digitalWrite(led, LOW).

Pour savoir si un bouton est enfoncé ou pas, on utilise la

Pour mon T-shirt, j’al ume pro-

fonction digitalRead() :

gressivement les LEDs en fonc-

tion de la température. Entre 10 et

int buttonPlus = A3;

15°C, je n’al ume que la première

int buttonValue = digitalRead(buttonPlus);

if (buttonValue == LOW) {

LED, entre 15 et 20°C j’al ume les

Serial.print("Bouton + appuyé");

deux premières et ainsi de suite.

} else {

À plus de 30°C, j’al ume donc

Serial.println("Bouton + pas appuyé");

toutes les LEDs (j’habite dans le

}

Sud. .). L’allumage progressif des

LEDs permet de simuler le mer-

Suis-je trop binaire ? Je pensais que cela suffisait.

cure d’un thermomètre, avec une

Mais, sans rien d’autre, non, cela ne marche pas tout à fait.

granularité moindre, mais un plus

Lorsqu’on appuie sur le bouton, tout va bien, cela fonctionne

bel effet ;-)

comme prévu : le signal est relié à la masse, et on obtient

donc un signal bas (LOW). Le problème survient lorsque le

Le croquis final utilisé pour mon

bouton n’est pas appuyé. Dans ce cas-là, le signal n’est relié

T-shirt connecté peut être télé-

à rien, et renvoie donc une valeur assez aléatoire qui peut

chargé depuis [10].

tout aussi bien être bas (LOW) que haut (HIGH)...

La solution est d’ajouter au circuit une grosse résistance,

6. TRACER LES

pour que le signal lu soit haut (HIGH) lorsque le bouton n’est pas enfoncé. N’ayez pas peur, pas besoin d’ajouter une

COUTURES

résistance à votre T-shirt, le Lilypad Arduino USB contient

Si vous avez tout connecté

de tel es résistances, pour les activer il suffit de préciser le

avec des pinces crocodiles (ou à

mode INPUT_PULLUP :

l’aide d’une platine d’essais), vous

void setup()

avez probablement un beau tas

{

de fils. Pas question de faire pareil

pinMode(buttonPin, INPUT_PULLUP);

sur le T-shirt !

...

}

Premièrement, il faut absolu-

ment limiter la quantité de fil

conducteur à utiliser, que ce soit

5. ALLUMER LES LEDS

pour le côté esthétique, le côté

financier ou la conductivité. Le

Al umer ou éteindre une Lilypad LED ne présente aucune

fil conducteur a une faible résis-

difficulté, donc je ne m’y attarderai pas. Ces LEDs sont

tance, certes, mais à force cela

soudées sur de petites plaques avec une borne « - » et une

finit par bloquer le courant.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Fabriquez votre T-shirt interactif avec un Lilypad Arduino

Deuxièmement, il faut forcé-

ment éviter les croisements

avec du fil conducteur à moins de

créer des courts circuits !

Pour ce point, j’ai tenté d’uti-

liser Fritzing. Outre tracer des

circuits, le logiciel permet éga-

Figure 4 : Si on

ne peut éviter un

lement de trouver le meilleur

croisement de fils,

chemin pour relier les compo-

il faut se servir du

sants entre eux. C’est la fonction

moins souple. Si vous envisagez de l’utiliser à la ma-

tissu comme isolant

d’auto-routage. Je ne suis pas

chine à coudre, je vous conseil e vivement de faire un

et passer un fil au-

dessus, l’autre au-

totalement arrivée à une solution

essai, car son manque de souplesse, son épaisseur et

dessous.

satisfaisante, donc j’ai terminé à

sa faible élasticité peuvent poser problème. Personnel-

la main. Je suis arrivée à un point

lement, j’ai fait toutes les coutures à la main : c’est plus

où le chemin des fils était assez

long, mais je maîtrise mieux ce que je fais au niveau

simple, mais il était difficile d’évi-

des connexions.

ter un croisement, à moins d’ajou-

J’ai agrémenté le circuit de quelques éléments de

ter beaucoup plus de fil.

décoration (un pingouin sur la banquise), mais ils n’ont

Comment gérer un croise-

aucune fonction électronique. Vous pouvez laisser libre

ment ? C’est une question impor-

tante, mais impossible de trouver

une explication dans les tutoriaux !

Si le tissu du T-shirt est suffi-

samment épais, il suffit de faire

attention au moment de la couture

de faire passer un fil au-dessus

du T-shirt et un fil en dessous. Le

tissu du T-shirt sert d’isolant entre

les deux. Si le tissu de votre T-

shirt n’est pas assez épais (un peu

percé ?!), alors il vous faudra ajou-

ter un petit morceau de feutrine à

l’endroit de la connexion.

7. COUTURE !

Ça y est ! Il est temps de pas-

ser à la couture. Sélectionnez une

aiguil e suffisamment grosse pour

pouvoir passer le fil conducteur

Figure 5 : Couture

des LEDs. J’ai

dans le chas, mais la plus fine

d’abord cousu le

possible pour moins marquer votre

motif d’arrière-

tissu. Vous remarquerez tout de

plan, puis j’ai

suite que le fil conducteur est un

épinglé les LEDs

que j’ai cousues

peu plus difficile à manier que le fil

progressivement à

« normal », car il est plus épais et

la main.

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

HACKABLE MAGAZINE n°21

31

ARDUINO'N'CO

T-SHIRT INTERACTIF

cours à vos talents artistiques.

Niveau confort, je conseil e de

coudre de la feutrine (ou tout autre

tissu de votre choix) sous les plus

gros éléments électroniques, no-

tamment le Lilypad Arduino USB et

l’alimentation. C’est plus agréable

à porter, car cela évite d’avoir l’im-

pression d’avoir un circuit imprimé

sur la peau.

8. QUELQUES

DIFFICULTÉS

INATTENDUES

AVEC LE LILYPAD

Depuis le début, mon Lilypad

Arduino USB avait un connecteur

USB un peu étroit et je batail-

lais chaque fois que je devais le

connecter. Devinez ? Au bout d’un

Figure 6 : Le connecteur USB de mon Lilypad Arduino USB a lâché !

moment, il a cassé ! Mon mari m’a

aidée et nous avons essayé de

ressouder le connecteur. Cela a

Figure 7 : Découd-vite en action. Malgré son nom, cela reste toujours lent !

marché quelque temps, puis cela

s’est abîmé à nouveau et m’a valu

de bel es crises de nerfs, car sui-

vant la position du câble USB le

transfert de données se faisait plus

ou moins bien. Puis, un peu plus

tard, cela a complètement lâché, et

cette fois-ci nous ne sommes pas

arrivés à réparer la bête.

J’ai dû racheter un Lilypad

Arduino USB, découdre l’ancien

armée d’un découd-vite et recoudre

le nouveau. C’est beaucoup de

temps perdu, et puis attention,

lorsqu’on remplace l’Arduino, il faut

faire refaire les contacts, c’est-à-

dire rattraper l’ancien fil conduc-

teur, faire un nœud autour – pour

assurer une bonne connexion - et

coudre jusqu’au nouvel Arduino.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Fabriquez votre T-shirt interactif avec un Lilypad Arduino

Moralité de l’histoire : ne

cousez jamais un élément élec-

tronique vaguement défectueux

sur un vêtement connecté. Aussi,

essayez de limiter les tests en

USB qui ont tendance à tirer sur

les fils. . ou sur le port USB.

9. ALIMENTATION

Le choix de l’alimentation

dépend des besoins. Malheureu-

sement, aucune documentation

ne précise comment alimenter le

Lilypad Arduino USB de façon effi-

cace, et en fonction des compo-

sants connectés. Comme j’avais

vu quelques exemples [6] avec

porte-pile bouton Lilypad et LEDs

Lilypad, j’ai tenté avec un porte-

Figure 8 : Sur l’image de

pile bouton. Et puis après tout, on

gauche, on voit que ma

pourrait estimer que les éléments

peut insérer une pile de tension entre 1.2 et 5V

pile AAA fournit 1.47V.

de la gamme Lilypad sont faits

et que cela fournira 5V à l’Arduino, grâce à un

Sur l’image de droite, on

pour fonctionner entre eux, non ?

convertisseur boost NCP1402.

voit que le porte-pile ne

fournit en sortie que 1.36V

J’étais quand même perplexe

Assez bêtement, je remplace le porte-pile

et pas les 5V attendus...

qu’une pile bouton (CR2032)

bouton par le porte-pile AAA sans le tester. Évi-

Le convertisseur boost est

suffise à alimenter les LEDs et

demment, ça ne marche pas. Je teste le circuit :

défectueux (ou absent...).

l’Arduino. Je vois d’ici quelques

le composant que j’ai reçu fournit 1.5V, pas 5V :

électroniciens avertis hausser les

pas de quoi alimenter le Lilypad Arduino USB

épaules : effectivement, je n’aurais (voir Figure 8). Sans doute est-il défectueux ?

même pas dû tenter, c’était idiot,

Me voici de retour à la case départ.

cela n’avait aucune chance de

marcher (et ça ne marchait pas).

Moralité : testez les composants électro-

niques lorsque vous les recevez, surtout d’un site

Conservez le porte-pile bouton

lointain (smiley).

pour éclairer quelques LEDs, mais

n’envisagez pas de l’utiliser pour

Comment alimenter le Lilypad Arduino USB ?!

un Lilypad Arduino.

D’autres tutoriels Sparkfun [8] montrent des

Lilypad Arduino alimentés par des batteries

Oui, mais quoi utiliser alors ?

LiPo, et c’est la méthode à retenir. Par chance,

Je décide d’opter pour un

nous disposions chez nous d’une vieil e batterie

porte-pile AAA. J’en trouve un

inutilisée d’hélicoptère radio-commandé, et j’ai

en France à 16 euros, mais je

souhaité la réutiliser. Le connecteur n’était pas le

trouve le prix vraiment exagéré

bon (il y en a tel ement de différents. .) alors nous

pour un porte-pile. J’en achète

avons bricolé une connexion : j’ai soudé deux fils

un à 2 euros sur un site mar-

mâle-mâle respectivement au connecteur JST

chand chinois. Les spécifications

+ et – du Lilypad Arduino USB, et laissé l’autre

du porte-pile [7] précisent qu’on

extrémité libre.

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

HACKABLE MAGAZINE n°21

33

ARDUINO'N'CO

T-SHIRT INTERACTIF

Figure 9 :

Oups ! Je me

suis trompée

encore une fois !

J’ai soudé sur

le + et le – du

Lilypad Arduino

USB. Mais ce

n’est pas bon !

En regardant

le schéma du

composant, on

voit que le + n’est

pas une entrée,

mais une sortie.

Il faut connecter

la batterie sur

le + et le - du

connecteur JST

qui est juste au-

dessus.

Lorsque je souhaite alimenter l’Arduino, j’insère le fil + dans le connecteur rouge de ma batterie, et le fil – dans le connecteur noir de ma batterie, et hop, ça démarre ! Inversement, je débranche les fils pour déconnecter la batterie. Si vous préférez, vous pouvez ajouter un interrupteur.

Enfin, un avantage d’une batterie LiPo : le rapport poids/puissance bien plus favorable que des piles AAA classiques. Ainsi, le T-shirt se plie beaucoup moins pour supporter le poids de la batterie.

10. EST-CE QUE JE JETTE LE T-SHIRT PAR LA

FENÊTRE ?

Ce n’est pas terminé. J’ai encore rencontré au moins trois problèmes notables :

• Le coup du mauvais câble USB. Avec ce câble, l’Arduino s’al umait, mais le transfert du programme ne fonctionnait pas. J’aurais passé moins de temps à me rendre compte que c’était un problème matériel si rien n’avait fonctionné du tout. Si vous avez des messages comme ceux-ci dans la console du logiciel Arduino, pensez tout simplement à changer de câble...

avrdude: butterfly_recv(): programmer is not responding

avrdude: butterfly_recv(): programmer is not responding

Found programmer: Id = "ï¿½"; type = ,

Software Version = .; Hardware Version = #.

avrdude: butterfly_recv(): programmer is not responding

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Fabriquez votre T-shirt interactif avec un Lilypad Arduino

• Les erreurs de couture.

Cela paraît simple, puis plus

ça avance, et plus il y a de fils,

et plus les erreurs arrivent.

Par exemple, la photo ci-

contre montre la couture du

capteur de température. Est-

ce que vous remarquez le

problème dans la Figure 10 ?

La solution est expliquée dans

la légende de l’image. C’est

un cas typique d’une erreur de

couture. Malheureusement, il

est presque certain que vous

en ferez. La seule solution,

c’est de vérifier au voltmètre

où le courant passe, méti-

culeusement, jusqu’à isoler le

problème.

• Les courts circuits. Un T-

Figure 10 : Le « - » du capteur de température est relié au « - » du bouton de shirt n’est pas une planche

gauche (ça c’est bon). Mais ensuite, le « - » du bouton n’est relié à rien ! Il faut rigide : lorsque vous le portez,

le relier à la masse. Ce qui est simple sur un breadboard devient beaucoup plus le tissu bouge, se plie. Que se

compliqué avec du fil cousu !

passe-t-il si en se pliant deux

portions de fil conducteur se

touchent ? Vous pouvez très

Figure 11 : Bandes thermocollantes, posées au fer à repasser au dos du bien accidentel ement avoir

T-shirt afin d’éviter des courts circuits accidentels lorsque le T-shirt se plisse et une connexion entre le – et

différents fils conducteurs se touchent. J’ai mis plusieurs bandes pour mieux le + et donc un beau court

isoler certains fils.

circuit ! C’est bête, personne

n’en parle, mais il faut y pen-

ser ! Il faut isoler chaque fil

avec les autres. La solution

la plus simple, c’est d’acheter

des bandes thermocollantes

(ce qu’on utilise par exemple

pour les ourlets rapides) et

de passer cela au dos du T-

shirt au fer à repasser (voir

Figure 11). Les fils sont alors

« tenus » à leur place, et si

le tissu du T-shirt se plie, il

n’y aura pas contact entre fil

conducteur, mais entre deux

zones de bande thermocol-

lante, ce qui ne pose aucun

problème. De plus, à porter,

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

HACKABLE MAGAZINE n°21

35

ARDUINO'N'CO

T-SHIRT INTERACTIF

À RETENIR

• Tester tous les com-

posants un à un avant

de les coudre. Ne pas

risquer de coudre un

composant « légèrement

défectueux ».

• Si, à la couture, le fil

conducteur doit se croi-

ser, faire passer un fil

au-dessus du tissu et

l’autre en dessous, voire

insérer un morceau de

tissu supplémentaire

(feutrine par exemple)

entre les deux.

• Mettre aussi peu de fil

conducteur que pos-

sible. Cela évite des

erreurs de couture, et

aussi le problème de

résistance naturelle

de tout fil, même s’il

est moindre pour un fil

conducteur.

• Isoler les connexions de

Figure 12 :

fil conducteur les uns

Le T-shirt et

certains trouvent plus agréable d’avoir contre soi

par rapport aux autres

son heureux

propriétaire !

le tissu de la bande thermocol ante plutôt que le fil

avec une bande thermo-

conducteur (un peu rêche).

collante.

• Coudre le fil conducteur

11. RÉSULTAT FINAL ET

fermement, serré, autour

des trous de connexions

CONCLUSION

de composants – et non

pas lâche – pour que le

Vous pouvez contempler le résultat final avec son

contact se fasse bien.

heureux propriétaire ;-)

• Alimenter le Lilypad

Vous avez tous les éléments en main pour réaliser

Arduino USB avec une

votre propre vêtement connecté. Si vous habitez en

batterie LiPo.

région parisienne, vous pouvez également contacter

• Le capteur de tempéra-

l’ElectroLab [9] : certains membres font de la bel e cou-

ture Lilypad n’est pas

ture connectée et ont même proposé des activités à la

précis et doit être calibré.

Nuit du Hack fin juin.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Fabriquez votre T-shirt interactif avec un Lilypad Arduino

Figure 13 : Vue

rapprochée de la

réalisation finale.

Le pingouin se

trouve sur la

banquise et cache

l’Arduino. On

peut néanmoins

y accéder en

soulevant ses

pieds. La baleine

supporte la

batterie, et la

température est

affichée à droite

par les LEDs.

Le capteur de

température

et les boutons

poussoirs pour le

calibrage ne sont

pas cachés et se

trouvent à gauche.

Quelques améliorations pour mes

LIENS

prochaines réalisations :

[1] https://www.sparkfun.com/categories/135

• Les LEDs se voient très bien

de nuit, ou par temps gris, mais

[2] https://www.arduino.cc/en/Main/

pas bien en plein soleil. C’est

ArduinoBoardLilyPadUSB

dommage pour un T-shirt qu’on

[3] http://www.bluemarguerite.com/Loisirs-

porte a priori quand il fait beau. .

creatifs/techniques-3871-point-avant.deco

Il faudrait trouver des LEDs plus

puissantes.

[4] Fritzing : http://fritzing.org/home/

• Une des LEDs s’éclaire plus que

[5] TMP35, TMP36, TMP37 :

les autres. Je n’ai pas encore

http://cdn.sparkfun.com/datasheets/Sensors/

compris pourquoi. La tension

Temp/TMP35_36_37.pdf

délivrée par l’Arduino est plus

[6] https://learn.sparkfun.com/tutorials/ldk-

élevée pour cette LED, alors que

experiment-3-buttons-and-switches

la tension devrait être la même

pour toutes les LEDs. Un défaut

[7] https://cdn.sparkfun.com/datasheets/E-

du Lilypad ?

Textiles/Lilypad/Lilypad_PowerSupply-v18.pdf

Enfin, il existe depuis une autre

[8] https://learn.sparkfun.com/tutorials/lilypad-

gamme de composants portables

pixel-board-hookup-guide

sur soi, appelée Flora et commercia-

[9] http://www.electrolab.fr/

lisée par Adafruit. Le principe d’uti-

lisation devrait être sensiblement le

[10] Code source du croquis pour le Lilypad Arduino

même. À tester lors d’une prochaine

USB : https://git.framasoft.org/axellec/

réalisation ? AA

hackable

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

HACKABLE MAGAZINE n°21

37

ARDUINO'N'CO

PROGRAMMATION WIFI

OTA : PROGRAMMEZ

VOTRE ESP8266 EN WIFI !

Denis Bodor

L’ESP8266, en particulier depuis l’arrivée d’une collection massive et diversifiée de cartes et modules en faisant usage, est une

plateforme compatible Arduino absolument fantastique. Plus on

fouille pour apprendre à s’en servir du mieux possible, plus on

trouve de fonctionnalités totalement fascinantes qui deviennent

vite indispensables. Celle dont il sera question ici n’est autre que la possibilité de charger votre croquis dans la mémoire, non plus avec un câble, mais à distance, en Wifi !

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

OTA : programmez votre ESP8266 en Wifi !

Le fait de pouvoir ainsi Si vous connaissez la plateforme

reprogrammer une carte

ESP8266, vous savez sans doute que les

via une connexion sans

cartes utilisant cette puce de chez Espressif

fil est appelé une mise à

Systems, s’utilisent exactement comme des

jour OTA, pour Over The

cartes Arduino. On les branche simplement

Air (« par les airs »). Ce terme est

à son ordinateur et, après ajout des élé-

directement hérité de l’univers des

ments nécessaires dans l’environnement

smartphones où, bien entendu, une

via le gestionnaire de cartes, on transfère

mise à jour du système se fait par un

le croquis compilé dans sa mémoire. Par

téléchargement et une instal ation

rapport aux toutes premières itérations de

Avant l’arrivée de cartes

par le smartphone lui-même qui, en

ces cartes, initialement vendues comme des

comme la Wemos D1

et d’autres modèles

un sens, se met donc à jour tout seul

modules Wifi pour Arduino, ceci représente

complets, programmer

comme un grand. Notez qu’il n’en a

déjà un grand pas en avant puisqu’il était

l’ESP8266 d’un module

pas toujours été ainsi et qu’il est tou-

nécessaire, en ce temps, d’assembler un

ESP-01 se résumait à

ceci : le module monté

jours possible, avec certains smart-

circuit à la main et de démarrer l’ESP8266

sur une platine, un

phones, de mettre à jour le firmware

dans un mode particulier en mettant un

adaptateur USB/série,

(le système) via une connexion USB,

connecteur à la masse tout en provoquant la

des résistances de rappel,

un démarrage dans un mode spécial

réinitialisation.

des câbles, des jongleries

pour changer de mode...

(recovery ou download), et un logi-

Cette époque est de loin révolue, même

C’était il y a environ deux

ciel dédié (Odin ou Heimdall pour les

si cela n’était le standard d’il y a seulement

ans, mais cela parait être

Samsung, par exemple).

une paire d’années. Les cartes ont évolué,

une tout autre époque tant

les choses ont changé

depuis.

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

HACKABLE MAGAZINE n°21

39

ARDUINO'N'CO

PROGRAMMATION WIFI

se sont diversifiées et se sont étoffées en fonction-

1. PRÉPARATIFS

nalités comme en ressources. Une utilisation plus

simple, plus de broches utilisables, davantage de

ET CHOSES À

mémoire flash, une intégration d’un port USB pour la

programmation et, surtout, une amélioration drastique

SAVOIR

du support dans l’environnement Arduino, ont porté

Tout le nécessaire pour réaliser

l’ESP8266 au rang de super-Arduino économique et

un téléchargement (ou « téléver-

connecté.

sement ») de croquis en OTA est

Cependant, même si ces facilités d’utilisation

directement intégré dans l’envi-

sont une véritable bénédiction, il est possible d’aller

ronnement Arduino dès lors qu’on

encore plus loin. Lorsqu’on travail e sur un projet

instal e le support pour les pla-

impliquant du Wifi, on cherche généralement à avoir

teformes/cartes ESP8266. Pour

une certaine autonomie vis-à-vis du PC/Mac et donc

rappel, ceci passe par un petit tour

de rendre le projet accessible plus universellement

dans les préférences afin d’ajouter

qu’avec une connexion USB, ou du moins, plus

une URL pour le gestionnaire de

connecté qu’avec « un fil à la patte ». En phase de

cartes supplémentaires (http://

mise au point du croquis, il est généralement assez

arduino.esp8266.com/stable/

pénible de devoir laisser connecté le montage ou le

package_esp8266com_index.

reconnecter à chaque mise à jour. Même une fois en

json) et par l’instal ation du sup-

place, un projet peut évoluer et si cela implique une

port « esp8266 by ESP8266 com-

flottil e d’ESP8266 utilisés comme capteurs de toutes

munity » via le gestionnaire de

sortes, ce mode de fonctionnement est synonyme

cartes (menu Outils). La dernière

de désinstal ation, connexion au PC, mise à jour,

version stable en date pour ce

déconnexion et réinstal ation, autant de fois qu’il y a

support est la 2.3.0.

de capteurs.

Pour que la mise à jour OTA

Une autre approche possible, mais apparemment

fonctionne cependant, il faudra que

trop peu connue (une fois qu’on en fait l’expérience

votre système (Windows, macOS

on ne souhaite plus aimer que cela), consiste à utili-

ou GNU/Linux) dispose du langage

ser l’OTA se résumant, sommairement, à contacter

Python en version 2.7. D’après

l’ESP8266 en Wifi, lui envoyer le nouveau croquis

la documentation (version 2.0.0),

compilé et lui demander de mettre à jour le contenu de

Python 3.5 ne conviendra pas.

sa mémoire avant de redémarrer. Ceci est bien plus

Les utilisateurs Windows devront

pratique, plus rapide et surtout plus souple qu’une liai-

s’assurer que, lors de l’instal ation

son USB classique.

du langage sur leur machine,

Supporter les

plateformes

ESP8266 dans

son environnement

Arduino se résume

à une édition des

préférences puis

à l’installation

du support via le

gestionnaire de

cartes.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

OTA : programmez votre ESP8266 en Wifi !

Pour que la mise à

jour OTA fonctionne

correctement sous

l’exécutable

Windows depuis

python.exe soit

l’environnement

configuré dans les chemins de

Arduino, vous

recherche. Il s’agit d’une simple

devrez installer

option d’instal ation/configuration

Python 2.7 et ne pas

oublier d’ajouter le

( Add python.exe to Path), mais il faut

programme dans le

tout de même penser à l’activer

chemin de recherche

pour que tout puisse fonction-

par défaut, car le

ner. Pour instal er Python dans

script qui envoie le

croquis à l’ESP8266

votre Windows, allez simplement

via le réseau est

sur https:/ www.python.org/

écrit en Python

download et téléchargez la dernière

et l’interpréteur

version 2.7 (2.7.14) en fichier d’ins-

doit être trouvé

automatiquement.

tal ation MSI. Double-cliquez sur le

fichier et suivez les instructions.

Le téléchargement OTA vers

l’ESP8266 se fait via l’exécution

• Toutes les cartes ne fonctionnent pas, et je pense

du script

en particulier à l’ESP-01, car il faut suffisamment

packages/esp8266/

hardware/esp8266/2.3.0/

de mémoire flash pour à la fois le croquis en train

tools/espota.py, mais ceci se

de fonctionner et le croquis à programmer, reçu via

fait de manière tout à fait transpa-

le réseau. 512 Ko de flash (4 Mb) ne sont pas suffi-

rente, directement depuis l’envi-

sants et bien que le croquis initial fonctionnera sans

ronnement Arduino. Il est cepen-

problème, une tentative de mise à jour provoquera

dant toujours bon de savoir qui fait

une erreur.

quoi sur sa propre machine. .

Enfin, même s’il peut sembler superflu de le dire, la

Le mode de fonctionnement

mise à jour OTA n’est possible que sur une carte faisant

de la programmation OTA d’un

fonctionner un croquis prenant en charge la fonctionnalité.

ESP8266 implique principalement

Ce n’est pas une option ou une fonctionnalité de la plate-

deux choses importantes :

forme, mais quelque chose que vous devez intégrer dans

vos croquis et prendre en compte. De ce fait, une première

• D’une part l’ESP8266 doit être

programmation « filaire » en USB sera donc nécessaire,

connecté au réseau local, mais mais il faut également garder à l’esprit qu’en programmant la détection de la carte par

en OTA un croquis qui ne contient pas les routines OTA

l’environnement (IDE) Arduino

adéquates, toute programmation OTA deviendra impos-

se fera via mDNS-SD (voir

sible par la suite.

article sur le sujet dans le pré-

sent numéro). Il ne vous sera

pas nécessaire de connaître

2. UNE BASE DE CROQUIS

l’adresse IP de la carte, mais

il est important, à mon avis,

SUPPORTANT L’OTA

de comprendre le fonctionne-

Vous l’avez compris, l’OTA n’est pas le problème de la

ment de mDNS pour régler

plateforme, mais cel e de votre croquis. Pour approcher le

d’éventuels problèmes. La ou

sujet, le plus simple est donc de construire un croquis de

les cartes sont trouvées parce

base sur lequel reposeront tous vos futurs projets. Celui-ci

qu’el es exposent un service

fera le strict minimum : configurer la gestion de l’OTA et

non standard, « Arduino », sur

prendre en charge d’éventuel es demandes de mise à jour,

TCP (avahi-browse -t

tout en permettant un fonctionnement presque classique

_arduino._tcp).

du croquis.

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

HACKABLE MAGAZINE n°21

41

ARDUINO'N'CO

PROGRAMMATION WIFI

Le croquis débute de manière très classique par l’inclusion des fichiers d’entête (« bibliothèques » au sens Arduino) et la déclaration de quelques variables globales :

#include <ESP8266WiFi.h>

#include <ArduinoOTA.h>

// SSID du point d'accès

const char* ssid = "ssid_AP_wifi";

// mot de passe wifi

const char* password = "mot2passeWIFI";

// nom d'hôte (pour mDNS)

const char* hostString = "espOTAtest2";

// mot de passe pour l'OTA

const char* otapass = "123456";

// gestion du temps pour loop()

unsigned long previousMillis = 0;

// gestion du temps pour calcul de la durée de la MaJ

unsigned long otamillis;

On retrouve les informations standards indispensables comme le SSID du point d’accès et le mot de passe associé, mais également un nom d’hôte qui sera utilisé par l’environnement Arduino pour procéder à la mise à jour OTA ainsi qu’un mot de passe qu’il sera nécessaire de saisir pour provoquer cette mise à jour. Notez que ce dernier point est capital en terme de sécurité, si vous ne voulez pas que n’importe qui ayant un accès au réseau local puisse reprogrammer votre ou vos ESP8266.

Les deux dernières variables globales déclarées seront utilisées d’une part pour afficher un message en boucle sur le moniteur série afin de montrer que l’attente d’une mise à jour n’est pas bloquante en utilisant millis() et pour afficher, en fin de mise à jour, la durée totale de l’opération.

Ceci est purement cosmétique, mais donne un côté très « pro » et « travail é » au projet.

On pourrait envisager une intégration de l’OTA dans notre croquis de façon plus « diffuse », mais je préfère personnel ement toujours bien séparer les fonctionnalités, ne serait-ce que pour les transposer plus facilement d’un croquis à un autre. De ce fait, j’ai décidé de réunir l’ensemble du code en rapport avec la configuration de l’OTA dans une fonction, qu’il me suffira d’appeler au moment opportun depuis setup().

Cette fonction, appelée confOTA(), se charge tout d’abord de configurer quelques éléments simples à partir des variables précédemment déclarées et initialisées, en utilisant simplement les méthodes de la classe ArduinoOTA :

void confOTA() {

// Port 8266 (défaut)

ArduinoOTA.setPort(8266);

// Hostname défaut : esp8266-[ChipID]

ArduinoOTA.setHostname(hostString);

// mot de passe pour OTA

ArduinoOTA.setPassword(otapass);

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

OTA : programmez votre ESP8266 en Wifi !

Notez au passage que le port utilisé ici a sa valeur par défaut (la même que si cette ligne n’était pas présente). C’est juste une façon de se donner l’opportunité, plus tard, de changer facilement d’avis. Vient ensuite une partie un peu plus difficile à appréhender si vous n’avez pas l’habitude de ce genre de syntaxe en C++ : un adaptateur générique de fonction. Derrière ce nom inquiétant se cache, tout simplement, une solution permettant de passer toute une fonction en argument d’une méthode. Exemple, avec notre première utilisation :

// lancé au début de la MaJ

ArduinoOTA.onStart([]() {

Serial.println("/!\\ MaJ OTA");

otamillis=millis();

});

La syntaxe peut paraître confuse, mais le code se trouvant dans la portée (entre { et }) est tout simplement celui appelé automatiquement en début de mise à jour OTA. Un fonctionnement similaire à celui utilisé pour les routines d’interruption (avec attachInterrupt()) aurait pu être utilisé puisque le code de deux lignes que nous utilisons ici se résume à une fonction et qu’il existe donc un pointeur utilisable vers cel e-ci. Cette syntaxe cependant, reposant sur la notion de template en C++ présente un avantage intéressant dans le fait de réunir l’ensemble du code en un seul endroit, sans jongler avec des noms de fonction, et ce avec les arguments attendus. Enfin, comme c’est la solution prévue par les développeurs du support ESP8266 pour Arduino, il serait malvenu de chercher à faire autrement juste pour le principe, tout en ajoutant de la complexité.

La déclaration suivante est assez similaire puisqu’il s’agit du code appelé en fin de mise à jour, utilisant otamillis pour calculer la durée écoulée :

// lancé en fin MaJ

ArduinoOTA.onEnd([]() {

Serial.print("\n/!\\ MaJ terminee en ");

Serial.print((millis()-otamillis)/1000.0);

Serial.println(" secondes");

});

Mais les choses deviennent plus touffues avec le code notifiant de la progression de la mise à jour :

// lancé lors de la progression de la MaJ

ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {

Serial.printf("Progression: %u%%\r", (progress / (total / 100)));

});

Ici, le code utilise deux variables (progress et total) qui lui sont passées en argument et qui sont ensuite utilisées pour calculer et afficher un pourcentage de progression. Ici, nous al ons afficher ce pourcentage de façon répétée (à chaque appel à cette fonction dite de callback) en retour-nant simplement en début de ligne (\r équivalent à un CR ou Carriage Return) et en écrivant par dessus cel e existant précédemment. Bien entendu, à vous de voir si cet affichage vous convient, avec progress et total il est parfaitement possible de créer une barre de progression de la même manière. Ceci peut être un exercice intéressant pour se faire la main. .

Il nous reste une fonction à écrire et cel e-ci est chargée de gérer d’éventuel es erreurs. El e prend en argument un code d’erreur correspondant à un code défini dans ArduinoOTA.h qu’il nous suffit de tester pour afficher un message en conséquence :

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

HACKABLE MAGAZINE n°21

43

ARDUINO'N'CO

PROGRAMMATION WIFI

// En cas d'erreur

ArduinoOTA.onError([](ota_error_t error) {

Serial.printf("Erreur[%u]: ", error);

switch(error) {

// erreur d'authentification, mauvais mot de passe OTA

case OTA_AUTH_ERROR: Serial.println("OTA_AUTH_ERROR"); break;

// erreur lors du démarrage de la MaJ (flash insuffisante) case OTA_BEGIN_ERROR: Serial.println("OTA_BEGIN_ERROR"); break;

// impossible de se connecter à l'IDE Arduino

case OTA_CONNECT_ERROR: Serial.println("OTA_CONNECT_ERROR"); break;

// erreur de réception des données

case OTA_RECEIVE_ERROR: Serial.println("OTA_RECEIVE_ERROR"); break;

// erreur lors de la confirmation de MaJ

case OTA_END_ERROR: Serial.println("OTA_END_ERROR"); break;

// erreur inconnue

default: Serial.println("Erreur inconnue");

}

});

Le code de démonstration proposé par le support ESP8266 Arduino faisait usage de if/else if, mais je préfère cette syntaxe, reposant sur switch()/case, bien plus lisible.

Enfin, nous touchons à la fin de notre fonction confOTA() et ne devons surtout pas oublier d’initialiser la fonctionnalité OTA qui prendra alors en compte tous nos paramètres :

// Activation fonctionnalité OTA

ArduinoOTA.begin();

}

Nous pouvons nous pencher maintenant sur la fonction setup() chargée d’établir la connexion Wifi et bien entendu d’appeler notre fonction de configuration :

void setup() {

// moniteur série

Serial.begin(115200);

// démarrage

Serial.println("\r\nBoot...");

// mode Wifi client

WiFi.mode(WIFI_STA);

// connexion

WiFi.begin(ssid, password);

while (WiFi.waitForConnectResult() != WL_CONNECTED) {

// impossible de se connecter au point d'accès

// reboot après 5s

Serial.println("Erreur connexion Wifi ! Reboot..."); delay(5000);

ESP.restart();

}

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

OTA : programmez votre ESP8266 en Wifi !

// configuration OTA

confOTA();

// tout est prêt,on affiche notre IP

Serial.print("Adresse IP: ");

Serial.println(WiFi.localIP());

}

Rien de bien extraordinaire ici. Comme le croquis ne fait rien de particulier, si ce n’est attendre une mise à jour, nous n’avons que peu de choses à configurer/

initialiser. Nous pouvons alors conclure avec la fonction loop() qui, el e aussi, sera relativement simpliste :

void loop() {

unsigned long currentMillis = millis();

Les modules ESP-01 ne

disposent que de 512 Ko de

// 10s de passées ?

mémoire flash. Nous voyons ici

if (currentMillis - previousMillis >= 10000) {

à droite l’ESP8266 et à gauche

previousMillis = currentMillis;

la mémoire SPI Winbond

25Q40BV. Avec beaucoup de

Serial.println("pouet !");

patience et des doigts de fée,

}

il est possible de dessouder ce

composant au format SOIC-8

// gestion OTA

pour le remplacer par un

ArduinoOTA.handle();

W25Q32BV (sensiblement plus

}

large) proposant 8 fois plus

d’espace et ainsi mettre à jour

La ligne la plus importante, et la raison pour laquel e nous n’utilisons pas votre ESP-01 pour supporter

la programmation OTA. De

delay() est bien entendu l’appel à ArduinoOTA.handle() qui permet de régu-quoi donner une nouvelle vie à

lièrement vérifier qu’il n’y ait pas une demande de mise à jour OTA en prove-ces modules pour une pincée

nance du réseau. En l’absence de cette

d’euros (environ 7€ pour

ligne ou si cet appel est bloqué par

10 exemplaires sur eBay).

l’exécution d’une boucle ou d’un délai,

l’ESP8266 ne sera pas en mesure

de recevoir la demande et d’exécuter

l’opération. C’est un point auquel il

faudra être très attentif dans vos déve-

loppements car, en cas d’erreur, vous

serez alors à nouveau obligé d’utiliser

la connexion USB pour reprogrammer

la mémoire de la carte.

3. METTRE À JOUR

EN OTA

Une fois ce croquis programmé, via

USB, dans la carte ESP8266, celui-ci

doit se connecter à votre réseau en

Wifi. Du fait de l’utilisation de mDNS

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

HACKABLE MAGAZINE n°21

45

ARDUINO'N'CO

PROGRAMMATION WIFI

OTA : programmez votre ESP8266 en Wifi !

avec l’OTA , la carte devrait être facilement détectable aussi

bien via son nom que par le service qu’el e propose. Vous

pouvez, depuis une Raspberry Pi ou un PC GNU/Linux,

utiliser la commande avahi-browse pour vérifier cet état

de fait :

$ avahi-browse -t _arduino._tcp

+ eth1 IPv4 espOTAtest2 _arduino._tcp local

Nous avons là un hôte appelé espOTAtest2 proposant le

service qui nous intéresse et son adresse IP est :

$ avahi-resolve -4 -n espOTAtest2.local

espotatest2.local 192.168.10.107

Dans l’environnement Arduino, le menu Outils > Port devrait vous proposer, en plus des ports série habituels, une entrée

composée du nom d’hôte de l’ESP8266 et de son adresse IP.

Le programme

Il vous suffit de la sélectionner pour, ensuite, procéder à la programmation avec Ctrl+u, Avahi Discover,

utilisable sur

l’icône ou le menu Croquis > Téléverser.

Raspberry Pi et

toute machine

Une fois le changement de port effectué, vous ne pourrez plus utiliser le moniteur GNU/Linux,

série. Le choix du port étant commun pour le moniteur et l’interface de programmation.

propose une

Si vous souhaitez voir les messages de la carte ESP8266, encore connectée au PC/

interface graphique

mac, vous devrez utiliser une autre application « terminal série » en précisant le port vous permettant de

facilement obtenir

USB/série correspondant à la carte, ou basculer d’un port à l’autre à chaque fois.

des informations

Ceci peut paraître contraignant, mais on peut supposer qu’en phase de mise au point sur un hôte et donc

sur l’ESP8266

d’un croquis, l’ESP8266 sera de toute façon connecté à la machine de développement.

proposant le

On bénéficie cependant, tout de même, d’une certaine souplesse supplémentaire, car le service de mise à

téléchargement du croquis est bien plus rapide qu’avec la connexion USB. La logique de jour OTA. Il existe

également des

développement optimale consiste à utiliser un ESP8266 pour la mise au point et, une fois outils de ce type

le croquis validé, le déployer en OTA sur les différentes cartes accessibles uniquement pour Windows,

via le réseau.

macOS, Android,

iOS, etc.

CONCLUSION

Une fois qu’on a testé ce type de fonctionnalité, il est relativement difficile de revenir à la méthode purement USB tant l’OTA est souple est rapide. Il ne faut cependant pas perdre de vue deux choses importantes :

• Vos projets et donc vos croquis devront toujours prendre en compte cette fonctionnalité et ceci impactera forcément votre façon de programmer. Il vous faudra en permanence, et quoi qu’il arrive, laisser l’opportunité à ArduinoOTA.handle() de s’exécuter régulièrement.

• L’utilisation de l’OTA a un coût en termes d’occupation mémoire. Le simple croquis que j’ai présenté ici, une fois compilé, occupera quelques 240 Ko, soit près d’un quart de la mémoire flash disponible pour les programmes avec une carte Wemos D1 mini. Et il faut, bien entendu, le double de cet espace pour pouvoir procéder à Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 46

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

OTA : programmez votre ESP8266 en Wifi !

ACTUELLEMENT

DISPONIBLE !

GNU/LINUX MAGAZINE n°209

une mise à jour. L’ESP8266, du moins la

plupart des cartes récentes, ne manque

pas de mémoire et il est difficile d’imagi-

ner se retrouver à l’étroit comme avec une

Arduino UNO par exemple, mais ceci reste

possible.

La mise à jour OTA via l’environnement de

développement (IDE) Arduino n’est pas la seule

approche proposée. Il est également possible

d’utiliser un navigateur web en prenant comme

base les deux exemples livrés avec le support

ESP8266 : WebUpdater et SecureWebUpdater.

Ceux-ci permettent d’envoyer, avec un naviga-

teur, un fichier binaire résultant de la compila-

tion d’un croquis devant être enregistré dans la

mémoire de l’ESP8266.

J’ai délibérément omis de traiter de cette

approche car, bien que tout à fait amusante,

el e ne me semble pas très pratique (en dehors

de situations bien spécifiques). En ce qui

me concerne, pour un usage courant, le fait

d’extraire le binaire pour utiliser une autre appli-

cation (navigateur) pour programmer la carte ne

m’apporte aucun bénéfice concret, mais unique-

ment davantage de manipulations. On peut sup-

poser que cela pourrait être intéressant afin de

permettre la mise à jour via un tiers : développer

une nouvel e version du croquis dans l’IDE, pro-

duire un binaire, l’envoyer par mail à quelqu’un

et lui demander de procéder à l’instal ation via

OTA/Web. Si une tel e situation vous concerne,

ENVOI - RECEPTION - AUTHENTIFICATION

jetez simplement un œil aux deux exemples en

question, ils sont relativement explicites et clairs

MAÎTRISEZ

sur la base des explications données ici.

Une autre voie qui n’a pas été explorée ici

LA GESTION

consiste à utiliser une entrée de l’ESP8266 pour

provoquer la mise en route d’un mode OTA. Il

est en effet relativement simple dans setup()

AVANCÉE DE SMS

de tester l’état d’une broche et, en fonction du

résultat, exécuter le croquis « normal » ou bas-

...SANS VOUS RUINER !

culer dans une boucle appelant ArduinoOTA.

handle() à répétition. En développant encore

davantage et en utilisant un bouton, on pourrait

ainsi redémarrer un ESP8266 en mode OTA

NE LE MANQUEZ PAS

et donc imposer une action physique pour per-

mettre les mises à jour. DB

CHEZ VOTRE MARCHAND

DE JOURNAUX ET SUR :

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

HACKABLE MAGAZINE n°21

47

https://www.ed-diamond.com

pub_oct2017_half.indd 3

18/10/2017 10:05

EN COUVERTURE

GOOGLE ANALYTICS

UTILISEZ GOOGLE

ANALYTICS POUR

LA SURVEILLANCE

PHYSIQUE

Denis Bodor

Si vous disposez d’un site web, quel qu’il soit, vous connaissez sans doute Google Analytics. En incluant un petit bout de JavaScript dans vos pages HTML, vous pouvez ainsi obtenir énormément d’informations

statistiques intéressantes, comme le nombre de visites, les pages les plus vues, la vitesse du site ou encore, pour les boutiques en ligne, les commandes et le chiffre d’affaires corrélés avec les visites. Mais saviez-vous que cet outil ne se limite pas qu’au Web ? Avec un peu de code et une carte connectée, il est possible d’envoyer des informations du monde réel pour étoffer vos statistiques...

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez Google Analytics pour la surveil ance physique

Imaginons un scénario

tout simple : vous gérez

une échoppe de produits

du terroir type « épicerie

fine », mais vous disposez

également d’une boutique en

ligne pour vendre vos produits.

Côté web, grâce à Google

Analytics, vous pouvez tout sa-

voir du fonctionnement de votre

site, le trafic, le nombre de pages

vues, le rapport entre les visites

et les ventes, les horaires de fré-

quentation minimum et maximum,

les pages les plus populaires, etc.

Ne serait-il pas fantastique d’avoir

également ce genre d’informa-

tions pour votre boutique phy-

sique ? Mieux encore, d’avoir au

Certains modèles de

même endroit les statistiques des

vos affaires, les gens ont tendance à ne pas rester

capteurs infrarouges

deux boutiques ?

dans une boutique quand on leur met un piercing

passifs de mouvements

sont réduits au strict

Voilà précisément ce que je

jaune à une oreille).

minimum avec, comme

vous propose de faire dans cet

bénéfice, une taille très

Pour ce projet, nous utiliserons une carte à base

article. Bien entendu, les infor-

réduite. Avec aucun

d’ESP8266 et plus exactement une Wemos D1

réglage possible et

mations ne pourront pas être

mini, coûtant moins de 5€ et fournissant par défaut

une alimentation entre

exactement similaires entre une

une connectivité Wifi. Les ESP8266 sont main-

4,5V et 20V, l’utilisation

boutique web et son alter ego

de ce modèle s’avère

tenant devenus aussi populaires que les cartes

physique. Le web permet par

économique et

Arduino et se programment via l’environnement

simple, à défaut d’être

exemple de suivre un visiteur

Arduino tout aussi simplement. De nombreuses

adaptable à toutes les

précisément, même si l’anonymat

cartes à base d’ESP8266 existent et toutes pour-

situations.

de la personne est garanti. On

ront faire l’affaire ici (sauf peut-être l’ESP-01 qui

peut donc savoir d’où vient la

est désormais presque obsolète, car bien plus

personne (accès direct, chercher,

pénible à mettre en œuvre tout en ne proposant

autre site), quel es pages el e a

qu’une ridicule quantité de broches utilisables).

visitées et si ceci a conduit à une

vente ou non. Dans le cas d’un

magasin bel et bien réel, il ne

1. COMMENT

vous est pas possible de tracer le

comportement d’un visiteur, les

FONCTIONNE GOOGLE

données sont plus générales et

concerneront donc « la clientèle »

ANALYTICS ?

au sens le plus général du terme

Google Analytics n’a pas accès à la configu-

(à moins bien entendu de taguer

ration des sites web, il ne fonctionne donc pas

vos clients comme des bovins,

comme d’autres systèmes, tantôt plus anciens,

mais je ne pense pas que ceci

qui analysent les journaux d’activité d’un ser-

soit très convenable, légal ou

veur (AWStats, Webalize ou Piwik, par exemple).

vraiment effectivement bon pour

Google Analytics utilise une autre approche, mais

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

HACKABLE MAGAZINE n°21

49

EN COUVERTURE

GOOGLE ANALYTICS

D’autres capteurs,

comme ce module

fabriqué par SURE

Electronics sous la

référence SS502,

proposent bien

plus de réglages et

de fonctionnalités

comme le pilotage

de relais, la

détection jour/

nuit pour la

surveillance ou

encore le réglage

de la sensibilité du

capteur PIR.

qui ne lui est pas exclusive (Piwik peut également le faire),

box régulièrement pour changer

consistant à intégrer sur chaque page d’un site, un petit élé-

d’adresse IP, le résultat sera

ment (en JavaScript) qui va automatiquement envoyer des

presque le même : vos statis-

informations à Google dès que ces pages sont affichées/

tiques ne voudront plus rien dire.

accédées. Ce n’est donc pas votre serveur web qui envoie

Ce n’est donc pas vraiment un

les données, mais le navigateur des visiteurs.

problème de sécurité, mais une

Ceci implique deux choses liées entre el es, qui ont du

caractéristique du fonctionnement

bon et du mauvais :

même de ce genre de col ecte

d’informations (une solution basée

• vous pouvez vous-même envoyer des informations

sur l’analyse de journaux d’un ser-

statistiques à la place du navigateur de vos visiteurs ;

veur ne résoudrait pas non plus le

• et n’importe qui d’autre peut également le faire à leur

problème).

place.

Le point qui nous intéresse ici

Ceci peut paraître surprenant, car cela signifie qu’il est

est donc le premier, envoyer direc-

relativement aisé de littéralement « pourrir » les statistiques

tement des données à Google

avec de fausses informations. Mais, à y bien réfléchir, cela

Analytics, ne concernant pas une

ne serait qu’une forme automatisée d’un rechargement

quelconque activité sur le Web,

continu des pages avec un navigateur. Si quelqu’un de

mais cel e ayant lieu dans la vie

vraiment têtu et résolu à vous gâcher vos journées passe

bien réel e de tous les jours.

le plus clair de son temps sur votre site, en utilisant plein

Ce que fait le morceau de code

de navigateurs différents, débranchant et rebranchant sa

JavaScript intégré dans les pages

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez Google Analytics pour la surveil ance physique d’un site n’est pas très compliqué,

point). L’ID de suivi est associé à une propriété et l’inter-

il col ecte les informations et en-

face fournie un « code de suivi » qu’on peut directement

voie une requête aux serveurs de

copier/col er sur son site (le morceau de JavaScript avec

Google pour qu’el es soient archi-

l’ID de suivi intégré).

vées. Vous, de votre côté, pouvez

Une vue n’a rien à voir directement avec la col ecte

ensuite consulter le résultat du

des données, c’est un point d’accès aux rapports les

traitement de ces informations,

concernant. Lorsque vous créez une propriété, auto-

résumé sous la forme d’une page

matiquement, une vue par défaut est créée. Cel e-ci est

web garnie de graphiques, de

non filtrée est affichera toutes les données relatives au

rapports, d’analyses et de tout un

site, mais il vous est possible de créer d’autres vues,

tas d’autres représentations assez

plus spécifiques et filtrées avec un sous-ensemble des

travail ées.

informations (affichées uniquement à partir de la date de

Le code en JavaScript est gé-

création de la vue en question).

nérique, c’est le même pour tous

Les utilisateurs du service, ceux avec un compte

les sites souhaitant utiliser Google

Google, ont des permissions spécifiques pour un

Analytics et il peut être configuré

compte, une propriété et/ou une vue. L’administrateur

pour différentes choses. Les don-

(vous) pouvez choisir qui peut gérer les utilisateurs, mo-

nées col ectées sont cependant

difier la configuration (tâches administratives), col aborer

systématiquement associées des

en manipulant des éléments partagés ou simplement lire

« ID de suivi » identifiant votre

et analyser les informations. Ceci permet de faciliter la

ou vos sites. Celui-ci se présente

gestion du travail col aboratif en limitant au minimum les

sous la forme d’un code débutant

actions (et donc les bêtises) de certains utilisateurs. Ceci

par « UA- » suivi d’une série de

chiffres. Dans le jargon de Google

s’avère particulièrement pratique dans le cadre des vues

Analytics, un utilisateur possède

puisqu’il est possible ainsi de fournir une vue filtrée et

un compte, auquel est rattaché

restreinte à certains col aborateurs et non à d’autres.

une ou plusieurs propriétés qui,

Je ne m’étendrai pas davantage sur le sujet, car il

elles-mêmes peuvent avoir diffé-

existe bien des documentations, tutoriels et vidéos en

rentes vues.

ligne décrivant la façon de configurer et d’utiliser Google

Le compte n’est pas un compte

Analytics. Une recommandation cependant, je vous dé-

Google (Gmail, smartphone, Play,

conseil e d’acheter un ouvrage sur le sujet en espérant

etc.), mais un compte Google

y trouver toutes les réponses. L’interface et les fonction-

Analytics, c’est un point d’accès

nalités de Google Analytics sont connues pour changer

au service qui représente le

assez fréquemment, rendant souvent tout ou partie d’un

niveau d’organisation le plus supé-

ouvrage presque inutile.

rieur. Il peut s’agir, par exemple,

Pour mettre en œuvre les explications qui vont

d’une société ou d’une entité ayant suivre, il vous faudra donc un compte Google, un accès plusieurs sites.

à Google Analytics (https://analytics.google.com),

Une propriété désigne géné-

créer un compte au sens Google Analytics du terme et

ralement un site web, mais il peut

finalement créer une propriété. Et là, si vous n’avez pas

également s’agir d’une application

de site web, vous al ez rencontrer un petit problème : le

mobile ou même d’une borne

système demande une « URL par défaut » et donc un

d’accès comme un point de

nom de domaine pour le site.

vente électronique (selon la doc

Bien que cette URL ne soit pas utilisée en pratique

de Google bien qu’aucune autre

pour la col ecte de données, je ne saurai vous recom-

information ne soit donnée sur ce

mander de mettre quelque chose au hasard, car cela

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

HACKABLE MAGAZINE n°21

51

EN COUVERTURE

GOOGLE ANALYTICS

ne serait pas techniquement correct. Vous êtes cen-

2. UN MONTAGE

sé posséder (ou pouvoir administrer) le site pointé

par l’URL et devriez donc avoir, en principe, la main

QUI PERMET

sur le site en question. Il existe plusieurs solutions

pour disposer d’une URL légitime : acheter un nom

D’ENVOYER DES

de domaine, utiliser une plateforme de blog permet-

DONNÉES À

tant quelque comme chose « votrenom.domaine.

com » (Blogger, Blogspot ou Wordpress.com par

GOOGLE

exemple), passer par un fournisseur de sous-do-

Certes, dit comme ça cela

maine, utiliser un site de partage de photos, etc.

peut faire peur, en particulier en

Certaines solutions sont gratuites, d’autres payantes

raison du climat de surveil ance

(avec en prime un site ou un blog avec lequel jouer),

global qu’on peut estimer par-

l’important est simplement d’avoir le droit d’utiliser

faitement réel (je ne rentrerai

une URL légitimement.

pas dans ce débat, ce n’est pas

Une fois la propriété créée vous obtiendrez l’ID

le sujet). Quoi qu’il en soit, ici, il

de suivi dont j’ai parlé précédemment. Le code

ne s’agit pas d’envoyer d’infor-

JavaScript à intégrer dans le site ne nous intéres-

mations nominatives, loin de là.

sera pas ici puisque nous ne travail erons pas avec

Outre le fait qu’il est strictement

un vrai site. Notre projet utilisera une fonctionnalité

interdit de stocker des informa-

particulière de Google Analytics appelée Measure-

tions personnelles via Google

ment Protocol. Celle-ci permet, en utilisant simple-

Analytics (mais uniquement des

ment l’ID de suivi, d’envoyer des données à Google

identifiants), nous n’aurons pas

Analytics via une simple requête HTTP POST. J’ai

l’occasion ici d’avoir ne serait-ce

bien dit HTTP, il n’est donc pas nécessaire de vous

que ces données en notre pos-

soucier du support SSL/TLS (pour HTTPS) comme

session. Nous ne verrons que

c’est le cas pour d’autres services en ligne (comme

des mouvements parfaitement

Twitter par exemple).

anonymes.

La connexion du

module de détection

infrarouge avec

la carte ESP8266

Wemos D1 mini (ou

toute autre carte)

se limite à trois

connexions, deux

pour l’alimentation

5V et un pour le

signal de détection

de mouvement.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez Google Analytics pour la surveil ance physique

Voici l’installation

hautement technologique

L’idée du présent projet repose

non afin de ne capter les mouvements que

d’un premier capteur PIR

sur une détection de mouvement

dans l’obscurité (typique d’une utilisation pour

wifi utilisé pour les tests

au moyen d’un capteur infrarouge.

un éclairage automatique).

lors de la rédaction de

D’autres biais peuvent être envi-

cet article. Les choses se

Il y a deux choses à savoir concernant ces

sont encore grandement

sagés de la même façon avec

modules :

améliorées par la suite

un simple contact, une barrière

avec l’utilisation de

laser, une photodiode, un cap-

• L’alimentation n’est pas toujours de 5V.

punaises sur un tableau

teur de pression, un contacteur

En fonction du modèle, il est important

en liège... Hé oui, on

ne se refuse rien à la

au mercure, un capteur magné-

de lire la documentation, qu’el e soit

rédaction de Hackable,

tique (comme ceux équipant

directement fournie par le vendeur ou

et certainement pas

les fenêtres pour les systèmes

qu’el e doive être trouvée sur le Web.

d’utiliser les méthodes

d’alarme), un capteur de vibration,

Certains modules disposent d’un régula-

« MacGyver » (le vrai,

pas celui du reboot

un détecteur à ultrason, etc.

teur de tension acceptant entre 4,5V et

pathétique de 2016) !

20V, d’autres demandent 12V et d’autres

Dans le cas des capteurs de

encore proposent une broche particulière

mouvement infrarouges, la mise

pour une alimentation en 3,3V.

en œuvre est relativement simple.

Ces modules, appelés également

• Le déclenchement est tantôt configurable

capteurs PIR, existent dans diffé-

selon deux modes distincts. Le mode

rentes versions, incluant plus ou

dit « normal » provoque un changement

moins de fonctionnalités. Dans sa

d’état à chaque détection. La sortie du

déclinaison la plus simple, le mo-

module passe de l’état bas à l’état haut

dule s’alimente par deux broches

pour signifier une détection, mais si le

(masse et tension d’alimentation)

mouvement continue face au capteur,

et propose une sortie mise à l’état

le basculement de l’état va continuer.

haut lorsqu’un mouvement a été

L’autre mode appelé « retrigger » (redé-

détecté en face du capteur. Les

clenchement) change ce comportement.

modèles plus complets ajoutent

Une première détection passera l’état

généralement des ports pour

de la sortie à haut et ceci ne changera

piloter directement des relais, un

pas tant qu’un mouvement sera détecté.

réglage de la sensibilité et une

Ces deux modes sont également parfois

photorésistance (ou LDR pour

appelés « Repeat Trigger » (déclen-

Light-Dependent Resistor) dont

chements répétés) et « Single Trigger »

l’utilisation peut être activée ou

(déclenchement unique).

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

HACKABLE MAGAZINE n°21

53

EN COUVERTURE

GOOGLE ANALYTICS

Ce dernier point est important dans notre projet, car nous al ons surveil er les changements d’état et les compter. Il est donc plus intéressant, à mon avis, d’utiliser le mode « retrigger » où des mouvements continus devant le capteur ne comptent que pour un seul événement. Bien entendu, cela dépend également du délai qu’utilise le module avant de repasser la sortie à l’état bas dans un mode ou l’autre. Notez que les modules les moins coûteux (et les plus petits) ne proposent aucun réglage et sont souvent par défaut dans ce mode.

Vous l’aurez compris, nous n’aurons besoin ici que d’une seule broche de la carte ESP8266 et j’ai arbitrairement choisi cel e libel ée D3. La raison en est fort simple, el e se trouve juste à côté de D4 (qui est connecté à la led sur la carte), el e-même se trouvant à côté de la masse et de la broche 5V, les deux fournissant l’alimentation directement au module de détection PIR.

Pour prendre en charge le changement d’état sur D3, nous utiliserons une interruption. Nous commencerons donc par écrire notre routine qui, je le rappel e, se doit d’être concise : volatile int compteur = 0;

void IRint() {

digitalWrite(D4, LOW);

compteur++;

}

C’est ensuite, dans la fonction setup() que nous configurerons l’appel à cette routine en cas d’un passage de l’état bas à l’état haut sur D3 :

// broche D3 en entrée

pinMode(D3, INPUT_PULLUP);

// association avec la routine

attachInterrupt(digitalPinToInterrupt(D3), IRint, RISING);

// activation des interruptions

sei();

Dès que le changement d’état aura lieu, le fonctionnement normal du croquis sera interrompu et la routine sera exécutée, incrémentant la variable compteur et al umant la led de la carte (notez l’inversion de la logique, la led s’al ume en mettant D4 à la masse). Pour agir en fonction de cette valeur, nous n’avons qu’à faire un test dans la fonction loop(), à interval e régulier : unsigned long previousMillis = 0;

void loop() {

unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= 10000) {

previousMillis = currentMillis;

if(compteur) {

Serial.print("compteur= ");

Serial.println(compteur);

compteur=0;

digitalWrite(D4, HIGH);

}

}

}

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez Google Analytics pour la surveil ance physique

Après quelques jours de

Nous pourrions faire de même

fonctionnement de trois

reste plus qu’à écrire le reste du croquis

avec un

capteurs Wifi installés,

delay(10000) et donc

comprenant la connexion à notre point

il devient intéressant

sans utiliser millis(), mais

d’accès Wifi et surtout la fonction qui va

d’observer les données.

mieux vaut prévoir pour plus

envoyer les données à Google.

Notez la mention de

tard et directement permettre de

« IRL Visit » en bas de

la capture, provenant

facilement étendre le croquis par

d’un premier test et bien

la suite. delay() est simple à

entendu impossible à

3. ÊTRE UN CLIENT

utiliser, mais bloque le fonction-

supprimer de Google

nement normal du croquis (sauf

Analytics...

WEB EN TOUTE

pour l’interruption bien entendu)

SIMPLICITÉ

et ceci pourrait rendre difficile

l’ajout de fonctionnalités. Quoi

Lorsqu’on cherche sur le net comment

qu’il en soit, ici, toutes les

agir en tant que client web avec une carte

10 secondes nous testons

à base d’ESP8266, on trouve généra-

compteur et si son contenu est

lement des croquis gérant cela au plus

non nul, nous affichons sa valeur

bas niveau. Ces exemples et réalisations

et plaçons D4 à la masse afin

établissent une connexion avec un ser-

d’éteindre la led qui aura été al u-

veur, composent toute la requête « à la

mée dans la première exécution

main » et analysent la réponse obtenue

de la routine d’interruption.

après envoi. C’est très surprenant, car il

existe une approche bien plus simple. En

Nous avons à présent la base

effet, le support ESP8266 pour Arduino

de notre croquis permettant

comprend une bibliothèque spécialement

d’obtenir l’information souhaitée

développée pour gérer les requêtes

depuis le capteur PIR. Il ne nous

HTTP : ESP8266HTTPClient.h.

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

HACKABLE MAGAZINE n°21

55

EN COUVERTURE

GOOGLE ANALYTICS

Il est alors totalement inutile de faire tout le travail

• ec= : ce paramètre, comme

nous-mêmes puisqu’il suffit de reposer sur les fonctions

les suivants, est lié au type

et méthodes prévues à cet effet, et donc d’éviter toute la

event, il s’agit d’un « mot »

partie consistant à gérer et disséquer la réponse (et les

précisant la catégorie de

codes HTTP) envoyée par le serveur. Toutes les manipu-

l’événement qui a déclenché

lations de chaînes de caractères sont ainsi faites automa-

l’envoi. Nous utiliserons le

tiquement pour nous.

terme « physique » comme il

Le « Measurement Protocol » nous permettant de fournir

s’agit d’un événement de « la

nos données à Google Analytics n’est pas très complexe.

vraie vie » ;

Il s’agit simplement d’envoyer une requête POST comme

• ea= : précise l’action qui vient

cel e générée lorsque vous validez un formulaire dans un

de se dérouler. Comme nous

navigateur web. Ici, cependant, nous sautons une étape

utilisons un capteur de mou-

et construisons directement la requête sous la forme

vement PIR, le mot « mouve-

d’une URL composée de façon tout à fait standard vers

ment » paraît assez judicieux ;

http://www.google-analytics.com/collect. Il suffit de

• el= : c’est le label (ou libel é)

spécifier les différents paramètres, séparés d’un & :

caractérisant l’événement et,

• v= : la version du protocole utilisé (toujours v=1 ici) ; là encore, le choix est totale-

•

ment arbitraire. Personnel e-

tid= : l’ID de suivi récupéré sur Google Analytics au

format

ment, pour ce type d’usage

UA-xxxxxxxx-x (où les x sont des chiffres) ;

c’est ici que je précise

• cid= : l’ID client correspondant normalement à un iden-

l’endroit où se trouve le cap-

tifiant unique de visiteur/client, mais nous n’en avons pas

teur : « bureau », « couloir »,

l’usage ici. Ce paramètre est cependant indispensable si

« porte », « entrée », « lab »,

on ne précise pas un UID, avec uid=, permettant d’iden-

etc. ;

tifier un utilisateur (notez que l’UID ne doit jamais être

une information personnel e identifiable) ;

• ev= : précise, enfin, une valeur

pour événement, qui peut être,

• t= : le type de hit ou, autrement dit, d’action ayant pro-comme nous al ons le voir

voqué l’envoi de données. Nous utiliserons ici le type

dans le code qui va suivre,

event, un événement, mais il peut également s’agir, par

la valeur de compteur ou,

exemple, de pageview pour l’affichage d’une page web

autrement dit, le nombre de

ou de transaction pour une transaction en commerce

déclenchements du capteur

électronique ;

sur l’interval e écoulé (10s).

Différentes

représentations

peuvent être

choisies pour

l’affichage des

données collectées

et analysées. Ici

nous voyons la

répartition des

mouvements captés

sous la forme

de barres avec

un pourcentage,

mais l’affichage

« camembert » est

également possible.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez Google Analytics pour la surveil ance physique Remarquez que la catégorie, l’action et le label d’un événement sont déterminés directement dans la requête sans avoir besoin d’une quelconque configuration côté Google Analytics. Si vous laissez fonctionner votre montage pendant une semaine avec une catégorie « physque » et remarquez ensuite la faute de frappe, pour la corriger en « physique », Google Analytics enregistrera, depuis le début des envois, deux catégories,

« physque » et « physique » . Et il n’est, bien entendu, pas possible de corriger des données déjà envoyées. .

Sur cette base, nous pouvons donc écrire notre fonction provoquant à la fois la connexion au serveur Google, l’envoi de la requête et l’obtention du code retour HTTP pour vérification : int envoiGA(int nbr) {

// objet représentant la requête

HTTPClient http;

// valeur de retour, par défaut en erreur

int ret = -1;

// la requête POST

// (sur deux lignes pour les besoins de la mise en page)

String eventData = "v=1&tid=UA-xxxxxxxx-x&cid=0000&t=event&"

"ec=physique&ea=mouvement&el=Mouvement lab&ev=";

// plus la valeur du compteur

eventData += nbr;

Serial.print("Envoi GA: ");

Serial.println(eventData);

// sommes-nous bien connectés ?

if(WiFi.status()== WL_CONNECTED) {

// oui, début de l'envoi

http.begin("http://www.google-analytics.com/collect"); http.addHeader("Content-Type", "application/x-www-form-urlencoded");

// récupération de la réponse

int httpCode = http.POST(eventData);

Serial.print("Reponse GA: ");

Serial.println(httpCode);

http.end();

// 200 signifie "succès de la requête"

if(httpCode == 200) {

// on retourne 0

ret = 0;

}

}

// si on arrive ici, il y a eu un problème

// et on retourne -1

return ret;

}

Nous utilisons ici un type « événement », puisque cela semble le choix le plus naturel, mais il est possible d’adapter cette fonction à d’autres usages (comme le commerce par exemple) en utilisant un autre type. Référez-vous à la documentation Google sur le « Measurement Protocol » pour en savoir plus : https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide.

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

HACKABLE MAGAZINE n°21

57

EN COUVERTURE

GOOGLE ANALYTICS

Il ne nous reste plus, à ce stade, qu’à assembler le tout en ajoutant, dans setup, de quoi nous connecter en Wifi :

const char* ssid = "SSID_AP_WIFI";

const char* password = "mot_de_passe";

void setup() {

uint8_t i = 0;

pinMode(D4, OUTPUT);

digitalWrite(D4, HIGH);

Serial.begin(115200);

// connexion Wifi client (STAtion)

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

Serial.print("Connexion à ");

Serial.println(ssid);

while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500); if(i == 21){

Serial.print("Erreur de connexion sur "); Serial.println(ssid); while (1) {

// erreur DHCP

}

}

// Affichage adresse

Serial.print("adresse IP: ");

Serial.println(WiFi.localIP());

[...]

Le tout, sans oublier d’intégrer l’appel à la fonction envoiGA() dans loop(), juste avant de remettre à 0 la variable compteur.

4. RÉSULTATS ET ÉVOLUTIONS POSSIBLES

Les premiers essais du montage se feront sans doute loin de son point d’instal ation, afin de simplement vérifier que les mouvements sont correctement détectés, que le croquis les prend effectivement en compte et que les données soient correctement envoyées au serveur Google. Cette dernière phase du développement est facilitée par une fonction intéressante de Google Analytics permettant de voir en « temps réel » l’activité d’un site.

Rendez-vous donc sur https://analytics.google.com et dans le menu Temps réel choisis-sez Événements. Avec un décalage d’une seconde ou deux, un mouvement devrait provoquer l’al umage de la led sur la carte, l’affichage des messages sur le moniteur série et, peu après, l’apparition d’un pic d’activité sur l’interface Google Analytics.

Malheureusement, il ne vous sera pas possible de voir le label de l’événement en question puisqu’il n’est pas affiché dans cette vue. Il faudra alors instal er le ou les capteurs et commencer à réel ement col ecter des données pour enfin, après quelques jours, vous rendre dans Comportement, Événements, Principaux événements et afficher le graphique par Libellé

d’événement. Bien entendu, plus le temps passera plus les informations seront intéressantes.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez Google Analytics pour la surveil ance physique

Certains graphiques

d’une vue sont plus

précis que d’autres et

offrent une résolution

horaire et non

simplement par jour,

semaine ou mois. Il

n’est cependant pas

possible de tracer

simultanément les

différents libellés ici.

Google Analytics est

très étoffé et ne cesse

d’évoluer, cela sera

peut-être possible

dans un futur plus ou

moins proche.

Il est possible de grandement

Il y a donc clairement des limites avec ce type d’utilisation de

étendre le fonctionnement de ce

Google Analytics, mais dès lors qu’il s’agit de « trafic physique », montage, avec toutes sortes de

pouvant être le pendant des visites sur un site web, il n’y a aucun capteurs. Certaines informations

problème. Dans le scénario de l’épicerie ou de la boutique ayant

cependant ne sont pas adaptées

pignon sur rue, le fait de considérer l’établissement comme un

pour ce type de col ecte. Je pense

site de e-commerce peut être poussé encore davantage. La

par exemple à des relevés de tem-

technologie utilisée par les caisses enregistreuses ne m’est

pératures, de pression ou d’humi-

pas familière, mais il doit exister une possibilité de col ecter des dité relative. Il est, bien entendu

données et les considérer comme des transactions. Après tout,

possible de tricher en utilisant

l’objet même d’une caisse électronique est bien de faciliter la

d’autres types d’informations, le

comptabilité et donc d’enregistrer des transactions. Ceci doit

montant d’une transaction, par

être faisable d’une façon ou d’une autre.

exemple, est une valeur en virgule

Une autre utilisation possible pourrait impliquer la mise en

flottante et des degrés pourraient

œuvre de tags NFC ou RFID permettant à l’ESP8266 de lire un

se substituer aux euros. Il est

identifiant stocké et donc d’avoir une information plus fiable sur

également possible de simple-

les « clients » ou les « utilisateurs ». On peut également ima-

ment multiplier par 100 une valeur

giner interfacer un équipement existant comme une machine

pour obtenir un entier et l’utiliser

à café, un distributeur automatique de friandises ou même

comme valeur d’événement, mais

des instal ations sanitaires (WC, lavabo, etc.). Les idées ne

là encore, ce n’est pas vraiment

manquent pas et encore une fois, l’ESP8266 démontre claire-

correct. Après tout, une mesure

ment qu’il mérite les mêmes honneurs que les cartes Arduino

récurrente n’est pas vraiment un

ou Launchpad en termes de souplesse d’utilisation et de

événement. .

richesse en fonctionnalités, sinon davantage. . DB

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

HACKABLE MAGAZINE n°21

59

EMBARQUÉ & INFORMATIQUE

RÉSEAU

mDNS OU COMMENT

RETROUVER FACILEMENT

VOTRE PI

Denis Bodor

... sur le réseau, mais aussi n’importe quelle autre machine sans avoir son adresse IP. Vous connaissez le problème, soit vous attribuez une adresse statique à chaque machine de votre réseau avec une

configuration dans votre box ou votre propre serveur DHCP, soit

l’attribution d’adresse est dynamique. Dans les deux cas, il faut connaître l’adresse du système auquel vous voulez vous connecter. Il existe cependant un mécanisme appelé Multicast DNS (mDNS) qui vous permet d’éviter cela. Jetons donc un œil...

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

mDNS ou comment retrouver facilement votre Pi

Avant toutes choses, précisons que tout ceci n’est ni nouveau ni même à configurer sur votre Pi (ou plus exactement dans Raspbian). mDNS est un protocole qui ne date pas d’hier, mais, en plus, ceci est pris en charge par défaut par votre Pi, ainsi que votre système pour PC/Mac qu’il s’agisse de Windows, macOS ou GNU/Linux. Il s’agit donc ici de simplement savoir que cela existe, comprendre comment cela fonctionne et quel es sont les implications pour votre réseau.

1. CONNAÎTRE LA BONNE ADRESSE

Le problème de l’adressage est présent depuis que les réseaux eux-mêmes existent. Chaque machine doit être identifiée par une adresse afin que les autres, sur le même réseau puissent y accé-

der. La solution la plus ancienne et la plus simple pour régler ce problème est l’adressage purement statique : on configure chaque machine avec une adresse unique et on se souvient simplement de toutes les correspondances. Ceci implique donc que pour chaque nouvel e machine du réseau, il est nécessaire de configurer une nouvel e adresse différente de cel es déjà utilisées. Bien entendu, si on veut changer l’adresse, il faut alors changer la configuration du système. Rien n’est centralisé.

Avec un réseau susceptible de changer fréquemment cela devient vite pénible et le système a donc été automatisé. Il faut savoir, en effet, que l’adresse IP d’une machine (ou plus exactement d’une interface réseau d’une machine) peut être configurée arbitrairement, mais que les interfaces réseau (Ethernet, ATM, Token Ring, Wifi, etc.) disposent d’une autre adresse, fixe, physique : l’adresse MAC (pour Media Access Control). C’est un identifiant unique stocké dans une interface réseau dont la valeur est fixée par le constructeur et est réputée unique. Cel e-ci prend la forme de 48 bits (6 octets) représentés sous la forme de 6 valeurs hexadécimales séparées par un double-point, exemple : b8:27:eb:ba:b5:02. Vous pouvez connaître l’adresse MAC des interfaces de votre Raspberry Pi en utilisant la commande ifconfig ou ip addr : $ ifconfig

eth0 Link encap:Ethernet HWaddr b8:27:eb:ba:b5:02

inet adr:192.168.10.234 Bcast:192.168.10.255

Masque:255.255.255.0

adr inet6: fe80::e3e2:84e8:e981:c648/64 Scope:Lien

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:178270 errors:0 dropped:21912 overruns:0 frame:0

TX packets:16639 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 lg file transmission:1000

RX bytes:38201219 (36.4 MiB) TX bytes:1916257 (1.8 MiB) Grâce à cette adresse MAC, il est possible de créer une correspondance avec une adresse IP

en mettant en œuvre un protocole particulier appelé DHCP. En effet, lorsque deux machines dis-cutent entre el es, el es le font via des signaux électriques transmis sur un câble réseau (ou dans les airs). Du point de vue du matériel, la notion d’adresse IP n’existe pas. En utilisant une adresse IP pour contacter une machine inconnue, le système commence par demander l’adresse MAC de cette dernière avec un autre protocole : ARP (Address Resolution Protocol). Celui-ci tient alors à jour une table de correspondance entre adresse MAC et adresse IP.

DHCP est autre chose, c’est un « protocole de configuration dynamique des hôtes » (ou Dyna-mic Host Configuration Protocol en anglais, DHCP). Celui-ci sert, pour une machine, à connaître son adresse IP et à configurer son système automatiquement. Au démarrage par exemple, votre Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) https:/ www.ed-diamond.com

HACKABLE MAGAZINE n°21

61

EMBARQUÉ & INFORMATIQUE

RÉSEAU

pour chaque nouvel e machine ou

carte (et vous êtes toujours obligé

de vous souvenir de l’adresse IP).

C’est mieux qu’une configuration

statique par système, mais c’est

perfectible.

2. DE L’ADRESSE

VERS LE NOM

Demander à un humain

« normal » de devoir se souve-

nir de quelque chose comme

192.168.10.234 n’est pas

beaucoup plus facile qu’avec

Tous les modèles

Raspberry Pi va envoyer une requête DHCP

b8:27:eb:ba:b5:02. Ainsi, pour

de Raspberry Pi

demandant « voici mon adresse MAC, quel e est

ne disposent pas

accéder à une machine sur Internet,

d’un port Ethernet,

mon adresse IP ? ». Si un serveur DHCP est pré-

on utilise rarement une adresse,

mais ceci reste, à

sent sur le réseau, celui-ci peut répondre et fournir

mais plutôt un nom. Ce nom, asso-

mon avis, la solution

une adresse à la Pi : « Ok, voici ton adresse IP »

la plus fiable et

cié à un identifiant de protocole et

(dans les faits, c’est tous les paramètres réseau qui

stable pour installer

un emplacement, forme une URL

votre Pi dans

peuvent être ainsi transmis).

(Uniform Resource Locator).

votre réseau local.

Le serveur DHCP a pour tâche de faire en sorte

Personnellement,

L’URL « https://boutique.ed-

ce n’est que lorsque

que chaque machine ait une adresse IP différente

diamond.com/en-kiosque/1269-

je n’ai pas le choix

sur le réseau. Deux cas de figure sont générale-

hackable-magazine-20.html »

que j’opte pour le

ment envisagés : distribuer les adresses séquen-

Wifi, mais dans les

par exemple, référence le fichier

tiel ement, le premier qui demande est le premier

deux cas, filaire

1269-hackable-magazine-20.

ou non, mDNS

servi, ou disposer d’une configuration où une liste

html, dans le « répertoire » (che-

est parfaitement

d’adresses MAC établit les correspondances avec

min) en-kiosque, sur la machine

utilisable.

les adresses IP. Dans le cas d’une box ADSL, le

nommée boutique du domaine

plus souvent, la première solution est utilisée et

ed-diamond.com accédé via le

le premier ordinateur qui demande une adresse

protocole HTTPS. Cette machine

obtient la première disponible.

est cependant accessible en

Ce style de configuration implique, bien enten-

réalité par une adresse IP :

du, que tout est fait dynamiquement, mais aussi

213.162.55.165.

qu’une même machine pourra avoir une adresse

Il y a donc un mécanisme en

différente selon l’ordre de démarrage des différents

place pour associer un nom complet

systèmes. En d’autres termes, il est tout à fait pos-

de machine avec une adresse IP.

sible qu’une Pi soit accessible à un moment avec

Ce nom complet, composé du nom

une adresse puis, quelques jours après, après

d’hôte de la machine (boutique) et

plusieurs démarrages, avec une autre.

du domaine (ed-diamond.com) est

Ce système est loin d’être parfait car, soit vous

appelé un nom de domaine pleine-

ne savez jamais avec certitude quel e adresse a

ment qualifié ou FQDN en anglais

votre PI, soit, si vous optez pour une liste IP/MAC,

(pour Ful y Qualified Domain Name).

vous êtes obligé de reconfigurer le serveur DHCP

Et, quelque part, un serveur a donné

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

mDNS ou comment retrouver facilement votre Pi

à votre machine l’adresse IP corres-

3. LA SOLUTION : MDNS

pondante, un serveur DNS (Domain

Name System).

Idée toute bête : et si chaque machine du réseau

donnait el e-même la correspondance entre son nom et

Je n’entrerai pas dans le détail

son adresse IP ? Ce mécanisme serait assez similaire à

ici, mais m’en tiendrais à vulgariser

DHCP finalement, de la même manière qu’une machine

le concept comme précédemment.

peut hurler « c’est quoi mon IP ? » en espérant une

Un DNS est un service fournissant,

réponse, el e pourrait tout aussi bien crier « c’est quoi

entre autres choses, une adresse

l’IP de XXX ? » en attendant la réponse de l’intéressé.

IP en fonction d’un FQDN. Comme

J’utilise délibérément les termes « hurler » et « crier » ici

le système est global à tout Internet,

puisque ces messages ne sont pas adressés à une ma-

il n’existe pas qu’un seul serveur

chine en particulier, mais diffusés ou multidiffusés sur tout

DNS, mais toute une tripotée

le réseau et n’importe quel e machine peut les recevoir.

constituée selon une hiérarchie

bien précise et les informations sont

Cette approche, totalement différente de la résolu-

également dupliquées d’un serveur

tion de noms DNS, est cel e proposée par le protocole

à l’autre selon des règles strictes

mDNS qui fait parti d’un ensemble, plus large, de proto-

pour assurer le fonctionnement de

coles appelés Zeroconf. Cet ensemble a été créé pour

l’ensemble même si un ou plusieurs

permettre de simplifier la création automatique d’un

serveurs tombent en panne.

réseau local (non Internet donc) et plus particulièrement

d’un réseau domestique (par opposition à un réseau

Lorsque vous entrez une URL

« professionnel »). On y trouve mDNS pour remplacer

dans votre navigateur il y a tout un

DNS, mais également IPv4LL/APIPA pour remplacer

lot de mécanismes qui se mettent

DHCP, DNS-SD pour trouver les services (partages,

en place, impliquant des serveurs

impression, etc.) ou encore NAT-PMP permettant de

partout dans le monde, dialoguant

rendre accessible une machine depuis l’extérieur du

avec des protocoles complexes,

réseau local (mécanisme NAT).

à la vitesse de la lumière (ou

presque), tout ça pour que vous

Avec Zeroconf, il devient possible pour un utilisateur

puissiez voir des vidéos de cha-

n’ayant aucune connaissance particulière en réseau,

tons sur votre écran (ou d’autres

choses). Mais ceci résout le pro-

blème initial : il n’est plus néces-

saire de mémoriser des adresses

IP et surtout, la correspondance

Un petit module

peut être changée à volonté avec

comme celui-ci, utilisé

un minimum d’actions.

avec l’environnement

Arduino, est

En revanche, mettre un tel sys-

une alternative

économique, puissante

tème en place, un serveur DNS

et connectée aux

local pour votre réseau, bien que

cartes officielles

parfaitement possible, est loin d’être

Arduino à base de

aisé et demanderait des efforts non

microcontrôleurs Atmel

AVR. Il existe quelques

négligeables pour configurer tout

subtilités dans leur

cela de manière synchronisée avec

utilisation comparée

le serveur DHCP. Le jeu n’en vaut

aux Arduino, mais,

tout simplement pas la chandelle,

dans l’ensemble,

la transition d’une

d’autant qu’autre chose est déjà en

plateforme à l’autre est

place et bien plus simple à utiliser. .

relativement aisée.

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

HACKABLE MAGAZINE n°21

63

EMBARQUÉ & INFORMATIQUE

RÉSEAU

de simplement brancher une machine, que ce soit un ordinateur ou une imprimante réseau par exemple, et d’immédiatement l’utiliser. Ce type de simplicité est généralement très apprécié des utilisateurs Apple et ce n’est donc pas une surprise qu’une des premières mises en œuvre de Zeroconf ait été faite chez la firme à la pomme, sous le nom de « Rendez-vous », devenu ensuite « Bonjour ».

L’ensemble des autres systèmes a rapidement emboîté le pas que ce soit Windows ou GNU/Linux. Le système Raspbian de votre Pi dispose de ces fonctionnalités, et en particulier de mDNS, via la bibliothèque Avahi, implémentant presque tous les protocoles Zeroconf.

Cel e-ci s’accompagne d’un démon (un processus fonctionnant en permanence en mémoire) assurant les services Zeroconf et donc toute la mécanique nécessaire. Avahi est instal ée par défaut dans Raspbian et, sans que vous le sachiez, fait déjà ce travail pour vous.

Dans la très grande majorité des cas, dès lors que vous branchez votre Raspberry Pi au réseau et la démarrez, cel e-ci va répondre aux demandes mDNS qui la concernent. Le nom de votre système sur le réseau sera son nom d’hôte (« raspberrypi » par défaut) associé au domaine « .local ». Vous pourrez accéder à votre système depuis n’importe quel e machine utilisant également les protocoles Zeroconf et en particulier mDNS. Pour cela, il vous suffit d’accéder à raspberrypi.local :

% ping raspberrypi.local

PING raspberrypi.local (192.168.10.234) 56(84) bytes of data.

64 bytes from 192.168.10.234: icmp_seq=1 ttl=64 time=0.335 ms

64 bytes from 192.168.10.234: icmp_seq=2 ttl=64 time=0.434 ms

64 bytes from 192.168.10.234: icmp_seq=3 ttl=64 time=0.387 ms

[...]

Inutile de connaître l’adresse de la Pi, ce nom est suffisant, et ce quel e que soit l’adresse attribuée par le serveur DHCP intégré à votre box ADSL ou à votre routeur Internet.

Il est cependant de bon ton de changer le nom d’hôte de votre Pi en utilisant sudo raspi-config, car comme celui-ci est défini par défaut de manière identique pour tous les systèmes Raspbian, toutes les Pi du réseau s’appel ent donc raspberrypi.local. Ceci explique également pourquoi le serveur SSH (connexion en ligne de commandes à distance) est désactivé, car il deviendrait excessivement facile de prendre le contrôle d’une Pi non reconfigurée : ssh pi@raspberrypi.local, mot de passe raspberry, sudo et vous voilà le maître des lieux ! Ceci ne signifie pas pour autant que SSH soit dangereux ou risqué, mais il est important de changer le nom d’hôte et surtout le mot de passe de l’utilisateur pi, dès le premier démarrage.

Comme nous venons de le voir avec la commande ping, un système GNU/Linux comme Raspbian est parfaitement en mesure d’utiliser un nom avec un domaine .local. Ceci est rendu possible par l’utilisation du paquet libbss-mdns qui ajoute la résolution mDNS aux fonctionnalités GNU NSS (Name Service Switch). NSS est un système modulaire offrant à (presque) tous les outils du système les fonctionnalités de résolution de nom. En ajoutant libbss-mdns comme greffon, immédiatement et sans plus de changement, tout le système utilise mDNS. Il existe bien d’autres greffons pour plusieurs autres protocoles pouvant offrir une résolution de nom (Winbind, LDAP, fichier DB, Docker, etc.).

Cependant, pour simplement trouver l’adresse d’une machine sans la contacter directement, le plus logique est d’utiliser les outils Avahi (paquet avahi-utils), comme par exemple : Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 64

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Abonnez-vous !

M’abonner !

Me réabonner !

Compléter ma

collection !

Pouvoir lire

en ligne mon

magazine préféré !



PARTICULIERS,

PROFESSIONNELS,

 Rendez-vous sur :

 Rendez-vous sur :

www.ed-diamond.com

proboutique.ed-diamond.com

pour consulter

pour consulter

toutes les

toutes les offres

offres !

dédiées !

 ...ou renvoyez-nous

 ...ou renvoyez-nous

le document au verso

le document au verso

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

complété !

ABO_formulaire2017_mags_R3.indd 10

07/08/2017 17:37

VOICI LES OFFRES D’ABONNEMENT AVEC HACKABLE !

CHOISISSEZ VOTRE OFFRE ! Prix TTC en Euros / France Métropolitaine*

PAPIER

Offre ABONNEMENT

Réf

Tarif TTC

HK

6n° HK

HK1

39 €

LES COUPLAGES AVEC NOS AUTRES MAGAZINES

I

6n° HK + 6n° MISC

I1

79 €

I+

6n° HK + 6n° MISC +

2n° HS

I+1

99 €

J

6n° HK + 11n° GLMF

J1

105 €

J+

6n° HK + 11n° GLMF +

6n° HS

J+1

159 €

K

6n° HK +

6n° LP

K1

75 €

K+

6n° HK +

6n° LP

+

3n° HS

K+1

99 €

L

6n° HK +

6n° LP

+ 11n° GLMF + 6n° MISC

L1

189 €

L+

6n° HK +

6n° LP

+

3n° HS

+ 11n° GLMF +

6n° HS

+ 6n° MISC + 2n° HS

L+1

289 €

Les abréviations des offres sont les suivantes : GLMF = GNU/Linux Magazine France | HS = Hors-Série | LP = Linux Pratique | HK = Hackable J’indique l’offre si différente que celles ci-dessus :

J’indique la somme due (Total) :

€

Je choisis de régler par :



Chèque bancaire ou postal à l’ordre des Éditions Diamond



Pour les règlements par virements, veuillez nous contacter via e-mail : (uniquement France et DOM TOM)

cial@ed-diamond.com ou par téléphone : +33 (0)3 67 10 00 20

SÉLECTIONNEZ VOTRE OFFRE DANS LA GRILLE CI-DESSUS 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.

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.

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) RETROUVEZ TOUTES NOS OFFRES SUR : www.ed-diamond.com !

*Les tarifs hors France Métropolitaine, Europe, Asie, etc. sont disponibles en ligne !

ABO_formulaire2017_mags_R3.indd 11

07/08/2017 17:37

mDNS ou comment retrouver facilement votre Pi

$ avahi-resolve -4 -n raspberrypiled.local

192.168.10.234

Ici nous apprenons que la machine raspberrypiled a pour adresse IPv4 192.168.10.234.

Bien entendu, si cela venait à changer par la suite, car le serveur DHCP lui attribut une autre adresse, ceci serait immédiatement pris en compte.

Inversement, il est possible de connaître le nom d’une machine à partir de son adresse avec : $ avahi-resolve -a 192.168.10.234

192.168.10.234 raspberrypiled.local

Sur cette base, on peut rapidement écrire un petit script intéressant permettant de faire le tour d’un réseau 192.168.10.* (ou 192.168.10.0/255.255.255.0, ou encore 192.168.10.0/24 en notation CIDR) :

#!/bin/bash

# permet les ctrl+c

trap "echo Exited!; exit;" SIGINT SIGTERM

# on boucle sur les IP possibles

for i in {1..254}

do

# en ligne ?

ping -c 1 192.168.10.$i > /dev/null

if [ $? -eq 0 ]; then

# oui, on le dit...

echo -n "node 192.168.10.$i is UP : "

# et on cherhe le nom via mDNS

avahi-resolve -a 192.168.10.$i

fi

done

Il suffit alors de lancer ce script avec sh nom_du_fichier.sh pour le voir tester les 254

adresses possibles, nous dire si ces machines répondent et, le cas échéant, nous afficher leur nom via une résolution inverse mDNS. Ce genre de choses peut également être obtenu avec l’outil avahi-browse qui est un peu plus bavard puisqu’il retourne également les services disponibles sur les machines trouvées (avec avahi-browse -l -a -t par exemple). On peut même rechercher sur le réseau, par exemple les imprimantes réseau IPPS (avahi-browse

-t _ipps._tcp), les serveurs web (avahi-browse -t _http._tcp) ou encore les machines offrant SSH (avahi-browse -t _ssh._tcp), en fournissant simplement le nom d’un type de service selon la nomenclature DNS-SD (DNS-Service Discovery).

4. PAS SEULEMENT SUR PC ET RASPBERRY PI

Vous conviendrez sans doute avec moi que ce mécanisme mDNS est fort intéressant. Même sans entrer dans le détail de la configuration et en s’en tenant à l’instal ation par défaut, ceci est furieusement pratique. Mais qu’en est-il d’autres plateformes pouvant fonctionner sur le réseau ?

Je pense en particulier aux modules ESP8266, s’utilisant exactement comme des Arduino, mais Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) https:/ www.ed-diamond.com

HACKABLE MAGAZINE n°21

67

EMBARQUÉ & INFORMATIQUE

RÉSEAU

avec connectivité Wifi et faciles à

acquérir pour quelques sous.

Nous avons précédemment

utilisé ce type de plateformes

dans le numéro 18 avec un mon-

tage indépendant, se connectant

au point d’accès Wifi et permet-

tant de démarrer ou éteindre

(brutalement) un PC ou tout autre

équipement électronique, en

simulant simplement une pres-

sion sur le bouton de mise sous

tension. Selon la configuration

réseau utilisée, il est parfaite-

ment possible que le montage

ne se voit pas toujours attribuer

la même adresse IP. L’usage de

mDNS peut donc grandement

faciliter les choses.

Or justement, les bibliothèques

dédiées à la gestion du Wifi dans

l’environnement Arduino pour

Les modules ESP8266

ont débuté leur

cette plateforme (ESP8266, NodeMCU, Wemos, ESPduino, etc.) intègrent également une carrière timidement

prise en charge du protocole mDNS. Il vous suffit pour cela d’inclure ESP8266mDNS.h avec ce qu’on appelle

dans votre croquis et de configurer quelques options. Le code présenté, en plusieurs maintenant l’ESP-01

morceaux, ci-après n’est pas complet, il ne s’agit que des éléments à ajouter dans votre (en haut à gauche),

initialement prévu

propre croquis. Vous trouverez cependant un croquis complet d’un projet de serveur ac-pour être utilisé en

cessible par la commande telnet de votre Raspberry Pi (ou d’un PC sous GNU/Linux) complément d’une

dans le dépôt GitHub du numéro. Il s’agit d’une version simplifiée du croquis du projet carte à microcontrôleur

présenté dans le numéro 18.

afin de fournir une

connectivité Wifi. Avec

Pour utiliser mDNS avec l’ESP8266, on commence simplement par inclure les deux le temps et un énorme

bibliothèques (« fichiers d’entête » en réalité) suivantes :

effort principalement

communautaire, ces

modules existent à

#include <ESP8266WiFi.h>

présent avec une

#include <ESP8266mDNS.h>

multitude de formes,

de prix, de tailles et

Assez classiquement, on déclare et initialise des variables nous permettant de stocker de fonctionnalités

les paramètres importants :

intégrées.

// le nom du point d'accès à utiliser

const char* ssid = "mon_ssid";

// le mot de passe correspondant

const char* password = "phrase2passe";

// le nom d'hôte de notre ESP8266

const char* hostString = "ESPtelnet";

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

mDNS ou comment retrouver facilement votre Pi

Comme avec n’importe quel e configuration Wifi cliente, on enchaîne sur la tentative de connexion dans la fonction setup(), juste après avoir défini le nom d’hôte qu’utilisera l’ESP8266 :

// définir le nom d'hôte de l'ESP8266

WiFi.hostname(hostString);

// établissement de la connexion Wifi cliente

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

Serial.print("\nConnexion à ");

Serial.println(ssid);

while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500); if(i == 21){

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

Serial.println(ssid);

while (1) {

// erreur DHCP ou pas de réponse

}

}

// Affichage adresse

printIPAddress();

Le mode choisi, WIFI_STA, fait de nous un client Wifi et non un point d’accès. Il est important de spécifier cela, car dans le cas contraire nous pourrions être client et point d’accès, et donc visible de n’importe quel client Wifi comme un smartphone. La connexion à proprement parler est déclenchée avec begin() et nous partons dans une boucle de 20 vérifications espacées d’une demi-seconde.

Ceci a pour but de laisser la connexion s’établir, mais une fois le temps écoulé, si status() retourne autre chose que WL_CONNECTED informant d’une connexion correcte, nous estimons qu’il y a un problème. Dans ce cas, une boucle infinie while() bloque le croquis et tout s’arrête.

Dans le cas contraire, nous avons une connexion et avons reçu une adresse IP. Nous pouvons alors enchaîner sur la partie mDNS avec MDNS.begin() en passant en argument le nom d’hôte arbitrairement choisi. La valeur renvoyée par la méthode nous informe du bon déroulé de l’opération :

// démarrage mDNS-SD

if (!MDNS.begin(hostString)) {

Serial.println("Erreur configuration mDNS!");

} else {

Serial.println("Répondeur mDNS démarré");

// ajout service disponible ici

MDNS.addService("telnet", "tcp", 23); // Announce esp tcp service on port 23

}

Si tout va pour le mieux, nous utilisons MDNS.addService() pour préciser le type de service que nous fournissons. mDNS est la partie « résolution d’adresse », mais c’est mDNS-SD qui permet, en plus, d’informer de la liste des services que nous proposons. Ici, nous basant sur le projet de Hackable n°18, nous avons un serveur Telnet, sur le port 23, permettant d’accepter des commandes. Nous précisons donc en argument le nom du service, le protocole (TCP) et le port utilisé.

Notez que le nom d’hôte que nous utilisons ici est un choix, basé sur la fonction du montage utilisé. Le plus souvent, pour simplifier les choses, on compose ce nom d’une partie arbitraire et d’une autre, variable, découlant de l’identifiant 32 bits de la puce ESP8266 : Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) https:/ www.ed-diamond.com

HACKABLE MAGAZINE n°21

69

EMBARQUÉ & INFORMATIQUE

RÉSEAU

char hostString[16] = {0};

[...]

sprintf(hostString, "ESP_%06X", ESP.getChipId());

Serial.print("Hostname: ");

Serial.println(hostString);

Il est amusant de remarquer qu’on se retrouve là presque exactement dans la même situation que cel e qui nous a poussés, au départ, à faire usage de mDNS. Nous n’avons plus d’adresse IP à retenir, mais devons finalement faire de même avec le nom d’hôte. Personnel ement, je préfère donner un nom d’hôte totalement arbitraire en fonction du projet ou de son utilité, et ne pas me baser sur des identifiants numériques. À ma charge de ne pas utiliser deux fois le même nom d’hôte, mais je trouve cela bien plus explicite.

Quoi qu’il en soit, une fois mDNS et mDNS-SD configurés, il ne nous reste plus alors qu’à lancer le serveur pour terminer notre fonction setup() :

// Lancement serveur pour accepter les connexions

server.begin();

server.setNoDelay(true);

Bien entendu, ce serveur a été configuré en déclarant WiFiServer server(23); en début de croquis et la fonction loop() aura pour travail d’interpréter les communications sur ce dernier. Ceci n’est pas l’objet du présent article et reviendrais à honteusement paraphraser mon propre article du numéro 18. De plus, cette partie du croquis est totalement dépendante du projet. Ici c’est Telnet et le port 23, mais il peut tout aussi bien s’agir d’un serveur web et donc de HTTP et du port 80. N’oubliez simplement pas de configurer mDNS-SD en conséquence. .

Une fois le croquis chargé et l’ESP8266 redémarré, automatiquement il se connectera au point d’ac-cès Wifi (jusque-là rien d’exceptionnel), mais il lancera également son support mDNS, nous permettant ainsi de le trouver rapidement. Nous pouvons par exemple demander « qui propose Telnet ? » : $ avahi-browse -t _telnet._tcp

+ eth0 IPv4 ESPtelnet Telnet Remote Terminal local

De la même façon, à partir du nom d’hôte choisi et complété de .local, nous pouvons obtenir l’adresse IP du montage :

$ avahi-resolve -4 -n ESPtelnet.local

esptelnet.local 192.168.10.40

...et utiliser ping pour vérifier sa disponibilité :

$ ping -c 2 ESPtelnet.local

PING ESPtelnet.local (192.168.10.40) 56(84) bytes of data.

64 bytes from 192.168.10.40: icmp_seq=1 ttl=128 time=4.68 ms

64 bytes from 192.168.10.40: icmp_seq=2 ttl=128 time=102 ms

--- ESPtelnet.local ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1001ms

rtt min/avg/max/mdev = 4.682/53.576/102.471/48.895 ms

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

mDNS ou comment retrouver facilement votre Pi

. .ou tout simplement nous

connecter rapidement via telnet

ESPtelnet.local. Plus besoin

de se souvenir d’une adresse IP

qui peut, en plus, potentiel ement

changer en cas de redémarrage,

nos montages réseau/wifi sont

bien plus facilement utilisables.

Que du bonheur !

CONCLUSION

mDNS est une solution très

intéressante qui peut grande-

ment vous simplifier la vie. Mais

cette simplicité a un coût puisque

cela expose directement toutes

vos créations sur le réseau

local. Certes cel es-ci le sont en

principe tout autant avec un ser-

veur DHCP (ou même avec des

adresses attribuées statique-

ment), mais il faut reconnaître

que le mélange du nom d’hôte

Un groupe de capteurs de

par défaut avec un nom d’uti-

température assemblés à

que de permettre ce que bon nombre

lisateur par défaut, un mot de

partir d’un adaptateur USB,

d’utilisateurs font finalement avec la Pi :

une sonde DS18B20 et un

passe par défaut et Avahi utilisé

ne rien changer et activer SSH en sui-

module ESP2866 (ESP-01

par défaut n’est pas vraiment

vant un tutoriel ou un commentaire sur

ici), comme ceux dont nous

une bonne idée. Rien d’étonnant

avions parlé dans le numéro 8

un site web, persuadé que cela ne chan-

donc que le serveur SSH ne

de Hackable, peut bénéficier

gera rien d’important.

grandement des fonctionnalités

soit pas activé par défaut avec

offertes par mDNS. Inutile alors

Raspbian.

Personnellement, jusqu’à présent mon

pour le système collectant les

réflexe lors du premier démarrage d’une

données de connaître la liste

Personnellement, j’aurai cepen-

Pi, ou d’une instal ation toute fraîche

complète des capteurs, il lui

dant préféré une autre solution,

suffit de se baser sur un préfixe

d’un GNU/Linux sur PC, se résumait à

adoptée sur d’autres ordinateurs

utilisé pour les noms d’hôtes

sudo apt-get purge avahi-daemon,

et éventuellement un service

monocartes : forcer la création

arguant mentalement (et stupidement)

associé, scanner le réseau et le

d’un nouvel utilisateur avec son

du fait que « c’était pas là avant, donc ça

tour est joué !

mot de passe dès le premier

sert à rien ». C’est en réalité le support

démarrage du système (ou du

mDNS sur ESP8266 qui m’a fait changer

moins la mise en marche du script

d’avis. La moralité de l’histoire sera donc

pour le faire, à chaque démarrage,

de ne jamais rien écarter définitivement

tant que le problème est là). C’est

sur la base de ses habitudes et de ses

certes plus contraignant pour

besoins évalués à un instant donné. À

l’utilisateur débutant, mais un mini-

chaque problème sa solution, et le pro-

mum de sécurité n’a pas de prix.

blème d’un moment est parfois la solu-

Et puis c’est bien plus intel igent

tion d’un autre. . DB

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

HACKABLE MAGAZINE n°21

71

TENSIONS & COURANTS

ALIMENTATION SANS FIL

UTILISEZ UNE

ALIMENTATION SANS FIL

POUR VOS PROJETS

Denis Bodor

Ah la transmission d’énergie sans fil, toute une aventure, toute une mythologie, tout un labyrinthe où certains se perdent parfois en divagations... jusqu’à l’arrivée d’un standard de fait : le Qi. Recharger son smartphone en le posant simplement sur un présentoir devient petit à petit quelque chose de tout à fait normal. Mais, voyez-vous, quand une telle technologie se popularise et que les prix s’effondrent, je ne pense pas à ce que les constructeurs veulent que je pense. Non, je me demande immédiatement : « mais comment utiliser cela dans mes projets ? ». Et parfois, comme ici, ça marche plutôt bien...

selon ce qu’on demande.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez une alimentation sans fil pour vos projets

Surtout, ne cherchez

pas « transmission

d’énergie sans fil »

sur le Web, vous

risquez de tomber

tout autant sur des informations

très sérieuses que sur des

choses qui frôlent le mysticisme

le plus étrange. Car, voyez-vous,

là où technologie et légende se

mélangent il y a souvent un nom

qui revient plus fréquemment

que les autres : Nikola Tesla.

Que voulez-vous, quand vous

êtes un bril ant inventeur, avec

un certain goût pour la mise

en scène et des ambitions à la

hauteur de votre savoir et de

votre imagination, les gens ont

tendance, bien longtemps après

votre trépas, à vous prêter des

capacités et des actes que vous-

même n’auriez pas même osé

sous-entendre.

Mais les faits (et les brevets)

sont là, ce cher Nikola Tesla a

effectivement fait grandement pro-

Les récepteurs Qi

gresser bien des domaines grâce

à intégrer dans un

Cette base a donné naissance à la com-

à ses travaux et en particulier

smartphone (comme

munication radio, des tous premiers postes de

ici pour un Samsung

ceux sur la transmission d’énergie

transmission jusqu’au Wifi, LoRa, Bluetooth,

S4) se glissent juste

sans fil. Le principe en lui-même

TNT, et j’en passe. Mais contrairement à ce

sous la coque arrière

est fort simple :

de l’appareil. À droite,

type de procédés, visant à transmettre un si-

on peut voir que

• faites passer un courant dans

gnal qui devra être amplifié pour être utilisable,

ceci se résume à

un conducteur et un champ

il existe une autre approche dont le but est

peu de choses : une

magnétique se forme ;

d’alimenter un dispositif par induction.

bobine et un circuit

relativement simple.

• coupez l’alimentation et le

Là encore, sur le papier, le principe est des

champ magnétique s’effondre ;

plus évidents. En faisant circuler un courant

• répétez l’opération et placez un alternatif dans une bobine, un champ électro-autre conducteur à proximité ;

magnétique est créé. Une bobine à proximité,

dans ce champ magnétique, va alors voir ap-

• par induction, un courant

paraître dans son conducteur un courant alter-

apparaît sans ce second

natif : c’est un effet de l’induction électroma-

conducteur ;

gnétique. Il est donc possible, sans support,

• vous venez de transmettre

de transmettre de l’énergie d’une bobine à une

de l’énergie sans utiliser de

autre. Ce phénomène a été découvert il y a

support.

fort longtemps et est utilisé, lui aussi, un peu

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

HACKABLE MAGAZINE n°21

73

TENSIONS & COURANTS

ALIMENTATION SANS FIL

Étant donné la structure

du circuit et la présence

de points de soudure « + »

et « - » un peu partout,

il est fort probable que,

quel que soit le modèle de

smartphone cible, ce soit

effectivement le même

circuit (et probablement

la même bobine) qui

est utilisé pour tous les

récepteurs. On voit ici

deux points de connexion

utilisés et, sur la droite,

trois autres (deux « + » et

un « - »). Il y en a autant à

l’arrière du circuit...

partout, des transformateurs aux moteurs en passant par les tags

envoyé dans l’émetteur soit induit

RFID et ces nouveaux fameux systèmes permettant de recharger

dans le récepteur. Dans le cas des

son smartphone en le posant simplement sur un support.

chargeurs de smartphone, il faut,

de plus, que l’encombrement soit

Dans la pratique, les choses ne sont cependant pas si simples.

réduit au minimum, car personne

Bien qu’il soit possible de très facilement obtenir un résultat avec ne veut d’une énorme bobine

deux bobines bricolées sur un coin de table, il faut faire la diffé-

alourdissant et doublant la tail e de

rence entre « transmettre de l’énergie » et « transmettre de l’énerson mobile dernier cri.

gie efficacement ». Tout un tas de phénomènes entrent en ligne de

compte dans ce domaine et en n’en maîtrisant pas pleinement les

effets, un tel montage dissipera très facilement la plupart de l’éner-1. LA

gie fournie en chaleur ou en émissions inutiles. Si près de 100 ans se sont écoulés entre la construction de la tour de Wardenclyffe par TECHNOLOGIE QI Nikola Tesla pour ses expérimentations et l’arrivée des chargeurs

Avant toutes choses et pour

de smartphone, ce n’est pas par hasard.

ne pas passer pour un abruti en

Contrairement à la transmission de signaux radio, et bien que

société, il faut savoir que « Qi »

les technologies soient très proches (et se recoupent), le critère le se prononce « tchi » du mandarin/

plus important dans la transmission d’énergie sans fil est le ren-

chinois signifiant approximati-

dement ou l’efficacité du système. Le but est d’avoir le moins de

vement « énergie de la vie et de

perte possible et donc de faire en sorte qu’un maximum de courant

l’univers » (il n’y a pas vraiment de

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez une alimentation sans fil pour vos projets

traduction ou d’équivalence avec

mais les smartphones ont, de plus, des besoins spé-

un concept occidental si ce n’est

cifiques. Hors de question donc de faire dans l’à-peu-

peut-être « la force » de tonton

près et de risquer que l’utilisateur ne transforme invo-

Georges). Ceci devrait merveil-

lontairement son périphérique en chauffage d’appoint

leusement compléter la remise en

ou que le chargeur fasse office d’émetteur radio.

place d’un interlocuteur vous ayant

Un « chargeur » Qi ne se résume donc pas à une

déjà égratigné le tympan d’un « la

bobine, mais intègre toute une partie électronique de

wifi » en quémandant le mot de

contrôle et de commande permettant d’ajuster la puis-

passe associé parce que, voyez-

sance délivrée en fonction de ce que le smartphone

vous, il est « trop trop geek » !

demande. Cette communication est unidirectionnel e

Quoi qu’il en soit, Qi est une

et fonctionne sur le principe de rétrodiffusion (ou

technologie créée il y a une

backscatter en anglais).

dizaine d’années par le Wireless

Lorsqu’une onde est transmise par un émetteur,

Power Consortium (ou WPC)

cel e-ci induit un courant dans le récepteur, mais une

sous la forme d’une liste de spé-

partie de l’énergie est « réfléchie » en fonction de la

cifications techniques. Publiées et

charge électrique du récepteur. La figure ci-dessous

diffusées gratuitement en 2009,

montre comment le récepteur peut utiliser ce phéno-

ces spécifications forment une

mène pour moduler un signal de façon à transmettre

norme sous l’intitulé « Qi low

des données à l’émetteur. C’est précisément ce qui se

power specification » (« norme de

passe avec les chargeur Qi.

faible puissance Qi »). Ceci, et le

fait que le consortium regroupe

quelques 220 sociétés parmi

lesquel es Samsung, Nokia,

Principe de

fonctionnement

Qualcomm, Apple, LG, HTC,

général de la

IKEA (oui, oui), Texas Instru-

rétrodiffusion. En haut,

ments, ASUS, Panasonic ou

un émetteur envoie

Sony, a permis de populariser

une onde induisant

un courant dans

Qi au point qu’il s’agit à présent

l’antenne/bobine du

d’un standard pleinement adopté

récepteur. Avec une

(même Apple ne fait pas bande à

charge électrique

part avec son dernier iPhone 8,

importante, comme

un court circuit dans

c’est dire). Notez tout de même

la seconde illustration,

au passage que, bien que les

une onde rétrodiffusée

spécifications soient disponibles,

se propage en sens

inverse et peut

une partie des implémentations

être détectée par

sont brevetées et que rejoindre le

l’émetteur. Dans la

consortium consiste en une adhé-

dernière illustration,

sion payante. Il ne s’agit donc pas

le circuit est ouvert

et très peu ou pas

vraiment d’un standard ouvert.

de rétrodiffusion

La norme décrit une architec-

apparaît. De ce fait, en

jouant sur la charge

ture générale ainsi que des points

électrique, le récepteur

très précis devant être respectés.

peut moduler un

Il n’est déjà pas aisé d’arriver à

signal à destination

de l’émetteur et donc

un rendement satisfaisant étant

transmettre des

donné les contraintes techniques,

informations.

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

HACKABLE MAGAZINE n°21

75

TENSIONS & COURANTS

ALIMENTATION SANS FIL

Ce mode de fonctionnement n’a rien de nouveau et est

Vous comprendrez aisément,

également utilisé par les tags RFID, par exemple. Là, cepen-

grâce à toutes ces explications,

dant, la communication est bidirectionnel e puisqu’en plus

que créer un récepteur Qi n’est

d’alimenter le tag, l’émetteur peut envoyer des données en

pas simple et très certainement

modulant le signal. Le flux inverse, par contre, repose égale-

pas une partie de plaisir. Ce qu’on

ment sur le phénomène de rétrodiffusion contrôlée.

peut faire, en revanche, c’est uti-

En technologie Qi, c’est ainsi le récepteur qui détermine le

liser quelque chose d’existant et

courant qu’il souhaite recevoir et transmet cette information à

donc profiter de la popularité de

l’émetteur. Cette communication utilise un signal modulé en

Qi, aussi bien pour la disponibilité

amplitude (ASK) pour transmettre des séries de bits formant

du matériel que pour le coût réduit

des paquets structurés. Ceux-ci sont composés d’un préam-

de mise en œuvre. .

bule, d’un entête, d’un message et d’une somme de contrôle,

selon un format décrit dans les spécifications Qi.

2. BRICOLONS

Si vous voulez en savoir plus, une très intéressante note

applicative de NXP/Freescale décrit le fonctionnement en dé-

QI POUR NOS

tail sur une vingtaine de pages (document référence AN4701).

PROJETS

Cependant, en ce qui nous concerne, le point important est ici

de comprendre qu’il ne suffit pas de créer une bobine pour ali-

Tous les smartphones ne sont

menter ses projets Arduino (ou Raspberry Pi) via un chargeur

pas compatibles Qi par défaut.

Qi. Ceci ne fonctionnera tout simplement pas, puisque dans

En effet, seul un nombre réduit

le protocole de communication se trouve toute une phase de

de modèles récents disposent de

« négociation » où le récepteur doit fixer l’intensité du courant

cette fonctionnalité. En revanche,

dont il a besoin.

un certain nombre d’autres

Le seul circuit

intégré présent

est ce mystérieux

composant à

l’emplacement

U2, sans

le moindre

marquage

permettant de

l’identifier. Il

peut tout aussi

bien s’agir d’un

circuit spécialisé

Qi, un clone

contrefait ou, tout

simplement, un

microcontrôleur

implémentant

le protocole

décrit dans les

spécifications Qi.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez une alimentation sans fil pour vos projets

modèles peuvent se voir équipés

d’une coque optionnel e intégrant

une antenne/bobine et/ou un

circuit permettant la gestion du

protocole Qi. En cherchant un peu

sur le Web, on constate que bon

nombre de ces coques ne sont

en réalité qu’un bout de plastique

doublé d’un « récepteur Qi » four-

nissant simplement une tension

d’alimentation standard.

Ces modules de réception sont

également distribués séparément

pour un usage sensiblement diffé-

rent : ils s’intègrent entre l’appareil

et la coque existante et, là encore,

ils proposent deux simples connec-

teurs d’alimentation. Enfin, certains

fabricants d’accessoires se sont

lancés dans une brèche laissée

vacante par les marques, cel e des

smartphones ne disposant ni d’une

Un peu plus de composants

option de changement de coque

Côté chargeur, le standard étant. . un

côté chargeur Qi et pour cause,

ni d’un connecteur dédié pour y

il faut piloter toute la partie

standard, n’importe quel périphérique

électronique de puissance

brancher un module récepteur. La

compatible Qi pourra, en toute logique,

permettant d’émettre. En plus

connexion se fait alors, tout simple-

alimenter n’importe quel appareil Qi. Bien

du contrôleur Qi, on reconnaît

ment, via le connecteur micro-USB

entendu, on retrouve alors aussi bien des

immédiatement deux doubles

standard du smartphone.

MOSFET directement reliés à

périphériques de marque avoisinant les

la bobine/antenne en spirale

Voilà exactement le genre de

75€ et les super entrées de gamme à 3€

située à l’arrière du circuit

choses qui met la puce à l’oreil e,

sur eBay en provenance directe de Shen-

imprimé, ainsi qu’un quadruple

amplificateur opérationnel

car s’il est possible de modifier

zhen. Une petite recherche sur le Web et

(opamp). L’architecture du

un smartphone pour lui ajouter

vous voici devant une pléthore d’options.

circuit dans son ensemble est

un récepteur ayant un connec-

Personnel ement, entre les marques qui

très similaire au kit d’évaluation

STEVAL-ISB027V1 de chez

teur micro USB mâle, il doit être

gonflent les prix et les offres super éco-

STMicroelectronics... mais

possible d’alimenter n’importe

nomiques avec des composants parfois

20 fois moins cher.

quel périphérique disposant d’un

douteux, je vise généralement l’entre-deux

connecteur micro USB femel e, et

avec une petite préférence pour les pro-

donc une carte Arduino, ESP8266

duits dont la description est la plus com-

ou encore Ti Launchpad. Dans

plète et juste (et éventuel ement la proxi-

l’absolu, il est tout simplement

mité du vendeur si je suis pressé).

possible d’alimenter n’importe

Au moment où j’écris cet article, deux

quel périphérique USB de la sorte,

modèles ont été commandés : le premier à

c’est-à-dire n’importe quel projet

14€ de marque SOAIY en provenance de

acceptant +5V +/-5%, soit entre

Birmingham (Royaume-Uni) et un second,

4,75V et 5,25V (selon les spécifi-

de marque FANTASY, en plusieurs exem-

cations USB 1.1 et 2.0).

plaires, car à seulement 3€, livré (un jour)

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

HACKABLE MAGAZINE n°21

77

TENSIONS & COURANTS

ALIMENTATION SANS FIL

depuis Shenzhen (Chine). À cette date, seul le matériel

En raison de cette mésaventure

venant d’Angleterre est arrivé, mais des tests complémen-

donc, nous nous pencherons uni-

taires ont également été faits avec un chargeur Samsung

quement sur les récepteurs non

d’une col ègue, modèle EP-NG930 (le chargeur, pas la

génériques et non USB. Ceci n’est

collègue).

pas très grave puisqu’il n’y aurait

Notez que ces équipements sont généralement fournis

de toute façon pas grand-chose à

sans bloc d’alimentation puisqu’en principe vous êtes censé

dire, les manipulations se limitant

utiliser celui de votre smartphone. Tous les modèles que j’ai

à une simple connexion. Il est bien

eu le loisir d’avoir en main ou pour lesquels les spécifica-

plus intéressant de regarder de

tions détail ées étaient accessibles utilisaient un connecteur

plus près quelque chose de moins

micro USB type B (comme la Raspberry Pi par exemple)

facile à utiliser.

et nécessitaient une alimentation de 2A en 5V. Certains

Le récepteur se présente

modèles proposent tantôt, en plus, un connecteur d’alimen-

comme un rectangle de 43mm x

tation en 9V, mais ceci reste très rare.

60mm muni d’une excroissance

Le « chargeur » n’est donc pas un problème et se trou-

de 20mm disposant de deux

vera sans la moindre difficulté. Il n’en va pas forcément de

points de connexion non libel és.

même pour les récepteurs qui eux ne se trouveront que

L’ensemble fait moins d’un mil-

sur les sites comme Ebay, Banggood, DealExtreme, Ali-

limètre d’épaisseur et donne la

baba, etc. Là, mieux vaut être prudent et ne pas forcément

perception d’une qualité assez

miser sur l’aspect « local » car, bien des fois, les vendeurs

moyenne. Pris en sandwich entre

compatriotes ne sont pas nécessairement les plus sérieux.

deux films plastiques autocol ants

Dans ce cas précis et dans mon empressement, j’ai donc

qui peinent à rester ensemble, se

commandé à la fois auprès d’un vendeur de Gateshead

trouve une bobine plate rectangu-

(Royaume-Uni) des récepteurs pour Samsung S4 à ~3€

laire et un circuit imprimé souple

pièces et des modèles génériques micro USB à trois fois

regroupant quelques transistors,

ce prix, auprès d’un vendeur bien de chez nous (« neo-

composants passifs et un circuit

dis_com »), espérant les recevoir en premier. J’ai finalement intégré à 10 broches sans marreçu en quelques jours les récepteurs d’outre-Manche et le

quage (sans le moindre doute un

vendeur français. . a supprimé l’annonce et son compte peu

composant dédié au Qi).

après la vente.

Deux approches sont possibles

Bien entendu, un litige a été ouvert sur eBay et, du fait

avec ce genre de produits :

de sa démarche, mon paiement m’a été automatiquement

• placer le récepteur sur un

remboursé en quelques jours. Le fait est cependant que ce

support de charge et utiliser

n’est pas la première fois que ce genre de choses m’arrivent

un multimètre pour déterminer

et c’est systématiquement avec des vendeurs français,

la polarité en mesurant sim-

italiens, espagnols. . mais jamais avec des transactions

plement la tension en sortie ;

impliquant des vendeurs situés en Asie, en Angleterre,

en Al emagne ou en Pologne. Sur ma base statistique de

• ou, tout simplement, dépecer

quelques 700 transactions s’étalant sur bien des années

l’objet.

et bien qu’essayant de ne pas tirer de conclusion hâtives,

Cette seconde solution est

je suis maintenant résolu à me montrer d’une méfiance et

certainement celle à préférer,

d’une prudence sélective des plus poussées (en clair, pour

car el e donne l’opportunité de

les vendeurs de certains pays, qui n’ont pas 100% d’évalua-

découvrir l’intérieur du récepteur

tions positives et un minimum de 1000 évaluations, je passe et de constater qu’il existe plus mon tour). C’est triste, mais les statistiques et les probabili-d’un point de connexion (quatre

tés ne pardonnent pas.

paires +/- en tout sur le modèle

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez une alimentation sans fil pour vos projets

testé). On constate aussi que la

contrainte de finesse du récepteur

a poussé le fabricant à utiliser du

fil de cuivre émail é de faible dia-

mètre, ce qui n’est pas très rassu-

rant étant donné que le récepteur

devrait être en mesure de fournir

quelques 800 mA en 5V (4 watts).

Il faut se montrer très délicat

durant l’opération de démontage.

Un premier film plastique est relati-

vement facile à retirer, découvrant

la bobine et le circuit interne. Ce-

pendant, la bobine est placée sur

un support en mousse adhésive,

lui-même col é à l’autre film. Toute

la difficulté réside donc dans le fait

de décol er la bobine sans la défor-

mer, mais avec un peu de délica-

tesse cela est tout à fait possible.

3. EST-CE

UNE BONNE

SOLUTION POUR

VOS PROJETS ?

Annonçons-le sans détour, bien

que l’absence de connexion/dé-

On peut clairement le constater

connexion soit très intéressante,

Pour rappel, une carte Raspberry Pi,

dès lors qu’on mesure le

l’efficacité de ce type de dispo-

selon le modèle utilisé, est susceptible de

courant entrant dans le

sitif est loin d’être satisfaisante.

consommer jusqu’à 800 mA (sans aucun

chargeur et celui fourni par

le récepteur, l’efficacité de

En regroupant les informations

périphérique USB connecté), ce qui peut

ce type de solution n’est pas

fournies par d’autres utilisateurs/

nous amener à la limite maximale des

très impressionnante. La

bidouil eurs sur le Web avec mes

chargeurs et récepteurs Qi :

Raspberry Pi, connectée ici au

propres mesures, une efficacité

récepteur, utilise 270mA, mais

le chargeur, lui, en « pompe »

moyenne d’environ 60% à 70% est

Pi inactive :

450 du bloc d’alimentation.

le mieux qu’on puisse espérer. En

• Raspberry Pi 2 B : 420mA ;

Nous avons donc presque un

d’autres termes, pour fournir 300

• Raspberry Pi B+ : 230 à 240mA ;

watt qui disparaît dans la nature

(littéralement, puisque cette

mA à un montage maison, le char-

• Raspberry Pi B : 320 à 330mA ;

perte est dissipée en chaleur).

geur utilisera quelques 500 mA.

• Raspberry Pi A+ : 180 à 240mA ;

Rien d’étonnant donc au fait que

ces chargeurs demandent géné-

• Raspberry Pi A : 120 à 140mA ;

ralement un bloc d’alimentation

• Raspberry Pi Zero : 60 à 70mA ;

capable de fournir 2A en 5V.

• Raspberry Pi 3 B : 280 à 320mA.

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

HACKABLE MAGAZINE n°21

79

TENSIONS & COURANTS

ALIMENTATION SANS FIL

Comme on peut s’y attendre, la

version « épluchée » sur récepteur

Qi fonctionne parfaitement une fois

placée sur le chargeur/émetteur. On

voit ici que ce dernier s’illumine en

bleu indiquant une « charge ». En

l’absence de récepteur, il prend une

couleur rouge et lorsque la charge

est terminée, il s’éclaire en vert.

À quoi bon alors peut servir ce

type de bricolage ? La réponse est

toute simple : à exactement la même

chose que ce pour quoi la technolo-

gie Qi est prévue à l’origine, charger

des batteries.

Bien qu’il soit parfaitement pos-

sible d’imaginer un montage à base

d’Arduino, d’ESP8266 ou de Rasp-

berry Pi Zero se mettant en route

dès qu’on le place sur le chargeur,

il est bien plus légitime d’y associer

une batterie ou un accumulateur

et ainsi rendre le chargement plus

facile. Dans cette optique, je vois

trois solutions utilisables :

• Opter pour une plateforme/carte disposant déjà

Pi en pleine charge processeur :

d’un contrôleur de charge et d’un connecteur pour

• Raspberry Pi 2 B : 450 à 650mA ;

accumulateur LiPo/LiIon/LiFePo (au format JST par

• Rasbperry Pi B+ : 300 à 600mA ;

exemple). Il s’agit généralement de cartes à base

d’ESP8266 ou d’Atmel AVR, compatibles avec

• Raspberry Pi B : 380 à 450mA ;

l’environnement Arduino. Il suffit alors de connecter

• Raspberry Pi A+ : 200 à 300mA ;

le récepteur Qi en paral èle à l’alimentation USB ou

• Raspberry Pi A : 170 à 300mA ;

d’adapter un connecteur USB de récupération.

• Raspberry Pi Zero : 120 à 150mA ;

• Utiliser une batterie d’appoint pour smartphone comme

• Raspberry Pi 3 B : 500 à 800mA.

cel e que nous avions étudiée dans le numéro 15.

Il est également important de

Là encore, en modifiant l’appareil ou en adaptant un

remarquer que le standard Qi est

connecteur d’alimentation, il devient possible de char-

conçu pour la charge de batterie et

ger la batterie en la posant simplement, comme un

non plus une alimentation directe.

smartphone, sur le chargeur.

Ceci implique qu’il peut y avoir des

• Mettre en œuvre un circuit ou une carte spécialisée

micro-coupures susceptibles de pro-

dans la gestion de charge, comme par exemple le

voquer le redémarrage de la carte

LiPoRider (~20€) que j’avais présenté dans Hackable

que vous choisirez d’alimenter. C’est

n°10. Ce type de circuit accompagné d’un accu LiPo

donc généralement une très bonne

fonctionne exactement comme la batterie citée pré-

idée que de placer un ou plusieurs

cédemment en permettant une charge via USB, la

condensateurs d’une capacité suffi-

connexion d’un accumulateur de tail e et capacité de

sante (1mF ou plus) en paral èle à la

son choix, mais également la connexion d’un pan-

sortie, exactement comme on le ferait

neau solaire. Une alternative plus économique peut

pour construire une alimentation.

être la combinaison d’un contrôleur de charge LiPo

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Utilisez une alimentation sans fil pour vos projets

VOTRE BOUTIQUE SPÉCIALISÉE

UN WIKI BIEN FOURNI

DOCUMENTATION BIEN ÉTOFFÉE

TP4056 (~1,5€), d’un accu de qualité type 18650

d’une coque partiel ement métal ique, sans

de 2500mAh (~9€) et d’un convertisseur Boost

doute très jolie, mais peu compatible Qi.

ou Step-Up boost converter en anglais (~1€),

En conclusion, je pense qu’il est juste de dire

4 KITS À DÉCOUVRIR OU À OFFRIR

transforma

https://shop.mchobby.be nt les 3,7V-2,5V de l’accu en 5V.

que l’utilité de Qi pour des montages à base de

Dans les trois cas, tout repose sur l’assemblage

microcontrôleurs ou d’ordinateurs mono-carte

final du projet et donc dans un certain savoir-faire

se limite à des cas bien spécifiques, impliquant

manuel pour arriver à un résultat acceptable et pré-

généralement déjà un fonctionnement autonome

WEMOS D1 Mini

sentable. Une chose importante à ne pas perdre

via un accumulateur. En dehors de ces cas bien

de vue est la contrainte liée au couplage inductif : il

bornés, où effectivement Qi apport un vrai avan-

KIT MICRO:BIT

s’agit d’antennes. Ceci signifie que la proximité d’une

tage, et même si la réalisation est assez écono-

surface conductrice peut perturber ou stopper le

mique, alimenter un projet ainsi n’a pas vraiment

transfert d’énergie, en particulier dans le cas du fer.

de sens.

Cet élément parasite n’a pas besoin de se trouver

Ce qui est possible, en revanche, c’est de tout

entre le chargeur et le récepteur, le simple fait d’être

simplement trouver des appareils normalement

dans la portée du champ magnétique est suffisant.

chargés via une connexion filaire et de les conver-

KIT ARDUINO

Placez/col ez votre récepteur directement sur le

tir en Qi (console portable, batterie d’appoint, GPS

boîtier métal ique de votre projet, par exemple, et la

de randonnée, éclairage rechargeable, enceintes

charge a tou

Disponible chez MCHobby ! tes les chances de ne pas se faire. Le Bluetooth pour smartphone, cigarette électro-problème est exactement le même que celui rencon-

nique, etc.). Ceci peut être, de plus, un exercice

tré par certains utilisateurs de smartphones équipés

fort intéressant et très instructif. .. DB

KIT RASPBERRY PI 3

VOTRE BOUTIQUE SPÉCIALISÉE

UN WIKI BIEN FOURNI

DOCUMENTATION BIEN ÉTOFFÉE

KIT GAMING PICADE

https://shop.mchobby.be 4 KITS À DÉCOUVRIR OU À OFFRIR

WEMOS D1 Mini

KIT MICRO:BIT

MCHobby propose aussi le Feather HUZZAH ESP8266 d’Adafruit, ODROID C2

et XU4, un

KIT ARDUINO

Mediacenter Raspberry Pi 3 et Mediacenter 4K ODROID C2

Disponible chez MCHobby !

KIT RASPBERRY PI 3

KIT GAMING PICADE

5€ DE RÉDUCTION SUPPLÉMENTAIRES

MCHobby propose aussi le Feather HUZZAH ESP8266 d’Adafruit, ODROID C2

et XU4, un Mediacenter Raspberry Pi 3 et Mediacenter 4K ODROID C2

SUR UNE SÉLECTION DE KITS SPÉCIAL FÊTES

5€ DE RÉDUCTION SUPPLÉMENTAIRES

AVEC LE CODE FETES17 DANS VOTRE PANIER

SUR UNE SÉLECTION DE KITS SPÉCIAL FÊTES

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

AVEC LE CODE HACKABLE M

FETES17 AGAZINE n°21 81

DANS VOTRE PANIER

Offres limitées, réservées aux particuliers 1 bon par foyer dans la limite des stocks disponibles. Non cumulables avec d’autres bons, du 27 octobre 2017 au 31 décembre 2017

Offres limitées, réservées aux particuliers 1 bon par foyer dans la limite des stocks disponibles. Non cumulables avec d’autres bons, du 27 octobre 2017 au 31 décembre 2017

Hackable_MCHOBBY_NOV_DEC_2017_V2.indd 1

10/10/17 08:59

Hackable_MCHOBBY_NOV_DEC_2017_V2.indd 1

10/10/17 08:59

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

CRÉEZ VOTRE

ORDINATEUR 8 BITS SUR

PLATINE À ESSAIS :

LA MÉMOIRE

Denis Bodor

Nous avons vu dans l’article précédent sur le sujet qu’il n’est pas très difficile, mais pourtant furieusement intéressant, d’animer un processeur 8 bits à l’aide de simples résistances, quelques leds et une carte Arduino. Il est temps à présent de pousser l’expérience un peu plus loin et donc d’en apprendre davantage sur le fonctionnement d’une technologie que nous utilisons quotidiennement sans vraiment nous en rendre compte. Faisons donc un pas de plus dans la

construction de notre ordinateur 8 bits en fournissant au processeur Z80 ce qu’il pensera être de la mémoire.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Créez votre ordinateur 8 bits sur platine à essais : la mémoire

C

Le processeur Zilog Z80 a été conçu

comme compatible avec l’architecture

ontrairement au

n’est là que pour exécuter des

Intel 8080, mais en ajoutant un lot

microcontrôleur

instructions et communiquer avec

important d’améliorations. Celui-ci a vu

Atmel ATmega328P

d’autres éléments via des bus. Un

le jour en juillet 1976 et regroupe 8500

transistors sur une puce de 18mm² avec

d’une carte comme

ensemble processeur + mémoire

une gravure de 4000 nm (milliardièmes de

l’Arduino UNO,

+ périphériques, lorsqu’il est

mètres). À titre de comparaison, un AMD

un processeur ne dispose pas

regroupé dans un seul circuit inté-

Ryzen 8 cœurs compte 4,8 milliards de

de mémoire, ni de périphériques

gré, est appelé microcontrôleur.

transistors sur une surface de 192mm²

avec une finesse de gravure de 14nm...

comme un port série, un bus SPI

Lorsque ces éléments sont dis-

ou même simplement de broches

tincts en revanche, le processeur

dont l’état peut être arbitrairement

seul ne peut rien faire. Il lui faut

contrôlable (GPIO). Le processeur

au minimum un signal d’horloge

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

HACKABLE MAGAZINE n°21

83

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

des EPROM OTP dans le

sens où il n’est pas possible

de les exposer aux UV car,

bien que la technologie soit la

même, ils ne disposent pas de

« fenêtre » transparente pour

les effacer.

• Les EEPROM forment le type

actuellement le plus utilisé, car

ils dispensent l’utilisateur de la

phase d’exposition aux UV par

exemple. La mémoire peut être

effacée et réécrite électrique-

ment, d’où le nom de Electri-

cally Erasable Programmable

Le Z80 n’est pas le

Read-Only Memory.

seul microprocesseur

pour être cadencé et des instructions à exécuter,

à pouvoir être utilisé

• Les NVRAM pour Non-

pour construire un

et cel es-ci se trouvent bien entendu dans une

Volatile Random-Access

ordinateur. Le 6502

mémoire.

Memory ou mémoires vives

peut également être

utilisé, mais il convient

L’étape logique qui nous occupe ici, et qui

non volatiles. Il s’agit là d’un

de bien se documenter

consiste donc à fournir de la mémoire au proces-

terme générique, car la notion

sur le sujet en

seur, passe généralement par l’utilisation d’un

de « mémoire vive » sou-

raison de certaines

composant programmable comme une mémoire

vent associée à l’acronyme

limitations techniques

importantes. Le WDC

morte ou en anglais Read-Only Memory ou

« RAM » sous-entend une

W65C02S présenté ici

« ROM ». Ce terme générique couvre souvent un

mémoire qui ne garde pas son

est une version CMOS

ensemble de composants de types différents :

contenu sans alimentation

du 6502 pouvant être,

(une mémoire volatile donc),

entre autres choses,

• Les vrais ROM dont le contenu est défini lors

mais également la possibilité

cadencé arbitrairement

de leur fabrication et qui est non inaltérable.

comme le Z80. Ce

d’un accès direct/aléatoire

n’est pas le cas, par

• Les PROM pour Programmable Read-Only

aux données par opposition

exemple, de modèles

Memory qui sont des composants vendus

à un accès séquentiel. Une

NMOS plus anciens.

vierges, mais programmables par l’utilisateur

EEPROM dont le contenu est

une seule fois. On parle également tantôt

accessible de cette façon,

de PROM ou d’EPROM OTP pour One-Time

et non via un bus SPI ou i2c

Programmable (programmable une fois).

par exemple, est donc une

NVRAM. Pour ajouter à la

• Les EPROM pour Erasable Programmable

confusion, il n’est pas rare que

Read-Only Memory qui fonctionnent comme

des composants à accès sé-

les PROM, mais peuvent toutefois être

quentiel embarqués dans des

effacées pour être ensuite reprogrammées.

PC portables par exemple,

Notez bien qu’il ne peut s’agir d’un efface-

ment partiel, l’ensemble de la mémoire est

soient tantôt aussi appelés

effacé en une fois. Lorsque l’effacement se

NVRAM, alors qu’il s’agit en

fait par exposition du composant à un rayon-

réalité d’EEPROM i2c.

nement ultraviolet via une petite « fenêtre »

Traditionnellement, lorsqu’on

transparente en quartz, on parle d’UVPROM.

construit un ordinateur « maison »,

Certains composants de ce type peuvent être

on s’oriente vers des UVPROM,

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Créez votre ordinateur 8 bits sur platine à essais : la mémoire

en particulier pour le côté vintage

et en particulier celui d’une carte Arduino. L’objectif

de ces composants. On peut

est alors de connecter le processeur, ici le Z80, à la

également utiliser des EEPROM

carte pour lui faire croire qu’il a affaire à une vraie

qui fonctionneront de la même

mémoire.

manière mais, dans les deux

En théorie, l’opération est relativement simple

cas, ceci implique l’achat ou la

puisqu’il nous suffit, côté Arduino, de déterminer

construction d’un programmeur,

l’adresse voulant être lue par le processeur en

un appareil permettant d’effacer

observant l’état des 16 broches du bus d’adresse

la mémoire et de la programmer à

et de fournir en retour une valeur sur 8 bits via le

nouveau. Le budget n’est pas for-

bus de données. Il y a juste un petit problème. . Les

cément important, mais il faut éga-

broches d’une carte Arduino utilisées pour cette

lement prendre en considération

simulation de mémoire seraient :

l’aspect pratique. En effet, cette

mémoire est destinée à contenir

• 16 bits/broche pour le bus d’adresse ;

les instructions et les données

• 8 bits/broche pour le bus de données ;

que le processeur devra utiliser.

• /RD pour demander à la mémoire de présenter

Ceci signifie donc qu’en mettant

les données sur le bus. Normalement connecté

Si vous voulez pousser

au point un programme, on doit

à la broche /OE (Output Enable) de la mémoire

vos expérimentations

pouvoir retirer le composant du

plus loin avec un

qui déclenche alors le changement d’état sur le

processeur plus

projet pour le mettre dans le pro-

bus de données ;

puissant et plus rapide,

grammeur (via un support ZIF le

le Motorola 68008 est

• /MREQ pour Memory REQuest indique que le

plus souvent). De plus, le cycle

généralement un bon

bus d’adresse présente une adresse utilisable.

choix. Il s’agit d’un

« retrait, effacement, programma-

Normalement connecté à la broche /CE (Chip

modèle particulier

tion, insertion, test » devient vite

Enable) de la mémoire pour lui signifier de

de 68000 avec un

pénible, en particulier lorsqu’on

bus de données de

prendre en compte l’adresse ;

commence à peine à assimiler

seulement 8 bits,

mais une architecture

les instructions utilisables par le

• phi, le signal d’horloge généré par la carte

8/16/32 bits ainsi qu’un

processeur, leurs significations et

Arduino ;

bus d’adresse de 20

leurs usages.

• /RESET permettant de réinitialiser le processeur.

bits. Avec ce genre de

processeurs, il devient

À des fins pédagogiques il y a

Il nous faut donc en principe 28 broches en

possible d’envisager

donc bien mieux. .

tout côté carte Arduino, 18 en entrée et 10 autres

de faire fonctionner

une version spéciale

en sortie. Notez que le bus de données est censé

de Linux (uClinux pour

m68k).

1. UNE CARTE

ARDUINO

EN GUISE DE

MÉMOIRE

Une autre approche possible,

qui était jusqu’à il y a quelques

années inimaginable, consiste

à ne pas utiliser une véritable

mémoire (UVPROM, EEPROM ou

autre), mais à simuler ce compo-

sant à l’aide d’un microcontrôleur

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

HACKABLE MAGAZINE n°21

85

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

En reliant les bus

d’adresse et de

être bidirectionnel, mais qu’ici nous ne laissons

• 4 à 11 : bus de données, D0

données à une carte

pas le Z80 écrire dans la pseudo mémoire, nous

à D7 ;

Arduino UNO, on

émulons une ROM (EPROM ou UVPROM). Pour

peut très simplement

• 2 pour /RD ;

expérimenter en

émuler une RAM et donc permettre l’écriture

• 3 pour /MREQ (optionnel ici) ;

émulant la mémoire

en mémoire par le Z80, il faudrait également

normalement attachée

prendre en compte, en plus, le signal /RW indi-

• 12 pour /RESET ;

au Z80, mais nous

quant que le bus de données présente un octet à

• 13 pour l’horloge (phi) ;

sommes drastiquement

limités par le nombre

écrire à l’adresse spécifiée par le bus d’adresse,

• A0 à A5 : 6 bits du bus

de broches utilisables.

et surtout, gérer ces broches comme des sorties

d’adresse, A0 à A6.

Dans cet état, nous ne

et des entrées (nous verrons cela plus tard).

pouvons que simuler

Ici, l’ensemble des broches

une mémoire de 64

Le problème qui se pose tient au fait qu’il existe

d’une carte Arduino UNO est uti-

octets pour fournir

peu de cartes Arduino en mesure de fournir autant

des instructions au

lisé et nous nous retrouvons avec

de broches. Deux solutions se présentent alors à

processeur.

un bus d’adresse de 6 bits, soit

nous, soit utiliser une carte Arduino Mega 2560

un espace adressable de 2 puis-

avec 54 entrées/sorties, qui par la même occasion

sance 6, ou 64 octets maximum.

aurait également assez de mémoire pour émuler

Ce n’est pas Byzance, mais c’est

les 64 Ko adressables par le Z80, soit limiter le bus plus que suffisant pour écrire un d’adresse au maximum utilisable avec les broches

premier programme simple.

restantes.

Une autre solution existe et

Dans ce second cas de figure, nous pouvons

consiste à faire intervenir un cir-

envisager un brochage comme :

cuit logique comme le 74HCT165.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Créez votre ordinateur 8 bits sur platine à essais : la mémoire

Celui-ci fonctionne comme un registre à décalage standard (cf. Hackable En utilisant deux circuits

n°5), mais dans le sens inverse. On présente un état sur ses broches logiques 74HC165, nous

en entrée, on déclenche une lecture par un changement d’état sur une pouvons faire en sorte que la

carte Arduino puisse lire l’état

broche (/PL) et on récupère les informations bit par bit. En chaînant deux de toutes les lignes du bus

de ces composants, il devient alors possible de lire les 16 bits du bus d’adresse du Z80. Ceci implique

d’adresse avec seulement 3 broches de la carte Arduino (5 en réalité, cependant deux composants

11-MOSI ne peut être utilisé pour autre chose et 10-SS n’est utilisable supplémentaires, une adaptation

du croquis et surtout une

qu’en sortie). Le problème de la tail e mémoire reste cependant entier, véritable salade de câbles. On

même en n’émulant qu’une mémoire en lecture seule, il n’y a, de toute peut alors théoriquement gérer

façon, pas assez de flash dans l’ATmega238P d’une carte Arduino UNO

64 Ko (2^16) de mémoire, mais

pour gérer 64 Ko de mémoire.

ne pouvons pour autant pas

simuler un tel espace faute

d’espace flash côté Arduino.

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

HACKABLE MAGAZINE n°21

87

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

2. LE CROQUIS ARDUINO

Sans plus attendre, plongeons dans le code qui, bien que relativement long n’est pas très complexe et n’implique finalement que des changements d’états et des lectures de broches ainsi que des opérations binaires.

Notre stratégie sera la suivante : nous cadençons simplement le Z80 avec une impulsion d’horloge par tour de boucle loop() et nous réagissons à un changement d’état en attachant une interruption sur la broche 2 connectée à /RD. Cette routine sera appelée automatiquement dès que l’état de la broche passe de haut à bas (flanc descendant, FALLING). Comme une tel e routine doit rester concise, nous ne procédons pas à la lecture de l’adresse directement, mais changeons simplement la valeur d’une variable (doread) qui sera prise en compte dans la boucle principale ensuite.

Si cela arrive, nous lisons l’adresse fournie par le Z80, et l’utilisons pour obtenir un octet dans un tableau de byte faisant office de mémoire (mem[]). Enfin, nous présentons cet octet sur le bus de données avant de réinitialiser la valeur de doread et donner le signal d’horloge suivant.

Notez qu’une autre approche aurait été possible en se passant de l’interruption, mais cela demande de prendre en compte une information capitale : un cycle d’horloge ne correspond pas à un cycle machine. Certaines instructions comme NOP utilisent 4 cycles d’horloges et d’autres comme JP

en utilisent 10. Nous ne pouvons donc pas afficher nos informations à chaque cycle d’horloge et donc à chaque tour dans loop(). Pour contourner ce problème, il faudrait alors garder en mémoire la pré-

cédente adresse traitée et ne réagir que si la nouvel e est différente. J’ai fait le choix de ne présenter ici que la première solution pour réduire la tail e de l’article, mais aussi parce que je trouve l’approche avec interruption plus élégante (la version sans interruption est disponible avec les autres codes du numéro sur GitHub) :

☐

_

✕

Fichier

Édition

Croquis

Outils

Aide

#define B_CLOCK 12 // horloge

#define B_RESET 13 // réinitialisation

#define B_MREQ 3 // requête mémoire

#define B_RD 2 // lecture

#define BITS_ADDR 6 // nombre de bits d'adresse

#define CLKDELAY 60 // délai horloge

// Bus d'adresse

// bit 0 1 2 3 4 5

int pinsAddress[BITS_ADDR] = {A0,A1,A2,A3,A4,A5};

// Bus de données

// bit 0 1 2 3 4 5 6 7

int pinsData[8] = {4,5,6,7,8,9,10,11};

// Variable pour la routine d'interruption

volatile int doread=0;

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Créez votre ordinateur 8 bits sur platine à essais : la mémoire

// Routine d'interruption

void readISR() {

doread=1;

}

// Fonction horloge

void doClock(unsigned int n) {

for(int i=0; i<n; i++) {

digitalWrite(B_CLOCK, HIGH);

delay(CLKDELAY);

digitalWrite(B_CLOCK, LOW);

delay(CLKDELAY);

}

}

// Réinitialisation

void doReset() {

digitalWrite(B_RESET, LOW);

doClock(10);

digitalWrite(B_RESET, HIGH);

}

// Lecture de l'adresse

unsigned int getaddr() {

unsigned int addr = 0;

for(int pin=0; pin<BITS_ADDR; pin++) {

if(digitalRead( pinsAddress[pin] ) == HIGH )

addr |= (1 << pin);

}

return addr;

}

// Définition des bits de données

void setData(unsigned char data) {

for(int pin=0; pin<8; pin++) {

if(data & 1)

digitalWrite(pinsData[pin], HIGH);

else

digitalWrite(pinsData[pin], LOW);

data >>= 1;

}

}

// Configuration

void setup() {

pinMode(B_CLOCK, OUTPUT);

pinMode(B_RESET, OUTPUT);

pinMode(B_MREQ, INPUT);

pinMode(B_RD, INPUT);

// Tout le bus de données en sortie

for( int pin = 0; pin < 8; pin++ ) {

pinMode(pinsData[pin], OUTPUT);

}

// Tout le bus d'adresse en entrée

for( int pin = 0; pin<BITS_ADDR; pin++ ) {

pinMode(pinsAddress[pin], INPUT);

}

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

HACKABLE MAGAZINE n°21

89

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

// Activation moniteur série

Serial.begin(115200);

delay(25);

// Reset du Z80

Serial.println("Reset Z80");

doReset();

delay(10);

// On attache l'interruption

// Un changement d'état haut vers bas appelle notre routine

attachInterrupt(digitalPinToInterrupt(B_RD), readISR, FALLING);

}

// Mémoire pour notre Z80

unsigned char mem[] = {

0xc3, 0x04, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00

};

// Boucle principale

void loop() {

// La routine d'interruption a été appelée,

// nous avons du travail à faire

if(doread) {

// Récupération de l'adresse

unsigned int addr = getaddr();

// Affichage

Serial.print("Adresse: 0x");

if(addr < 0x10) Serial.print("0");

if(addr < 0x100) Serial.print("0");

if(addr < 0x1000) Serial.print("0");

Serial.print(addr, HEX);

// Si l'adresse est valide (dans le tableau mem)

if(addr >= 0 && addr < sizeof(mem)) {

// On "pousse" les données correspondantes sur le bus setData(mem[addr]);

// Et on affiche le tout

Serial.print(" [0x");

if(mem[addr] < 0x10) Serial.print("0");

Serial.print(mem[addr], HEX);

Serial.println("]");

} else {

// Nous sommes hors de l'espace mémoire émulé

// On renvoie 0x00, l'instruction NOP

setData(0x00);

}

// On confirme la prise en charge

doread=0;

}

// Impulsion horloge

doClock(1);

}

Arduino

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Créez votre ordinateur 8 bits sur platine à essais : la mémoire Pour travail er sereinement, nous

3. UN PEU D’ASSEMBLEUR

avons donc ici quatre fonctions :

POUR LA ROUTE ?

• doClock() : envoie une

impulsion sur la broche phi

Nous connaissez déjà NOP, l’instruction qui ne fait rien,

du Z80 en guise de signal

si ce n’est dire au processeur que l’instruction est valide

d’horloge ;

et qu’il doit simplement passer à la suivante. Nous al ons

• doReset() : provoque la réi-

donc en introduire une nouvel e pour ajouter un peu de

nitialisation « propre » du Z80

piquant : JP ou JP ** comme spécifié dans la documenta-en mettant la broche RESET

tion du processeur Z80.

à la masse pendant 10 cycles

« JP » signifie JumP, un saut. Mais il existe plusieurs

d’horloge ;

types de sauts parmi les instructions du Z80. Cel e qui nous

• getaddr() : récupère

intéresse est un saut inconditionnel ayant pour opcode

l’adresse sur 6 bits lus sur les

0xc3. L’instruction complète est constituée de 3 octets :

broches A0 à A5, et donc A0

l’opcode 0xc3, la partie basse de l’adresse (8 bits de poids à A5 du Z80, et la retourne ;

faible) et la partie haute (8 bits de poids fort).

• setData() : définit l’état

Le bus d’adresse du Z80 est sur 16 bits, mais il ne s’agit

des broches correspondant

que d’un processeur 8 bits et donc incapable de gérer des

aux 8 bits de données en

valeurs supérieures à 8 bits (le bus de données et la quasi-

fonction d’un octet passé en

totalité des registres). Pour préciser l’adresse du saut ou,

argument.

en d’autres termes, la prochaine adresse à lire pour obtenir

un opcode, nous devons donc le faire en deux parties.

La partie la plus importante

L’ordre dans lequel ces octets sont présentés et traités est

ici est, bien entendu, mem[],

déterminé par l’architecture du processeur et donc le choix

notre tableau de unsigned

du constructeur. On parle d’endianness (une traduction

char (ou byte) constituant notre

possible du terme est « boutisme », mais il faut reconnaître

« fausse » mémoire. Comme

que parler d’architectures « petit-boutistes » et « gros-bou-

nous n’utilisons que 6 des 16

tistes » est tout simplement affreux).

lignes d’adresses, nous ne pou-

vons gérer que 64 octets de mé-

Le Zilog Z80, comme les processeurs Intel x86 et

moire. Nous prévoyons d’ailleurs

compatibles, sont des architectures little-endian dans les-

un test dans la boucle principale

quel es, par exemple, la valeur 0x12345678 sera stockée

afin de nous assurer que nous

en mémoire sous la forme des octets 0x78, 0x56, 0x34

ne « sortons » pas du tableau

puis 0x12. Les 8 bits qui « pèsent » le plus dans la valeur

durant l’exécution.

32 bits qu’est 0x12345678 sont stockés en premier. On dit

que l’octet de poids le plus fort (MSB ou Most Significant

Il ne nous reste donc plus

Byte) est stocké à une adresse inférieure à l’octet de poids

qu’à remplir le tableau avec des

le plus faible (LSB pour Least Significant Byte).

instructions à destination du Z80

et un premier essai pourrait être

Ainsi, lorsqu’on passe les deux octets après 0xC3, on

de simplement y placer 64 fois

doit fournir d’abord l’octet de poids faible (LSB) et ensuite

0x00 correspondant à 64 occur-

l’octet de poids fort (MSB), car c’est ainsi que le processeur

rences de l’instruction NOP, No

attend ces informations. Avec une architecture big-endian,

OPeration, ne rien faire. Mais il

cette adresse se présentera de façon plus « naturel e » où

est plus intéressant de voir un

0x1234 serait 0x12 et 0x43. C’est un point à prendre en véritable programme fonction-considération si vous considérez expérimenter avec autre

ner, chose que nous al ons trai-

chose qu’un Z80 (ou un MOS 6502/6501). Le Motorola

ter maintenant. .

68000 par exemple est big-endian.

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

HACKABLE MAGAZINE n°21

91

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

Avec nos deux instructions à notre actif, vous pouvons

attendu. Si vous connectez des

donc imaginer un programme simpliste tel que :

leds aux broches /RD, /M1 et phi

• sauter à une adresse ;

vous pourrez d’ail eurs observer la

• faire quelques

différence d’activité dans la lec-

NOP ;

ture des octets, le premier cycle

• sauter à l’adresse de départ.

machine et le signal d’horloge.

Nous avons là une boucle infinie qui, en assembleur

C’est le moment de s’auto-

pourrait être quelque chose comme :

congratuler : bravo, vous avez

JP 0x0004

écrit et exécuté votre premier

NOP

vrai programme en assembleur

NOP

pour un processeur inventé il y

NOP

a plus de 40 ans ! Et en plus il

JP 0x0000

fonctionne !

Ce qui en termes de code machine nous donnerait

0xc3, 0x04, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00,

0x00 car :

4. DONNER LE

0x0000: 0xc3 0x04 0x00 JP 0x0004

SALE BOULOT À

0x0003: 0x00 NOP

0x0004: 0x00 NOP

LA MACHINE

0x0005: 0x00 NOP

0x0006: 0xc3 0x00 0x00 JP 0x0000

Le petit côté vintage dans le

fait d’assembler à la main un pro-

Le croquis Arduino présenté précédemment possède

gramme est amusant mais, il faut

justement ces 9 octets (5 instructions) au début du tableau

le reconnaître, cela peut vite deve-

mem[] et son exécution affiche donc sur le moniteur série

nir pénible. En faire l’expérience

la sortie suivante :

avec un code aussi simple que

celui que nous avons testé ici vous

Reset Z80

donne déjà une petite idée de la

Adresse: 0x0000 [0xC3]

subtile torture mentale quotidienne

Adresse: 0x0001 [0x04]

Adresse: 0x0002 [0x00]

vécue par nos aïeux, pionniers de

Adresse: 0x0004 [0x00]

l’informatique.

Adresse: 0x0005 [0x00]

Comme le dit l’agent Smith, ne

Adresse: 0x0006 [0xC3]

Adresse: 0x0007 [0x00]

confiez jamais à un humain le tra-

Adresse: 0x0008 [0x00]

vail d’une machine. On peut donc

Adresse: 0x0000 [0xC3]

simplifier notre tâche en faisant

Adresse: 0x0001 [0x04]

intervenir une Raspberry Pi (ou

Adresse: 0x0002 [0x00]

un PC sous GNU/Linux) pour ne

Adresse: 0x0004 [0x00]

plus avoir à assembler le code à

Adresse: 0x0005 [0x00]

Adresse: 0x0006 [0xC3]

la main. Nous pouvons écrire de

Adresse: 0x0007 [0x00]

l’assembleur et utiliser un assem-

Adresse: 0x0008 [0x00]

bleur pour processeur Z80 afin

de faire faire la traduction à notre

On retrouve là les adresses correspondant à notre

place. Ceci nous épargne princi-

code machine assemblé à la main et les différents octets

palement deux activités : penser

retournés au Z80 entre crochets. Celui-ci les traite exac-

en termes d’adresses et réfléchir

tement comme prévu et le programme boucle comme

en little-endian.

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Créez votre ordinateur 8 bits sur platine à essais : la mémoire

PROFESSIONNELS, R&D, ÉDUCATION...

DÉCOUVREZ CONNECT

LA PLATEFORME DE LECTURE EN LIGNE !

LISEZ LE

DERNIER

NUMÉRO

PARU

LISEZ PLUS

DE 300

NUMÉROS ET

HORS-SÉRIES

* Tarif France

TOUT CELA À PARTIR DE 149 € TTC*/AN Métropolitaine

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

HACKABLE MAGAZINE n°21

93

Pour plus d’informations, contactez-nous au 03 67 10 00 28 ou par e-mail : connect@ed-diamond.com pub_connect_oct2017-1.indd 3

16/10/2017 14:57

DÉMONTAGE, HACKS & RÉCUP

XXXXXX

ACTUELLEMENT DISPONIBLE

LINUX PRATIQUE HORS-SÉRIE N°40 !

NE LE MANQUEZ PAS

CHEZ VOTRE MARCHAND DE JOURNAUX ET SUR :

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

94

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

pub_magazines_oct2017.indd 1

12/10/2017 10:40

Créez votre ordinateur 8 bits sur platine à essais : la mémoire

En lieu et place des adresses

pour les sauts par exemple, nous

pouvons utiliser des étiquettes

(ou labels) pour référencer des

endroits spécifiques du code et de

la mémoire. Nous pouvons égale-

ment ajouter des commentaires,

des macros et surtout, l’assem-

bleur se charge de l’endianness,

nous laissant la possibilité de spé-

cifier les valeurs 16 bits de façon

plus lisible (pour nous simples

humains).

Le Z80 est un processeur bien

connu, ayant une communauté

d’utilisateurs très importante et

surtout il est encore utilisé dans

une version plus moderne dans

certaines calculatrices gra-

Le circuit logique

74*165 est un registre

phiques/scientifiques (Texas

Le choix est relativement difficile, car c’est

à décalage, mais à

Instruments en particulier). Il n’y a

avant tout une affaire de goût. z80asm est

l’opposé d’un composant

donc rien d’étonnant à trouver plus

souvent mentionné sur le Web, mais la docu-

comme le 74*595

d’un assembleur pour ce proces-

mentation officiel e est presque inexistante.

permettant de piloter des

sorties, celui-ci permet de

seur, y compris parmi les paquets

crasm présente l’avantage de supporter plu-

lire des entrées. Ainsi un

disponibles par défaut dans votre

sieurs processeurs 8 bits, mais produit uni-

seul 74HC595 piloté via

système Raspbian (et donc aussi

quement des fichiers textes (Intel Hex) peu

3 broches vous permettra

Debian sur PC) :

pratiques pour notre usage. Les binutils... eh

d’ajouter 8 sorties à votre

carte Arduino, mais le

• crasm 1.8 : un assembleur

bien, ce sont les binutils. . Puissants, riches,

74HC165, lui, fera de

pouvant générer du code

fonctionnels et. . parfois difficiles à prendre

même pour lire 8 entrées.

De plus, l’un comme

binaire pour les processeurs

en main. Et enfin, pasmo fait le travail tout

l’autre peuvent être

6800, 6801, 6803, 6502,

simplement, mais est encore un peu jeune.

chaînés pour multiplier

65C02 et Z80 ;

Pour quelque chose d’aussi simple que

à volonté les sorties ou

entrées, toujours avec

•

le fait de reproduire notre exemple, tous ces

pasmo 0.5.3 : un assembleur

seulement 3 broches de

plus jeune, décrit par l’auteur

compilateurs pourront faire l’affaire avec un

contrôle.

comme simple d’utilisation

petit moins pour les binutils plus difficiles

(??) ;

à mettre en œuvre. Vous trouverez sur le

dépôt GitHub du numéro des exemples pour

• z80asm 1.8 : un classique du

les quatre assembleurs cités ici, mais je ne

genre avec un code stable,

détail erai, dans la suite, que l’utilisation de

mais une documentation

z80asm (un choix totalement arbitraire, sinon

assez réduite ;

aléatoire).

• binutils-z80 2.24.28 : les

Pour instal er z80asm sur votre Raspberry

très connus et utilisés utili-

Pi, rien de plus simple, il suffit de vous plier

taires binaires GNU pour la

d’un sudo apt-get install z80asm et le

cible Z80 incluant tous les

tour est joué. Il vous faudra également un bon

outils classiques.

éditeur de texte/code comme Vim, Emacs ou

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

HACKABLE MAGAZINE n°21

95

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

Nano qui est instal é par défaut (message subliminal totalement discret et subtil : mettez-vous à Vim), ainsi que l’outil xxd pour convertir le résultat en quelque chose d’utilisable directement dans votre croquis.

Il ne vous reste plus maintenant qu’à écrire votre premier programme en assembleur, qui sera presque identique au précédent et nous permettra de valider le résultat : org 0x0000

; un commentaire

.INIT: JP .PLOP

NOP

.PLOP: NOP

NOP

JP .INIT

La directive org n’est pas destinée au processeur, mais à l’assembleur lui-même. El e permet de spécifier l’adresse de départ du code, ici 0x0000. Ce sera donc le point de référence pour que l’assembleur puisse travail er. Notre programme débute par une étiquette (.INIT:) marquant l’adresse courante. Ceci permet de nous y référer ensuite comme s’il s’agissait d’une adresse (un peu comme une macro en C). .PLOP: est également une tel e étiquette qui nous sert immé-

diatement pour faire notre premier saut. Le programme se poursuit donc avec deux NOP puis un saut vers l’adresse représentée par .INIT.

Pour assembler le programme, nous l’enregistrons dans un fichier (premier.asm) et appelons : $ z80asm -o premier.bin premier.asm --list=premier.lst

La commande prend en argument -o suivi d’un nom de fichier pour stocker le résultat, le fichier source assembleur et une option --list= très intéressante puisqu’el e permet d’obtenir un listing du code assemblé :

# File premier.asm

0000 org 0x0000

0000

0000 ; un commentaire

0000

0000 c3 04 00 .INIT: JP .PLOP

0003 00 NOP

0004 00 .PLOP: NOP

0005 00 NOP

0006 c3 00 00 JP .INIT

# End of file premier.asm

0009

L’assembleur décrit ici son travail. On y retrouve, bien entendu, notre code, mais également la traduction en code machine ainsi que les adresses utilisées. À ce stade déjà, vous devez reconnaître les octets que nous avons déjà utilisés dans le croquis Arduino. Mais nous pouvons pousser plus loin encore, en utilisant xxd pour produire un morceau de code en C à partir du fichier premier.bin résultant de l’assemblage :

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

Créez votre ordinateur 8 bits sur platine à essais : la mémoire

$ xxd -i premier.bin

unsigned char premier_bin[] = {

0xc3, 0x04, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00

};

unsigned int premier_bin_len = 9;

Nous avons là une déclaration de variable tout à fait standard et parfaitement conforme à ce que nous avions fait à la main, à l’octet près ! Le nom de variable utilisé est celui du fichier (avec le . remplacé par un _). premier_bin_len, précisant la tail e des données, ne nous est pas utile ici (nous utilisons sizeof()). Il nous suffit alors de copier/col er ce code dans notre croquis, de modifier le nom de la variable et nous obtenons le même résultat que précédemment.

Nous venons d’utiliser un assembleur Z80 sur Raspberry Pi pour produire un code machine pour notre plateforme d’expérimentation et celui-ci s’exécute à merveil e.

POUR FINIR (TEMPORAIREMENT)

Avec cet article, nous avons avancé d’un grand pas dans notre projet, ainsi que de quelques années dans l’histoire de l’informatique. Certes, c’est encore loin d’être un ordinateur complet ou même un équivalent à une carte Arduino, mais nous nous rapprochons petit à petit de l’objectif.

Nous pouvons maintenant écrire des codes en assembleur et laisser les outils faire le travail, ce qui n’est pas sans rappeler une approche relativement moderne.

Nous utilisons ici

l’intégralité des

broches (GPIO)

disponibles d’une

carte Arduino

UNO et même si

nous ne pouvons

simuler que 64

octets de mémoire

(6 lignes du bus

d’adresse sur les 16

disponibles), cela

fait déjà beaucoup

de connexions et

donc autant de

sources d’erreurs

ou de faux contacts.

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

HACKABLE MAGAZINE n°21

97

DÉMONTAGE, HACKS & RÉCUP

ORDINATEUR 8 BITS

Une variation du

montage utilise deux

74HC165 qui donnent

accès à l’intégralité

des 16 bits d’adresse.

Côté Arduino, la lecture

d’une adresse se fait

alors via seulement

3 broches, mais il

faut tout de même

connecter le Z80 aux

74HC165... et nous

n’avons pas assez de

mémoire pour simuler

l’ensemble des 64 Ko

adressables.

Je ne sais pas encore ce qu’il y aura de prévu

Nous verrons bien ce qui m’inspire

pour le prochain article. Sur cette base, on peut

le plus dans toutes ces pistes, mais

commencer à travailler avec des périphériques

d’ici là, je vous recommande de faire

comme un port série (SIO) ou un timer (CTC)

vos propres essais, en particulier

par exemple. On peut également améliorer notre

en assembleur. Car même si nous

concept de base en utilisant les 74HC165 pour

finirons avec un langage de plus haut

gérer les 16 bits d’adresses, basculer sur une carte

niveau comme le C, la compréhen-

Arduino Mega 2560 ou ajouter une EEPROM i2c en

sion de l’assembleur reste quelque

guise d’espace de stockage (pour simuler davan-

chose, dans ce domaine, qui est très

tage de ROM). Enfin, on peut également décider

important. C’est un style de program-

de prendre en charge une mémoire vive et donc de

mation très particulier, mais qui aide

permettre les écritures en mémoire par exemple. .

vraiment à comprendre et assimiler

Ce dernier point est important, car qui dit « mé-

des concepts que vous utilisez déjà

moire vive » dit « possibilités d’utilisation d’une pile

sans le savoir avec vos cartes Ar-

exécution » (stack), une zone mémoire dédiée au

duino. Qui sait, peut-être y prendrez-

stockage des adresses pour l’appel de routines

vous goût et tenterez également de

(CALL et RET en assembleur). Le processeur Z80

faire de l’assembleur avec vos cartes

possède tout ce qu’il faut pour cela (registre SP)

Arduino, ce qui est quelque chose de

et c’est une brique préliminaire indispensable pour

tout à fait possible, mais cela est une

aller plus loin que l’assembleur : envisager d’écrire

tout autre histoire. . et un tout autre

des programmes en C !

article. DB

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

HACKABLE MAGAZINE n°21

https:/ www.hackable.fr/

LA

LA

BO BO

X X

QUI FAIT

QUI

NAITRE FAIT

LESNAITRE LES

ROBO

ROBOTICIENS

TICIENS

DE

DE DEMAIN

DEMAIN

WWW.ROBOBOX. WWW

FR .ROBOBOX.FR

dès

dès

19,99€ /

19,99€ /

mo mois !

is !

CONSTRUISEZ CHAQUE

CONSTRUISEZ

MOIS UN CHAQUE MOIS

NOUVEA UN

U NOUVE

ROB AU

O R

T OBOT

ET FORMEZ V

ET

OUS A LA F

R ORME

OB Z

O VOUS A LA

TIQUE ROBOTIQUE

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

Libérez votre talent !

Avec Raspberry Pi, une multitude

de fonctionnalités s’offrent a vous...

Votre boutique en ligne de

Raspberry Pi

De multiples utilisations

Découvrez l’univers du Raspberry Pi et plus de 500 accessoires !

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

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

Document Outline

- mdns_ou_comment_retrouver_facilement_vot

- connaitre_la_bonne_adresse

- de_l_adresse_vers_le_nom

- la_solutionmdns

- pas_seulement_sur_pc_et_raspberry_pi

- conclusion

- creez_votre_ordinateur_8_bits_sur_platin

- une_carte_arduino_en_guise_de_memoire

- le_croquis_arduino

- un_peu_d_assembleur_pour_la_route

- donner_le_sale_boulot_a_la_machine

- pour_finir_temporairement

- otaprogrammez_votre_esp8266_en_wifi

- preparatifs_et_choses_a_savoir

- une_base_de_croquis_supportant_l_ota

- mettre_a_jour_en_ota

- utilisez_google_analytics_pour_la_survei

- comment_fonctionne_google_analytics

- un_montage_qui_permet_d_envoyer_des_donn

- etre_un_client_web_en_toute_simplicite

- resultats_et_evolutions_possibles

- utilisez_une_alimentations_sans_fil_pour

- la_technologie_qi

- bricolons_qi_pour_nos_projets

- utilisez_un_minitel_comme_ecran_pour_vot

- un_petit_mot_sur_le_minitel

- un_minitel_mais_pourquoi_faire

- un_peu_d_aide_de_python_pour_les_images

- pour_finir

- un_testeur_universel_de_composants_pour_

- gm328a_l_idee_originale

- importantceci_ne_remplace_pas_un_multime

- tests_et_utilisation

- mais_est-ce_que_ca_vaut_le_coup

Table of Contents

mdns_ou_comment_retrouver_facilement_vot

connaitre_la_bonne_adresse

de_l_adresse_vers_le_nom

la_solutionmdns

pas_seulement_sur_pc_et_raspberry_pi

conclusion

creez_votre_ordinateur_8_bits_sur_platin

une_carte_arduino_en_guise_de_memoire

le_croquis_arduino

un_peu_d_assembleur_pour_la_route

donner_le_sale_boulot_a_la_machine

pour_finir_temporairement

otaprogrammez_votre_esp8266_en_wifi

preparatifs_et_choses_a_savoir

une_base_de_croquis_supportant_l_ota

mettre_a_jour_en_ota

utilisez_google_analytics_pour_la_survei

comment_fonctionne_google_analytics

un_montage_qui_permet_d_envoyer_des_donn

etre_un_client_web_en_toute_simplicite

resultats_et_evolutions_possibles

utilisez_une_alimentations_sans_fil_pour

la_technologie_qi

bricolons_qi_pour_nos_projets

utilisez_un_minitel_comme_ecran_pour_vot

un_petit_mot_sur_le_minitel

un_minitel_mais_pourquoi_faire

un_peu_d_aide_de_python_pour_les_images

pour_finir

un_testeur_universel_de_composants_pour_

gm328a_l_idee_originale

importantceci_ne_remplace_pas_un_multime

tests_et_utilisation

mais_est-ce_que_ca_vaut_le_coup