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

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

Comment recréer notre monde en quelques divisions et additions

JDE

J V 2

D017

Comment recréer notre monde en quelques divisions et additions

E V 2017

Journ

J ées

o D

u é

rvel

n op

é pe

e m

s ent L

D og

é ici

vel

eloppement Logiciel

Science des données et apprentissage automat

S iqu

c e

ience des données et apprentissage automatique

Systèmes embarqués et internet des objets

Systèmes embarqués et internet des objets

Infrastructures logiciel es et science ouverte

Infrastructures logicielles et science ouverte

Paral élisme itinérant et virtualisation

Parallélisme itinérant et virtualisation

Ingénierie et web des données

Ingénierie et web des données

Programmation de la matière

Programmation de la matière

Big data et Sécurité

Big data et Sécurité

Usines logiciel es

Usines logicielles

Génie logiciel

Génie logiciel

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

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

Webcast

Webcast

4, 5, 6, 7 juil et 20174, 5, 6, 7 juillet 2017

Aix-Marse

A il e

xU

-nive

M rsi

a té

r , la

s C

eain

lelbiè

e r eUniversité, la Canebière

Information, programme, r

I és

ner

f va

otio

r n et

m in

asc

t r

i ipt

oion :

, programme, réservation et inscription :

http://devlog.cnr

h s.

t fr

t /jd

p e

:v2

/ 01

/ 7

devlog.cnrs.fr/jdev2017

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

h o

t n

t d.c

p om

://www.ed-diamond.c GNU

om /Linux Magazine France N°205

23

GNU/Linux Magazine France N°205

23

lm205-v5.indd 23

lm205-v5.indd 23

16/06/2017 11:16

16/06/2017 11:16

ÉDITO

SOMMAIRE

« C’est traduit de quel e langue ? »

Tel e était la question qu’une personne m’a posée

à propos du magazine lors de la MakerFaire Paris

ÉQUIPEMENT

2017 début juin à la Cité des Sciences de la Vil ette. La

réponse est bien entendu simple et évidente : « aucune »

04

(si on part du principe que la correction orthographique

Ajoutez un écran intelligent à vos

et grammaticale de ma prose n’est pas une traduction,

affirmation parfois légitime de la part des personnes en

projets Arduino

charge de cette éprouvante tâche à la rédaction).

Quelque chose me dérange profondément derrière cette simple question. Je ne EN COUVERTURE

parle pas tant du fait que nous mettons un point d’honneur à ne détail er que des manipulations et des expérimentations effectivement réalisées par nos soins, même 18

si cela peut être très problématique parfois, lorsque le résultat n’est pas là, il faut se résoudre à passer à la trappe des heures ou des jours de travail et écarter le sujet.

Découvrez LoRaWAN et créez

Pas question donc de décrire ou d’expliquer quelque chose qui n’a pas été fait, c’est votre passerel e / concentrateur

ainsi. Pas question non plus d’ail eurs de publier des articles contribués sans contre-partie financière comme c’est souvent le cas en ligne, ce qui impacte également grandement la qualité des publications. Ce sont des règles immuables, érigées en 34

principes fondamentaux dans nos publications et il n’est pas question d’y déroger (et on peut être vraiment, mais vraiment très têtus, voire butés sur le sujet).

Créez vos montages Arduino

communicants sur

Non, ce qui me dérange véritablement dans cette question est qu’el e sous-entend qu’un contenu rédactionnel technique « touffu » provient forcément d’ail eurs et, je LoRaWAN

suppose, d’une source anglophone. C’est un peu comme s’il s’agissait de se résigner et d’accepter que, en France, nous ne sommes pas capables de tel es réalisations.

C’est pourtant oublier que depuis des dizaines d’années, sinon des centaines, c’est RADIO & FRÉQUENCES

bel et bien l’ingéniosité, l’imagination et la créativité française qui ont conduit à d’admi-rables réalisations et de fantastiques prouesses technologiques.

50

Autant un « c’était mieux avant » est quelque chose que je peux comprendre, Construisez un émetteur 433 Mhz

autant un « c’est mieux ail eurs », autrement dit « si c’est bien, ce n’est pas d’ici » est quelque chose qui me parait à la fois insensé et terriblement négatif, voire néfaste.

pour remplacer vos

Cela véhicule l’idée que nous aurions perdu, en France, cette capacité technologique, télécommandes

alors qu’il n’y a rien de plus faux. Une simple visite à la MakerFaire Paris le démontre de façon évidente.

Donc non, que cela soit dit et bien dit, nous de traduisons rien dans Hackable, car DÉMONTAGE, HACKS & RÉCUP

nous n’en avons pas besoin. Et nous n’en avons pas besoin, car la créativité, l’inven-tivité et la capacité de créer et bidouil er n’ont pas disparu du pays, bien au contraire.

64

J’en suis la preuve, vous en êtes la preuve, nous en sommes la preuve... Tâchons Obtenez n'importe quel e tension à

donc de ne pas l’oublier, car le jour où nous en douterons sera précisément le triste jour où nous perdrons réel ement cette qualité !

partir des 5V USB

EMBARQUÉ & INFORMATIQUE

70

Hackable Magazine

Plate-forme de Saint-Quentin-Fallavier.

Tél. : 04 74 82 63 04

Obtenir les informations du firmware

est édité par Les Éditions Diamond

Service des ventes : Abomarque : 09 53 15 21 77

IMPRIMÉ en Allemagne - PRINTED in Germany

de votre Raspberry Pi

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

N° ISSN : 2427-4631

Commission paritaire : K92470

DOMOTIQUE & ROBOTIQUE

10, Place de la Cathédrale - 68000 Colmar

Périodicité : bimestriel

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

Prix de vente : 7,90 €

76

E-mail : lecteurs@hackable.fr

La rédaction n’est pas

Service commercial : cial@ed-diamond.com

responsable des textes,

Analyser le bus Siemens BSB d'une

illustrations et photos qui

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

lui sont communiqués par

pompe à chaleur Atlantic

http://www.ed-diamond.com

leurs auteurs. La repro-

Directeur de publication : Arnaud Metzler

duction totale ou partiel e des articles publiés dans Hackable Magazine est interdite sans accord écrit de la société Les Éditions Diamond.

Rédacteur en chef : Denis Bodor

Sauf accord particulier, les manuscrits, photos et dessins adressés à 84

Réalisation graphique : Kathrin Scali

Hackable Magazine, publiés ou non, ne sont ni rendus, ni renvoyés. Les indications de prix et d’adresses figurant dans les pages rédactionnel es Pilotez votre pompe à chaleur

Responsable publicité : Valérie Fréchard,

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 Atlantic en utilisant le bus

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

Siemens BSB

Distribution France : (uniquement pour les

Suivez-nous sur Twitter

dépositaires de presse)

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

@hackablemag

ABONNEMENT

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

57/58

À PROPOS DE HACKABLE...

Abonnements multi-supports

HACKS, HACKERS & HACKABLE

Ce magazine ne traite pas de piratage. Un hack est une solution rapide et bricolée pour régler un problème, tantôt élégante, tantôt brouil onne, mais systématiquement créative. Les personnes utilisant ce type de techniques sont appelées hackers, quel que soit le domaine technologique. C’est un abus de langage médiatisé que de confondre « pirate informatique » et « hacker ». Le nom de ce Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) mag haztitnp:/

e a é w

t w

é ch w

ois .ed

i pou-d

r reiaflém

te o

r c netd.

e ncotoiom

n d e bidouil age créatif sur la base d’un terme utilisé dans sa définition légitime, véritable et historique.

HACKABLE MAGAZINE n°19

3

ÉQUIPEMENT

ÉCRAN LCD

AJOUTEZ UN ÉCRAN

INTELLIGENT À VOS

PROJETS ARDUINO

Denis Bodor

Une carte Arduino permet de faire beaucoup de choses, vraiment beaucoup de choses, mais elle possède également des limites dans certains domaines. Quand une telle situation se présente, la solution consiste tout simplement à déléguer une partie du travail à un périphérique ou un module avec lequel votre croquis va communiquer.

C’est le principe utilisé par les écrans intelligents Nextion, déchargeant ainsi la carte Arduino de l’éprouvant travail de composition de l’affichage, mais également de gestion de l’interface utilisateur.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Ajoutez un écran intel igent à vos projets Arduino

La mode est à l’inteli-

gence, surtout côté élec-

tronique (pour le reste je

vous laisse seuls juges).

Après les leds intel i-

gentes intégrant un circuit intégré

permettant de définir simplement les

couleurs qu’elles doivent prendre,

et ce quel que soit leur nombre,

voici venir une nouvel e génération

d’écrans tactiles pour vos montages

Arduino ou Raspberry Pi, conçus

avec la même notion de facilité

d’utilisation.

Un écran LCD ou OLED utili-

sable pour vos projets se résume

généralement à un simple système

d’affichage, entièrement contrôlé par

vos programmes ou croquis. Vous

devez donc utiliser, en plus des bi-

bliothèques permettant le dialogue,

Les deux modèles

des fonctions vous fournissant des

utilisés pour les

expérimentations

primitives graphiques : contrôle des

1. LES ÉCRANS NEXTION

de l’article sont le

pixels, tracés de formes géomé-

Plus que de simples écrans, ces matériels

NX4832T035_011R

triques, écriture de texte, etc. Ceci

(3,5”) et le

sont décrits comme une solution d’Interface

représente une charge non négli-

NX3224T024_011R

Homme-Machines (IHM, ou en anglais HMI

(2,4”). De taille

geable de travail et une consomma-

pour Human Machine Interface). Il ne s’agit

relativement modeste,

tion de ressources mémoire généra-

pas simplement de présenter des données à

ils sont parfaitement

lement tout aussi importante.

adaptés pour des

l’écran, mais également de gérer cette présen-

projets à base de carte

Pour dessiner un simple écran

tation et une partie des interactions (pour les

Arduino, même s’ils

affichant, par exemple, une jauge ou

modèles d’écran ayant une surface tactile). Ces

peuvent également

être utilisés avec tous

une barre de progression présentant écrans se chargent donc, de façon autonome, types de plateformes,

une température accompagnée

d’afficher une interface graphique stockée dans

y compris un PC ou un

de la valeur numérique associée,

leur mémoire et de n’échanger, avec le système

Mac.

vous devez donc tout faire vous-

connecté, comme une carte Arduino, que les

même, dessiner chaque élément

informations utiles. Il peut s’agir d’un clic sur un

avec des rectangles, des lignes,

bouton, la position d’une barre de progression,

des courbes. . Ne serait-il pas plus

le texte à afficher, etc. Tout ce qui peut être fait

agréable de laisser faire tout cela

par l’écran lui-même sera géré de cette façon

par l’écran lui-même, vous concen-

et le microcontrôleur de votre Arduino, et donc

trant uniquement, au niveau de votre votre croquis, n’aura plus qu’à se concentrer croquis, sur l’envoi et la réception

sur les données, mais non sur la manière de

des informations et non leur présen-

les présenter.

tation ? C’est là précisément ce que

Pour arriver à un tel mode de fonctionnement,

proposent les écrans Nextion de

la logique consiste à concevoir entièrement l’in-

ITEAD.

terface, qu’el e soit simple ou complexe, à l’aide

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

HACKABLE MAGAZINE n°19

5

ÉQUIPEMENT

ÉCRAN LCD

temps réel (RTC), des entrées/

sorties (GPIO) et une fonction

de sauvegarde en mémoire flash

(support de stockage). Ils sont

aussi plus coûteux et présentent

surtout l’avantage de pouvoir être

utilisés de façon totalement auto-

nome. Nous nous concentrerons

cependant ici sur les modèles

basiques, plus économiques qui

se distinguent entre eux par leur

tail e et leur résolution :

• NX3224T024_011R : 2,4”,

320×240 pixels, 4 Mo de

flash ;

• NX3224T028_011R : 2,8”,

320×240 pixels, 4 Mo de

flash ;

• NX4024T032_011R : 3,2”,

Les écrans Nextion

400×240 pixels, 4 Mo de

d’ITEAD ne sont pas

d’un logiciel dédié. Cette interface sera compilée par

de simples systèmes

flash ;

le logiciel et chargée dans la mémoire de l’écran via

d’affichage, mais sont

programmés, via une

une carte microSD (il est également possible d’utiliser

• NX4832T035_011R : 3,5”,

carte microSD, pour

une connexion série, mais ceci implique l’utilisation

480×320 pixels, 16 Mo de

accueillir des interfaces

d’un convertisseur USB/série 5V). Une fois la copie

flash ;

complètes (bouton,

réalisée, l’écran affichera cette interface, même sans

barre de progression,

• NX4827T043_011R : 4,3”,

jauges, images, etc.)

être connecté au système qui le contrôle. Il peut s’agir

480×272 pixels, 16 Mo de

communiquant avec vos

d’une carte Arduino, une Raspberry Pi, mais aussi de

flash ;

projets par une liaison

tout autre type de systèmes capables de communi-

série.

quer via une liaison série.

• NX8048T050_011R : 5”,

800×480 pixels, 16 Mo de

Ces écrans sont donc des systèmes complets,

flash ;

possédant leur propre mémoire et leur propre micro-

contrôleur (STM32), programmés via un transfert par

• NX8048T070_011R : 7”,

carte microSD. Il ne s’agit plus de simples écrans

800×480 pixels, 16 Mo de

comme ceux construits autour des contrôleurs

flash ;

ILI9340, PCF8833, SSD1351 ou tout autre modèle

• NX8048T090_011R : 9”,

dont nous avons précédemment parlé dans le maga-

800×480 pixels, 16 Mo de

zine (voir Hackable n°3 et 4) et pouvant être utilisés,

flash.

par exemple, avec les bibliothèques Adafruit_GFX

Tous les modèles affichent

ou U8glib (voir Hackable n°9).

en 65536 couleurs, disposent de

Les différents modèles d’écrans Nextion sont offi-

3584 octets de mémoire vive et

ciel ement au nombre de 16 (d’après la version ac-

s’utilisent de la même façon, avec

tuel e du logiciel) et se répartissent en deux catégo-

la même interface série, le même

ries : « Basic » (basique) et « Enhanced » (étendu).

logiciel de création d’interfaces

Les modèles étendus disposent de plus de mémoire

(Windows uniquement) et les

et de ressources processeur, intègrent une horloge

mêmes bibliothèques Arduino pour

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Ajoutez un écran intel igent à vos projets Arduino

le pilotage du périphérique. Les

Il s’agit d’une application propriétaire (les sources ne sont

deux modèles sélectionnés pour

pas diffusées), Windows s’installant tout à fait classiquement

cet article sont NX4832T035_011R

et aucun pilote n’est nécessaire. En effet, le transfert de

(3,5”) et NX3224T024_011R (2,4”).

l’interface dans l’écran se fait sous la forme d’un fichier, pro-Ils ont été acquis sur eBay, res-

duit par le logiciel, copié sur une microSD formatée en FAT32

pectivement auprès des vendeurs

(important). Cel e-ci sera alors tout simplement placée dans

de Shenzhen, « elec_mal 2012 »

l’emplacement réservé à cet effet à l’arrière de l’écran et lors et « h-quality_electronic », au prix

de la prochaine mise sous tension, son contenu est copié

de 27€ et 14€ (port gratuit dans les

dans la mémoire flash. La microSD peut alors être retirée et

deux cas). Je n’ai personnel ement

l’écran réinitialisé par un nouveau cycle d’arrêt/démarrage.

pas trop d’intérêt pour les modèles

Au lancement de l’application fraîchement instal ée, l’inter-

d’une tail e supérieure qui affichent

face qui se présente est assez simple, mais en anglais. Pour

généralement des prix assez

démarrer un nouveau projet, il suffit de cliquer sur New dans la importants de l’ordre de 60€ pour

barre supérieure et de spécifier un nom de fichier qui prendra

le 5” ou 75€ pour le 7” (le modèle

une extension .HMI. On vous demandera ensuite de préciser NX8048T090_011R semble introu-le modèle d’écran pour lequel vous souhaitez composer une

vable pour l’instant, sans doute un

interface. Il aurait été plus logique de proposer ce choix avant futur modèle présent uniquement

le nommage du projet, mais en cas d’annulation, rien n’est

dans le logiciel). À ce prix-là, au-

sauvegardé. Vous ne risquez donc pas de créer des fichiers

tant utiliser une Raspberry Pi et un HMI inutiles de cette façon. Sachez qu’il vous est également écran HDMI, DSI ou DPI, sachant,

possible de changer ce choix de modèle par la suite en utili-

de plus, que les projets Arduino

sant le bouton Device ID.

sont souvent assez compacts par

eux-mêmes.

2. CRÉER VOTRE

INTERFACE

Vous l’avez compris avant même

d’envisager la connexion d’un écran

Nextion à une carte Arduino, il est

nécessaire de construire son inter-

face graphique. Pour cela, la seule

solution actuellement disponible

(à ma connaissance) consiste à

télécharger le Nextion Editor sur

le site d’ITEAD : https:/ nextion.

itead.cc/download.html. La

dernière version en date de cette

application est la 0.47, mais il est

fort probable qu’au moment où

vous lirez ceci une nouvel e version

La sélection du modèle d’écran utilise les désignations qui se trouvent à soit disponible, avec davantage de

l’arrière des modules et est répartie dans une famille de modèles. Sur la fonctionnalités. À cette date, seule

gauche, « Device » permet de choisir le type et « DISPLAY » l’orientation à utiliser par incrément de 90°. Ceci n’est pas très logique et si on ne le une version en langue anglaise est

sait pas à l’avance, c’est là quelque chose qui peut prendre vraiment très disponible.

longtemps à retrouver...

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

HACKABLE MAGAZINE n°19

7

ÉQUIPEMENT

ÉCRAN LCD

Nextion Editor est

l’application Windows

vous permettant

L’interface par défaut se divise en plusieurs parties

L’onglet Fonts fonctionne de la

de composer une

comme le montre l’il ustration présentée ici. La zone

même manière, mais avec des

interface pour les

centrale (2) est une représentation de votre future

fichiers de polices générés par

écrans Nextion. Ce

interface à l’échel e et à la tail e de l’écran que vous

l’application. Il vous est possible

n’est pas un modèle

d’ergonomie et

avez sélectionné (il n’y a pas de fonction « zoom »).

d’utiliser n’importe quel e police

certaines fenêtres

Sur la gauche (1) se trouve votre boite à outils regrou-

présente dans votre système.

ont encore des

pant tous les objets (ou composants) que vous pouvez

En utilisant le menu Tools et Font

sinogrammes

utiliser. Ceux-ci sont ajoutés automatiquement dès

Generator, vous choisirez une

par endroit.

Malheureusement,

que vous cliquez dessus et peuvent être déplacés et

police et une tail e puis générez

c’est le seul logiciel

modifiés ensuite. Il n’y a pas de cliquer-déposer, c’est

un fichier après avoir spécifié un

permettant de créer

un peu déroutant au début, mais on s’y fait. .

nom. Vous pourrez alors enregis-

des interfaces pour

l’instant, et son

Toujours à gauche de l’interface, une section nom-

trer cette police sous la forme d’un

fonctionnement

mée

fichier .zi et aurez l’opportunité

Picture (4) présente les images ainsi que les po-interne, tout comme

le format des fichiers

lices utilisables (onglet en bas). La logique ici consiste

de l’intégrer directement à votre

utilisés, n’est pas

à assembler une col ection d’images ou polices pour

composition. Vous pouvez aussi

documenté.

les utiliser ensuite, par référence, dans la configuration

sauter cette étape pour ensuite

des objets utilisés. En haut de cette section, les bou-

utiliser le bouton + et sélection-

tons

ner le fichier zi à charger. Notez

+ et - permettent d’ajouter les éléments sous la forme de fichiers et les supprimer. Une fois une impor-qu’un fichier .zi ne contient

tation réalisée, le nom de l’image n’est plus important,

qu’une police à une tail e donnée.

mais sa position dans la liste sert alors d’index. Ce

Si vous utilisez plusieurs tail es,

numéro est présenté sous chaque image, accompa-

il vous faudra générer, intégrer et

gné de sa tail e, et c’est celui que vous devrez utiliser

utiliser plusieurs fichiers.

dans l’attribut de remplissage des objets (picc, bpic,

Comprenez bien ici qu’il faut

ppic, etc.).

voir les images et les polices

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Ajoutez un écran intel igent à vos projets Arduino

comme des ressources qui seront

• « id » : le numéro unique de l’objet permettant de

embarquées dans votre interface,

l’identifier ;

qu’elles soient utilisées ou non.

• « objname » : le nom de l’objet que vous pouvez

Chacune de ces entrées occupe

changer ;

donc un certain espace dans la

mémoire flash de l’écran qui, selon

• « type » : le type numérique de l’objet ;

le modèle, est limité à 4 ou 16 Mo.

• « vscope » : la portée de la variable. Ceci permet

Après importation, il ne s’agit plus

de faire en sorte que les variables des objets

de fichiers, mais de blocs de don-

puissent être accessibles ou non depuis d’autres

nées sans nom, seuls les numéros

pages ;

sont importants.

• « sta » : le type de remplissage souhaité, au

Sur la droite vous trouverez

choix, entre une couleur et une image ;

une section Page (3) regroupant

• « x » : la position horizontale du coin supérieur

les pages ou écrans utilisables.

gauche de l’objet ;

Une interface est toujours compo-

• « y » : la position verticale même coin ;

sée au minimum d’une page sur

laquel e trouvent place les objets

• « w » : la largeur de l’objet en pixels ;

Au cœur d’un écran

(texte, image, barre de progres-

• « h » : et sa hauteur.

Nextion se trouve

un microcontrôleur

sion, jauges, etc.). Vous pouvez

STM32 (à gauche)

avoir autant de pages que vous le

Les sections en bas de l’écran (5 et 6) présentent

chargé de présenter

souhaitez de façon à présenter,

respectivement les messages générés lors de la com-

l’interface utilisateur

pilation de l’interface et les événements qui doivent

depuis votre croquis différents

conçue avec

être générés par l’objet sélectionné à différents mo-

une application

écrans. Il est également possible

ments dans la gestion de l’interface et ses interactions

spécifique. En plus

de gérer cela de façon indépen-

avec un utilisateur (avant initialisation, après initialisa-

de l’écran LCD, ces

dante du croquis Arduino, mais

modules disposent

tion, lors d’une pression, lors d’un relâchement, etc.).

nous verrons cela une autre fois.

d’une mémoire flash

Un tel événement peut déclencher une action sur un

pour le stockage de

Chaque page peut avoir le nom

paramètre d’un autre objet, comme le pourcentage de

l’interface et d’un

qui vous plaira, il vous suffit de

progression d’une barre, ou tout simplement provoquer

contrôleur de surface

double-cliquer et d’en spécifier un

tactile résistive (à

droite).

autre. Une barre de boutons vous

permet d’ajouter, supprimer, insé-

rer, changer la position, dupliquer,

importer et exporter des pages.

On notera ici que les boutons en

question sont totalement différents

de la section images/polices pré-

cédente. . Dans le doute, survolez

simplement un bouton avec le

pointeur de la souris pour avoir

une bul e précisant de quoi il s’agit

(en anglais bien sûr).

À droite en bas, se trouvent les

attributs de l’objet actuel ement

sélectionné. Ceux-ci changent en

fonction du type d’objet, mais de

façon générale, on retrouve :

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

HACKABLE MAGAZINE n°19

9

ÉQUIPEMENT

ÉCRAN LCD

la communication du numéro de

davantage une question d’habitude

l’objet via la liaison série. Nous

qu’un réel problème de conception

verrons tout cela via un exemple

de l’application, même si el e n’en

un peu plus loin. .

est pas exempte, loin de là.

Notez qu’il est possible de

personnaliser l’interface du logi-

3. INSTALLEZ LES

ciel, de déplacer des sections et

L’interface conçue dans le logiciel d’ITEAD

consiste en un agencement et une

même de les combiner sous forme BIBLIOTHÈQUES

configuration de composants graphiques

d’onglets afin de gagner un peu

interactifs. Chaque composant est nommé

de place pour la zone principale.

Deux bibliothèques Arduino

et se voit paramétré par un ensemble

Le système est un peu « tordu »,

permettent l’utilisation d’une inter-

d’attributs (taille, couleur, fond, valeur par

défaut, etc.). Votre croquis Arduino ne fera

mais il suffit de prendre la barre

face chargée dans la mémoire

qu’interagir avec ces composants et sera

de titre d’une des zones et la

d’un écran Nextion. Nous avons en

donc totalement déchargé de leur gestion

glisser quelque part sur l’écran.

premier lieu cel e directement ins-

ou de leur affichage.

Des icônes en croix apparaissent

tallable depuis le gestionnaire de

alors au survol des zones, per-

bibliothèques : NeoNextion. Cel e-

mettant d’ajouter en haut, en bas,

ci n’est pas la bibliothèque officiel e

à gauche ou à droite de la zone

d’ITEAD, mais une version modi-

en question. Le centre de la croix

fiée et étendue par Dan Nixon.

Les écrans Nextion sont livrés avec la

permet un ajout sous forme d’on-

Bien que toujours maintenue, el e

connectique nécessaire et un adaptateur

glet à la zone survolée.

ne prendra pas en charge de futurs

permettant de les alimenter avec un bloc

modèles d’écrans car, comme le

secteur identique à celui utilisé pour une

La prise en main de cette inter-

Raspberry Pi. Petit problème cependant,

dit Dan lui-même, celui-ci n’utilise

les masses de l’écran et de la carte

face vous demandera certaine-

plus d’écran de ce type pour ses

Arduino doivent être reliées sous peine

ment un peu de temps, car c’est

projets. Les corrections et ajouts

de voir apparaître de gros problème

assez peu intuitif, mais une fois

de fonctionnalités sont cependant

de communication. L’une des solutions

la logique assimilée vous pourrez

possibles consiste à tout simplement

toujours d’actualité sur les modèles

souder un connecteur supplémentaire pour

travail er assez rapidement. C’est

qu’il possède. La dernière version

avoir deux masses et deux broches +5V.

stable est la 2.2.0 d’août 2016.

L’autre bibliothèque est cel e

proposée directement par le fabri-

cant des écrans, mais cel e-ci

n’est pas présente dans le ges-

tionnaire. Il vous faudra donc la

télécharger directement depuis

GitHub à l’adresse https:/ github.

com/itead/ITEADLIB_Arduino_

Nextion/releases, puis l’installer

dans le sous-répertoire libraries

de votre carnet de croquis, après

désarchivage/décompression. La

dernière version stable est la 0.7.0,

cel e-ci est relativement ancienne

(août 2015) et fait l’impasse sur

bon nombre de fonctionnalités

maintenant présentes dans l’édi-

teur. Mieux vaudra donc utiliser la

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Ajoutez un écran intel igent à vos projets Arduino version de développement direc-le fichier d’entête du code qui gère la communication avec le

tement téléchargeable à la racine

matériel (NexHardware.cpp), et on y ajoute :

du dépôt GitHub sous forme de

fichier ZIP et l’instal er de la même

#include <SoftwareSerial.h>

manière.

extern SoftwareSerial nexSerial;

Les deux bibliothèques ont

Cette modification a pour effet de dire au compilateur qu’un

une approche sensiblement dif-

objet nexSerial de type SoftwareSerial existe quelque part férente, mais il est relativement

(extern) dans le code, mais ce n’est pas une déclaration à aisé de porter un croquis de l’une

proprement parler. Tout ce que nous aurons à faire dans notre

vers l’autre. Le principal avantage

croquis sera de déclarer nexSerial avant toute utilisation de la de la bibliothèque de Dan est sa

bibliothèque (et nexInit() en particulier) :

capacité à utiliser un port série

de son choix. En effet, la biblio-

#include <SoftwareSerial.h>

thèque d’ITEAD est initialement

#include <Nextion.h>

prévue pour travailler facilement

SoftwareSerial nexSerial(4, 5); // RX, TX

sur Arduino Mega2560 et non

sur UNO. Deux ports série sont

Cette modification nous autorise alors à utiliser la biblio-

utilisés par défaut, un pour dialo-

thèque SoftwareSerial permettant de spécifier un port série

guer avec l’écran (Serial2) et un

géré de façon logiciel e en utilisant deux broches arbitraire-

pour les informations de mise au

ment choisies sur la carte Arduino (ici 4 et 5) pour communi-

point (Serial). Le problème avec

quer avec l’écran. Nous ne sommes plus coincés et pouvons

l’Arduino UNO est, bien entendu,

utiliser Serial, le port physique relié au moniteur série, de le fait que cette carte ne possède

façon tout à fait classique.

que Serial.

Note : Si vous souhaitez ne pas voir de messages de la

Il faut donc en principe, sui-

bibliothèque s’afficher sur le moniteur série, vous pouvez

vant les recommandations de la

également commenter la ligne « #define DEBUG_SERIAL_

documentation ITEAD, éditer le

ENABLE » dans NexConfig.h, et donc avoir la totale maîtrise fichier NexConfig.h pour changer

de Serial à la vitesse de votre choix (9600 bps dans le cas la définition des macros dbSerial

contraire). C’est bien entendu ce que j’ai fait.

(le moniteur) et nexSerial (pour

Notez au passage que le fait d’instal er les deux biblio-

l’écran). Une tel e modification est

thèques est une mauvaise idée. Les deux partageant un

relativement pénible, car norma-

fichier nommé Nextion.h, ceci peut créer une confusion au lement on n’édite pas directement

niveau de la compilation (le Nextion.h de NeoNextion étant une bibliothèque de cette façon en

utilisé avec la bibliothèque d’ITEAD). Je ne comprends pas

fonction de la carte utilisée.

pourquoi ce choix a été fait par Dan plutôt que de simplement

J’ai donc décidé de pousser

utiliser le nom de sa bibliothèque.

la modification plus loin pour

directement me libérer de cette

contrainte. Le fichier NexConfig.h

4. PREMIER EXEMPLE : L’ÉCRAN

est effectivement modifié, mais

COMME AFFICHEUR

afin de commenter toute la ligne

« #define nexSerial Serial2 »

Appréhender toutes les fonctions disponibles grâce à ces

en la faisant précéder de //. Ainsi,

écrans n’est pas vraiment possible en un unique article, en

nexSerial n’est plus défini du

particulier si je devais passer tous les types de composants en tout. On se tourne ensuite vers le

revue. Le plus simple est donc de créer un projet simple sur

fichier NexHardware.h, qui est

lequel vous pourrez construire vos expérimentations à venir.

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

HACKABLE MAGAZINE n°19

11

ÉQUIPEMENT

ÉCRAN LCD

Pour transférer une

interface dans un

écran Nextion, il

(sta = crop image) et on choi-

suffit de copier un

sira simplement la couleur

fichier sur une carte

microSD formatée en

et l’épaisseur de l’aiguil e.

FAT32, de la glisser

L’image d’arrière-plan doit être

dans l’emplacement

de la tail e de l’écran et cel e-

à l’arrière de l’écran

ci est rendue visible qu’à l’ar-

et de mettre ce

dernier sous tension.

rière du composant, comme

Automatiquement

un masque ou un pochoir. Il

l’interface sera

faut donc créer une image

copiée dans la

mémoire de l’écran

ayant le fond du cadran à la

et la carte ne sera

position exacte où sera placée

plus nécessaire.

la jauge dans l’interface.

Une fois tous ces composants

placés et configurés dans l’éditeur,

Notre première réalisation consistera donc à afficher des

il est possible de tester l’interface

données. La source sera un simple potentiomètre relié entre

en utilisant le bouton Debug. Ceci

la masse et la tension d’alimentation de la carte Arduino ainsi aura pour effet d’ouvrir une nou-que, pour la partie « mobile », à l’entrée analogique A0. Ceci

vel e fenêtre présentant l’interface

nous fournira une lecture sous la forme d’une valeur entre 0

tel e qu’el e se présentera sur le

et 1023 via analogRead().

matériel. Cette simulation pro-

Notez qu’il est impératif d’alimenter correctement. L’alimen-

voque la compilation de l’interface,

tation type micro USB doit être capable de fournir un courant

mais vous pouvez aussi utiliser

de l’ordre de 1,5A en 5V. Un connecteur est livré avec l’écran, le bouton Compile pour faire de

mais il sera également important de mettre les masses en

même. On passera ensuite par le

commun (Arduino/écran), ce qui nécessite généralement une

menu File et Open build folder pour petite modification du connecteur ou l’utilisation d’une platine ouvrir le répertoire contenant le

à essais.

fichier compilé, avec l’extension

.tft, dans le gestionnaire de

Pour afficher cette valeur sur l’écran Nextion, nous opte-

fichiers et on le copiera sur une

rons pour une seule page (0) sur laquel e nous plaçons (de carte microSD.

haut en bas) :

Cel e-ci doit ensuite être glis-

• Un composant Number avec l’identifiant 1 et le nom

sée dans l’emplacement à l’arrière

num0. On définira de simples couleurs de premier et

de l’écran et celui-ci est mis

arrière-plan, ainsi qu’une police importée pour l’occasion.

sous tension. Un message préci-

• Un composant Progress bar, identifiant 3 et le nom

sant que la carte a été détectée

barre0. Ici, nous pouvons choisir un remplissage par

est alors affiché et un délai de

image (sta = image) plutôt qu’avec une couleur. La tech-

quelques secondes est décompté

nique consiste à importer deux images de la tail e de la

avant la copie automatique dans

barre, une représentant la barre totalement inactive et

la mémoire flash. Une fois l’opé-

l’autre totalement active. La valeur de la barre sera uti-

ration terminée, on peut mettre

lisée, verticalement ou horizontalement, pour définir la

l’écran hors tension et retirer la

proportion de l’image d’avant plan (ppic) recouvrant cel e

carte microSD. L’interface est

d’arrière-plan (bpic). Ceci permet de créer des barres de

maintenant chargée et prête à être

progression très travaillées graphiquement.

utilisée.

• Un composant Gauge, identifié par 2 et nommé jauge0.

On se tourne alors vers le cro-

Là encore, une image est utilisée comme arrière-plan

quis Arduino :

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Ajoutez un écran intel igent à vos projets Arduino

#include <SoftwareSerial.h>

#include <Nextion.h>

// port série sur broches 4 et 5

SoftwareSerial nexSerial(4, 5); // RX, TX

// composants de l'interface

NexNumber num0 = NexNumber(0, 1, "num0");

NexGauge jauge0 = NexGauge(0, 2, "jauge0");

NexProgressBar barre0 = NexProgressBar(0, 3, "barre0");

// configuration

void setup(void) {

Serial.begin(115200);

// cette fonction retourne vrai si l'écran répond

if(nexInit()) {

Serial.println("setup ok");

} else {

Serial.println("setup error !!!");

while(1){;}

}

}

// valeur précédente

int pval = 0;

// boucle principale

void loop(void) {

// lecture analogique et transposition de valeurs

int val = map(analogRead(A0),0,1023,0,180);

// on ne change l'interface que si la valeur change

if(val != pval) {

// changement de la barre de progression

barre0.setValue(map(val,0,180,0,100));

// changement de la jauge

jauge0.setValue(val);

// changement du nombre affiché

num0.setValue(val);

// mise à jour

pval=val;

}

// pause

delay(20);

}

J’utilise ici la bibliothèque originale modifiée par mes soins, c’est pourquoi il est nécessaire de déclarer nexSerial en tout début de croquis afin d’utiliser les broches 4 et 5 en guise de port série logiciel.

Pour utiliser les composants définis dans l’interface, on commence par déclarer des variables les représentant dans notre code. Les constructeurs prennent en argument l’identifiant de la page sur laquel e ils se trouvent, leur propre identifiant ainsi que leur nom. Le croquis, assisté de la bibliothèque d’ITEAD, ne crée pas les composants, mais utilise ces informations pour la communication série avec l’écran.

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

HACKABLE MAGAZINE n°19

13

ÉQUIPEMENT

NEXTION

Là, parcourez Class et Class List

pour obtenir une liste de types

correspondant, en principe, aux

composants utilisables dans

la dernière version de l’éditeur

d’interfaces.

5. SECOND

EXEMPLE :

UN ÉCRAN POUR

CONTRÔLER

UN MONTAGE

Même si la présentation de don-

nées peut être très intéressante en

comparaison à ce qu’il est possible

de faire avec un simple afficheur

TFT, la véritable richesse des

écrans Nextion s’exprime surtout

Ces écrans se pilotent à

dans l’utilisation inverse : réaliser

l’aide d’une simple liaison

La fonction setup() initialise la communi-

une interface pour piloter un mon-

série à 9600 bps. Une

petite modification de

cation avec le moniteur série ainsi que cel e

tage. Il est possible de composer

la bibliothèque Arduino

avec l’écran (nexInit()) et teste un éven-

une interface avec toutes sortes

officielle est nécessaire

tuel silence de sa part. Tout se passe dans

d’éléments : réglettes, boutons,

pour faciliter les choses

loop() où nous mesurons la tension sur la

cases à cocher, etc., permettant de

avec une carte Arduino

UNO ne disposant que

broche A0 et réutilisons cette valeur, mise à

remplacer les boutons physiques,

d’un seul port de ce type,

l’échelle (map()), pour déterminer la valeur

les claviers, les potentiomètres

déjà relié au moniteur

de chaque composant, via leur méthode

et les interrupteurs généralement

série via USB. Cette

setValue(). Afin de minimiser la quantité de

utilisés.

modification consiste

à utiliser SotfSerial et

données circulant, nous ne mettons à jour

Pour cette réalisation, nous

donc permet de choisir

ces valeurs qu’en cas de changement. Ceci

arbitrairement les broches

al ons conserver deux éléments

n’est pas important pour la valeur numérique

pour connecter l’écran.

de l’interface précédente, la

affichée ou la barre de progression, mais

barre de progression et la valeur

évite un scintil ement des plus désagréables

numérique affichée, mais al ons

sur la jauge.

supprimer la jauge et la rempla-

La valeur des composants utilisés n’est

cer par :

pas le seul attribut qu’il vous est possible de

• deux boutons « b0 » et « b1 »

changer depuis votre croquis. Vous pourrez

trouver une documentation complète de

possédant respectivement les

chaque méthode pour chaque type de com-

identifiants 3 et 4 et marqués

posant directement dans le répertoire de la

des textes « - » et « + » ;

bibliothèque. Il vous suffit d’ouvrir, avec votre

• un slider (réglette/glissière)

navigateur, le fichier index.html se trouvant

permettant de régler une valeur

dans le sous-répertoire doc/Documentation.

entre 0 et 255 (« maxval »).

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Ajoutez un écran intel igent à vos projets Arduino Il est important de cocher, pour ces trois éléments, la case Send Component ID sur l’onglet Touch

Release Event dans la partie Event de l’éditeur. Ceci aura pour effet d’envoyer un message contenant l’identifiant du composant lors du « relâché », via la liaison série entre l’écran et l’Arduino.

Ceci constituera un événement qui sera pris en compte dans notre croquis.

Côté Arduino, nous nous contenterons de connecter une led et sa résistance de 470 ohms, entre la broche 6 et la masse. L’intensité lumineuse de la led sera l’élément contrôlé en PWM par l’interface.

Commençons par la fin cette fois puisque la fonction loop() ne saurait être plus simple : void loop(void) {

nexLoop(nex_listen_list);

}

Cel e-ci ne fait qu’appeler à répétition nexLoop() chargée de gérer les événements et prenant en argument une liste de composants « à écouter ». Une liste qui est définie en début de croquis : NexTouch *nex_listen_list[] =

{ &b0,

&b1,

&h0,

NULL

};

Nous trouvons ici trois pointeurs (caractère & ) vers les objets, dans le croquis, qui correspondent aux composants pouvant générer des événements :

NexNumber num0 = NexNumber(0, 1, "num0");

NexProgressBar barre0 = NexProgressBar(0, 3, "barre0"); NexButton b0 = NexButton(0, 3, "b0");

NexButton b1 = NexButton(0, 4, "b1");

NexSlider h0 = NexSlider(0, 5, "h0");

nexLoop() va être à l’écoute du port série et capter tout message signalant une action sur ces composants. Il dispatchera ensuite les événements sous la forme d’appels à ces fonctions callback, attachées dans la fonction setup() :

// configuration

void setup(void) {

pinMode(6, OUTPUT);

Serial.begin(115200);

// cette fonction retourne vrai si l'écran répond

if(nexInit()) {

Serial.println("setup ok");

} else {

Serial.println("setup error !!!");

while(1){;}

}

// configuration des fonctions à appeler

b0.attachPop(b0Callback);

b1.attachPop(b1Callback);

h0.attachPop(h0Callback);

}

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

HACKABLE MAGAZINE n°19

15

ÉQUIPEMENT

ÉCRAN LCD

Ceci étant fait, nous n’avons plus qu’à écrire les fonctions en L’ergonomie générale est assez

question, toutes trois assez similaires. Voici par exemple la pre-perturbante sur bien des aspects.

mière, appelée automatiquement lorsque le premier bouton sur

À titre d’exemple et en plus des

l’interface est relâché :

points déjà abordés dans cet

article, ce sont surtout des petites

// fonction lancée lors du relâchement de b0

choses qu’on prend généralement

void b0Callback(void *ptr) {

uint32_t val;

pour acquises qui manquent à

num0.getValue(&val);

l’appel : une carence en homo-

if (val >= 5)

généité dans la présentation des

val -= 5;

options, le fait de ne pouvoir ouvrir

else

val = 0;

qu’un projet à la fois, l’absence de

barre0.setValue(map(val,0,255,0,100));

support de différentes langues,

num0.setValue(val);

l’absence de guides, de gril es ou

h0.setValue(val);

de tout autre système d’aligne-

analogWrite(6, val);

ment digne de ce nom, l’impossi-

}

bilité de cliquer-glisser, l’absence

Cel e-ci va lire la valeur actuel e du composant num0 (la valeur de zoom pour un placement des

numérique affichée à l’écran) et, sous condition, la décrémenter composants « au pixel près », etc.

avant de mettre à jour cette même valeur, en retour, sur l’écran, En termes de fonctionnalités

mais également en impactant l’intensité de la led.

des écrans eux-mêmes, qui sont

Comme vous pouvez le voir, le croquis se limite à l’écriture des liées par définition avec l’éditeur

fonctions callback et il devient possible de disposer d’une interface et les bibliothèques, on regrettera

travail ée tout en se concentrant presque uniquement sur l’aspect également quelques points. C’est

fonctionnel côté Arduino. Il vous sera possible d’utiliser des

le cas, par exemple, de l’absence

images pour vos interfaces, exactement comme dans l’exemple

de gestion de la transparence et,

précédent et même de permettre la saisie de valeurs et de texte.

quitte à ajouter la fonctionnalité,

En jouant avec les composants et leur configuration, il deviendra une transparence ajustable au

un jeu d’enfant, par exemple, de définir une couleur pour un ruban même titre que d’autres attributs

de leds WS2812b ou encore d’ajuster la position d’un servomoteur.

des composants. Il pourrait être

très intéressant de pouvoir faire ap-

paraître un composant en fonction

6. TOUT N’EST PAS PARFAIT,

d’une valeur alpha comme avec

LOIN DE LÀ

un logiciel de retouche d’images

ou des bibliothèques graphiques

Avant toutes choses, précisons que malgré les critiques que je

comme il en existe par ail eurs

vais faire, les écrans Nextion permettant de finaliser rapidement (Evas, EFL, Cairo, SDL, etc.).

des projets qu’il aurait été autrement plus difficile à réaliser à l’aide De nouveaux types de com-d’un simple afficheur ou écran LCD TFT standard. Le simple cas

posants sont ajoutés tantôt au

de la barre de progression texturée ou de la jauge représenterait fil de l’évolution des versions de

un travail considérable du point de vue graphique. Les écrans

l’éditeur. Il serait ainsi très appré-

Nextion apportent donc effectivement une solution très intéres-

ciable de voir ajouter quelque

sante pour créer des interfaces élaborées et de qualité. Mais. .

chose tenant du croisement de

Il serait presque malhonnête d’affirmer que l’éditeur d’interfaces la barre de progression et de la

est une application finie. Le numéro de version lui-même, 0.47, jauge, comme une sorte de barre

est relativement explicite et le fait que son développement soit de progression circulaire ou un

entièrement du fait d’ITEAD ne permet pas une évolution rapide.

camembert. Et ceci nous amène à

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Ajoutez un écran intel igent à vos projets Arduino

un autre point gênant : l’absence

d’ouverture du logiciel et des don-

nées qu’il produit.

En effet, si une solution de dé-

veloppement était disponible, ou

que les sources du logiciel étaient

accessibles (ou le format des

données documenté), un déve-

loppeur pourrait créer et proposer

des composants supplémentaires.

On pourrait même imaginer des

greffons s’ajoutant au logiciel

Une fois l’interface

permettant de compléter ainsi la

chargée dans

boite à outils disponible avec des

événements au croquis (événements) mais, dans le

la mémoire de

composants non officiels. Le pro-

même temps, où le croquis doit pouvoir envoyer des

l’écran, l’affichage

tocole de communication série est

ordres à l’écran. Le tout de façon asynchrone.

et les interactions

sont gérés de

documenté, mais ceci n’est mal-

Le problème qui se pose est qu’en utilisant n’im-

façon totalement

heureusement pas suffisant pour

porte quel e méthode de la bibliothèque dans loop(),

indépendante du

permettre ce type de participation

en plus de l’appel à

croquis Arduino.

nexLoop(), nous introduisons

communautaire.

Celui-ci n’a alors pas

une désynchronisation. En donnant un ordre à l’écran,

à s’occuper de la

Enfin, nous avons un problème

nous vidons le tampon où se trouvent les données de

gestion graphique,

mais uniquement de

que bon nombre d’utilisateurs ren-

communication. Si à cet instant celui-ci contient un

la transmission des

contrent tôt out tard et qui revient

message provenant de l’écran (comme une utilisation

données à afficher

régulièrement sur les forums : la

du bouton pour débrail er le contrôle), le contenu est

et du traitement

difficulté de faire cohabiter la ges-

perdu. Dans la pratique, on peut effectivement passer

des événements

liés à l’utilisation de

tion d’interface avec le pilotage de

du contrôle par boutons au potentiomètre, mais on ne

l’interface.

l’affichage. Nos deux exemples

peut pas faire l’inverse. Le croquis passe son temps à

abordent deux aspects pratiques

donner une nouvel e valeur à la barre de progression,

des écrans Nextion : l’Arduino qui

effaçant tout message en attente dans le sens oppo-

utilise les composants pour afficher sé. Il est possible de contourner ce comportement des informations, et inversement,

avec le composant « Timer », mais le résultat n’est ni

l’interface graphique de l’écran qui

idéal ni totalement efficace.

permet de piloter des fonctionnali-

Notez que ceci n’est pas réel ement un bogue,

tés gérées par la carte Arduino.

mais plutôt une conséquence inévitable d’un choix

Si nous prenons un cas simple

technique avec lequel il faut composer en s’interdi-

mélangeant ces deux concepts,

sant simplement d’appeler n’importe quelle fonction

les problèmes apparaissent : une

qui agit sur l’écran en plus de nexLoop(), en dehors

interface présentant une barre de

des fonctions callback bien sûr. Pour certains projets

progression, deux boutons pour

ceci peut rapidement devenir un casse-tête.

augmenter/diminuer la valeur et

Malgré tous ces points, je considère cependant

un troisième, à deux états, pour

que les écrans Nextion restent très pratiques et nous

débrail er ce contrôle et ajuster la

en reparlerons sans doute pour aborder des points et

barre de progression via un poten-

des fonctionnalités spécifiques les concernant, dans

tiomètre relié à l’Arduino. On se

le cadre de projets divers. Qui sait, avec le temps, les

retrouve ici dans une situation où

désagréments seront peut-être corrigés, voire l’édi-

l’écran doit pouvoir envoyer des

teur d’interface passé en open source. .. DB

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

HACKABLE MAGAZINE n°19

17

EN COUVERTURE

CONCENTRATEUR LORAWAN

DÉCOUVREZ

LORAWAN ET CRÉEZ

VOTRE PASSERELLE /

CONCENTRATEUR

Denis Bodor

LoRa et LoRAWAN sont des termes qui apparaissent de plus en plus fréquemment dès lors qu’on parle de l’Internet des objets (IoT). C’est l’un des deux standards, avec Sigfox, qui semble définitivement s’installer dans ce domaine. Nous allons explorer ici cette technologie et la mettre en pratique, brique par brique, car l’étendue de choses à comprendre, faire et maîtriser à propos de LoRaWAN est à la mesure des avantages qu’on peut en tirer : impressionnants.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Découvrez LoRaWAN et créez votre passerel e / concentrateur

Pour comprendre étendu. À l’inverse d’un LAN (Local Area Network), comme l’intérêt de LoRaWAN,

celui formé par un réseau Ethernet par exemple, un WAN

il faut avant tout

couvre une vaste zone géographique. On parle ici d’une

constater les limita-

échel e al ant de la vil e à la planète entière en passant par

tions des technolo-

les régions et les pays. Un exemple de WAN est le réseau

gies existantes dans le domaine

téléphonique ou 3G/4G permettant à n’importe quel péri-

des objets connectés. Je pense

phérique compatible (et un contrat auprès d’un opérateur)

qu’il n’est pas nécessaire de détail-

de se connecter et d’échanger des données avec tous les

ler outre mesure le premier point

autres périphériques du réseau.

important : la nécessité d’une

En examinant les technologies utilisées dans d’autres

communication sans fil. Il est

domaines, on constate que rien ne fait totalement l’affaire :

désormais clairement entendu qu’il

le Wifi est une technologie LAN et très énergivore, le

n’est pas souhaitable, acceptable

Bluetooth concerne les liaisons point à point faible dis-

ou possible, dans de nombreux

tance, ZigBee a une consommation réduite, mais une

cas, de « tirer » des câbles pour

portée d’une dizaine de mètres seulement, etc. Une nou-

connecter des objets communi-

vel e technologie était donc nécessaire avec un cahier des

cants (même si dans certains cas,

charges précis : faible consommation, sans fil, portée de

en ce qui me concerne, cela reste

plusieurs kilomètres, bas débit, architecture WAN, com-

l’approche par défaut).

munications sécurisées. . L’une des technologies mainte-

On parle donc ici de techno-

nant disponibles est LoRaWAN, l’objet du présent article.

logies sans fil et la gamme de

standards, protocoles et normes

est relativement conséquente,

1. LORAWAN

mais aucun n’est réel ement

LoRaWAN est un protocole initialement développé par

adapté à la construction d’un WAN la société grenobloise Cycléo après son rachat par l’amé-

(Wide Area Network) ou réseau

ricain Semtech (ou SMTC Corporation) en 2012, utilisant

Le projet « The Things

Network » (TTN) est né à

Amsterdam, rien d’étonnant

donc qu’il y ait une très forte

densité de concentrateurs

LoRaWAN dans cette

région. Comme vous pouvez

le constater, la France

est encore assez pauvre

en installations pour le

moment, mais de nouveaux

concentrateurs sont activés

tous les jours. Nul doute que

tout ceci évoluera, peut-être

même grâce à vous...

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

HACKABLE MAGAZINE n°19

19

EN COUVERTURE

CONCENTRATEUR LORAWAN

une technologie de communication radio appelée LoRA

de montages reposant sur

pour Long Range (« longue portée »). LoRaWAN permet

l’utilisation d’un module, d’un

de créer ce qu’on appel e un LPWAN ou Low-Power Wide-

shield ou d’un hat LoRa.

Area Network, un réseau étendu à faible consommation

• Les passerel es, gateways ou

énergétique, permettant de connecter des objets communi-

concentrateurs se trouvent à

cants (IoT). Attention cependant, il ne s’agit pas ici de créer l’autre bout de la communica-quelque chose comme un réseau Wifi ou 4G, l’objectif est

tion radio LoRa et sont de plus

une communication longue portée, à bas débit et pour des

connectés à un serveur inter-

échanges succincts. N’espérez pas transmettre des images

net d’un opérateur LoRaWAN,

ou un flux de données, LoRaWAN n’est pas fait pour cela.

via une liaison Ethernet, Wifi,

Comprenez également que LoRaWAN n’est pas une tech-

3G ou un autre réseau inter-

nologie de communication (ça, c’est LoRa), mais une manière

médiaire (dit backhaul). Le rôle

de construire une architecture complète, en utilisant des

de ces concentrateurs est de

protocoles bien précis, permettant à des objets connectés de

faire simplement transiter les

communiquer à travers une liaison radio et surtout via Inter-

données transmises via LoRa

net. La technologie populaire la plus proche de LoRaWAN

sur Internet en direction ou

permettant de comprendre cette notion est le réseau de télé-

depuis le serveur. Un concen-

phonie mobile 3G/4G/GPRS. Ce réseau ne se résume pas

trateur n’utilise normalement

à un smartphone et une antenne (base station), mais intègre

pas le même matériel qu’un

des éléments invisibles pour le commun des mortels et en

nœud puisque le standard

particulier toute la partie se trouvant derrière les antennes et précise qu’il doit être capable

le contrôleur du réseau d’antenne (RNC).

de supporter au minimum

Il est possible d’utiliser LoRa sans LoRaWAN, pour une liai-

8 connexions simultanées.

son entre deux points, mais tout l’intérêt est de permettre ici à Il est possible de créer un

des montages d’envoyer et recevoir des données via Internet,

concentrateur sur la base d’un

et non simplement entre eux. Il n’y aurait pas de réseau dans

module LoRa ne supportant

le cas contraire et encore moins de réseau étendu.

qu’une communication à la

fois (c’est moins cher), mais ce

L’architecture LoRAWAN est constituée de plusieurs

n’est alors pas un vrai concen-

éléments :

trateur LoRaWAN au sens

• Les nœuds, nodes ou end points sont les objets connec-

strict du terme. On appel e nor-

tés devant transmettre des informations (uplink) ou rece-

malement ce type d’instal ation

voir des ordres (downlink).

un forwarder (relayeur).

Il peut s’agir de produits

manufacturés, mais aussi,

et surtout, dans notre cas,

Il faut faire très attention en achetant votre

matériel LoRa et LoRaWAN, car sur les trois

gammes de fréquences utilisées seules deux

peuvent l’être en Europe (915 Mhz ne fait pas

partie des bandes ISM ici). Le choix des

868 Mhz est donc presque obligatoire chez

nous, puisque les 433 Mhz sont déjà très

fortement saturés et la puissance utilisable

50 fois inférieure à la bande des 868 Mhz.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Découvrez LoRaWAN et créez votre passerel e / concentrateur

Le produit utilisé

pour installer notre

concentrateur

LoRaWAN provient

de chez SeeedStudio.

Il comprend un

module concentrateur

LoRaWAN RisingHF,

un adaptateur pour

Raspberry Pi, une

Raspberry Pi 3 et

une carte Seeeduino

LoRaWAN pour créer

un node, ainsi que

toute la connectique

nécessaire. Deux points

noirs cependant : le prix

(~340€) et l’adaptateur

d’alimentation au

format US.

• Le serveur LoRaWAN, ou ser-

ment sait quoi faire des données et, généralement

veur réseau, recueil e et gère

les représente de façon adaptée. Les applications

les communications ayant

ont connaissance de la liste des nodes qui leur sont

transitées via les concentra-

associés et du type de données à prendre en charge.

teurs. C’est également lui qui

L’application est connectée avec le serveur LoRaWAN

prendra en charge la sécurité,

d’une manière qui est propre au serveur utilisé. Il peut

autorise ou non un node pour

s’agir d’un programme utilisant une interface de pro-

une application donnée et

grammation (API) dédiée, une application construite

déchiffrera une partie des

avec un kit de développement (SDK) ou, solution sans

données. Ce dernier point est

doute la plus simple, d’une intégration avec un autre

très important, car il assure la

service chargé de stocker et présenter les données

sécurité du réseau. Un node

(comme myDevices Cayenne par exemple).

LoRaWAN chiffre les données

et s’authentifie auprès du ser-

En tant qu’utilisateur/développeur/bidouil eur vous pou-

veur. Ce faisant, le concentra-

vez, dans l’absolu, construire intégralement un réseau

teur n’a aucune connaissance

LoRaWAN en gérant chacun de ces éléments, mais cela ne

des données qui transitent, il

représente pas vraiment d’intérêt sauf si vous êtes capable

ne fait que relayer l’informa-

d’instal er des concentrateurs partout. L’idée est justement

tion chiffrée. Ceci permet aux

de mettre en place un réseau massif permettant à tous les

nodes d’utiliser n’importe quel

objets connectés de communiquer dans une architecture

concentrateur en toute sécuri-

LoRaWAN.

té, quel e que soit l’identité de

Les opérateurs de téléphonie comme Orange et Bou-

celui qui le met à disposition.

ygues (Objenious) l’ont bien compris et ont d’ores et déjà

• Le serveur d’application, ou

entrepris de déployer leur réseau LoRaWAN. Orange fait

une application, représente

d’ailleurs partie de l’alliance LoRa depuis l’année dernière

la destination finale des don-

et rejoint ainsi Bouygues Telecom, IBM, Bosch, Swiss-

nées envoyées par un node

com ou encore Schneider dans cette association ayant

ou, dans le sens opposé, la

pour objectif de standardiser LoRaWAN, promouvoir son

source de contrôle. Cet élé-

utilisation et, bien entendu, procéder à des certifications

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

HACKABLE MAGAZINE n°19

21

EN COUVERTURE

CONCENTRATEUR LORAWAN

tout le monde d’utiliser le réseau

pour leurs objets connectés.

Cette dernière année, bon

nombre de fournisseurs de

service LoRaWAN (ou network

service providers) ont vu le jour.

On peut citer, par exemple Loriot,

Lace, Senetco, ThingPark ou

encore UbiQ. Certains sont par-

tiel ement communautaires tout en

imposant des restrictions dans le

cadre d’une utilisation gracieuse.

C’est le cas par exemple de Loriot,

permettant l’utilisation de leur

serveur LoRaWAN pour connec-

ter un concentrateur ou encore

d’utiliser ce même serveur via un

L’assemblage du

concentrateur qui y est connecté.

concentrateur est

d’équipements. Bien entendu, bénéficier des services

Un abonnement payant devient

un jeu d’enfant et

c’est là l’un des

LoRaWAN futurs d’un tel opérateur impliquera très cer-

rapidement nécessaire dès lors

avantages d’un kit

tainement la souscription d’un abonnement, exactement

qu’on souhaite utiliser certaines

par rapport à l’achat

comme pour la téléphonie mobile.

fonctionnalités comme l’envoi de

d’un module seul

données du serveur vers un node

(plus de salade

Il existe cependant une alternative puisque, contraire-

(downlink), l’utilisation de plus

de câbles). Notez

ment à la 3G, les fréquences radio utilisées par LoRa et

l’alimentation de

d’une application, l’accès à l’inter-

donc pour toute la partie sans fil de LoRaWAN ne néces-

l’ensemble se

face de programmation (API) ou

faisant par la carte

sitent pas de licence d’utilisation spécifique. Les équi-

encore l’utilisation du mécanisme

adaptatrice du

pements LoRa/LoRaWAN utilisent en effet les bandes

de sécurité le plus sûr (OTAA et

module qui fournit

de fréquences ISM (industriel, scientifique et médical)

ensuite le courant

non ABP).

de 433 MHz, 868 MHz et 915 MHz. En Europe, 915 Mhz

à la Pi, et non

l’inverse.

n’est pas dans les bandes ISM et ne doit pas être utilisé.

Heureusement pour nous, il

Les équipements se basent donc tous sur 868 Mhz, car

existe une autre solution : The

la bande de 433 Mhz est largement « pol uée » par toutes

Things Network.

sortes d’équipements radio et la puissance (PAR) est

limitée à 10 mW (contre 500 mW en 868 Mhz).

2. THE THINGS

Ce choix de 868 Mhz est un point important, car lors

de l’achat de votre matériel, vous devrez choisir la fré-

NETWORK

quence sur laquel e il fonctionne. La bande des 915 Mhz

ne peut pas et ne doit pas être utilisée en Europe.

The Things Network ou TTN

pour les intimes est un véritable

L’utilisation de ces « fréquences non règlementées »

effort communautaire reposant sur

(terme courant, mais faux, puisque justement leur uti-

trois principes simples :

lisation fait l’objet d’une règlementation qui décrit leur

« libre » utilisation) permet à tout un chacun de mettre

• vos données sont vos données ;

en œuvre son équipement LoRaWAN. Il est donc pos-

• neutralité du net, toutes les

sible d’avoir une approche communautaire où des parti-

données sont traitées de

culiers instal ent leur concentrateur et permettent ainsi à

façon égale ;

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Découvrez LoRaWAN et créez votre passerel e / concentrateur

• tout est open source (dispo-

de naissance de TTN, a été couverte à l’aide d’une dizaine

nible via GitHub).

de concentrateurs (même s’il y en a maintenant plus d’une

TTN a vu le jour à Amsterdam du cinquantaine).

fruit du financement participatif et

La France est un peu à la traîne de ce point de vue en

fonctionne de façon décentralisée.

comparaison de l’Al emagne, la Suisse, la Belgique et les pays

Un ensemble de serveurs réseau

nordiques, mais qui sait, peut-être que cet article changera

est disponible, géré indépendam-

les choses. Vous pouvez vous informer très simplement sur la

ment de toute structure commer-

présence d’un concentrateur connecté à TTN en pointant votre

ciale. TTN gère également l’aspect

navigateur sur https:/ www.thethingsnetwork.org/map.

application en permettant une

Comme vous pouvez le voir, il nous reste encore du travail,

visualisation des données reçues

même si 24 concentrateurs sur Paris et 16 sur Grenoble est un

des nodes, une action sur ces der-

bon début...

niers, mais également une solution

TTN fournit donc les serveurs réseau et des solutions

d’intégration en faisant office de

pour l’intégration. Vous, en tant qu’utilisateur, pouvez intégrer relais vers une solution de stockage

cette plateforme de deux manières : en tant que simple client

ou encore quelque chose de plus

si vous disposez d’un concentrateur à portée, ou en instal ant

avancé comme myDevice/Cayenne. un nouveau concentrateur pour couvrir une nouvel e zone.

Il est également possible de créer

Les deux ne sont pas liés, ceci ne fonctionne pas comme la

sa propre application en Go, Java,

couverture en point d’accès Wifi Fon où les personnes parta-

Node.js ou Node-RED puisque TTN geant leur connexion peuvent utiliser le réseau gratuitement fournit une interface de développe-et les autres doivent payer. Ici, rien ne vous empêche d’utili-

ment (API) relativement complète

ser un concentrateur pour vos nodes sans pour autant devoir

et, bien entendu, totalement open

en instal er un.

source.

Enfin, vous pouvez également participer à TTN en créant

Cette approche très ouverte

une communauté afin de regrouper les utilisateurs locale-

explique sans le moindre doute la

ment, dans une vil e par exemple, pour échanger des infor-

popularité de cette solution auprès

mations, partager ses expériences, apporter de l’aide aux

des hobbyistes comme nous,

débutants ou encore organiser des rencontres, etc. La com-

mais TTN va plus loin et est en

munauté de Paris, par exemple, regroupe 40 personnes et 8

mesure de fournir une plateforme

concentrateurs, la vil e est presque couverte, mais, là encore, tout aussi bien pour des particu-il reste du travail. Pour voir si une communauté existe près de liers, des entreprises ou même

chez vous, visitez simplement la carte au bas de cette page

des vil es. L’Internet des objets et

https://www.thethingsnetwork.org/community.

LoRaWAN ne se limitent pas à la

capacité à déclencher à distance

une machine à café ou à obtenir

3. CRÉONS NOTRE

régulièrement la température dans

son salon. Les serveurs réseaux

CONCENTRATEUR LORAWAN :

TTN associés à une couverture

raisonnable par les concentra-

LE MATÉRIEL

teurs offrent également bien des

Certes, j’aurai pu commencer par le plus aisé en détail ant

services pour une municipalité

la mise en route d’un node sur base Arduino, mais. . non. Ins-

par exemple, et TTN ne fait pas

tinctivement, en me penchant sur loRaWAN et en découvrant

de distinction à ce niveau, ni dans

TTN, je n’étais pas à l’aise à l’idée d’utiliser ces ressources, un sens ni dans l’autre. La vil e

un concentrateur proche et les serveurs réseau TTN sans

d’Amsterdam par exemple, lieu

avant tout apporter ma petite pierre à l’édifice.

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

HACKABLE MAGAZINE n°19

23

EN COUVERTURE

CONCENTRATEUR LORAWAN

Colmar, ma bien aimée vil e, ne disposant pas

d’objets massifs comme des

d’un seul concentrateur, j’aurai pu tenter d’en utili-

bâtiments, des collines, des

ser un se trouvant à Bâle ou encore plus loin. Ceci

bois denses, ainsi que par

peut paraître surprenant, mais LoRa porte bien

d’éventuelles interférences

son nom et, avec une vue dégagée en direction

électromagnétiques comme

d’un concentrateur donné, la portée peut être très

cel es générées par les lignes

impressionnante. Andreas Spiess (le gars avec

à haute tension, les pylônes

l’accent suisse sur YouTube) a réussi à envoyer

métal iques, etc. La distance

des données au concentrateur du Weissenstein

de communication s’en trouve

(1291m d’altitude tout de même), depuis le château

grandement réduite et, bien

du Hohenbourg au sommet du Schlossberg (553m

entendu, une ligne d’horizon

d’altitude) à la frontière nord du Bas-Rhin. . à

clairement dégagée permet

201 kilomètres !

une portée maximum. On

La carte adaptatrice

présente une « copie »

Cette incroyable distance de communication en

parle également tantôt de zone

des broches de la Pi

LoRa reste toutefois exceptionnel e et des condi-

rurale pour désigner une com-

permettant ainsi de

tions spécifiques doivent être réunies pour y arri-

munication en conditions LOS,

connecter différents

ver. En temps normal les distances se mesurent

et la portée peut normalement

montages. Ceci reste

cependant assez

en kilomètres ou en dizaines de kilomètres, mais

atteindre une vingtaine de

secondaire, en dehors

pas en centaines. Il faut distinguer deux types de

kilomètres ou plus, en fonction

de la connexion d’un

conditions lorsqu’on parle de la portée de LoRa (ou

de l’équipement utilisé.

adaptateur USB/série,

de tout autre système radio longue distance) :

puisque dans la quasi-

• NLOS (Non Line Of sight) pour

totalité des installations,

• LOS (Line Of Sight) pour « en ligne de mire »

la condition inverse, avec une

un tel équipement ne

ou « en vue dégagée ». La propagation des

vue non dégagée donc. Il s’agit

fait qu’une chose et une

seule : concentrateur

ondes radio est impactée par la présence

ici d’une communication dans

LoRaWAN.

un environnement urbain avec

un nombre important de bâti-

ments limitant la propagation

des signaux, parfois drastique-

ment. Dans ces conditions,

une distance d’une paire de

kilomètres tout au plus peut

être envisagée, moins si le

concentrateur ou le node sont

en intérieur et/ou au sol.

Le peu de concentrateurs pré-

sents en France et une absence

totale dans ma vil e sont donc

une excel ente raison de procé-

der à une première instal ation.

Il existe plusieurs solutions pour

ce faire : acquérir un équipement

tout fait, opter pour un module ou

une carte (IMST iC880A, Multi-

tech mCard-LoRa, Cisco LoRa

card, Chistera-Pi, etc.) ou trouver

un kit complet.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Découvrez LoRaWAN et créez votre passerel e

DISPONIBLE DÈS LE 14 JUILLET

LINUX PRATIQUE HORS-SÉRIE N°39 !

MÉMO

LIGNE DE

COMMANDES

ions.

odificat

outes me t

éserve d

ous rS

NE LE MANQUEZ PAS

CHEZ VOTRE MARCHAND DE JOURNAUX ET SUR :

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

http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°19

25

pub_magazines_juin2017.indd 1

22/06/2017 15:57

EN COUVERTURE

XXXXX

ACTUELLEMENT DISPONIBLE

LINUX PRATIQUE N°102

J’APPRENDS À PROGRAMMER

AVEC PROCESSING !

NE LE MANQUEZ PAS

CHEZ VOTRE MARCHAND DE JOURNAUX ET SUR :

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

http://www.ed-diamond.com

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

pub_magazines_juin2017.indd 4

21/06/2017 15:01

Découvrez LoRaWAN et créez votre passerel e / concentrateur Pourquoi pas Loriot ?

Le kit de SeeedStudio était

Bien que la carte concentrateur IMST iC880A soit

livré avec une carte microSD

très populaire et son utilisation avec une Raspberry Pi

contenant un système Raspbian

largement documentée, j’ai préféré opter pour une autre

équipé des éléments logiciels

approche en jetant mon dévolu sur le kit LoRaWAN

nécessaires pour rejoindre le

Gateway de SeeedStudio. Celui-ci comprend :

réseau Loriot. Cette plateforme

• un module concentrateur RHF0M301 de RisingHF

propose un usage gratuit, appe-

construit autour d’un circuit intégré Semtech

lé « Tier Community Network »,

SX1301,

mais celui-ci est grandement

restreint.

• un adaptateur RHF4T002 permettant la connexion

du module à une Raspberry Pi,

Toutefois, le plus important à

mes yeux était l’absence de

• une antenne SMA à brancher au module,

réelle ouverture. Le téléchar-

• une Raspberry Pi 3 standard,

gement de l’image de la carte

• une carte microSD SanDisk de 8 Go classe 10, avec

SD par exemple, nécessite un

enregistrement en ligne (??),

une version préinstal ée de Raspbian intégrant tout

la documentation de RisingHF

le nécessaire pour créer un concentrateur Loriot,

concernant son matériel est

• un adaptateur USR/série pour la connexion console,

réduite et ne parle que de Loriot,

• un câble USB de 20 cm pour l’alimentation de la Pi

les sources du serveur réseau

à partir d’adaptateur pour le module (à la manière de

ne sont pas disponibles, le fo-

l’écran officiel Pi),

rum est d’une vacuité effrayante,

etc. Ce n’est pas ce que j’appelle

• un câble USB de 1m pour l’alimentation,

un fonctionnement ouvert et un

• un adaptateur secteur 5V/2A pour l’alimentation,

effort communautaire.

compatible ~240V, mais avec un connecteur US,

Après un rapide essai de Loriot,

• un câble Ethernet de 2 m,

facilité par la préconfiguration

• et une carte Seeeduino LoRaWAN (microcontrôleur

du système, mais ne pouvant

ATSAMD21G18 comme l’Arduino Zero) avec GPS

pas tester l’ensemble des fonc-

pour créer votre premier node.

tionnalités, j’ai donc tout aussi

rapidement réutilisé la carte SD

Le tout dans une jolie boite pour quelques 340€. Vous

pour une installation fraîche

l’avez compris, on parle ici d’un budget relativement

de Raspbian. Je cherche tou-

conséquent. Ce kit proposé par Seeed est une décli-

jours comment supprimer le

naison personnalisée du « RisingHF IoT Dicovery »,

compte crée pour l’occasion

comprenant quelques éléments supplémentaires et/ou

sachant qu’en contactant le

différents. Cela reste une grosse somme, certes, mais

support par mail un nouveau

tout arrive presque clé en main, prêt pour être assemblé.

compte est automatiquement

créé sur le « Support Desk » et

Les solutions n’incluant ni Pi, ni nodes ou shield pour

une demande de confirmation

créer un node, comme la carte IMST iC880A, nécessitent

s’en suit... Tout cela pour que le

des achats complémentaires, l’immobilisation d’une Pi,

support me réponde que la sup-

et une interconnexion entre la Pi et le module LoRaWAN

pression doit être faite manuel-

souvent source de problèmes. En faisant rapidement le

lement de leur côté, mais qu’il

calcul, une Pi 3, une bonne carte SD, une alimentation

n’y a pas de raison de le faire...

suffisante, une antenne, un module iC880A. . il n’est pas

Je déteste ce genre de chose.

vraiment possible de s’en sortir pour moins de 250€ ou

300€ et vous devrez tout connecter manuel ement.

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

HACKABLE MAGAZINE n°19

27

EN COUVERTURE

CONCENTRATEUR LORAWAN

fouil er dans votre boite à vis pour

fixer solidement le tout, car les vis

ne sont pas fournies. On placera

ensuite rapidement l’antenne avant

n’importe quel e autre étape, car

il est hors de question de mettre

l’ensemble sous tension sans

antenne.

On place ensuite le plus petit

des câbles USB sur le port de

type A (le grand) de l’adaptateur

et sur le connecteur micro-B de

la Raspberry Pi. La Pi se trouve

donc alimentée par l’adaptateur

qui, lui-même est ensuite rac-

cordé au bloc d’alimentation avec

le long câble USB. Notez qu’une

alimentation standard de Pi 3 peut

être utilisée en lieu et place de

cel e livrée au format US. Cel e-ci

devra pouvoir fournir un courant

Une fois votre

suffisant pour alimenter le module

installation terminée,

La décision de créer un concentrateur

LoRaWAN et la Pi (5V et 2,5A est

tant matérielle que

LoRaWAN n’est pas à prendre à la légère.

le choix standard).

logicielle, il ne vous

Non seulement l’aspect financier est impor-

restera plus qu’à créer

tant, mais il est également très peu probable

Un concentrateur LoRaWAN est

un compte TTN et

à enregistrer votre

que vous utilisiez cette instal ation pour autre

typiquement une instal ation sans

concentrateur. Celui-

chose. Vous devez voir cela comme une

écran/clavier, mais le démarrage

ci sera alors visible

sorte de déploiement d’un point d’accès Wifi

d’un système Raspbian Jessie Lite

par l’ensemble des

communautaire, un investissement que vous

récent sur une Pi 3 nécessite une

utilisateurs TTN qui,

comme vous, pourront

faites pour vous-même, mais également pour

légère modification du contenu de

l’utiliser pour leurs

les autres. Intégrer votre concentrateur dans

la carte microSD. Après téléchar-

nodes.

le réseau TTN n’est pas un projet d’un week-

gement et copie de l’image sur le

end qui pourra ensuite être démonté pour un

support, vous devrez donc accéder

autre usage, ceci implique une certaine res-

à la première partition pour éditer

ponsabilité vis-à-vis des utilisateurs. . Enfin,

le fichier cmdline.txt et ajouter

je pense important de préciser qu’il n’est pas

console=ttyAMA0,115200 en lieu et

nécessaire qu’un grand nombre de personnes

place de console=serial0,115200.

décident de déployer un concentrateur bien

Ceci vous permettra de voir le sys-

placé pour couvrir une vil e, l’investissement

tème démarrer via un adaptateur

est donc loin d’être obligatoire pour tous les

USB/série connecté aux broches 8

utilisateurs.

(TX), 10 (RX) et 6 (masse), et bien

L’assemblage des composants du kit est

entendu d’accéder au système.

aisé, il suffit d’enficher le module LoRaWAN

On s’empressera ensuite d’acti-

sur l’adaptateur et ce dernier sur la Pi. Des

ver le serveur SSH via un appel à

entretoises en plastique permettent d’assurer

sudo raspi-config, d’étendre la

une certaine robustesse, mais vous devrez

partition à la tail e de la carte, de

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Découvrez LoRaWAN et créez votre passerel e / concentrateur configurer les locales (fuseau horaire, etc.) et d’activer le SPI puisque le module LoRaWAN est connecté de cette façon. Bien entendu, vous pouvez également temporairement brancher un écran HDMI et un clavier pour ces opérations, mais je trouve personnel ement cela plus pratique avec une liaison série (question d’habitude). J’ai d’ail eurs profité de l’occasion pour désactiver l’audio et le Bluetooth via les lignes dtparam=audio=off et dtoverlay=pi3-disable-bt dans config.txt.

L’adaptateur connecte la Pi avec le module LoRaWAN selon le brochage suivant :

• MOSI broche 19 (BCM GPIO 10) ;

• MISO broche 21 (BCM GPIO 9) ;

• SCLK broche 23 (BCM GPIO 11) ;

• CS0 broche 24 (BCM GPIO 8) ;

• CS1 broche 26 (BCM GPIO 7).

Toutes les broches sont standards d’une connexion SPI hormis CS1 côté Pi qui est en réalité connecté à la broche de reset du module. Ce point est important, car c’est ce qui fait toute la différence avec un module iC880A basé sur le même circuit intégré et dont nous al ons utiliser le logiciel. Un reset du module est systématiquement opéré avant tout accès et si cette broche est mal désignée dans la configuration, un certain nombre d’erreurs apparaissent.

4. INSTALLATION DE VOTRE CONCENTRATEUR

Une fois votre système tout neuf démarré, à jour, et personnalisé selon vos besoins avec vos applications préférées (au hasard Vim et Midnight Commander), vous devrez instal er git avec sudo apt-get install git pour ensuite récupérer les éléments logiciels adéquats. Ce qu’il faut à notre système est un packet forwarder chargé de relayer les données reçues en LoRa sur Internet au serveur réseaux TTN et, inversement, envoyer en LoRa les données reçues du serveur TTN. Un concentrateur n’est rien d’autre qu’un relayeur copiant les données d’un protocole vers un autre, d’où la désignation tantôt utilisée de passerel e ou gateway en anglais.

La communauté TTN de Zurich et plus exactement trois développeurs de cette communauté ont fait un fantastique travail pour nous faciliter la vie et permettre d’instal er automatiquement ce packet forwarder sur notre Pi et l’intégrer proprement au système. Vous devrez tout d’abord récu-pérer les fichiers avec Git :

$ git clone https://github.com/ttn-zh/ic880a-gateway.git

Clonage dans 'ic880a-gateway'...

remote: Counting objects: 336, done.

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

Réception d'objets: 100% (336/336), 7.88 MiB | 1.22 MiB/s, fait.

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

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

Ceci vous créera un répertoire ic880a-gateway contenant simplement quelques scripts shell et autres fichiers texte. Il s’agit d’un instal ateur et non des programmes eux-mêmes qui seront récupérés et compilés durant la procédure d’instal ation. Pour lancer l’instal ation, rien de plus simple, placez-vous dans le répertoire et lancez le script principal via sudo et en n’oubliant pas de préciser spi en argument :

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

HACKABLE MAGAZINE n°19

29

EN COUVERTURE

CONCENTRATEUR LORAWAN

$ cd ~/ic880a-gateway

$ sudo ./install.sh spi

The Things Network Gateway installer

Version spi

Updating installer files...

Already up-to-date.

New installer found. Restarting process...

The Things Network Gateway installer

Version spi

Updating installer files...

Already up-to-date.

Gateway configuration:

Detected EUI B827EBFFFEC8A875 from eth0

Do you want to use remote settings file? [y/N]

Host name [ttn-gateway]:

Descriptive name [ttn-ic880a]:Mon concentrateur

Contact email: adresse@domain.tld

Latitude [0]:

Longitude [0]:

Altitude [0]:

L’instal ateur va tout d’abord déterminer un identifiant unique pour votre concentrateur en se basant sur l’adresse matériel e de l’interface réseau de la Pi. Ceci permettra d’identifier votre concentrateur, plus tard, dans TTN. Vous serez ensuite invité à préciser un nom d’hôte, une courte description, une adresse

mail et les coor-

données GPS de

l’emplacement

du concentra-

teur. Les valeurs

par défaut sont

spécifiées entre

crochets et

seront utilisées

si vous validez

simplement la

question.

Si l’investissement de plusieurs centaines

d’euros dans la construction d’un

concentrateur est quelque chose que

vous ne voulez ou ne pouvez pas faire,

une solution possible est la construction

d’un concentrateur monocanal. Au sens

strict du terme, il ne s’agit pas d’un vrai

concentrateur (8 canaux minimum), mais

le coût descend à moins de 40 euros

(plus la Pi et les accessoires), comme

pour ce hat Dragino LoRa avec GPS.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Découvrez LoRaWAN et créez votre passerel e / concentrateur Une fois ces informations entrées, la procédure d’instal ation commence et vous devrez en premier lieu valider l’instal ation de plusieurs paquets nécessaires à la compilation des briques de base : Il est nécessaire de prendre 19,9 Mo dans les archives.

Après cette opération, 32,7 Mo d'espace disque

supplémentaires seront utilisés.

Souhaitez-vous continuer ? [O/n]

Après cette étape, le script téléchargera, configurera, compilera et instal era les éléments dans

/opt/ttn-gateway. Cette phase peut être relativement longue en fonction des performances de la carte SD et du modèle de Pi utilisé (au cas où vous n’optez pas pour le kit de Seeed), mais el e finira par aboutir en affichant un résumé des informations, juste avant d’instal er les scripts de démarrage et de provoquer une réinitialisation de votre Pi :

Gateway EUI is: B827EBFFFEC8A875

The hostname is: ttn-gateway

Open TTN console and register your gateway using your EUI:

https://console.thethingsnetwork.org/gateways

Installation completed.

Created symlink from /etc/systemd/system/multi-user.target.wants/

ttn-gateway.service to /lib/systemd/system/ttn-gateway.service.

The system will reboot in 5 seconds...

Broadcast message from pi@ttn-gateway on pts/0

(mar. 2017-05-23 16:04:07 UTC):

The system is going down for reboot NOW!

Ce Gateway EUI est important, c’est ce qui vous permettra d’enregistrer votre concentrateur sur TTN. Après ce redémarrage et avec le module Seeed/RisingHF le service ne sera pas lancé, car le script utilise par défaut une mauvaise broche pour réinitialiser le module LoRaWAN. Vous devrez éditer le fichier /opt/ttn-gateway/bin/start.sh et changer la ligne : SX1301_RESET_BCM_PIN=25

en

SX1301_RESET_BCM_PIN=7

Enfin, vous pourrez redémarrer le service avec la commande sudo systemctl restart ttn-gateway.service. Après quelques secondes, vous pourrez vérifier le bon fonctionnement en utilisant systemctl status ttn-gateway.service et devrez alors voir quelque chose comme : $ systemctl status ttn-gateway.service

ttn-gateway.service - The Things Network Gateway

Loaded: loaded (/lib/systemd/system/ttn-gateway.service; enabled) Active: active (running) since Wed 2017-05-24 10:00:43 CEST; 36s ago Main PID: 3263 (start.sh)

CGroup: /system.slice/ttn-gateway.service

--3263 /bin/bash /opt/ttn-gateway/bin/start.sh

--3282 ./poly_pkt_fwd

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

HACKABLE MAGAZINE n°19

31

EN COUVERTURE

CONCENTRATEUR LORAWAN

À présent, dès que votre Pi démarrera, le service sera

trouve en intérieur (Indoor) ou en

lancé automatiquement et se connectera à TTN, prêt pour

extérieur (Outdoor), puis validez

relayer les messages depuis et vers le module LoRaWAN.

le tout en cliquant sur Register

Gateway. Votre concentrateur ap-

paraît maintenant dans la liste et

5. CRÉATION DE COMPTE ET

vous pouvez voir et/ou modifier les

CONFIGURATION CÔTÉ TTN

informations le concernant.

Les éléments importants sur

Votre concentrateur est maintenant en marche et tente

cette page sont Status vous pré-

de se connecter au serveur réseau européen (par défaut)

sentant normalement la mention

de TTN, mais il n’y a rien, pour l’instant, pour lui donner le

« connected » si le concentrateur

change (en réalité si, mais les données seront marquées

est bien en fonction et Last Seen

comme untrusted). La première chose à faire sera donc de

vous indiquant la dernière fois où

vous créer un compte sur le serveur TTN en pointant votre

le concentrateur a donné de ses

navigateur sur http://www.thethingsnetwork.org et en cli-nouvel es. Si tout se passe bien,

quant sur le bouton SIGN UP en haut à droite de la page.

votre instal ation devrait être en

Vous serez invité à préciser un nom d’utilisateur (attention,

permanence connectée et donner

celui-ci ne peut être changé par la suite), une adresse mail et signe de vie toutes les minutes.

un mot de passe. Vous recevrez ensuite un mail vous deman-

Vous êtes donc maintenant l’heu-

dant de confirmer l’adresse mail utilisée et en cliquant sur le reux propriétaire d’un concentra-lien, votre compte sera immédiatement activé. Vous pourrez

teur LoRaWAN TTN accessible

ensuite vous connecter et vous rendre sur la console TTN :

par tous les utilisateurs TTN à

https://console.thethingsnetwork.org.

proximité !

Il est maintenant temps d’enregistrer votre concentrateur

(ou gateway). La console présente deux grosses icônes,

6. CECI N’EST PAS

Applications et Gateway, cliquez sur la seconde. Sur la page, choisissez Register gateway pour faire apparaître le formulaire LA SEULE FAÇON

d’enregistrement. Cochez l’option I’m using the legacy packet

DE FAIRE

forwarder puisque nous venons d’installer le packet forwarder « classique » dérivé de celui créé par Semtech pour ses

J’ai ici présenté une solution

produits. Ce changement vous oblige à utiliser un identifiant

matériel e qui semblait adaptée à

unique composé de 8 valeurs hexadécimales pour votre

mes besoins et relativement facile à

concentrateur, c’est celui qui s’affiche au terme de l’instal a-se procurer, mais il en existe beau-

tion et qui est issu de l’adresse matériel e de votre interface coup d’autres. La carte iC880A par

réseau de la Pi. Recopiez simplement ici cet identifiant.

exemple, interfacée avec une

Ajoutez ensuite une description et choisissez un « frequen-

Raspberry Pi, se configurera

cy plan » correspondant à l’endroit où vous vous trouvez. Ici,

presque exactement de la même

en Europe, la gamme de fréquences est nommée EU868 ou

manière. Il existe également des

solutions plus économiques, repo-

« Europe 868Mhz ». En sélectionnant cette option, le champ

sant sur l’utilisation d’un module

Router bascule automatiquement sur « ttn-router-eu », c’est le LoRaWAN ne pouvant utiliser

serveur réseau qui prendra en charge votre concentrateur, qui

qu’un seul canal. Il n’est pas exact

en toute logique, est celui utilisé pour l’Europe.

de parler alors de concentrateur

Enfin, placez votre concentrateur sur la carte de façon à

LoRaWAN, mais ceci peut toutefois

permettre aux autres utilisateurs de savoir où il se situe et

être une option (c’est toujours mieux

donc d’estimer s’il est à leur portée, précisez ensuite s’il se que pas de LoRaWAN du tout).

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Découvrez LoRaWAN et créez votre passerel e / concentrateur

Les shields Arduino

peuvent aussi servir

de module pour créer

un concentrateur

monocanal, mais

leur usage naturel

est, bien entendu,

d’équiper une carte

Arduino pour servir

de node LoRaWAN

et « remonter » des

informations via un

concentrateur jusqu’au

serveur réseau TTN,

puis aux applications.

Concernant l’aspect logiciel, les

LinkLabs et bien d’autres. Ceci peut être une solution

éléments utilisés pour cet article

rapide pour une entreprise, une agglomération ou

sont forcément liés au matériel,

une col ectivité locale n’ayant pas forcément les res-

mais là aussi, le script d’instal-

sources humaines pour déployer, gérer et maintenir

lation fourni par la communauté

des concentrateurs « faits maison ». La plupart de

TTN de Zurich n’est pas la seule

ces solutions permettent d’une manière ou d’une

voie possible. Comme LoRa et

autre une utilisation avec TTN.

LoRaWAN sont des technologies

Pour conclure, je préciserai que LoRaWAN, bien

de Semtech, presque toutes les

que grandement plébiscité, n’en est qu’à ses débuts.

solutions logiciel es se basent sur

Ces initiatives comme TTN sont importantes, mais

le code initial développé par cette

lorsque les fournisseurs de téléphonie mobile

société, mais il existe de nom-

déploieront massivement LoRaWAN, la concur-

breuses déclinaisons.

rence sera rude. Ces opérateurs possèdent en

Enfin, pour une instal ation plus

effet, indubitablement, les meil eurs emplacements

« professionnel e », il est impor-

pour des antennes et ainsi assurent rapidement une

tant de mentionner l’existence de

excel ente couverture. Ceci ne sera bien entendu

matériels clés en main comme

pas gratuit et nous n’en sommes pas encore là. Pour

ceux proposés par Yadom/Ne-

l’heure TTN reste, à mon sens, la meil eure option

meus, Haxiot, Multitech, Kerlink,

pour vous et moi. DB

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

HACKABLE MAGAZINE n°19

33

EN COUVERTURE

CAPTEUR LORAWAN

CRÉEZ VOS

MONTAGES ARDUINO

COMMUNICANTS SUR

LORAWAN

Denis Bodor

Dans l’article précédent, nous avons vu comment il était possible de déployer son concentrateur LoRaWAN avec TTN relativement

simplement, mais ceci n’est toutefois pas indispensable. Si un concentrateur se trouve près de chez vous, vous pouvez l’utiliser pour vos projets et ainsi profiter, avec un investissement minimum, des bienfaits de LoRaWAN et des communications très longues distances pour vos projets.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

Le principe même du

fonctionnement de

LoRaWAN est de

permettre la mise

en place d’un vaste

réseau. Dans le cas de The

Things Network (TTN), ce réseau

utilise des concentrateurs instal és

par ses membres, qu’il s’agisse

Le module qui équipe

de produits clés en main, de kits

le shield Dragino Lora

comme nous l’avons fait dans

terrain de jeu pour qui voudrait écouter tout ce qui

intègre une puce

l’article précédent ou de l’utilisa-

passe. Mais en réalité, la sécurité est au cœur de

Semtech et divers

tion de modules et cartes achetés

LoRaWAN, car les communications sont chiffrées

composants annexes.

Ce module peut être

séparément et utilisés avec une

entre un node et le réseau, mais également entre

trouvé sur différents

Raspberry Pi ou tout autre ordina-

un node et l’application. Les données contenues

sites pour moins d’une

teur mono-carte.

dans les messages ne sont donc ni visibles du

dizaine d’euros, mais

concentrateur, ni par le serveur réseau.

il ne peut être utilisé

Le fait de rejoindre le réseau

qu’en 3,3V. Sur le

communautaire TTN, ou un autre

Pour protéger ces messages et s’assurer par

shield en revanche

des convertisseurs de

du même type, ne vous oblige en

la même occasion des identités de chaque inter-

tension permettent une

rien à déployer un concentrateur.

venant, on utilise des clés et des identifiants. Un

connexion à n’importe

Si vous avez la chance d’en avoir

processus nommé « activation » utilise ces clés

quelle carte Arduino.

un à proximité, vous pouvez tout

et informations pour s’identifier et se connecter

simplement l’utiliser pour votre

au réseau TTN. Ces clés sont créées ou obte-

projet. Tout ce qu’il vous faut alors

nues lors de l’enregistrement d’un concentrateur

c’est un module LoRa qui permet-

ou d’un node dans votre interface TTN (console).

tra à votre montage de contacter

Il est important de comprendre ces méca-

ce concentrateur pour échanger

nismes de sécurité, car il vous faudra les utiliser

des données avec TTN, puis vos

pour créer les croquis de vos nodes envoyant des

applications. Créer un compte

données avec LoRaWAN. Il existe deux types

TTN suffit donc, en plus du mo-

d’activations :

dule LoRa, à créer un capteur relié

• OTAA pour Over The Air Activation est la

à Internet, ou en d’autres termes,

façon la plus sûre de se connecter au ser-

un objet connecté.

veur du fournisseur réseau LoRaWAN (TTN

dans notre cas), c’est donc cel e à préférer.

1. DES ADRESSES,

Avec cette méthode, on utilise l’identifiant de

l’application et sa clé associée pour négo-

DES IDENTIFIANTS

cier la connexion et on obtient en retour une

ET DE LA SÉCURITÉ

adresse pour notre node. Les autres clés

permettant le chiffrement sont négociées

Un troupeau de concentrateurs

automatiquement ainsi que de nombreux

instal és par des particuliers, un

paramètres de communication.

réseau ouvert à tous, des commu-

• ABP pour Activation By Personalization. Ici,

nications radio en tous sens, des

les clés et les identifiants ne sont plus négo-

échanges sur Internet constants. .

ciés dans un échange durant la connexion,

LoRaWAN et The Things Network

mais sont déterminés lorsque vous enre-

peuvent sembler être un véritable

gistrez votre périphérique côté TTN. Ces

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

HACKABLE MAGAZINE n°19

35

EN COUVERTURE

CAPTEUR LORAWAN

informations doivent ensuite être

Dans le cadre de cet article,

utilisées dans votre croquis pour

nous nous en tiendrons à l’activa-

permettre la connexion. Comme

tion OTAA, plus sûre, plus simple

le précise la documentation TTN,

et recommandée par défaut par

ceci peut paraître plus simple,

TTN. La procédure d’activation ne

car il n’y a pas de processus de

concerne en effet pas seulement la

connexion et de négociation, mais

sécurité, mais également la trans-

Le module utilisé par

cela implique également une sécurité plus faible.

mission d’informations spécifiques

la carte Seeeduino

est très différent de

De plus, vous pouvez rencontrer des problèmes

et en particulier les fréquences

celui du shield. Lui

à cause d’un autre mécanisme de sécurité.

utilisées. Dans la partie précé-

aussi intègre un circuit

intégré Semtech,

Ce denier point est important et concerne le

dente, j’ai précisé que ce qui fait un

mais également un

compteur de messages. Afin de garantir la sécurité

véritable concentrateur LoRaWAN

microcontrôleur STM32

du système, celui-ci doit s’assurer qu’un échange

est sa capacité à gérer 8 canaux

qui sert d’interface

ne puisse pas être simplement rejoué (capturé et

de communication et non un seul.

de communication.

La carte Seeeduino

envoyé une seconde fois). Les messages chiffrés

Chaque canal possède une fré-

ne dialogue pas

contiennent donc un numéro ou compteur qui per-

quence et des caractéristiques

directement avec la

met au serveur de ne pas accepter une seconde

précises (débit, facteur d’étale-

puce LoRa en SPI,

fois un même message. Avec une activation OTAA,

ment, rapport cyclique, bande pas-

mais avec le STM32

sante). Trois de ces canaux sont

via une liaison série,

ce numéro fait partie de la négociation (en principe),

définis par le standard LoRaWAN,

comme un modem.

mais avec ABP c’est à votre croquis de gérer ce mé-

mais les autres sont dépendants

canisme. En temps normal ceci est pris en charge

du réseau. Lors d’une activation

par la bibliothèque Arduino, mais uniquement tant

OTAA, ces paramètres sont trans-

que votre montage n’est pas redémarré. En cas

mis au node lors de la connexion,

d’arrêt et de redémarrage, le compteur recommen-

mais dans le cas d’ABP ceci doit

cera du début et le serveur va ignorer les messages

être configuré manuel ement. Fina-

pensant qu’il s’agit de copies. Une solution pour

lement, ABP est bien plus compli-

régler le problème est de désactiver cette fonction

qué à mettre en œuvre et surtout,

côté TTN, mais cela réduit grandement la sécurité.

moins sûr...

Dans le mécanisme OTAA, on utilise l’identifiant

En quelques mots donc : faites

de l’application (AppEUI) et la clé de l’application

comme moi, tenez-vous-en à

(AppKey). L’adresse du node (DevAddr), la clé de ses-

l’OTAA.

sion réseau (NwkSKey) et la clé de session de l’appli-

cation (AppSKey) sont générées à partir de l’identifiant

et de la clé d’application durant la connexion. La

2. LE MATÉRIEL

première clé de session protège la communication

entre le node et le réseau et la seconde étend cette

UTILISÉ

protection jusqu’à l’application. Dans les deux cas,

Il existe énormément de maté-

le concentrateur ne voit aucune des données qui cir-

riels permettant d’utiliser LoRa et

culent et dans le second, le serveur réseau lui-même

donc de connecter un montage

n’a pas connaissance des données.

à LoRaWAN et TTN. Une simple

Le mécanisme ABP utilise également ces clés

recherche sur eBay des termes

de session, mais el es ne sont pas négociées à la

« lora module » retourne des

connexion, el es doivent alors figurer dans votre

dizaines de modèles différents,

croquis et, bien entendu, correspondre aux mêmes

avec des prix variant entre 6€

informations présentes côté réseau lors de l’enregis-

et 30€. Les écarts de prix pro-

trement d’un node.

viennent généralement du format

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

Le shield Dragino Lora

peut être utilisé avec

plusieurs modèles de

cartes Arduino. Dans le

cadre d’une carte UNO,

la connexion SPI entre le

module et la carte se fait

de la même manière via

les broches standards et

le connecteur ICSP. Avec

un autre modèle de carte,

il est possible de choisir,

via cavaliers, comment se

fait la connexion.

proposé, de la qualité générale du

et le SX1276. Fort similaires, ils se différencient en particulier par la module et du type d’antenne utili-gamme de fréquences pouvant être utilisées avec, dans le premier sable (si incluse).

cas, une plage de 850 Mhz à 1 GHz et dans le second cette même

Pour mes expérimentations,

plage, plus la bande des 169 Mhz et des 433 Mhz. Dans la plupart j’ai opté pour une solution plus

des cas, en utilisant la bande 868 Mhz (Europe), le choix entre simple que l’utilisation de modules

SX1272 et SX1276 est secondaire dans un premier temps. Ce n’est d’entrée de gamme en choisissant

qu’avec une certaine expérience et une bonne connaissance du

d’utiliser un shield Arduino (Dra-

fonctionnement du système qu’il devient important de prendre cela gino LoRa Shield) et une carte

en considération.

compatible Arduino intégrant une

L’utilisation d’un shield est une bonne solution, mais il faudra puce LoRa (Seeeduino LoRaWAN

faire très attention à la carte Arduino utilisée. En effet, l’usage de avec GPS). Les deux produits

LoRaWAN est généralement lié au déploiement de capteurs divers.

sont construits autour de la puce

Rappelons au passage que LoRaWAN est prévu pour une communi-

Semetch SX1276. Dans le cas du

cation longue distance (en kilomètres), avec un faible débit, des don-shield Arduino, il s’agit d’un module

nées succinctes et une faible consommation énergétique, et non pour HopeRF RFM95W prenant place

les transmissions en temps réel, la voix ou l’image, ou encore pour le sur le circuit imprimé et pour la

contrôle à distance. Autrement dit, si vous optez pour LoRaWAN c’est carte, il s’agit d’un module RHF76-surtout parce que vous voulez déployer des capteurs. .

052AM de RisingHF. Le module

HopeRF RFM95W est le type de

Bien entendu, qui dit capteur dit bibliothèques et code pour gérer produit qu’on trouve généralement

ces capteurs. Tout ceci, en plus de la gestion LoRaWAN, du chiffre-pour quelques euros en ligne.

ment et du format de données consomme une place non négligeable en mémoire. À titre d’exemple, un simple capteur humidité/pression/

Semtech est le seul fabricant

température/lumière sur base Arduino UNO avec le shield Dragino de puce LoRa/LoRaWAN et quel

occupera, après compilation, quelques 87% des 32Ko de flash inté-

que soit le matériel que vous

grés dans le microcontrôleur (voire 110% avec certaines versions des al ez acheter, c’est avec une tel e

bibliothèques).

puce que votre croquis va dia-

loguer pour émettre et recevoir

On comprend mieux alors pourquoi la carte Seeeduino LoRaWAN

des données. Deux principaux

avec GPS est construite non pas autour d’un Atmel AVR, mais

modèles sont généralement uti-

d’un Atmel ATSAMD21G18 (comme l’Arduino Zero) à cœur ARM

lisés pour les nodes, le SX1272

Cortex-M0+ avec 256 Ko de flash et 32 Ko de mémoire vive. Cette Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°19

37

EN COUVERTURE

CAPTEUR LORAWAN

carte, intégrée au kit Seeed pour

LoRaWAN, vous pouvez utiliser le compte déjà prévu à cet effet

LoRaWAN vaut une quarantaine

sans le moindre problème.

d’euros (35€ en version sans GPS,

Une fois connecté à la console TTN (https://console.

le même prix qu’une Zero), mais

thethingsnetwork.org/), vous devez avant toutes choses créer intègre, en plus, un contrôleur de

une application. Ceci n’est pas une application dans le sens habi-charge pour accu lipo et un connec-

tuel du terme (comme une application Windows ou Android par

teur dédié. Faire de cette carte

exemple), mais davantage l’aspect applicatif de votre projet. C’est un node autonome sera donc un

l’endroit où devront aboutir vos données. Nous verrons plus loin jeu d’enfant et ne nécessitera rien

comment connecter cette facette à quelque chose qui ressemble

d’autre qu’un accu adapté avec un

à une application en utilisant Cayenne.

connecteur JST2.0. Un dernier dé-

tail très important concernant cette

En ajoutant une application, vous serez invité à renseigner

carte concerne les tensions utili-

quelques éléments dont l’ID de l’application (alphanumérique

sées : maximum 3,3V, cette carte

minuscule uniquement, pas de « - » ou de « _ » consécutifs ou

n’est pas tolérante au 5V !

en début/fin), une description et le handler pour l’enregistrement (le serveur européen ici). L’identifiant unique de votre application L’espace al oué pour cet article,

(AppEUI) sera généré automatiquement par le réseau :

déjà bien long, est insuffisant pour

traiter à la fois du shield Dragino

et de la carte Seeeduino. Cette

dernière a tout de même fait l’objet

d’expérimentations et vous trou-

verez le croquis commenté cor-

respondant dans le dépôt GitHub

du numéro (https://github.com/

Hackable-magazine). Je ne cache-

rai pas une nette préférence pour

le shield Arduino plutôt que pour la

carte Seeeduino malgré la possi-

bilité d’utiliser un accu facilement :

la documentation est trop concise,

la bibliothèque associée de piètre

qualité et le contrôle de la commu-

nication et de la configuration du

module trop limité à mon goût.

3. TTN ET

ENREGISTREMENT

Cet identifiant unique apparaîtra dans le résumé une fois

l’enregistrement validé. Vous avez maintenant le socle sur lequel DE L’APPLICATION va reposer votre ou vos nodes/périphériques (devices) et c’est ET DU NODE

dans une application que vous al ez l’enregistrer. Dans le résumé de l’application, en haut à droite, vous trouverez un bouton Device

Pour connecter un node au

vous affichant la liste des nodes gérés par l’application. Cliquez réseau TTN, vous devez bien en-sur Register device pour en ajouter un nouveau.

tendu posséder un compte. Si vous

Dans le formulaire, précisez un ID pour votre node (son nom

avez déployé un concentrateur

répond aux mêmes impératifs typographiques que l’ID de l’appli-

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

cation), c’est un simple nom qui n’est pas utilisé dans l’activation.

La méthode d’activation par

Le Device EUI (DevEUI), en revanche, est un identifiant unique sur défaut est OTAA. Vous pouvez la

le réseau, vous pouvez le préciser vous-même ou tout simple-

changer en cliquant sur Settings

ment laisser le formulaire en choisir un à votre place en cliquant en haut à droite, mais je ne cou-sur l’icône à gauche du champ de saisie. Un message précisera

vrirai pas ABP ici comme précisé

« This field will be generated » (« ce champ sera généré »). Cli-plus haut. En OTAA tout ce dont

quez ensuite sur Register et le tour est joué :

nous avons besoin pour composer

notre futur croquis Arduino c’est

l’identifiant unique du périphérique

(DevEUI), l’identifiant unique de

l’application (AppEUI) et la clé de

l’application (AppKey), tout le reste

sera généré lors de la connexion.

Pour vous faciliter les choses,

l’interface web propose de formater

ces informations de manière à les

rendre directement utilisables dans

un croquis en C/C++. C’est l’objet

de l’icône « <> » à gauche des

champs transformant, par exemple

00098E6813749499 en { 0x00,

0x09, 0x8E, 0x68, 0x13, 0x74,

0x94, 0x99 }.

Notez également la seconde

icône présentant une double-flèche

permettant d’influer sur l’ordre des

octets qui composent la donnée. En

La page qui est affichée ensuite résume les informations pour

fonction des plateformes, modules

ce node/périphérique :

et bibliothèques utilisées, l’ordre

peut être différent et en cliquant

sur cette icône vous pouvez donc

réordonner les octets avant de les

copier dans le presse-papier avec

l’icône à droite du champ. Dans le

cas du montage Arduino à base

du shield Dragino, reposant sur la

bibliothèque LMIC :

• l’AppEUI est en LSB (Least

Significant Byte, le premier

octet dans le sens de la lecture

courante est celui valant le plus

dans une valeur sur plusieurs

octets) ;

• le DevEUI est également en

LSB ;

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

HACKABLE MAGAZINE n°19

39

EN COUVERTURE

CAPTEUR LORAWAN

• l’AppKey est en MSB (Most Significant Byte),

(au sens « destination finale des

l’ordre inverse.

données ») sera la plateforme

Cayenne. TTN se chargera alors

Il est important de bien comprendre cet ordre

de renvoyer les informations à

des octets, car dans le cas contraire, votre node

Cayenne par le biais d’un méca-

tentera de se connecter à TTN avec de mauvaises

nisme d’intégration. Nous configu-

informations. C’est une erreur courante et la prin-

rerons cela plus tard, mais devons

cipale source de problème des utilisateurs. Notez

toutefois préciser comment sont

également au passage que tout ceci n’a rien à voir

encodées les données : au format

avec le concentrateur, ce n’est pas lui, mais le ré-

Notre montage de

Cayenne LPP (pour Lower Power

seau TTN qui négocie avec votre node, le concen-

test est relativement

Protocol).

simple et utilise deux

trateur ne fait que relayer les informations entre un

modules capteur en

média (radio LoRa) et un autre (Internet). C’est un

Ceci se fait très simplement

i2c. Le premier relève

simple répétiteur.

en cliquant sur Payload Formats

température, humidité

sur la page de notre application

relative et pression

Une dernière étape concernant l’application

et en précisant Cayenne LPP

atmosphérique et le

concerne le choix d’un format de données. En ef-

second l’indice UV

via le menu déroulant. Après

et une indication de

fet, vous pouvez envoyer tout ce qui vous plaît via

enregistrement par un clic sur

l’intensité de lumière

LoRaWAN (du moment que c’est petit et ponctuel),

Save, nos données seront trai-

visible. Ce sont ces

mais si vous comptez utiliser ces informations vous

tées comme étant au format en

informations que

devrez vous conformer à un format de données

question. Ceci signifie également

nous allons envoyer

périodiquement à

compris par votre application. Ici, notre application

que notre croquis Arduino devra

notre application via

LoRaWAN et Internet.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

encoder nos données dans ce format avant de les envoyer via LoRa. Notez également que le format, comme l’intégration, concerne une application dans son ensemble et donc tous les nodes qui y sont rattachés.

4. CRÉONS NOTRE NODE ARDUINO + LORA SHIELD

Tout est en place côté TTN, il ne nous reste plus qu’à utiliser ces informations pour créer notre node. Pour accéder au module LoRa sur shield Dragino, nous aurons besoin de la bibliothèque Arduino-LMIC. Cel e-ci est instal able depuis le gestionnaire de bibliothèques, mais mieux vaudra l’instal er manuel ement depuis https://github.com/matthijskooijman/arduino-lmic, car celle proposée via l’IDE est moins à jour (et occupe davantage d’espace en flash).

Nous al ons utiliser deux capteurs en guise d’exemple, interfacés en i2c :

• un module BME280 mesurant température, hygrométrie et pression atmosphérique, pris en charge par la bibliothèque éponyme de Tyler Glenn disponible via le gestionnaire de bibliothèques ;

• un module SI1145 mesurant les rayonnements ultraviolets et la lumière ambiante visible, pris en charge par la bibliothèque Adafruit SI1145 également instal able par le gestionnaire.

Enfin, nous avons besoin d’encoder nos données au format Cayenne LPP et devrons instal er, via le gestionnaire, les bibliothèques TheThingsNetwork. La majeure partie de cet élément ne nous sera pas utile puisque nous ne ferons usage que de la bibliothèque CayenneLPP qui s’y trouve. Toute la partie matériel e concerne en effet les modules LoRa Microchip RN2xx3 dont un modèle est intégré à la « The Things Uno », un dérivé d’Arduino Leonardo spécialement conçu pour et par TTN.

Notre croquis débutera donc avec une bel e série d’inclusions :

#include <lmic.h>

#include <hal/hal.h>

#include <SPI.h>

#include <BME280I2C.h>

#include <Adafruit_SI1145.h>

#include <CayenneLPP.h>

On définira ensuite quelques macros :

// Altitude

#define ALT 209

// Calcul de la correction de pression ajustée

#define COR (ALT/8.0)

// Taille maximum des messages LPP

#define MAX_SIZE 100

Les deux premières nous permettent de calculer, sur la base de la pression atmosphérique lue et de l’altitude où nous nous trouvons, une pression équivalente au niveau de la mer. Comme le précise un site de Météo France, en moyenne, la pression atmosphérique diminue de 1 hPa tous les 8 mètres, nous devons donc ajouter des hectopascals pour obtenir une valeur équivalente à cel es utilisées conventionnel ement en météo. La seconde macro fixe la tail e maximum des messages au format LPP (c’est un maximum, les messages sont bien plus petits que cela).

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

HACKABLE MAGAZINE n°19

41

EN COUVERTURE

CAPTEUR LORAWAN

On peut ensuite déclarer les variables et objets utilisés dans le croquis :

// On déclare les capteurs

Adafruit_SI1145 uv = Adafruit_SI1145();

BME280I2C bme;

// Identifiant tâche

static osjob_t sendjob;

// Émission toutes les 5 mn

const unsigned tx_interval = 300;

uv représente le module Silicon Labs SI1145 et bme le capteur Bosch BME280.

sendjob représente une tâche (un job) devant être effectué et plus précisément la tâche consistant à envoyer notre message. La logique en œuvre dans la bibliothèque LMIC consiste à préparer une tâche d’envoi de message, accompagnée des données utiles et de fixer son exécution dans le temps. On ne pilote donc pas directement l’envoi comme on pourrait le faire avec une communication série ou autre.

Les cavaliers SV2, SV4 et

Enfin, tx_interval est l’interval e en secondes entre les envois de messages, SV3 sur le shield Dragino

celui-ci est utilisé pour programmer la prochaine tâche une fois que la précédente permettent de choisir une

est terminée.

connexion SPI via les

broches 11, 12 et 13, ou

Il faut ensuite s’occuper de la connexion physique :

via le connecteur ICSP.

Dans le cas d’Arduino

UNO, ceci n’a pas

// Brochage

d’importance, ces broches

const lmic_pinmap lmic_pins = {

étant reliées entre elles.

.nss = 10,

Les cavaliers J_DIO5,

.rxtx = LMIC_UNUSED_PIN,

J_DIO2 et J_DIO1

.rst = 9,

déterminent la connexion

.dio = {2, 6, 7},

des broches DI05, DI02

};

et DI01 du module LoRa

aux broches 8, 7 et 6 de

La bibliothèque LMIC n’est pas utilisable qu’avec le shield Dragino, mais éga-la carte Arduino. DI00 est

lement avec n’importe quel module reposant sur une puce Semtech de la famil e branché « en dur » à la

SX1272 ou SX1276 et donc le kit d’évaluation Semtech et

broche 2.

les modules HopeRF RFM92 et RFM95. Il est possible de

l’utiliser avec presque n’importe quel matériel, à l’exclusion

des modules plus « évolués » comme ceux de Microchip

communiquant sur une liaison série et intégrant un micro-

contrôleur en complément (comme le module RHF76-

052AM équipant la Seeeduino LoRaWAN et utilisant un

STM32-L0 en plus de la puce SX1276).

Une puce Semtech utilise une liaison SPI pour la com-

munication avec votre montage, mais également des

broches supplémentaires DIO0 à DIO2, une ligne de reset,

une ligne CS (alias NSS) comme pour n’importe quel e liai-

son SPI et éventuel ement une broche RXTX permettant de

sélectionner le mode d’utilisation de l’antenne. Dans le cas

du shield Dragino, RXTX n’est pas utilisé, CS pour sélec-

tionner le périphérique est sur 10 et le reset est sur 9. En

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

mode LoRa, seuls DIO0 et DIO1 sont utilisés, respectivement reliés aux broches 2 et 6. Notez que trois broches doivent être déclarées, car le module peut être utilisé pour une communication autre qu’en LoRa et que la bibliothèque LMIC (mode FSK) supporte ce mode.

Tout est maintenant matériel ement configuré et nous pouvons enfin nous occuper des identifiants et autres informations obtenues après enregistrement de notre node sur TTN :

// Identifiant d'application

// Format little-endian/LSB

static const u1_t PROGMEM appeui[8] = {0x07,0x51,0x00,0xF0,0x7E,0xD5,0xB3,0x70}; void os_getArtEui (u1_t* buf) { memcpy_P(buf, appeui, 8);}

// Identifiant de node/périphérique

// Format little-endian/LSB

static const u1_t PROGMEM deveui[8] = {0x99,0x94,0x74,0x13,0x68,0x8E,0x09,0x00}; void os_getDevEui (u1_t* buf) { memcpy_P(buf, deveui, 8);}

// Clé de l'application

// Format big-endian/MSB

static const u1_t PROGMEM appkey[16] =

{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F }; void os_getDevKey (u1_t* buf) { memcpy_P(buf, appkey, 16);}

Voilà qui peut être déroutant à première vue puisqu’on déclare des fonctions plutôt que d’en utiliser. Ceci vient du fait que la bibliothèque appel e ces fonctions pour paramétrer la communication LoRaWAN, d’où la présence de « get » dans leurs noms et non « set ». Nous créons donc des fonctions qui copient ces données en mémoire à partir du contenu de la variable déclarée juste dessus. Nous configurons ainsi l’identifiant de l’application, celui du node et la clé de l’application. Tout ceci est copié/col é depuis la page d’information du node dans la console TTN (attention à l’ordre des octets !).

Une autre fonction doit être déclarée par nos soins pour assurer le fonctionnement du croquis.

Cel e-ci est destinée à gérer les différents événements qui peuvent survenir dans l’exécution de nos demandes par le module LoRa :

// Gestion des événements

void onEvent(ev_t ev) {

Serial.print(os_getTime());

Serial.print(": ");

switch(ev) {

case EV_SCAN_TIMEOUT:

Serial.println(F("EV_SCAN_TIMEOUT")); break; case EV_BEACON_FOUND:

Serial.println(F("EV_BEACON_FOUND")); break; case EV_BEACON_MISSED:

Serial.println(F("EV_BEACON_MISSED")); break; case EV_BEACON_TRACKED:

Serial.println(F("EV_BEACON_TRACKED")); break; case EV_JOINING:

Serial.println(F("EV_JOINING")); break; case EV_JOINED:

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

LMIC_setLinkCheckMode(0); break;

case EV_RFU1:

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

HACKABLE MAGAZINE n°19

43

EN COUVERTURE

CAPTEUR LORAWAN

Serial.println(F("EV_RFU1")); break;

case EV_JOIN_FAILED:

Serial.println(F("EV_JOIN_FAILED")); break; case EV_REJOIN_FAILED:

Serial.println(F("EV_REJOIN_FAILED")); break; case EV_TXCOMPLETE:

Serial.println(F("EV_TXCOMPLETE (avec attente RX)")); if(LMIC.dataLen) {

// données reçues ?

Serial.print(F("Data RX: "));

Serial.write(LMIC.frame+LMIC.dataBeg, LMIC.dataLen); Serial.println();

}

// Planifier la prochaine émission

os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(tx_

interval), do_send);

break;

case EV_LOST_TSYNC:

Serial.println(F("EV_LOST_TSYNC")); break; case EV_RESET:

Serial.println(F("EV_RESET")); break;

case EV_RXCOMPLETE:

Serial.println(F("EV_RXCOMPLETE")); break; case EV_LINK_DEAD:

Serial.println(F("EV_LINK_DEAD")); break; case EV_LINK_ALIVE:

Serial.println(F("EV_LINK_ALIVE")); break; default:

Serial.println(F("inconnu")); break;

}

}

Ces événements sont générés depuis l’intérieur de la bibliothèque LMIC via des appels à reportEvent(), el e-même appelant notre fonction ici présente. La plupart de ces événements ne sont traités qu’à titre d’information, pour suivre sur le moniteur série le déroulement des opé-

rations. EV_TXCOMPLETE est particulier, il est généré dès qu’un message a été envoyé et nous l’utilisons pour pouvoir planifier un nouvel envoi avec os_setTimedCallback(). On précise en argument la tâche dont il s’agit, le moment où el e doit être exécutée (maintenant + tx_interval) et la fonction utilisée pour générer les données du message. Chaque fin de transmission provo-quera donc la création d’une nouvel e tâche, exécutée plus tard.

Ceci nous conduit donc naturel ement à l’écriture de do_send(), la fonction formant la partie

« active » de notre node :

// Notre tâche

void do_send(osjob_t* j){

// variable pour les capteurs

float temp, hum, pres, uvindex, lum;

// Communication déjà en cours ?

if (LMIC.opmode & OP_TXRXPEND) {

Serial.println(F("OP_TXRXPEND, pas d'envoi"));

} else {

// lecture des capteurs

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

bme.read(pres, temp, hum, true, B001);

uvindex = uv.readUV()/100.0;

// Attention ! Il ne s'agit pas de lux comme avec un TSL2561

lum = uv.readVisible();

// Affichage des valeurs

Serial.print("uv: ");

Serial.print(uvindex);

Serial.print("\tlum: ");

Serial.print(lum);

Serial.print("\ttemp: ");

Serial.print(temp);

Serial.print("\thum: ");

Serial.print(hum);

Serial.print("\tpress: ");

Serial.println(pres+COR);

// Composition du message

lpp.reset();

lpp.addTemperature(0, temp);

lpp.addRelativeHumidity(1, hum);

lpp.addBarometricPressure(2, pres+COR);

lpp.addLuminosity(3,(int)uvindex);

lpp.addLuminosity(4,(int)lum);

// Enregistrement du message à envoyer

LMIC_setTxData2(1, lpp.getBuffer(), lpp.getSize(), 0);

Serial.println(F("Packet queued"));

}

}

Pour relever les informations pertinentes, nous utilisons les méthodes de chaque bibliothèque prenant en charge les capteurs. Le point important est cependant tout autre : la construction de notre message au format Cayenne LPP. Nous commençons par réinitialiser notre variable lpp avec la méthode reset() afin de partir sur un message vide. Nous ajoutons ensuite, élément par élément, les données col ectées en spécifiant un canal en premier argument (celui-ci sera utilisé plus tard sur Cayenne).

Enfin, nous utilisons LMIC_setTxData2() pour définir les données à envoyer en précisant où el es se trouvent (lpp.getBuffer() retourne l’adresse) et leur tail e. Comprenez bien que ceci ne provoque pas l’envoi, nous ne faisons que « charger » le contenu du futur message, un peu comme un boulet dans un canon.

À présent que les macros, variables, objets et fonctions de notre croquis sont en place, nous pouvons nous occuper de setup() :

// configuration

void setup() {

Serial.begin(115200);

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

// initialisation capteurs

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

HACKABLE MAGAZINE n°19

45

EN COUVERTURE

CAPTEUR LORAWAN

while (!bme.begin()) {

5. LES DONNÉES

Serial.println("Erreur BME280! !");

SONT LÀ,

delay(2000);

}

FAISONS-EN

while (!uv.begin()) {

Serial.println("Erreur SI1145 !");

QUELQUE CHOSE

delay(2000);

}

Sur la page de l’application

et du périphérique côté console

// LMIC init

TTN, nous pouvons voir les don-

os_init();

nées décodées et en clair. Sur

LMIC_reset();

ce point, il faut bien comprendre

// Démarrage tâche

qu’une partie de la console TTN

do_send(&sendjob);

présente également le côté

}

« Application » d’un réseau

LoRaWAN et de ce fait, les don-

La partie intéressante est cel e se situant, bien

nées sont déchiffrées. Ceci vous

entendu, après l’initialisation des capteurs. On initialise

permettra de valider le contenu

le support LoRa/LoRaWAN avec os_init() qui lui-

de vos messages, comme ici,

même, dans la bibliothèque initialise tous les éléments

en lisant directement les valeurs

de la communication (mémoire, matériel, radio), puis

présentes dans les données LPP.

on déclenche un reset pour supprimer toutes données

Vous conviendrez cependant

en attente de traitement et stopper toutes actions en

avec moi que ceci n’est pas très

cours. Enfin, comme l’envoi répétitif de messages se

attrayant pour le commun des

base sur une tâche planifiée par la fin d’un précédent

mortels. Pour réel ement impres-

envoi, il est nécessaire d’appeler une première fois

sionner vos amis ou vos col èges,

do_send().

il est préférable de présenter ces

Le reste du croquis tient en une simple fonction

informations de façon un peu

loop() se contentant d’appeler constamment la fonc-

plus évidente en utilisant une

tion de gestion générale :

intégration. En vous rendant sur

la page de votre application dans

void loop() {

la console TTN, cliquez sur Inte-

// boucle de gestion

gration et Add integration. Là vous os_runloop_once();

aurez le choix entre plusieurs

}

options vous permettant de « faire

Une fois le croquis programmé dans la carte, son

quelque chose » avec les don-

exécution devrait rapidement découler à l’arrivée d’un

nées des messages. À cette date,

premier message sur TTN. Dans le moniteur série,

quatre options sont possibles et

«

nous al ons utiliser la plus simple :

EV_JOINING » devrait apparaître, puis « EV_JOINED »

et enfin «

Cayenne.

Packet queued », puis « EV_TXCOMPLETE ».

En vous rendant sur la console TTN, sur la page de

Cayenne MyDevice est un site

votre node (device), un clic sur Data devrait alors mon-et une application Android/iOS

trer ce premier message, puis des suivants (ceux-ci

permettant de centraliser la ges-

apparaissent également dans Data de l’application). Il tion des objets connectés. Vous

en va de même, si vous avez et utilisez votre propre

pouvez y afficher et stocker des

concentrateur, à la différence que le contenu n’est pas

données de capteurs, piloter des

lisible, car chiffré.

montages connectés et analyser

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

Le lien entre TTN

et Cayenne se fait

par le biais d’une

« intégration » (au

sens mathématique

du terme), un joli

mot pour dire que

les données sont

« intégrées » ou

accumulées quelque

part.

leur fonctionnement. Cayenne

Vous devrez commencer par créer gratuitement

n’est pas spécifique à LoRaWAN,

un compte sur https://cayenne.mydevices.com et

mais permet une gestion d’objets

ce faisant vous arriverez directement sur une page

connectés de plusieurs façons

vous permettant de sélectionner un périphérique

(Wifi, Ethernet, 3G, etc.). LoRaWAN

pour créer un projet. Choisissez alors LoRa (en

avec TTN n’est qu’un moyen

bêta actuel ement), The Things Network (à gauche) parmi plusieurs. Notez égale-et dans la liste à droite choisissez Cayenne LPP puis ment que Cayenne n’est pas le

renseignez les informations utiles :

seul site à proposer ce genre de

• Name : le nom du périphérique/node ;

choses, mais il est fort pratique

pour obtenir un premier résultat

• DevEUI : l’identifiant unique du node, à copier/

présentable.

col er depuis la console TTT ;

Dès que les

informations de

votre premier

node arrivent sur

Cayenne via TTN

et un concentrateur

LoRaWAN, vous

devrez les voir

apparaître dans

votre dashbboard.

Vous pourrez

alors configurer la

manière dont ces

informations doivent

être présentées...

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

HACKABLE MAGAZINE n°19

47

EN COUVERTURE

CAPTEUR LORAWAN

• Activation Mode : le mode

déployer vos nodes avec ou sans

d’activation du node, ici

concentrateur déjà en place dans

seul Already Registered

votre voisinage. TTN n’est pas le

(déjà enregistré) est uti-

seul fournisseur existant, mais il

lisable, ça tombe bien

est à mon sens le plus intéressant,

parce que c’est le cas ;

car réel ement communautaire.

• Location : choisissez This

Mais avec cette notion de par-

device doesn’t move et

tage des concentrateurs et cette

spécifiez une adresse

liberté d’utilisation vient également

pour le placer sur la carte

l’importance d’un comportement

OpenStreetMap.

raisonnable. Le fonctionnement

Valider le formulaire et le

même de LoRaWAN, les canaux,

Dashboard devrait apparaître

le débit, le rapport cyclique pour

vous présentant une carte

chaque canal et le nombre de

avec votre node. Revenez

nodes supportés par chaque

ensuite sur la console et choi-

concentrateur, implique une poli-

sissez une intégration avec

tique de partage claire et stricte.

Cayenne. Le « Process ID »

L’élément de base pour cet usage

doit être la longue chaîne de

raisonné est le « temps dans l’air »

caractères se trouvant dans

(air-time), autrement dit le temps

l’URL du dashboard Cayenne,

total de communication radio

Cayenne n’est pas

juste après « /lora/ », vous

entre un node et un concentrateur.

spécifique à LoRaWAN,

devez copier/col er ce texte puis choisir Default

La règle de base est de ne pas

à TTN ou même au

Web. C’est une solution

key dans Access Key avant de valider. Ceci fait, dépasser 30 secondes sur une

prenant également la

TTN commencera automatiquement à relayer

période de 24h.

forme d’une application

les données des messages de votre node à

Le calcul de ce temps quotidien

Android ou iOS (iPhone)

Cayenne et les informations devraient alors

destinée à représenter

n’est pas simple puisqu’il dépend

les informations de

apparaître dans votre dashboard.

de la tail e des messages et de la

plusieurs types de

Ce que vous voyez apparaître dans votre

vitesse de transmission lui même

capteurs communiquant

de différentes façons.

navigateur ce sont les mesures faites par votre

dépendant de la qualité du signal

node, envoyées via les airs en LoRa à un

et donc de la distance entre le

concentrateur LoRaWAN, transitant par TTN

node et le concentrateur. Le débit

pour finalement arriver sur Cayenne. Si vous

est déterminé par la notion de

instal ez l’application Android ou iOS, vous ver-

facteur d’étalement ou spreading

rez les mêmes informations, présentées peu ou

factor en anglais. Noté de SF7 à

prou de la même façon. .

SF12, plus le facteur d’étalement

est important, plus la distance

peut être grande, mais plus la

6. LIMITATIONS, USAGE

communication est lente, et donc

RAISONNÉ ET SERVEUR

de ce fait, le temps « dans l’air »

est important. À titre d’exemple

PRIVÉ

avec un message de 10 octets et

un facteur d’étalement SF12, la

Nous avons couvert ici la base de l’utilisation

limite d’utilisation raisonnée est de

de LoRaWAN et avec l’article précédent (et un

20 messages par jour, mais sera

certain budget) vous devriez être en mesure de

de 500 en SF7.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Créez vos montages Arduino communicants sur LoRaWAN

La communication downlink

(du concentrateur vers un node)

est encode plus réduite puisque

la limite est fixée à 10 messages

par jour. Tout ceci permet d’assu-

rer le support de 1000 nodes par

concentrateur et un fonctionne-

ment optimal du réseau. Si cela

ne vous convient pas, rien ne vous

empêche de vous passer de TTN

et de faire fonctionner votre propre

serveur réseau, TTN met à dispo-

sition les sources et les documen-

tations utiles pour cela. Mais vous

perdrez alors l’idée même derrière

LoRaWAN et la construction d’un

réseau complet communautaire,

alors que le but est justement de

permettre à des utilisateurs ne

pouvant pas installer un concen-

trateur de bénéficier de LoRaWAN

dans leur zone.

Côté application, nous avons

vu qu’il était possible très simple-

ment d’utiliser l’intégration pour

présenter les données dans une

interface web ou une application

mobile avec Cayenne. Là encore,

de nombreuses alternatives

existent aussi bien sous la forme

de services qu’avec des solutions

« maison » via une intégration

HTTP (les données sont envoyées

avec des requêtes GET ou POST à

un serveur web).

Dragino propose également

Enfin, un point que je n’ai pas du

LoRa et LoRaWAN sont deux tech-

un hat pour Raspberry Pi

tout abordé, car l’idée était ici de

nologies qui gagnent rapidement du

utilisant le même module LoRa,

ne se pencher que sur LoRaWAN,

terrain et se popularisent à vitesse

accompagné d’un module GPS

complémentaire (livré sans

est le fait de tout simplement com-

grand V, tout autant que TTN partout

antenne). Ce type de carte

muniquer entre deux points en

dans le monde. Au point qu’il est tout

additionnelle permet de créer

utilisant LoRA. Un exemple de ce

à fait raisonnable de penser que ceci

un node, mais également un

type d’usage est disponible avec la

deviendra le standard de fait avec une

pseudo-concentrateur LoRaWAN

à un seul canal (qui ne sera

bibliothèque LMIC et pourra avan-

couverture importante d’ici peu de

donc pas à proprement parler un

tageusement remplacer une autre

temps. Vous êtes, comme moi, aux

concentrateur compatible).

forme de communication comme

premières loges et avez désormais les

l’utilisation de module nRF24L01.

bases pour vous lancer. . DB

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

HACKABLE MAGAZINE n°19

49

RADIO & FRÉQUENCES

ÉMETTEUR 433 MHZ

CONSTRUISEZ UN

ÉMETTEUR 433 MHZ

POUR REMPLACER VOS

TÉLÉCOMMANDES

Denis Bodor

Dans le 12ème numéro de Hackable, j’avais exposé l’utilisation d’une clé USB TNT pour capter et analyser les signaux radio d’une télécommande à fréquence ainsi que le détournement d’un circuit d’une autre télécommande afin d’envoyer ces mêmes signaux via carte Arduino. Ce bricolage imposait l’utilisation d’une télécommande identique et vous avez été nombreux à vouloir en savoir davantage sur le sujet. Voyons donc à présent comment, à partir d’un hack, obtenir quelque chose d’un peu plus générique et utilisable.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Construisez un émetteur 433 Mhz pour remplacer vos télécommandes La conception et la

fabrication d’antennes,

quels que soit leurs

types ou leurs usages,

est un vaste et complexe

domaine nécessitant

des connaissances et

une certaine expérience.

Lorsqu’on n’en dispose pas,

la solution la plus rapide (et

très certainement la moins

efficace) consiste à tout

simplement tenter de copier

ce qui existe puis à vérifier le

résultat.

L’objet du présent article rapidement arriver au résultat attendu. Vraiment ? Pas si sûr, n’est pas tant de créer

il existe en effet des solutions permettant de prendre les

un module d’émission

composants individuel ement et de les rassembler sur

radio piloté par Arduino

une platine à essai pour reproduire l’élément disponible

que d’étudier comment

clé en main.

il est possible, en partant de ce

La logique est donc la suivante : on commence par réu-

qui est clairement un bricolage,

tiliser comme on peut des éléments rapportés, on analyse

d’arriver à un circuit complet et

le fonctionnement et on se documente sur le composant

reproductible. Le hack que j’avais

central, on reproduit le circuit initial pour créer un proto-

utilisé reposait sur les entrail es

des restes d’une télécommande

type identique et, éventuel ement, on en fait un circuit bien

de source inconnue (l’objet traî-

propre pour disposer d’un « module » générique et repro-

nait simplement dans une de mes

ductible. La partie qui nous intéresse ici est le prototypage

boites « ne pas jeter ») et consis-

sur platine à essai.

tait à utiliser un circuit construit

autour d’un composant si4021 de

Silicon Labs (gamme de produits

1. DANS LES ÉPISODES

EZRadio).

PRÉCÉDENTS...

Ces « restes » réutilisés, après

légère modification (retrait d’une

Je vais rapidement revenir ici sur ce que j’avais couvert

résistance), regroupaient la plu-

dans le numéro 12 afin de rafraîchir vos mémoires et/ou ne

part des éléments nécessaires,

pas exclure les lecteurs ayant raté ces fameux articles.

et ce en offrant une connectique

Bon nombre de télécommandes à fréquence et de

adaptée à une utilisation avec une

dispositifs simples de communication radio utilisent les

carte Arduino. Inutile de le nier, ceci

bandes ISM (pour Industriel e, Scientifique et Médicale).

était un coup de chance puisque

Il s’agit de plages de fréquences utilisables sans licence

sans cela, il aurait été difficile de

spécifique pour les dispositifs et appareils utilisés dans le

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

HACKABLE MAGAZINE n°19

51

RADIO & FRÉQUENCES

ÉMETTEUR 433 MHZ

La platine à essais n’est sans doute pas la

meilleure solution pour ce type de montage,

mais permettra tout de même de tester le circuit

pour, ensuite, se tourner vers une réalisation

moins sensible aux problèmes de connexion,

d’interférence, et de capacité parasite.

domaine domestique. Parmi ces plages de fréquences,

la radio logiciel e, tout le domaine

on trouve cel e al ant de 433,05 Mhz à 434,79 MHz. Bon

est devenu bien plus accessible et

nombre d’équipements (télécommandes, capteurs divers,

les solutions pour hobbyistes ont

sondes météo, prises de courant intel igentes, etc.) uti-

énormément gagné en maturité.

lisent une fréquence proche de 433,92 Mhz.

Il existe maintenant des applica-

En utilisant un récepteur RTL-SDR, qui n’est autre

tions et outils très stables pour

qu’une clé USB de réception TNT (DVB-T) à l’origine,

toutes sortes d’usages, de l’étude

et avec les logiciels adaptés sous Windows, macOS

des signaux eux-mêmes à des

ou GNU/Linux, il est possible de capter et d’étudier les

applications plus précises comme

signaux radio émis par de nombreux équipements et dis-

la réception de messages d’aéro-

positifs. Certains d’entre eux sont relativement complexes,

nefs (ADS-B), la simple réception

d’autres plus simples et enfin, d’autres, facilement acces-

de radios FM, les applications en

sibles sans même avoir besoin de se documenter grande-

radio-astronomie, la réception de

ment sur le sujet.

messages de pagers, etc.

Depuis l’arrivée en masse de ces récepteurs DVB-T pour

Dans le numéro 12 du maga-

un usage radio amateur, et plus exactement ce qu’on appel e zine, nous avons utilisé un récep-Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) 52

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Construisez un émetteur 433 Mhz pour remplacer vos télécommandes teur de ce type pour détecter,

généralement dédié à une tâche précise, mais les com-

capturer et analyser les messages

posants qui en forme le cœur sont génériques et souvent

d’une télécommande de prise de

présents dans différents modèles similaires, toutes marques

courant grâce à un outil appelé

confondues. Le composant en question est ici une puce

rtl_433 (https:/ github.com/

si4021 de chez Silicon Labs.

merbanan/rtl_433) sur Raspberry

Cette puce peut être utilisée dans plusieurs gammes de fré-

Pi (ou un PC GNU/Linux). Ce

quences (433 Mhz, 868 Mhz, 915 Mhz) et dans deux modes :

petit programme utilise un récep-

FSK et OOK. FSK pour Frequency-Shift Keying ou modulation

teur RTL-SDR afin de capter les

par déplacement de fréquence, permet d’envoyer des données

messages de quelques 80 équi-

binaires (0 et 1) en faisant varier la fréquence du signal de 30

pements, généralement utilisant

à 210 kHz par rapport à la fréquence de base (porteuse). Ceci

la fréquence de 433,92 Mhz, et

est rarement utilisé avec des systèmes simples comme des

affiche les résultats interprétés

télécommandes où OOK est plus populaire. OOK signifie On-

lorsqu’un message est reçu. Il

off keying, c’est une modulation d’amplitude très simple où ce

peut s’agir d’un bouton appuyé

sont la présence et l’absence de signaux à la fréquence définie sur une télécommande ou une

qui forment les données binaires (un peu comme du morse,

sonnette, une information d’un

mais avec la présence/absence de signal et non des blancs,

capteur de température ou encore,

des courts et des longs).

par exemple, un message concer-

nant une instal ation de suivi de

Dans le cas qui nous intéresse ici, comme pour la plupart

consommation électrique.

des communications de ce type, la fréquence est sur la plage

de 433 Mhz et en OOK. Le si4021 possède également deux

Mais rtl_433 va plus loin.

modes de fonctionnement : en mode EEPROM où en mode

Lorsqu’un message est reçu, mais

microcontrôleur. Le premier mode utilise une simple mémoire

ne peut pas être interprété, car le

SPI et le si4021 se débrouil e seul sans partie « active », et le périphérique qui l’a envoyé n’est

second fait du si4021 un simple outil de communication piloté

pas connu, il est possible d’afficher

par un microcontrôleur (comme celui d’une carte Arduino).

des informations complémentaires

C’est ce second mode qui est utilisé ici.

concernant le signal et ainsi décou-

vrir les données qui le composent.

On peut donc littéralement voir les

2. RECONSTRUIRE APRÈS AVOIR

données transportées et les utiliser

de la façon qui nous chante.

RÉUTILISÉ

Dans l’article du numéro 12,

Je ne m’étendrais pas davantage concernant la réalisation

nous avons utilisé cette fonction-

el e-même si ce n’est en précisant qu’on utilise rtl_433 avec nalité pour obtenir le message

l’option -a pour obtenir les données de chaque bouton et qu’on binaire correspondant à chaque

réutilisera cel es-ci directement dans un croquis Arduino repo-

pression de bouton sur une télé-

sant sur la bibliothèque RCSwitch. Ce croquis a pour tâche commande et avons ensuite réu-de configurer le si4021 (fréquence utilisée, paramètres, mode,

tilisé ces données pour envoyer

etc.) et une sortie de la carte Arduino est utilisée pour activer/

les mêmes messages à partir d’un

désactiver l’émission du signal pour former les 1 et les 0. Ceci montage « maison » constitué

est le travail de RCSwitch alors que la configuration du si4021

d’une carte Arduino et de l’élé-

en SPI est faite « manuel ement ».

ment récupéré d’une autre télé-

Dans le précédent article, nous avons récupéré un mor-

commande.

ceau de circuit « tout fait » que nous avons simplement mis

Ceci a été rendu possible par

en œuvre pour une utilisation différente. C’est très bien,

le fait que ce type de produit est

cela fonctionne, mais. . que faire si nous voulons reproduire

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

HACKABLE MAGAZINE n°19

53

RADIO & FRÉQUENCES

ÉMETTEUR 433 MHZ

le montage ? Trouver d’autres entrail es de télécom-

surtout présentant des applica-

mandes ? Ceci semble assez difficile. . L’approche et

tions typiques aussi bien pour le

l’objet de cet article, consisteront donc à se documen-

mode EEPROM que pour le mode

ter et à reproduire le circuit en question, du mieux pos-

microcontrôleur. On trouve ainsi

sible (et ce sera loin d’être parfait).

un sympathique schéma corres-

Vous l’avez compris, avant toutes choses, il faut

pondant peu ou prou à ce qui est

mettre la main sur des si4021. Fort heureusement,

utilisé sur le circuit précédemment

ceux-ci se trouvent assez facilement en ligne (sur eBay

récupéré.

par exemple, mais aussi Banggood, Aliexpress, Etsy,

Ce schéma présente une

La documentation

Tindie, etc.). J’ai trouvé les miens sur eBay auprès d’un

utilisation complète des fonc-

technique du si4021

vendeur appelé liaoxiyuan pour 25€ pour 10 pièces

propose une mise en

tionnalités du composant. Nous

(avec 6€ de port). Ce type de composant n’est pas vrai-

œuvre typique avec

n’avons pas besoin de tout cela

un microcontrôleur.

ment monnaie courante, mais reste relativement facile

et pouvons donc simplifier les

Nous pouvons nous

à trouver en cherchant sur plusieurs sites.

choses. La led connectée à

en inspirer pour

reproduire le circuit

En attendant patiemment la livraison on peut ensuite

la broche nSEL du si4021 par

qui nous intéresse,

se pencher sur la documentation technique (datasheet)

exemple ne fait que signaler le

tout en écartant

regroupant toutes les spécifications et informations

passage à l’état bas de la ligne

les fonctionnalités

qui n’ont aucune

sur la manière d’utiliser le composant, mais aussi, et

CS (Chip Select) de la connexion

importance.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Construisez un émetteur 433 Mhz pour remplacer vos télécommandes En simplifiant à l’extrême le circuit

proposé, les choses deviennent

drastiquement plus claires. Nous

n’avons pas besoin des boutons,

ni de la led sur nSEL (/CS), ni

de la broche nIRQ, ni même du

signal CLK provenant du si4021

à destination du microcontrôleur.

Ici, j’ai même retiré du schéma les

condensateurs de filtrage, partant

du principe que notre tension

d’alimentation sera bien propre et

fournie par la carte Arduino (un ou

deux condensateurs placés sur la

platine à essais sont néanmoins

de bon ton).

SPI. En d’autres termes, el e

masse) : trois pour la communication SPI (MOSI, SCK et CS)

indique lorsqu’on communique

et une pour contrôler l’émission du signal (en OOK).

avec le circuit intégré. Ce n’est

Seuls trois « problèmes » doivent alors être réglés : la

pas utile. Pas plus d’ail eurs que

connexion physique du composant, l’ajout d’un oscil ateur à

les boutons-poussoirs connectés

quartz et l’antenne.

à PB1, PB2, PB3 et PB4. Nous

pilotons directement l’émission

via la broche FSK et n’avons que

2.1 Adaptation du composant

faire des boutons.

Lorsqu’on parle d’électronique hobbyiste, la plupart des

Nous avons ensuite la broche

composants utilisés sont généralement du type traversant

CLK destinée à fournir au micro-

(ou traditionnels), car ceux-ci peuvent facilement être utilisés contrôleur un signal d’horloge

lors du prototypage sur platine à essais et ensuite, dans une

configurable entre 1 et 10 Mhz,

réalisation finale, sur plaques pastil ées ou à bandes. De tail e inutile ici. Et enfin nous avons

assez conséquente, ils sont donc parfaitement adaptés pour

la broche nIRQ qui est surtout

ce type d’usage.

utilisée en rapport avec les chan-

Lorsqu’on parle cependant d’électronique professionnelle

gements d’état du si4021 et en

ou de réalisation industriel e, ce type de format est presque

particulier la mise en sommeil. Là

totalement écarté à présent, au bénéfice de composants mon-

encore, ceci n’a pas grand intérêt

tés en surface (SMD ou CMS). Cette transition, qui s’est dérou-

pour nous pour le type d’utilisation

lée en plusieurs années, présente de nombreux avantages :

que nous envisageons.

des composants et donc des circuits plus petits (intégration), il En retirant du schéma proposé

y a moins d’étapes pour la réalisation (peu de trous à percer), tout ce qui n’est pas strictement

il y a plus d’automatisation de la fabrication, ce qui induit une utile pour notre application, les

réduction des coûts, etc. Seuls problèmes : la maintenance

choses deviennent bien plus

et les réparations sont plus difficiles, et l’utilisation hobbyiste simples. Au final, nous n’avons

nécessite davantage d’équipement si on veut travail er confor-

besoin que de quatre connexions

tablement (four à refusion, station à air chaud, etc.). Il reste entre la carte Arduino et le si4021

possible d’utiliser ces composants, jusqu’à une certaine tail e, (en plus de l’alimentation et la

avec un simple fer à souder ou une station de soudage, mais

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

HACKABLE MAGAZINE n°19

55

RADIO & FRÉQUENCES

ÉMETTEUR 433 MHZ

ceci demande de la minutie, de la précision et un peu de

Vient alors l’étape de la sou-

pratique. En cas d’utilisation courante de ces formats, cela

dure du composant sur le circuit

conduira forcément, à un moment, à l’achat (ou la construc-

imprimé. Il est important de signa-

tion) d’équipements plus adaptés.

ler ici que, même s’il peut être

Dans le cas qui nous intéresse ici, nous n’avons pas le

tentant de souder en premier les

choix du format de composant, le si4021 n’est disponible

connecteurs au pas de 2,54 mm

qu’en TSSOP16 (pour Thin-Shrink Small Outline Package,

pour ensuite placer l’ensemble sur

16 broches). Ce format utilise des broches entre 0,19 et

une platine à essai pour plus de

0,30 mm de large dont le centre est espacé de 0,65 mm. Le

stabilité, c’est généralement une

si4021, dans son ensemble avec ses pattes, ne fait que 6,4

mauvaise idée. Mieux vaut s’assu-

mm sur 5 mm. Il est possible, à cette échel e, de s’amuser à

rer une certaine liberté de mouve-

souder des fils sur les pattes qu’on connectera ensuite à des

ment et commencer par la partie

broches au pas de 2,54 mm, mais il y a bien plus simple. .

la plus difficile et la plus petite.

La solution consiste à utiliser un petit circuit imprimé,

L’usage d’une pince brucelles

généralement double face, proposant un emplacement au

est un avantage certain, et de

format du composant au centre et des emplacements à

préférence un modèle de qualité,

souder au pas de 2,54 mm sur les côtés, donnant ainsi un

à pointes fines, assurant un maxi-

format DIP (Dual In-line Package). Il existe de nombreux

mum de précision. Vous pouvez

modèles de circuits imprimés permettant ainsi d’adapter plus

cependant faire sans, à condition

ou moins tous types de formats de composants. Générale-

d’utiliser quelque chose de pointu

ment, chacun d’eux supporte deux formats différents, un sur

pour déplacer et maintenir le com-

chaque face, et fait donc du composant un ensemble utili-

posant en place. De l’étain d’un

sable sur platine à essai.

diamètre le plus fin possible est

également un plus, vous permet-

Dans le cas du si4021, le circuit imprimé à utiliser est

tant de doser avec précision la

un adaptateur TSSOP16 vers DIP16, qui accessoirement

quantité utilisée. Enfin, du flux de

peut aussi, de l’autre côté, servir d’adaptateur SSOP16 vers

soudure (liquide de préférence)

DIP16. J’ai acheté les miens sur eBay auprès d’un vendeur

appelé happy-zp pour trois malheureux euros (port offert)

est quelque chose qui vous rendra

pour 5 pièces.

la tâche véritablement aisée en

permettant à l’étain de se glisser

rapidement aux bons endroits et,

par la même occasion, de net-

toyer les connecteurs et les pattes

(même si les circuits imprimés de

Les petits

ce genre arrivent généralement

circuits imprimés

permettant

étamés).

l’adaptation

des formats de

La technique est relativement

composants

simple pour un circuit intégré. On

sont sans le

commence par faire fondre un peu

moindre doute

d’étain sur un connecteur à l’un

l’approche la

plus efficace

des coins de l’emplacement, puis

et rapide si on

on place délicatement le com-

a affaire à des

posant en place. Cette première

composants

comme le

soudure permet de fixer le compo-

si4021 au format

sant et d’éventuel ement ajuster sa

TSSOP16.

position en chauffant à nouveau

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Abonnez-vous !

Compléter ma

collection en

papier ou en

M’abonner ?

PDF ?

Me réabonner ?

Pouvoir lire en ligne

mon magazine préféré ?

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

http://www.ed-diamond.com

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

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

Voici mes coordonnées postales :

Société :

Nom :

Prénom :

Adresse :

Les Éditions Diamond

Service des Abonnements

Code Postal :

10, Place de la Cathédrale

68000 Colmar – France

Ville :

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

Pays :

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

Téléphone :

E-mail :

Vos remarques :

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

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

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

HACKABLE MAGAZINE n°19

57

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

ABO_formulaire2017_mags_R2.indd 16

21/04/2017 11:41

RADIO & FRÉQUENCES

XXXXXX

Bon d’abonnement

CHOISISSEZ VOTRE OFFRE !

PAPIER + BASE

SUPPORT

PAPIER

DOCUMENTAIRE

Prix TTC en Euros / France Métropolitaine*

1 connexion BD

Offre ABONNEMENT

Réf Tarif TTC

Réf

Tarif TTC

HK

6n° Hackable

HK1

39,-

HK13

169,-

LES COUPLAGES AVEC NOS AUTRES MAGAZINES

i

6n° Hackable

+

6n° MISC

i1

79,-

i13

419,-

6n° Hackable

+

i+

i+1

99,-

i+13

439,-

6n° MISC

+

2n° Hors-Série

J

11n° GNU/Linux Magazine France

+

6n° Hackable

J1

105,-

J13

399,-

J+

6n° Hackable

+

J+1

159,-

J+13

459,-

11n° GNU/Linux Magazine France

+

6n° Hors-Série

K

6n° Hackable

+ 6n° Linux Pratique

K1

75,-

K13

329,-

K+

6n° Hackable

+

K+1

99,-

K+13

359,-

6n° Linux Pratique

+

3n° Hors-Série

LA TOTALE DIAMOND !

L

11n° GLMF + 6n° HK* +

6n° LP

+ 6n° MISC

L1

189,-

L13

839,-

11n° GLMF +

6n° HS

+ 6n° HK* +

6n° LP

+

3n° HS +

L+

L+1

289,-

L+13

939,-

6n° MISC

+

2n° HS

Les abréviations des offres sont les suivantes : LM = GNU/Linux Magazine France | HS = Hors-Série | LP = Linux Pratique | HK = Hackable Particuliers = CONNECTEZ-VOUS SUR :



http://www.ed-diamond.com

pour consulter toutes les offres !

*Les tarifs hors France Métropolitaine, Europe, Asie, etc. sont disponibles en ligne !

Professionnels = CONNECTEZ-VOUS SUR :

http://proboutique.ed-diamond.com

Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) pour consulter toutes les offres !

58

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

*Les tarifs hors France Métropolitaine, Europe, Asie, etc. sont disponibles en ligne !

ABO_formulaire2017_mags_R2.indd 16

15/02/2017 12:01

Construisez un émetteur 433 Mhz pour remplacer vos télécommandes avec la panne du fer. Avant de

Le produit utilisé

souder cette patte, assurez-vous

pour tester le

que le composant est correcte-

montage cloné

sur la base des

ment orienté. Une erreur à ce

restes d’une vieille

niveau n’est pas une catastrophe,

télécommande

mais il n’y a rien de plus énervant

à fréquence

qu’une numérotation de broches

est cette prise

radiocommandée

(sérigraphiée sur le circuit) qui

de marque

ne corresponde pas à cel e du

AquaForte modèle

composant (surtout quand on le

RC-400.

remarque par la suite).

Une fois le placement totale-

ment satisfaisant, on soudera la

patte diamétralement opposée de

façon à bien fixer l’ensemble. Ce

n’est qu’alors qu’on soudera patte

après patte. En cas d’excédent

d’étain et formation de ponds,

pas de panique, il vous suffira

d’utiliser de la tresse à dessouder

ou simplement la panne du fer

bien propre pour corriger l’erreur.

L’étain fondu « veut » al er au bon

endroit naturel ement et la tension

de surface de l’al iage en fusion

fait tout le travail (c’est là que le

très bons résultats. Une inspection minutieuse, à la loupe,

flux est véritablement pratique).

vous permettra de confirmer que le composant est bien

soudé. Vous pouvez ensuite ajouter les broches sur les

Une autre technique appelée

côtés du circuit. Là, la solution la plus simple est de placer

drag soldering débute de la même

les broches (barrettes sécables) sur une platine à essais

manière en soudant une patte du

et placer ensuite le circuit dessus. On pourra alors souder

composant en place. On balaye

rapidement et facilement chaque broche sans avoir à jongler

ensuite les pattes du côté opposé

inutilement.

en une fois avec la panne du fer

D’autres techniques existent, impliquant de la pâte de

tout en ajoutant de l’étain. On

soudure (mélange de micro-bil es d’étain et de flux) et éven-

peut également faire de même en

tuel ement un matériel adapté (station à air chaud, four à

faisant fondre l’étain sur la panne

refusion, etc.). Eh oui, il est effectivement possible aussi

pour ensuite la glisser sur les

d’utiliser une plancha pour ce genre de choses (n’est-ce pas

pattes. Ici l’utilisation de flux est

Nathaël).

presque indispensable et mieux

vaut éviter l’étain en intégrant (flux

core), car celui-ci risque de brûler

2.2 Le quartz

sur la panne du fer avant l’opéra-

À présent que le si4021 se trouve dans un format utili-

tion et la rendra plus difficile.

sable plus facilement, il est temps de passer au montage

Personnellement, la première

lui-même. Sur la platine à essai, on disposera simplement

technique me convient parfaite-

le composant au centre en établissant les connexions (ou

ment et donne généralement de

futures connexions) suivantes avec la carte Arduino UNO :

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

HACKABLE MAGAZINE n°19

59

RADIO & FRÉQUENCES

ÉMETTEUR 433 MHZ

• 1 MOSI sur 11,

trouve ou se récupère facilement

• 2 SCK sur 13,

un peu partout. La fréquence du

quartz est généralement imprimée,

• 3 nSEL sur 10,

sérigraphiée ou gravée sur l’enve-

• 9 XTL : quartz,

loppe métal ique, mais ceci n’est

• 10 VSS : masse,

pas suffisant. Dans notre cas, nous

avons besoin d’une fréquence de

• 11 MOD : +5V (si4021 en mode

10 Mhz, mais un autre paramètre

microcontrôleur),

doit être connu pour garantir la

• 12 RFN : antenne -,

précision de la fréquence d’émis-

On voit ici clairement que

même en ayant bien configuré

• 13 RFP : antenne +,

sion : la valeur du condensateur de

le si4021 pour une émission

charge du quartz.

sur 433,92 Mhz, le signal

• 15 VDD : +5V,

détecté par le récepteur RTL-

Les quartz sont tail és de

• 16 FSK : 8.

SDR est décalé de quelques

façon à fournir une oscil ation à

100 Khz. Ceci provient

Comme le montre le schéma simplifié

la fréquence pour laquel e ils sont

d’un mauvais réglage des

condensateurs de charge pour

tiré de la documentation du si4021, la

conçus en utilisant en paral èle

le quartz attaché au si4021.

broche 9 est connectée à un oscil ateur

un condensateur d’une valeur

En augmentant cette valeur à

à quartz dont l’autre broche est reliée

précise. En d’autres termes, la

son maximum (16 pF) dans la

à la masse. Ce type de composant se

fréquence ne sera juste qu’à

configuration, tout rentre dans

l’ordre.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Construisez un émetteur 433 Mhz pour remplacer vos télécommandes condition d’utiliser la valeur de

condensateur adéquate. Si la valeur

est plus importante que cel e préconi-

sée par le fabricant, la fréquence sera

plus basse, et inversement. Le si4021

dispose d’une fonction d’ajustement

automatique de l’antenne, mais ceci

n’a aucune importance si le quartz ne

résonne pas à la bonne fréquence à

la base.

Dans bien des cas, lorsque vous

récupérez un quartz sur un circuit ou

en achetez sur un site d’enchères en

ligne (ou autre), vous n’avez pas de

Si vous souhaitez disposer

mention du modèle exact (tantôt pas même la marque) et n’avez donc aucune d’une documentation

idée des spécifications techniques.

complète pour un oscillateur

à quartz, inutile de vous

Ici, nous avons la chance de pouvoir régler cette valeur de façon logiciel e tourner vers un achat sur

puisque ces condensateurs de charge sont intégrés au si4021. Il ne s’agit donc eBay ou une récupération

dans un autre matériel.

que de choisir une configuration pour utiliser des valeurs entre 8,5 pF et 16 pF

Il est presque impossible

(par incrément de 0,5 pF). Ceci permet de procéder par tâtonnement en réglant de trouver ne serait-ce

une valeur de configuration et en utilisant le montage, tout en inspectant avec que le fabricant à partir

un logiciel SDR si l’émission se fait sur la bonne fréquence.

du composant lui-même.

L’achat chez un détaillant de

Le croquis utilisé dans le précédent article a sensiblement évolué depuis sa composants électroniques

après sélection du modèle

parution en définissant un certain nombre de fonctions et de macros permet-aux caractéristiques précises

tant de s’y retrouver facilement dans les bits servant à la configuration (cette qui vous conviennent est la

nouvel e version est disponible dans le dépôt GitHub du numéro). Ainsi, la seule approche raisonnable.

commande envoyée pour la configuration du si4021 est, à présent, « calculée »

avec cette fonction :

uint16_t confset(float freq) {

if(freq < 440) {

return(CONFSET | CS_CLK10000 | CS_BAND433 | CS_CAPA160);

} else if (freq < 880) {

return(CONFSET | CS_CLK10000 | CS_BAND868 | CS_CAPA160);

} else if (freq < 930) {

return(CONFSET | CS_CLK10000 | CS_BAND915 | CS_CAPA160);

} else {

return(0);

}

}

On lui passe simplement la fréquence à utiliser et cel e-ci sert de base pour le choix des bits de configuration. La valeur sur 16 bits retournée comprend les trois bits correspondants à la commande, la configuration de la fréquence géné-

rée sur la broche CLK, les bits permettant le choix de la bande et ceux définissant la capacité pour le quartz. Il suffit donc de choisir la bonne macro définie dans si4021.h et de faire un test. On observe ensuite le signal dans le logiciel Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°19

61

RADIO & FRÉQUENCES

ÉMETTEUR 433 MHZ

utilisant une clé RTL-SDR calée sur 433 Mhz et on ajuste

la plus délicate : l’antenne.

en conséquence : trop haut on augmente la capacité, trop

La conception, le réglage,

bas on la réduit. Comme le précise la documentation du

l’utilisation et la mise au point

si4021 (lorsqu’on la lit entièrement), du fait du réglage au-

d’antennes sont un domaine à

tomatique de l’antenne, un décalage de fréquence ne peut

part entière, reposant sur des

venir que de la fréquence de référence : cel e du quartz

concepts et des connaissances

utilisé.

relativement complexes.

Bien entendu, la solution la plus simple est de tout bon-

Le si4021 intègre, heureuse-

nement commander un (ou des) quartz de 10 Mhz avec

ment pour nous, un circuit de

une capacité de charge précise, connue et choisie, auprès

réglage automatique de l’antenne

d’un détail ant de composants (Farnel , Mouser, Digikey,

(automatic antenna tuning cir-

etc.). Le petit problème dans ce cas, surtout pour moi, est

cuit dans la documentation) et

le fait que le port n’est offert qu’à partir d’un certain mon-

le contrôle direct d’une antenne

tant de commande, ce qui incite à ajouter des choses dans cadre (loop antenna en anglais) son panier et à finir avec une facture bien loin de la poi-via un amplificateur. Aucun com-

gnée d’euros initialement prévue pour quelques quartz. .

posant ou circuit supplémentaire

n’est nécessaire pour connecter

2.3 L’antenne

l’antenne et dans ce cas précis,

cel e-ci est généralement intégrée

Nous avons réglé le problème de format du compo-

au circuit imprimé sous la forme

sant et celui de l’oscil ateur permettant au composant

de pistes sur le support (il est

de fonctionner en étant correctement configuré. Mais

possible d’utiliser un autre type

il reste maintenant ce qui est, à mon sens, la partie

d’antenne avec le si4021, mais il

faut alors créer un balun nécessi-

tant différents composants décrits

dans la documentation, page 28).

L’antenne-cadre est directe-

ment connectée à l’amplificateur

qui présente deux sorties à col-

lecteur ouvert notées RFN et RFP.

Circuit avec mesures

Ce schéma de branchement est

pour la création d’une

antenne-cadre pour la

désigné, du moins chez Silicon

bande 434 Mhz telle

Labs, d’antenne différentiel e

que présentée dans

à haute impédance. Comme le

le guide de sélection

recommande un message dans

d’antennes EZRadio

(la gamme de circuits

la base de connaissances Silicon

intégrés à laquelle

Labs, il est important de connecter

appartient le si4021).

l’antenne directement au plus près

Ceci peut nous

des pattes du si4021, ce qui est le

servir de base pour

la confection d’une

cas du circuit de télécommande

antenne « maison »,

de récupération, par exemple.

qui sera loin d’être

optimale, mais qui,

Trouver des informations ac-

grâce au réglage

cessibles sur ce type d’antenne-

automatique intégré

cadre n’est pas chose facile et on

au si4021, devrait

finalement faire un

en arrive invariablement à la récu-

travail acceptable.

pération (tant bien que mal) du

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Construisez un émetteur 433 Mhz pour remplacer vos télécommandes guide de conception d’antennes

ration du précédent article. Il n’y

EZRadio (référence IA ISM-AN2),

a cependant pas de quoi fanfa-

un document de 46 pages, cer-

ronner, car l’aspect « bricolo » du

tainement parfaitement intelligible

montage est plus qu’évident et

par quelqu’un ayant de l’expé-

ferait grincer des dents, je pense,

rience dans ce type d’exercice (ce

n’importe quel radio-amateur

qui n’est pas mon cas). On pourra

digne de ce nom.

aussi consulter le guide de sélec-

D’autres facteurs que la réa-

tion d’antennes (IA ISM-AN1) qui

lisation de l’antenne et sa symé-

Le si4021 en

présente un circuit imprimé (page

trie sont importants. On peut par exemple, en cas de

boîtier TSSOP16

14) pour l’antenne d’émission en

problème filtrer davantage l’alimentation en plaçant

est absolument

434 Mhz ressemblant fortement

minuscule, mais

plusieurs condensateurs entre +5V et la masse au

à cel e du circuit de récupération

il reste possible,

plus proche de l’antenne. On peut également ajuster

avec un simple fer à

et cel e dans la documentation du

la puissance de l’amplificateur (atténuation) dans le

souder et beaucoup

si4021. Mais là, nous avons des

croquis ou encore tout simplement souder l’antenne

de patience, de le

mesures !

mettre en œuvre

au circuit d’adaptation TSSOP/DIP et non l’enficher

assez facilement.

La solution que j’ai donc choisi

sur la platine à essais. À chaque modification, véri-

Pour d’autres

d’utiliser est assez empirique

fiez le résultat avec votre application SDR pour vous

formats, comme le

BGA par exemple,

puisqu’il s’agit de simplement uti-

assurer de la qualité du signal et l’absence d’harmo-

un équipement

liser ces informations et mesures

niques ou de signaux sur d’autres fréquences qui

spécifique sera

pour construire une antenne plus

apparaissent en même temps que sur la fréquence

en revanche

ou moins similaire. Ceci pourra

fondamentale (cel e que vous avez réglée).

indispensable.

être fait assez facilement en uti-

lisant un morceau de câble en

cuivre rigide gainé d’environ 9 cm

CONCLUSION

de long (+ la partie s’enfonçant

Nous avons ici montré que, même si un certain

dans la platine à essai). Celui-ci

nombre de problèmes pratiques peuvent sembler

se verra soudé en son centre pour

nous barrer la route, il existe des moyens d’arriver

ajouter une connexion à la ten-

à ses fins lorsqu’on souhaite reproduire un circuit

sion d’alimentation et ainsi former

qui n’existe pas sous forme de module. Ainsi, sans

quelque chose d’assez similaire

nécessairement devoir investir dans de l’équipement

aux il ustrations présentes dans

coûteux ou des techniques très avancées, on peut,

les documentations et au circuit

dans une certaine mesure, créer ce qui n’existe pas

imprimé initial.

sous une forme directement utilisable. Mieux encore,

Bien entendu, sur platine à

il devient possible de s’inspirer de circuits existants

essais, les connexions et l’en-

pour créer des déclinaisons simplifiées en ache-

semble du montage impliquent des

tant, à bas coût, le minimum de composants utiles.

capacités qui perturbent le fonc-

Tout ce qu’il vous faut c’est de l’imagination, un peu

tionnement de l’antenne, mais qui

de patience et apprendre à parfois faire quelques

peuvent, dans une certaine mesure concessions.

être prises en charge par le circuit

Le croquis associé avec ce projet, même s’il est

de réglage automatique du si4021.

ici secondaire, est disponible sur le dépôt GitHub

Au final, cela fonctionne, avec une

du magazine à l’adresse https://github.com/

portée tout à fait identique à la fois

Hackable-magazine/Hackable19. Il contient les

à la télécommande d’origine, mais

commentaires nécessaires pour en comprendre le

aussi à cel e du circuit de récupé-

fonctionnement. DB

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

HACKABLE MAGAZINE n°19

63

DÉMONTAGE, HACKS & RÉCUP

CONVERTISSEUR USB

OBTENEZ N’IMPORTE

QUELLE TENSION À

PARTIR DES 5V USB

Denis Bodor

On trouve de tout sur eBay et généralement à des prix très

intéressants. Parmi cette myriade de produits électroniques, certains sont vendus pour un usage spécifique, mais dès lors qu’on en étudie le fonctionnement, on découvre rapidement qu’ils peuvent faire bien plus que ce qui est annoncé. C’est le cas de ces convertisseurs de tension USB vers 12V ou 9V qui cachent de captivants secrets...

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

CONVERTISSEUR USB

Obtenez n'importe quel e tension à partir des 5V USB

Payer peu pour un en sortie, avec une note recommandant de ne pas dépasser produit est inté-

500 mA (ce qui fait tout de même 6 watts).

ressant à bien des

Le simple fait que le produit se décline en une version

niveaux, mais sur-

12V et 9V nous donne déjà un indice intéressant quant à sa

tout, cela permet des construction. Deux cas sont envisageables, soit il s’agit de expérimentations parfois hasar-deux puces ou circuits différents, soit c’est une même puce,

deuses sans vraiment avoir à s’in-

mais avec des réglages variables. Dans cette seconde éven-

quiéter de la destruction probable

tualité, ceci signifie qu’en étudiant le produit il doit être est du matériel. Notre victime pour cet

possible d’ajuster la tension en sortie selon nos besoins. .

article sera un convertisseur de

tension (step-up ou boost conver-

ter en anglais) USB vers 12V

1. DÉMONTAGE ET

vendu sur eBay pour un peu plus

d’un euro. L’objet de ce produit est

DOCUMENTATION

de proposer d’un côté une entrée

5V USB type A mâle et de l’autre

Comme souvent à la réception d’un produit, et en particu-

un connecteur d’alimentation 2,1 x

lier un produit vraiment peu coûteux commandé en quantité

5,5 mm avec une tension de 12V.

(6 exemplaires ici), mon premier mouvement consiste géné-

ralement à partir du principe qu’un sacrifice rituel sur l’autel Ceci permet d’alimenter, par

de la science est justifié. Comprenez par là qu’un exemplaire

exemple, un équipement en 12V

est donc disséqué, ne serait-ce que pour en juger de la qua-

à partir d’un bloc d’alimentation

lité, tout en gardant l’espoir (parfois vain) qu’il puisse être USB 5V ou encore une de ces

éventuel ement réassemblé et tout de même utilisé par la

fantastiques batteries d’appoint

suite (j’avoue, c’est rare).

pour smartphone. Ce produit,

désigné par « USB DC 5V to DC

Fort heureusement ici, le circuit de ce convertisseur est

9V/12V Step-up Module Conver-

placé dans une coque en plastique qui n’est ni col ée ni sou-

ter 2.1×5.5mm Male Connector

dée. L’ouverture du boîtier est donc un jeu d’enfant puisque

Plus » dans l’annonce par un ven-

les deux parties qui le compose sont simplement emboîtées

deur appelé shieldsfan se trouve

et se désolidarisent sans même utiliser d’outil.

un peu partout et se décline

Le démontage révèle peu de composants : une bobine,

généralement en deux versions :

quelques condensateurs de filtrage, une diode, des résis-

sortie 12V ou 9V. La description

tances et un circuit intégré. Ce dernier élément est très inté-

de l’objet précise un courant maxi-

ressant, car il s’agit d’un MT3806 d’Aerosemi Technology.

mum en entrée de 2,1A et 800 mA

Une rapide recherche sur le Web permet d’apprendre, via la

Ceci est un convertisseur de tension

destiné à fournir 12V à partir d’un

connecteur USB délivrant 5V. Attention

toutefois, un port USB d’un ordinateur

ou d’un hub n’est pas capable de fournir

beaucoup de courant (500 mA max). Ce

type de matériel est donc généralement

destiné à une utilisation avec les blocs

d’alimentation et les batteries d’appoint

pour smartphones.

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

HACKABLE MAGAZINE n°19

65

DÉMONTAGE, HACKS & RÉCUP

CONVERTISSEUR USB

parfaitement fonctionner un équi-

pement comme un routeur Linksys

LRT214 de cette façon (je ne sais

pas quand, mais je suis sûr qu’un

jour cela pourra être utile). Nous

avons donc déjà gagné quelque

chose du simple fait d’avoir lâché la

bride à notre curiosité sans même

avoir sorti le fer à souder.

Bien entendu, il existe une

relation évidente entre la tension

en entrée, le courant, la tension

en sortie et le courant fourni. Ce

type d’adaptateur est un step-

Une chance pour nous,

up ou boost converter ou, en

l’ouverture du boîtier et la mise

à nu du circuit est aisée, car

d’autres termes, une alimentation

simplement clipsé. On pourra

à découpage reposant sur l’uti-

donc non seulement modifier le

lisation d’une bobine, qui stocke

circuit comme bon nous semble,

l’énergie sous forme de champ

mais également refermer

proprement le tout sans le

magnétique. C’est cette énergie

moindre problème.

qui s’additionne avec cel e fournie

par l’alimentation source, le tout

cadencé par un MOSFET, qui

permet d’augmenter la tension tout

documentation technique du composant (datasheet), qu’il s’agit

en reposant sur un condensateur

d’un convertisseur de tension (step-up converter) avec des

pour produire un courant continu.

caractéristiques très intéressantes :

Le circuit intégré MT3806

• tension d’entrée entre 2V et 24V ;

embarque le MOSFET et toute la

• tension en sortie ajustable jusqu’à 28V ;

logique permettant d’obtenir ainsi

• haute efficacité (97%) et donc idéal pour les applications

une tension précise via l’utilisation

sur batterie par exemple ;

d’une broche dédiée permettant

• protection thermique en cas de surcharge de courant en

d’avoir une indication de la tension

sortie ;

en sortie. Le composant se charge

• mécanisme de soft start pour éviter un afflux de courant en

alors tout seul d’arriver à la tension

entrée au démarrage ;

choisie en jouant sur le rapport

cyclique appliqué au MOSFET et

• nombre de composants annexes réduit.

donc à l’alimentation de la bobine.

Voilà qui est captivant, car en observant le circuit utilisé dans Le circuit de l’adaptateur est

le convertisseur, on remarque que ce n’est ni plus ni moins que relativement simple et surtout

celui décrit dans la documentation. L’entrée USB est directement monocouche. Ceci signifie qu’il est

connectée au circuit intégré et à la masse ce qui signifie une

très facile d’en suivre la logique à

chose très sympathique : ce convertisseur, sans la moindre modi-l’aide de la documentation du cir-

fication peut donc fonctionner avec bien autre chose que les 5V

cuit intégré.

d’un port USB. Et en effet, après un petit test avec une alimentation de laboratoire, l’adaptateur est effectivement capable de four-Il devient donc très facile de

nir 12V à partir d’une tension de 2V, et même en mesure de faire repérer les composants et de faire

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Obtenez n'importe quel e tension à partir des 5V USB

CONVERTISSEUR USB

La documentation du circuit intégré

MT3608 présente une « utilisation

typique » correspondant parfaitement

au circuit utilisé par l’adaptateur, au

composant près.

le rapprochement entre le schéma

Sur le circuit présent dans le produit, on remarque donc

et la réalisation. La correspon-

immédiatement qu’en influant sur les résistances R1 et R2 il

dance entre l’application décrite

est possible de changer la tension en sortie. Tout ce que nous

dans la documentation et le pro-

avons à faire est finalement de changer un de ces composants,

duit n’a rien de surprenant, c’est

ou les deux, pour adapter le matériel à nos besoins.

généralement le cas dans 90%

des modules et/ou des produits

d’entrée de gamme de ce type.

2. ADAPTEZ LA TENSION À VOS

Tantôt des raccourcis sont faits ou

des composants sont omis pour

BESOINS

réduire les coûts de fabrication,

mais dans les grandes lignes, ceci

Le schéma de la documentation nous montre un circuit rela-

est tout à fait caractéristique de

tivement simple. R1 est connecté entre la tension de sortie et la ce type de matériel. Ceci permet

broche FB (feedback) du MT3608. Cette broche est également

donc tantôt d’en améliorer la qua-

reliée à la masse commune via la résistance R2. Ceci forme

lité, en changeant par exemple les

donc un diviseur de tension tout à fait classique où la différence condensateurs par des compo-de potentiel entre FB et la masse sera Vout x (R2/(R1+R2)).

sants de meil eure qualité, mais

Le mode de fonctionnement du MT3608 consiste à produire

aussi, comme ici, d’adapter le

sur Vout une tension de manière à ce que FB présente 0,6 volts.

matériel à nos besoins.

En d’autres termes, en fonction des valeurs utilisées pour R1

Le circuit imprimé

dans le convertisseur

de tension peut être

analysé rapidement

en suivant simplement

les pistes. Ceci permet

d’identifier précisément

les composants

également mentionnés

dans la documentation

du MT3608. Sur cette

illustration, le travail est

déjà fait, mais prendre

un cliché pour y noter

les désignations des

composants est la marche

à suivre la plus efficace.

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

HACKABLE MAGAZINE n°19

67

DÉMONTAGE, HACKS & RÉCUP

CONVERTISSEUR USB

et R2, le circuit intégré ajustera Vout jusqu’à obtenir 0,6V sur FB. C’est donc le calcul du diviseur de tension qui détermine la mise à 0,6V de FB pour une tension Vout donnée.

Nous pouvons vérifier simplement cela en faisant les calculs sur la base des résistances déjà en place. R1 est marqué 63C et R2 36B, il s’agit d’un codage normalisé E96. En cherchant un peu sur le Web, on apprend ainsi que 63C correspond à 442 x 100, soit 44200 ohms et 36B à 232 x 10, soit 2320

ohms. On peut alors faire le calcul 12V x (2320/(44200+2320) = 0,5984V, soit environ 0,6V. Mais il est plus intel igent de faire le calcul inverse puisque le MT3608 fera en sorte de voir 0,6V sur FB :

FB = 0,6 = Vout * (R2/(R1+R2))

1 = Vout * (R2 / (R1+R2)) / 0,6

1 / Vout = (R2 / (R1+R2)) / 0,6

Vout = 1 / ((2320 / (44200+2320)) / 0,6) = 12,0310V

Pour procéder aux tests

On retombe donc effectivement sur les 12 volts présents à la sortie du convertisseur.

sans dessouder

Mais en triturant un peu la formule, on peut également arriver à quelque chose de plus le connecteur USB

simple qui nous permettra de choisir plus facilement les valeurs de résistance : du convertisseur, rien

de plus simple : il

suffit de bricoler un

FB = 0,6 = Vout * (R2 / (R1+R2))

connecteur USB femelle

en lui soudant des

0,6 = Vout * (R2 / (R1+R2))

broches au pas de

2,54 mm. De simples

Vout / 0,6 = (R2 / (R1+R2))

câbles standards

« dupont » peuvent

Vout / 0,6 = (R1 / R2) + 1

ensuite être utilisés

pour la connexion

à l’alimentation de

(Vout / 0,6) - 1 = R1 / R2

laboratoire ou à

n’importe quelle autre

(12 / 0,6) - 1 = R1 / R2 =~ 19

source.

Nous pouvons donc nous amuser à changer R1 et/ou R2 pour modifier la tension en sortie. Imaginons alors que vous ayez besoin d’une tension de 15V pour un montage ou un appareil quelconque, et que nous ne souhaitons changer qu’un composant : (15 / 0,6) - 1 = R1 / R2

25 - 1 = R1 / R2

24 = R1 / R2

24 = 44200 / R2

24 x R2 = 44200

R2 = 44200 / 24 = 1841,66

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Obtenez n'importe quel e tension à partir des 5V USB

CONVERTISSEUR USB

En remplaçant R1 par une

suffit de mettre d’en paral èle une seconde de 8,2 Kohms pour

résistance de 55,650 Kohms, nous

obtenir : (2320 x 8200) / (2320 + 8200) = 1808,36 ohms. C’est

obtiendrons la tension souhaitée.

une valeur suffisamment proche des 1841,66 pour obtenir alors

Mais comme une tel e résistance

Vout = 1/(1800,36/(1800,36+44200)/0,6) = 15,26 volts. Une

n’existe pas dans une série norma-

résistance de 10 Kohms fonctionnerait peut-être aussi selon l’utilisée, nous opterions pour 56 Kohm lisation des 15V, mais je vous laisse faire le calcul afin de savoir avec pour résultat : Vout = 1/(1800/

pourquoi...

(1800+44200)/0,6) = 15,33, ce qui

généralement fera l’affaire.

2.1 Pour finir

Dessouder et ressouder des

Ici, nous avons joué avec R2, mais il est également possible

composants CMS comme ceux-ci

de s’occuper de R1 ou des deux résistances de concert de la

est cependant très pénible. Ce

même manière. On pourra même éventuellement retirer les deux

qu’on pourra faire, en revanche,

résistances et mettre en place un montage un peu plus évolué en c’est placer une résistance en

reliant la masse, Vout et FB à une platine pastil ée équipée d’une paral èle à R2, en soudant tout

résistance standard (non CMS) à la place de R2 et d’un potentio-simplement une nouvel e résis-

mètre pour remplacer R1. On obtiendrait alors une alimentation

tance de plus grande valeur par-

avec une tension réglable pour des usages spécifiques. Nous

dessus cel e déjà présente.

serons très loin d’une alimentation ajustable digne de ce nom,

Rappelons que les valeurs des

mais pour quelques tests ponctuels cela sera bien suffisant.

résistances connectées en série

Enfin, comme le MT3608 accepte une tension en entrée d’un

s’additionnent, mais que cel es en

minimum de 2 volts, cette même technique pourra être utilisée

parallèle répondent au calcul :

pour obtenir 5V à partir de 3,3V ou encore à partir d’une paire de 1/Req = 1/R1 + 1/R2 + 1/R3 +. . où

piles AA ou AAA. Là, comme la tension de coupure du MT3608

Req est la résistance équivalente,

est de 1,98V, le risque de sur-déchargement des piles est limité ce qui se transforme dans le cas

et il sera toujours possible d’ajouter une liaison entre le montage de deux résistances en Req = (R1

et l’anode des piles pour surveil er la tension et en déduire la x R2) / (R1 + R2). Comme nous

capacité restante. Ceci ouvre clairement la porte à une solution avons déjà en place une résis-très économique permettant d’utiliser, par exemple, une carte

tance R2 de 2320 ohms, il nous

Arduino sur piles à très faible coût et pour peu d’effort. DB

L’ajout d’une résistance CMS

supplémentaire par dessus celle

existante demande un peu de

finesse et de dextérité, mais

cela reste bien plus facile que

de dessouder le composant déjà

en place pour le remplacer. En

plaçant sa langue selon le bon

angle et en retenant son souffle,

on arrive à faire quelque chose

qui ne fasse pas trop « pâté »

et on finit par avoir les 15V

attendus.

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

HACKABLE MAGAZINE n°19

69

EMBARQUÉ & INFORMATIQUE

FIRMWARE PI

OBTENIR LES

INFORMATIONS DU

FIRMWARE DE VOTRE

RASPBERRY PI

Laurent DELMAS

Sur chaque ordinateur, il existe un logiciel embarqué qui permet de démarrer et de vérifier le matériel, et ce, avant même que votre système d’exploitation ne soit démarré. Il s’agit du BIOS, UEFI ou bien d’un firmware spécifique comme dans le cas du Raspberry Pi. Nous allons voir comment obtenir les informations matérielles de notre machine au travers de ce logiciel embarqué.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Obtenir les informations du firmware de votre Raspberry Pi

1. DÉMARRAGE DU

RASPBERRY PI

Avant même de pouvoir utiliser un

système d’exploitation GNU/Linux,

Mac OS, Windows… tout système doit

démarrer, initialiser et vérifier les com-

posants constituant la machine que ce

soit une tablette, un serveur, un ordi-

nateur de bureau, un smartphone ou

bien un nano-ordinateur. C’est le but du

BIOS, système élémentaire d’entrées

sorties (Basic Input Output Système),

recenser et vérifier les éléments de la

machine. En cas de problème, il émet

une succession de bips permettant ainsi

de diagnostiquer le problème. Le Rasp-

berry Pi, quant à lui, ne possède pas

de BIOS, mais un firmware spécifique

qui se trouve sur la première partition

de la carte mémoire. Comme vous avez

pu le constater par ail eurs, une carte

mémoire contenant une distribution

Raspbian présente deux partitions,

l’une au format VFAT dont le point de montage est /boot qui contient le noyau statique, les fichiers de configuration et le firmware lui-même puis une partition au format ext4 avec la racine du système /.

pi@raspberrypi:~$ lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

mmcblk0 179:0 0 14.9G 0 disk

├─mmcblk0p1 179:1 0 63M 0 part /boot

└─mmcblk0p2 179:2 0 14.8G 0 part /

Le firmware est constitué de trois fichiers : bootcode.bin , start.elf et le fichier de configuration associé config.txt. L’ensemble est exécuté à la mise sous tension par le processeur graphique (GPU) intégré dans le cœur du SoC (System on Chip) Broadcom du Raspberry Pi.

Contrairement au BIOS qui émet une succession de bips en cas de problème lors de l’initialisation du matériel, le firmware du Raspberry Pi affiche des icônes différentes en fonction du problème détecté. Trois types de problèmes peuvent survenir :

• une chute de tension, c’est-à-dire un problème d’alimentation, représenté par un éclair à l’écran ;

• une surchauffe du processeur signalée par un thermomètre rouge à mi-niveau ;

• une surchauffe du processeur graphique (GPU) pour lequel s’affiche un thermomètre rouge plein.

Lorsque le firmware a terminé d’initialiser et vérifier les composants du Raspberry Pi, il démarre ensuite le noyau Linux également situé dans la partition /boot.

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

HACKABLE MAGAZINE n°19

71

EMBARQUÉ & INFORMATIQUE

FIRMWARE PI

2. INSTALLATION

Le firmware du Raspberry Pi n’étant pas un BIOS, les outils classiques tels que dmidecode ne fonctionnent pas, il faut donc utiliser un outil spécifique nommé vcgencmd pour accéder aux informations du firmware. vcgencmd est instal é avec le paquet rpi-update. Cet outil a la particularité de lire les caractéristiques du SoC (System On Chip ou système embarqué) via diverses commandes qui lui sont passées en paramètres. L’instal ation s’effectue de façon toute à fait classique : pi@raspberry:~$ sudo apt-get install rpi-update

3. PRISE EN MAIN

Nous al ons apprendre maintenant comment utiliser l’outil vcgencmd. Tout d’abord, utilisons le paramètre commands afin d’obtenir la liste complète des commandes accessibles.

pi@raspberry:~$ vcgencmd commands

commands="vcos, ap_output_control, ap_output_post_processing, vchi_

test_init, vchi_test_exit, pm_set_policy, pm_get_status, pm_show_stats, pm_start_logging, pm_stop_logging, version, commands, set_vll_dir, set_

backlight, set_logging, get_lcd_info, arbiter, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_

volts, scaling_kernel, scaling_sharpness, get_hvs_asserts, get_throttled, measure_temp, get_config, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_

show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, dispmanx_list, get_rsts, schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_

status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_

validate, mem_oom, mem_reloc_stats, hdmi_cvt, hdmi_timings, file, vctest_

memmap, vctest_start, vctest_stop, vctest_set, vctest_get"

Il apparaît une liste de commandes conséquentes. Nous al ons découvrir les principales. Tout d’abord, prenons par exemple la commande measure_clock qui permet de mesurer la fréquence d’horloge d’un des paramètres du microprocesseur. La commande est suivie du nom de l’horloge souhaitée parmi la liste suivante : arm core h264 pixel emmc uart v3d isp uart hdmi : pi@raspberrypi:~$ vcgencmd measure_clock arm

frequency(45)=600000000

pi@raspberrypi:~$ vcgencmd measure_clock core

frequency(1)=250000000

pi@raspberrypi:~$ vcgencmd measure_clock uart

frequency(22)=48000000

pi@raspberrypi:~$ vcgencmd measure_clock emmc

frequency(47)=250000000

pi@raspberrypi:~$ vcgencmd measure_clock pixel

frequency(29)=0

pi@raspberrypi:~$ vcgencmd measure_clock vec

frequency(10)=108000000

pi@raspberrypi:~$ vcgencmd measure_clock hdmi

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Obtenir les informations du firmware de votre Raspberry Pi

frequency(9)=0

pi@raspberrypi:~$ vcgencmd measure_clock h264

frequency(28)=250000000

pi@raspberrypi:~$ vcgencmd measure_clock isp

frequency(42)=250000000

En écrivant un petit script Shel , il est possible d’afficher les fréquences de toutes les horloges.

Ouvrons un éditeur de texte, nano par exemple suivi du nom du fichier à créer, ici horloge.

pi@raspberrypi:~$ nano horloge

Puis saisissons les lignes suivantes :

# !/bin/bash

for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do

echo -e "$src:\t$(vcgencmd measure_clock $src)" ; done

Pour enregistrer le tout dans un fichier, faisons [CTRL] + [O], puis nous confirmons avec la touche [Entrée]. Pour quitter nano, appuyons sur les touches [CTRL] + [X]. Pour en savoir plus sur les scripts Shel , vous pouvez consulter le hors-série n°89 de GNU/Linux Magazine [1]. De même vous pouvez découvrir l’éditeur nano dans Linux Pratique n°100 [2].

pi@raspberrypi:~$ ./horloge

En utilisant la commande measure_temp, nous pouvons afficher la température du processeur.

pi@raspberrypi:~$ vcgencmd measure_temp

temp=40.8’C

La commande get_config est intéressante dans le sens où el e permet d’afficher tous les paramètres de configuration du Raspberry Pi. Paramètres que nous retrouvons dans le fichier config.txt. Nous verrons un peu plus tard dans cet article comment modifier et paramétrer le firmware du Raspberry Pi.

pi@raspberrypi:~$ vcgencmd get_config int

arm_freq=1200

audio_pwm_mode=1

config_hdmi_boost=5

core_freq=250

desired_osc_freq=0x36ee80

disable_commandline_tags=2

disable_l2cache=1

enable_uart=1

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

HACKABLE MAGAZINE n°19

73

EMBARQUÉ & INFORMATIQUE

FIRMWARE PI

force_eeprom_read=1

force_pwm_open=1

framebuffer_ignore_alpha=1

framebuffer_swap=1

gpu_freq=300

hdmi_force_cec_address=65535

init_uart_clock=0x2dc6c00

lcd_framerate=60

over_voltage_avs=0x1cfde

overscan_bottom=32

overscan_left=32

overscan_right=32

overscan_top=32

pause_burst_frames=1

program_serial_random=1

sdram_freq=450

temp_limit=85

Il est également possible de connaître la mémoire

al ouée au processeur et cel e al ouée au GPU avec la

commande get_mem suivie respectivement de arm ou

gpu.

pi@raspberrypi:~$ vcgencmd get_mem arm

arm=944M

pi@raspberrypi:~$ vcgencmd get_mem gpu

gpu=64M

Une autre information utile, en particulier, lorsque nous souhaitons utiliser le Raspberry Pi comme lecteur multimédia et de vérifier quel codec vidéo est activé ou non avec la commande codec_enabled suivie du nom du codec à vérifier h264 mpeg4 mpeg2 mjpg wm9. Pour activer le codec MPEG2, il est nécessaire de faire l’acquisition d’une licence depuis le site officiel du Raspberry Pi.

pi@raspberrypi:~$ vcgencmd codec_enabled MPEG4

MPEG4=disabled

pi@raspberrypi:~$ vcgencmd codec_enabled H264

H264=enabled

pi@raspberrypi:~$ vcgencmd codec_enabled MPEG2

MPEG2=disabled

pi@raspberrypi:~$ vcgencmd codec_enabled MJPEG

MJPEG=disabled

Nous avons vu tout au long de cet article comment obtenir les paramètres et caractéristiques de notre Raspberry Pi en interrogeant directement le firmware comme cela peut être fait sur un ordinateur classique via le paramétrage du BIOS.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Obtenir les informations du firmware de votre Raspberry Pi

4.CONFIGURATION DU

FIRMWARE

Non seulement nous pouvons lire les paramètres du firm-

ware et ainsi accéder à nombre d’informations intéressantes,

mais nous pouvons aussi configurer les paramètres du firmware

comme cela peut être fait sur un ordinateur de bureau ou ser-

veur dans le menu du BIOS. Nous avons mentionné en début

d’article que le firmware est composé de trois fichiers, dont

un de configuration config.txt. Dans un premier temps, nous al ons ouvrir et lire ce fichier avec l’éditeur nano. Pour cela, plaçons-nous dans la partition VFAT où se trouve le fichier en

question puis ouvrons le fichier.

pi@raspberrypi:~$ cd /boot

pi@raspberrypi:/boot$ nano config.txt

Chaque ligne est composée d’une expression propriété =

valeur. Nous retrouvons les paramètres obtenus avec la commande get_config. Si vous avez fait l’acquisition d’une licence MPEG2 et désirez l’instal er dans votre lecteur multimédia réalisé à partir Raspberry Pi (comme explicité dans le hors-série 38

de Linux Pratique), il suffit d’ajouter en fin du fichier avec votre éditeur de texte habituel la ligne suivante :

decode_MPG2=0x12345678 #remplacez 0x12345678 par votre clé

CONCLUSION

Il est possible d’al er plus loin dans l’accès et surtout dans la mise en forme des résultats obtenus à partir des données du firmware en faisant appel aux commandes présentées dans cet article via l’écriture de scripts Shel , Python. . Pour cela, vous pouvez notamment vous référer aux hors-séries n°86 et 89 de GNU/Linux Magazine [1] [4]. LD

RÉFÉRENCES

[1] GNU/Linux Magazine Hors-série n°89, « Maîtrisez la programmation script Shel », https://boutique.ed-diamond.com/home/1231-gnulinux-magazine-hs-89.html

[2] Linux Pratique n°100, « Nano : l’éditeur petit, mais costaud », https://boutique.ed-diamond.com/home/1219-linux-pratique-100.html

[3] Linux Pratique Hors-série n°38, « C’est décidé, je débute sous Linux avec la Raspberry Pi », https://boutique.ed-diamond.com/en-kiosque/1234-linux-pratique-hs-38.html

[4] GNU/Linux Magazine Hors-série n° 86, « Mémo Python », https://boutique.ed-diamond.com/anciens-numeros/1085-linux-pratique-98.html Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°19

75

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

ANALYSER LE BUS

SIEMENS BSB D’UNE

POMPE À CHALEUR

ATLANTIC

Erwan Loaëc

Les pompes à chaleur installées dans beaucoup de constructions récentes sont de plus en plus évoluées. Malheureusement, ces systèmes complexes sont aussi totalement « fermés », et ne

permettent pas d’être pilotés aussi librement qu’on le souhaiterait. Cet article montre qu’après avoir analysé la façon dont communique la PAC avec la sonde d’ambiance, il devient possible d’accéder à presque toutes ses fonctionnalités.

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

HACKABLE MAGAZINE n°19

http://www.hackable.fr/

Analyser le bus Siemens BSB d'une pompe à chaleur Atlantic

Instalé dans une maison grer un réservoir d’eau de

neuve depuis quelque

190 litres afin de prendre en

temps, un élément indispen-

charge la production d’eau

sable au confort m’échap-

chaude sanitaire.

pait complètement jusqu’à

ce que je me penche sérieuse-

Dans le salon, une

ment sur son cas. Il s’agit de la

sonde d’ambiance Atlantic

pompe à chaleur. Cel e-ci assure

T55, directement reliée à la

la production d’eau chaude sani-

PAC, permet de mesurer la

taire toute l’année, ainsi que l’ali-

température intérieure, ainsi

mentation d’un plancher chauffant.

que de modifier le mode

de fonctionnement et la

consigne de chauffage.

1. CONTEXTE

En ouvrant le boîtier

Figure 2 : Sonde

d’ambiance Atlantic T55,

Je tiens à préciser que tout le

électrique du module intérieur de la pompe

installée dans la pièce de

travail décrit dans cet article n’est

à chaleur, on distingue une carte qui semble

vie. Ce module permet

valable que pour mon cas, je ne

servir d’automate, avec la référence SIEMENS

de régler la consigne de

température ainsi que le

prétends pas avoir mis en place

RVS21.827/127. La sonde intérieure est reliée à

mode de fonctionnement

un système générique qui puisse

cette carte (Figure 3, page suivante).

du chauffage.

s’appliquer à toutes les pompes à

Après quelques recherches sur Internet, il

chaleur, ni même à toutes cel es

semblerait qu’il existe un module Siemens, dési-

de la marque.

gné sous la référence OZW672, qui permette

L’étude porte sur une pompe à

de connecter le système au réseau et de piloter

chaleur Atlantic Alfea Extensa

l’ensemble des paramètres à travers un serveur

Duo+. Sa particularité est d’inté-

web. Ce module ne semble pas faire partie du

Figure 1 :

Module intérieur

de la pompe à

chaleur Atlantic

Alfea Extensa

Duo+ sur lequel

on distingue

le panneau de

contrôle en haut

à droite.

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

HACKABLE MAGAZINE n°19

77

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

Figure 3 : Carte Siemens

RVS21.827/127. Il s’agit

vraisemblablement de

l’automate qui pilote

l’ensemble des actionneurs

de la PAC. La sonde

d’ambiance est câblée sur

le bornier vert X86 localisé

sur le bas de la carte.

catalogue Atlantic, qui est le fabricant de ma pompe à cha-

(arrêt, confort, réduit. .). Cela

leur. Il existe un échange assez complet sur un forum qui

signifie que ces informations tran-

évoque le pilotage de ce type de pompe à chaleur depuis ce sitent forcément vers ce module.

module [1].

La sonde intérieure est connec-

Le principal obstacle à cette solution est son prix assez

tée avec 2 fils, et ne contient pas de

élevé. Il semble que pour l’obtenir il fail e débourser autour

pile ou batterie. Cela signifie que

de 400 euros. Tenter de réaliser un équivalent soi-même

l’alimentation et la transmission de

est bien sûr amusant, mais présente également un intérêt

données utilisent la même paire.

économique.

En plaçant un multimètre sur

les 2 bornes de la sonde, on

2. ANALYSE DU SIGNAL

constate une tension continue de

11,48V (sans la sonde, 11,62V).

La première idée qui m’est venue est de tenter d’ana-

Toutes les quelques secondes, il

lyser le signal qui transite sur la connexion entre la sonde

semble se produire une chute de

intérieure (le module T55) et la carte Siemens. En effet,

tension très brève, probablement

ce module permet de récupérer la consigne d’ambiance,

créée par une transmission de

la modifier, ainsi que changer le mode de fonctionnement

données.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Analyser le bus Siemens BSB d'une pompe à chaleur Atlantic

Figure 4 : Extrait

Afin de comprendre ce qui se passe exac-

Les séquences capturées durent entre

de la capture

tement au moment des chutes de tension

25ms et 35ms. Le changement de niveau

réalisée sur

le bus avec

constatées au multimètre, je suis passé par un

le plus rapide dure 208ns. D’après le

un analyseur

analyseur logique compatible avec le logiciel de

théorème de Shannon [2], on peut donc

logique qui met

Saleae Logic. Vous pouvez retrouver un article

en déduire qu’un échantil onnage tous

en évidence une

complet consacré aux analyseurs logiques dans

transmission de

les 100ns serait suffisant pour capturer

données.

le numéro 5 de Hackable Magazine de 2015.

le signal, c’est-à-dire 10000 échantillons

En lançant une capture de 10 secondes, avec

par seconde. Pour garder une marge, les

1 mil ion d’échantillons par seconde, on peut iden-

captures seront réalisées avec 25000

tifier 3 séquences de transmission distinctes

échantil ons par seconde, au lieu des

(voir Figure 4).

1 million pour la première capture.

Notez qu’il est nécessaire de veiller à ne

pas dépasser la tension admissible sur les

entrées de l’analyseur logique. Les sondes

Saleae Logic acceptent une tension maximale

de 5,5V (5,25V pour les anciennes versions)

[3], avec une impédance de 1MOhms. Il existe

beaucoup de clones de ces sondes, et les

caractéristiques peuvent varier, en particulier

la résistance interne.

Dans le cas où le signal que l’on souhaite

capturer dépasse la tension maximale, il est

alors nécessaire d’adapter le montage afin de

ne pas risquer d’endommager l’analyseur. La

solution la plus simple lorsqu’elle est appli-

cable est probablement de mettre en place

un pont diviseur de tension avec deux résis-

tances R1 et R2. La résistance R3 matérialise l’impédance interne de l’analyseur.

Si on néglige la valeur de R3 qui est géné-

ralement élevée, il faut donc que (R1+R2)/

R2 > U(AB)/U(sonde). Avec U(AB), la tension

maximale du point d’analyse, et U(sonde), la

tension maximale admissible par l’analyseur.

Selon le contexte de l’analyse, il peut être nécessaire de veiller à ne pas drainer un courant trop important (i), ce qui reviendrait à choisir des valeurs faibles pour R1 et R2, ou à l’inverse de travailler avec des valeurs trop élevées qui rendraient l’impédance interne R3 de la sonde non négligeable.

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

HACKABLE MAGAZINE n°19

79

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

Figure 5 : Format

d’une trame

UART (Universal

Asynchronous

Receiver

Transmitter).

3. DÉCODAGE DES

• 1 bit de fin (Stop bit), qui correspond à un ni-

veau haut. Ce bit de fin peut être émis pendant

TRAMES

une durée T, 1,5T ou 2T.

Comme évoqué précédemment, la

Le bit de départ est systématiquement précédé

période mesurée la plus courte pour un état

par un état haut. En effet, soit il s’agit de la pre-

logique est 208ns, ce qui nous donne une

mière trame, dans ce cas le canal de communi-

fréquence de 4808Hz. Cette fréquence rap-

cation est en « idle » sur un niveau haut, soit il est

pel e une des fréquences standards d’une

précédé par un bit de fin, caractérisé également

communication de type UART, 4800 bps [4],

par un niveau haut.

c’est donc la piste que nous al ons suivre

Ces éléments vont nous aider à décoder les

dans un premier temps.

séquences capturées sur le bus.

Il est peut-être bon de commencer par un

Depuis le logiciel Logic, nous créons un

rappel du fonctionnement des communica-

« Analyseur » de type « Communication Série

tions UART.

Asynchrone ».

Lorsqu’il n’y a aucune transmission, la

Dans les options de paramétrage, nous al ons

ligne reste à un niveau haut. Chaque bit est

juste choisir de configurer la vitesse de transmis-

émis pendant une période T qui dépend de

sion automatique Use Autobaud :

la vitesse de transmission. Pour une vitesse

de 4800 bits/s, la durée T est égale à 208ns

(1/4800).

Chaque trame est compo-

Figure 7 :

Configuration des

sée des éléments suivants :

paramètres UART

pour l’analyzer.

• 1 bit de départ (Start

bit), qui correspond à un

niveau bas ;

• N bits de données ;

Figure 6 : Création d’un

• 1 bit de parité, optionnel.

analyzer depuis le logiciel

Il peut s’agir d’une parité

Saleae Logic.

paire (even) ou impaire

(odd) ;

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Analyser le bus Siemens BSB d'une pompe à chaleur Atlantic

Une fois la configuration validée, on constate que le signal capturé ne correspond pas vraiment à l’analyzer configuré. La présence d’erreurs du type « framing error » indique que le format de la trame n’est pas valide :

Figure 8 : Extrait d’une trame décodée avec

l’analyzer précédemment configuré.

L’analyzer repère bien le « start bit » et le « stop bit », mais entre ces deux repères se trouvent 9 bits. Il peut donc s’agir soit de 9 bits de données, soit de 8 bits de données suivis d’un bit de parité. Cette dernière possibilité semble plus plausible.

Nous retournons donc sur la configuration de notre analyzer, afin d’y ajouter le bit de parité. Et là, bingo ! Avec une parité impaire (odd parity), toutes les trames capturées sont valides. Il n’y a donc vraisemblablement aucune chance qu’il s’agisse de transferts avec 9 bits de données.

Voici ce que nous pouvons désormais en déduire sur les caractéristiques du bus :

• vitesse de transmission : 4800 bits/seconde ;

• 8 bits de données ;

• 1 bit de parité impaire ;

• 1 bit de fin.

Il nous reste maintenant à identifier le sens des données transmises dans les trames. Il s’agit notamment de déterminer si le bit 1 correspond au bit de poids faible (LSB) ou au bit de poids fort (MSB).

Afin d’avancer sur l’analyse, je vais lancer une capture « naïve », et incrémenter la consigne de chauffage au fur et à mesure de 17°C à 22°C avec un pas de 0,5°C, puis revenir à 17°C.

Avec un peu de chance, on pourra identifier des valeurs qui s’incrémentent, puis décrémentent.

Cette séquence correspond donc à l’affectation successive de 20 valeurs de consigne (la première valeur modifiée est 17,5°C).

Depuis le logiciel Logic, une longue capture de 2min30s permet d’enregistrer toutes ces actions. Grâce à l’analyzer configuré, il est possible de directement générer un fichier CSV avec l’ensemble des valeurs hexadécimales récupérées.

En observant les séquences, on remarque qu’el es commencent toutes par « 23 75 », « 23

7F » ou « 23 79 ». La commande suivante permet de retrouver une séquence sur chaque ligne : $> cat raw_temp.csv | cut -d "," -f 3 | sed "s/0x//g" | tr '\n' ' ' | sed -e

"s/ 23 75/\n23 75/g" -e "s/ 23 79/\n23 79/g" -e "s/ 23 7F/\n23 7F/g" > raw Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°19

81

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

Étant donné l’approche, qui consiste à partir d’une

constate que plus la température

consigne de 17°C jusqu’à 22°C, puis à revenir à 17°C,

augmente, plus la valeur décodée

chaque valeur sera donc définie deux fois, à l’exception de

diminue, et inversement. Si le bit

22°C et 17°C. Observons donc les séquences capturées

de poids fort se trouvait au début

une ou deux fois :

de la trame de 8 bits, on obtien-

drait les valeurs suivantes :

$> cat raw | sort | uniq -c | grep -E "\ (1|2)\ "

• 0x9F devient 0xF9 (17,5°C) ;

Ces séquences se ressemblent beaucoup, on peut

• 0x7F devient 0xFE (18,0°C) ;

notamment remarquer :

• 0x5F devient 0xFA (18,5°C) ;

• 20 séquences commençant par « 23 75 FF F1 FC C2

D2 FA 71 » ;

• 0x3F devient 0xFC (19,0°C) ;

• 20 séquences commençant par « 23 7F F5 F1 F8 D2

• 0x1F devient 0xF8 (19,5°C) ;

C2 FA 71 ».

• 0xFF devient 0xFF (20,0°C) ;

Il y a donc très probablement un lien avec les 20 valeurs

• etc.

de consignes différentes que nous venons de réaliser.

La suite 0xF9, 0xFE, 0xFA,

Essayons d’analyser les 20 séquences qui commencent

0xFC, 0xF8, 0xFF n’est ni crois-

par « 23 75 FF F1 FC C2 D2 FA 71 ».

sante, ni décroissante. Nous

pouvons continuer l’analyse en

partant du principe que le bit de

poids fort se trouve bien à la fin de

la trame de 8 bits.

Depuis le début, nous avons

pris l’hypothèse que le niveau haut

correspondait à un « 1 », et le

niveau bas à un « 0 ». Et si c’était

Figure 9 :

Séquences

l’inverse ? Calculons le complé-

capturées,

ment à 1, ce qui correspond à une

codées en

permutation des valeurs 0 et 1,

hexadécimal.

pour les octets repérés en rouge

dans la figure 9 :

• 0xFB 0x9F devient 0x04

0x60 = 1120 (17,5°C) ;

• 0xFB 0x7F devient 0x04

0x80 = 1152 (18,0°C) ;

• 0xFB 0x5F devient 0x04

0xA0 = 1184 (18,5°C) ;

Il y a 4 octets qui varient sur chaque ligne. Sur la figure

• 0xFB 0x3F devient 0x04

9, ceux identifiés en rouge semblent évoluer de façon

0xC0 = 1216 (19,0°C) ;

régulière, et pourraient correspondre au codage de la

température. Les octets identifiés en mauve ne semblent

• 0xFB 0x1F devient 0x04

correspondre à aucune logique visible.

0xE0 = 1248 (19,5°C) ;

Dans la suite de données identifiée en rouge, si on

• 0xFA 0xFF devient 0x05

se focalise sur le second octet (celui de « droite »), on

0x00 = 1280 (20,0°C) ;

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Analyser le bus Siemens BSB d'une pompe à chaleur Atlantic

• 0xFA 0xDF devient 0x05

Il existe donc une valeur standard de

0x20 = 1312 (20,5°C) ;

CRC qui vaut 0x65 0xF3, ce qui correspond

• etc.

bien aux 2 derniers octets de la chaîne ana-

lysée, après le complément à 1. En faisant la

Cette fois-ci nous retrouvons

même opération sur d’autres séquences, le

bien une valeur croissante codée

CRC-CITT XModem correspond bien aux

sur 2 octets. En recherchant la

2 derniers octets.

valeur décimale que représentent

ces 2 octets, on constate qu’il

s’agit de la température en Celsius

CONCLUSION

multipliée par 64.

En partant de moyens relativement

Nous savons désormais que

simples, nous avons démontré qu’il était

les données binaires transmises

possible de mener une rétro-ingénierie sur

sur le bus sont codées avec un

un bus « fermé ». Nous sommes désormais

niveau haut pour le « 0 » et un

capables d’isoler les messages qui transitent

niveau bas pour le « 1 ».

et de vérifier leur intégrité. En faisant l’ana-

Revenons maintenant sur les

logie avec le modèle OSI [6], nous pouvons

valeurs qui étaient repérées dans

dire que nous avons décodé la couche 1

la zone mauve, après avoir cal-

(couche Physique), et une partie de la couche

culé le complément à 1. Sur la

2 (couche Liaison).

première ligne que nous avions

Il reste cependant du chemin à parcourir

extraite, 23 75 FF F1 FC C2 D2

afin d’obtenir la maîtrise globale du système.

FA 71 FE FB 9F 9A 0C devient

Il est temps de laisser l’analyseur logique de

DC 8A 00 0E 03 3D 2D 05 8E

côté pour pouvoir directement accéder au

01 04 60 65 F3.

bus depuis une Raspberry Pi. De cette ma-

Il semble plausible que les 2 der-

nière, il sera possible d’analyser plus précisé-

niers octets représentent un CRC

ment le contenu des messages qui transitent

(ou une somme de contrôle). En uti-

sur le bus afin de continuer à décoder son

lisant l’outil en ligne [5], il est facile

fonctionnement. EL

de lister les CRC obtenus avec les

principales méthodes de calcul :

RÉFÉRENCES

[1] http://www.chaleurterre.com/forum/

viewtopic.php?f=59&t=15784

[2] https:/ fr.wikipedia.org/wiki/Th%C3%A9or

%C3%A8me_d’%C3%A9chantillonnage

[3] https://www.saleae.com/#DatasheetTile

et https://www.saleae.com/originallogic/

specs

[4] https://fr.wikipedia.org/wiki/UART

[5] https://www.lammertbies.nl/comm/info/

crc-calculation.html

Figure 10 : Principales valeurs de CRC

obtenues depuis l’outil en ligne sur

[6] https://fr.wikipedia.org/wiki/

www.lammertbies.nl.

Mod%C3%A8le_OSI

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

HACKABLE MAGAZINE n°19

83

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

PILOTEZ VOTRE POMPE

À CHALEUR ATLANTIC

EN UTILISANT LE BUS

SIEMENS BSB

Erwan Loaëc

L’article précédent a montré qu’en partant de l’analyse du signal brut entre la sonde d’ambiance et la PAC, nous sommes désormais capables de décoder les trames échangées. Maintenant que les couches

« basses » sont en partie traitées, nous allons nous pencher sur le décodage des messages. À l’issue de cet article, nous serons capables de lire les informations échangées sur le bus depuis une Raspberry Pi, mais également de transmettre des données afin d’agir sur le fonctionnement de la PAC.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Pilotez votre pompe à chaleur Atlantic en utilisant le bus Siemens BSB

L’étude du signal qui tran- 1.2 Réception des trames

site sur le bus a été réa-

lisée à partir d’un analy-

La Raspberry Pi permet d’utiliser une connexion UART en

seur logique. Maintenant

câblant un port de réception (RX), et un port de transmission

que nous connaissons

(TX). La liaison UART utilise une tension de 0-3,3V, contrai-

les caractéristiques de la liaison,

rement à la liaison que nous étudions qui fonctionne avec les

valeurs 0-12V.

nous al ons implémenter une solu-

tion permettant de relier le bus à une

Afin de ne pas perturber le fonctionnement du bus, nous

plateforme afin de lire, puis de trans-

allons concevoir un montage permettant d’isoler électrique-

mettre les messages.

ment la carte Raspberry Pi de la carte Siemens de la pompe

à chaleur, principalement au moyen d’optocoupleur.

La lecture des données « brutes »

directement depuis notre code faci-

Intéressons-nous dans un premier temps à la lecture du

litera grandement le décodage des

signal sur le bus. Lorsque la tension du bus sera de 12V, le

messages. En effet, il reste encore

courant passant dans la led de l’optocoupleur à travers RX-R1

du chemin à parcourir avant de maî-

sera d’environ 5mA. Le phototransistor sera passant. Ainsi,

triser le fonctionnement du système.

l’émetteur relié à l’entrée RX de la Raspberry Pi aura une

Nous al ons notamment étudier com-

tension proche de cel e de l’alimentation c’est-à-dire 3,3v.

ment fonctionne l’adressage, mais

Lors d’une transmission d’un signal sur le bus Siemens, une

également les différents types de

tension nul e aura pour effet de bloquer le phototransistor de

messages : action sur la PAC, inter-

l’optocoupleur. La tension RX sera donc reliée à la masse à

rogation sur une valeur, etc. Enfin,

travers la résistance de Pul -Down RX-R2.

une fois le format connu, nous al ons

transmettre nos propres messages.

De cette façon il sera possible d’agir

sur la PAC, permettant ainsi l’inté-

Figure 1 :

gration du chauffage dans votre

Schéma du

domotique.

montage

électronique

utilisé pour la

1. CONNEXION

lecture sur le

bus.

AVEC UNE

RASPBERRY PI

1.1 Attention

Le montage proposé dans cet

article sera directement connecté

On notera que ce montage va tirer un courant permanent

à la pompe à chaleur. Il s’agit d’un

sur le bus de la PAC d’environ 5mA, limité par la résistance

montage expérimental qui n’est

RX-R1.

absolument pas supporté par le

fabricant. Si vous souhaitez mettre

en œuvre un montage similaire à

1.3 Transmission de données

celui décrit dans l’article, vous de-

Lors de mon étude, je me suis dans un premier temps

vrez assumer les dégâts éventuels penché plus longuement sur la lecture des données qui tran-qui pourraient être causés sur votre sitent sur le bus depuis la Raspberry Pi, avant d’avancer sur installation de chauffage.

la transmission de données sur le bus. Afin de garder de la

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

HACKABLE MAGAZINE n°19

85

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

Figure 2 :

Schéma du

montage

électronique

utilisé pour la

transmission

sur le bus,

légèrement plus

complexe que

celui utilisé pour

la lecture des

données.

cohérence dans l’article, je vous propose d’aborder directe-

lorsque TX passe à l’état bas. De

ment le montage qui va nous permettre de transmettre un

cette façon, le courant tiré depuis

signal sur le bus.

TX ne dépasse pas 3,3V/1500

Ohms, c’est-à-dire 2,2mA. Ce

Nous al ons utiliser de nouveau un optocoupleur pour

courant est tout à fait acceptable

isoler électriquement la Raspberry Pi du bus sur lequel nous

pour la Raspberry Pi.

voulons agir.

Concernant la connexion sur le

Lorsqu’aucune donnée n’est transmise, la tension sur le

bus, un second transistor instal é

bus est de 12V. La transmission d’un état bas correspond à

derrière l’optocoupleur permet

la mise en court-circuit du bus de données. Cela peut corres-

d’encaisser la forte charge de cou-

pondre au bit de start, ou à un bit de données. À 4800 bits/

rant pendant le laps de temps très

seconde, chaque occurrence ne dure que 208ns (potentiel e-

bref de transmission d’un état bas,

ment répétée plusieurs fois de suite).

qui correspond ici à la mise en

Un transistor PNP instal é derrière la sortie TX permet d’in-

court-circuit du bus. Il est probable

verser le signal, et de n’alimenter la led de l’optocoupleur que que la commutation aurait pu être

Figure 3 :

Le câblage

des quelques

composants

est réalisé sur

une platine

d’expérimentation

à côté de la

Raspberry Pi.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Pilotez votre pompe à chaleur Atlantic en utilisant le bus Siemens BSB

Figure 4 : Photo du

directement prise en charge par

même moment un autre élément connecté est déjà

montage réalisé

avec la Raspberry Pi

l’optocoupleur, étant donné que le

en train de transmettre sur le bus, il y aura ce qu’on

et la platine à essai

courant n’y transite que pendant

appel e une col ision. Plus le bus est « occupé », plus

avec les résistances,

un temps très court. J’avais dans

le risque de col ision devient élevé. Le contrôle de

transistors et

optocoupleurs

mes cartons un transistor NPN

parité directement au niveau de l’UART permettra

nécessaires. La

capable de traiter un courant

de ne pas recevoir les trames perturbées. De même,

platine à essai est

jusqu’à 500mA, autant en profiter.

le contrôle de la valeur du CRC, mise en évidence

connectée au bus

précédemment, permettra de valider l’intégrité des

en passant par la

Tant que l’on ne transmet pas

messages, ignorant ainsi les données récupérées lors

sonde d’ambiance.

de données, ce montage ne tire

Il est possible

des col isions.

de la connecter

aucun courant sur le bus.

directement sur le

Nous sommes ici dans une

bornier de la carte

Siemens situé dans

situation particulière où l’UART

2. CONFIGURATION DE

le coffret électrique

permet une communication

L’UART SUR LA RASPBERRY PI

de la pompe à

ful -duplex, c’est-à-dire que la

chaleur.

transmission et la réception de

2.1 Préparation du système

données sont toutes les deux

indépendantes. Chaque signal est

Nous al ons utiliser ici une carte Raspberry Pi 2,

câblé sur une broche spécifique,

mais le montage doit pouvoir fonctionner sur toutes

ce qui n’est pas le cas du bus de

les versions. Pour l’OS, nous al ons partir sur la der-

la pompe à chaleur sur lequel

nière version de Raspbian disponible à l’heure où je

nous al ons nous câbler.

rédige cet article, Raspbian Jessie Lite. Par défaut,

la liaison UART est utilisée comme console de l’OS.

En effet, si l’on décide d’en-

Afin de pouvoir l’utiliser en dehors de ce cadre, il faut

voyer des données, alors qu’au

commencer par désactiver la console sur l’UART.

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

HACKABLE MAGAZINE n°19

87

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

En premier lieu, nous éditons le fichier /boot/cmdline.txt afin de supprimer les paramètres console=serial0,115200. Pour prendre en compte ces changements, il faudra veil er à redémarrer le système.

Ensuite, en dehors des composants logiciels déjà présents dans la distribution, nous aurons besoin de deux bibliothèques Python supplémentaires, serial et crcmod : $> apt-get install python-serial python-crcmod

Sur la Raspberry Pi, l’UART correspond au périphérique /dev/AMA0. Le paramétrage de l’UART se fait en utilisant la commande stty. Cette commande n’est pas persistante, il faudra donc veil er à la relancer après un redémarrage ou l’inscrire par exemple dans le fichier /etc/rc.local.

$> stty -F /dev/ttyAMA0 speed 4800 parenb parodd cs8 -cstopb -echo

• speed 4800 : vitesse configurée à 4800 bps ;

• parenb parodd : utilisation d’un bit de parité impaire ;

• cs8 : chaque trame contient 8 bits de données ;

• -cstopb : 1 bit de stop est envoyé à la fin de chaque trame ;

• -echo : désactivation de l’echo des données transmises. Tel qu’est conçu le montage, les données transmises seront également lues. Il est donc important de désactiver l’echo, sous peine de se retrouver avec une transmission en boucle des données.

2.2 Lecture des données

Depuis quelques lignes de Python, nous al ons lire les données reçues sur l’UART du Raspberry Pi : 1: #!/usr/bin/python

2: #! -*- coding=utf-8 -*-

3:

4: import serial # Module qui va nous permettre de manipuler l'UART

5: import sys

6:

7: ser = serial.Serial('/dev/ttyAMA0', 4800, timeout=1, bytesize=8, 8: stopbits=1, parity=serial.PARITY_ODD) 9:

10: while True: # Boucle infinie

11:

12: data = ser.read()

13: datalen = len(data)

14:

15: if datalen > 0:

16:

17: for idx in range(datalen):

18:

19: byteVal = 255 - ord(data[idx]) # Inversion des bits 20:

21: sys.stdout.write("%0.2X " % (byteVal)) # Affiche les valeurs hexadécimales lues

22: sys.stdout.flush()

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Pilotez votre pompe à chaleur Atlantic en utilisant le bus Siemens BSB

Nous commençons par instancier un objet Serial, en déclarant tous les paramètres de la liaison (vitesse, parité, nombre de bits de données. .). Puis, nous al ons lire en boucle les données de l’UART, en inversant les bits de chaque octet lu. L’inversion des bits d’un octet se fait facilement en soustrayant la valeur lue à 255 (ligne 19).

Afin d’observer les données qui transitent, nous lançons ce programme en même temps que notre analyseur logique pendant 60 secondes. De cette façon, il sera possible de découper manuel ement chaque séquence, matérialisée ici par un retour à la ligne. En effet, l’UART utilise un tampon qui ne nous permet pas de savoir s’il s’agit de données issues d’une même séquence de transmission, ou de séquences proches.

Ainsi, après une minute de capture, nous obtenons le résultat suivant : DC 8A 00 0B 06 3D 05 17 DC 0A D5

DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E

DC 8A 00 0B 06 3D 05 17 DC 0A D5

DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E

DC 8A 00 0B 06 3D 05 17 DC 0A D5

DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E

DC 8A 00 0B 06 3D 05 17 DC 0A D5

DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E

DC 86 00 0E 02 3D 2D 02 15 04 F0 00 36 EE

DC 8A 00 0B 06 3D 05 17 DC 0A D5

DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E

DC 8A 00 0B 06 3D 05 17 DC 0A D5

DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E

Nous savons déjà que les 2 derniers octets correspondent au CRC du message. Il semble aussi que chaque message commence par 0xDC.

Lors de la capture, nous constatons que les messages sont presque tous reçus par paire. Un protocole de communication intègre généralement les composantes suivantes :

• Tail e du message (sauf si la tail e est fixe, ce qui n’est clairement pas le cas ici) ;

• Adresse de la source ;

• Adresse de destination ;

• Contrôle d’intégrité.

Le contrôle d’intégrité correspond au CRC identifié précédemment. Penchons-nous sur la tail e du message. Pendant notre capture, nous observons trois messages distincts :

• DC 8A 00 0B 06 3D 05 17 DC 0A D5 : 11 octets (0x0B)

• DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E : 14 octets (0x0E)

• DC 86 00 0E 02 3D 2D 02 15 04 F0 00 36 EE : 14 octets (0x0E) Sur ces 3 exemples, la longueur totale du message semble inscrite dans le quatrième octet.

Il s’agit d’un élément extrêmement intéressant, puisque nous al ons maintenant pouvoir identifier Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°19

89

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

chaque message en lisant le flux continu de données sur l’UART, sans devoir faire la corrélation avec notre analyseur logique. Le code Python suivant permet de récupérer distinctement les messages lus sur le bus.

1: #!/usr/bin/python

2: #! -*- coding=utf-8 -*-

3:

4: import serial

5: import sys

6:

7: ser = serial.Serial('/dev/ttyAMA0', 4800, timeout=1, bytesize=8, 8: stopbits=1, parity=serial.PARITY_ODD) 9:

10: message = ""

11: messageStart = False

12: messageIndex = 0

13: messageSize = 0

14:

15: while True:

16:

17: data = ser.read()

18: datalen = len(data)

19:

20: if datalen > 0:

21:

22: for idx in range(datalen):

23: byteVal = 255 - ord(data[idx]) # Inversion les bits 24: message += "%0.2X " % (byteVal)

25: messageIndex += 1

26:

27: if not messageStart:

28:

29: # Détection du début d'un message

30: if byteVal == 0xDC:

31: messageStart = True

32: messageIndex = 0

33:

34: else:

35:

36: # Récupération de la taille du message sur

37: # le quatrième octet (index=3)

38: if messageIndex == 3:

39: messageSize = byteVal

40:

41: # Lecture du dernier octet du message

42: if messageIndex == messageSize - 1:

43: messageStart = False

44: messageIndex = 1

45: print message

46: message = ""

Continuons l’analyse en manipulant dans un premier temps les menus directement sur la pompe à chaleur, à partir de quelques appuis successifs sur le bouton Info, puis en manipulant la sonde inté-

rieure. Le but ici est de générer des données sur le bus afin de les analyser.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Pilotez votre pompe à chaleur Atlantic en utilisant le bus Siemens BSB

Voici une capture réalisée pendant les manipulations de l’interface de la pompe à chaleur : DC 8A 00 0B 06 3D 21 06 67 76 21

DC 80 0A 0E 07 21 3D 06 67 01 02 00 DC B9

DC 8A 00 0B 06 3D 21 05 18 AC 0A

DC 80 0A 0E 07 21 3D 05 18 01 00 00 C2 92

DC 8A 00 0B 06 3D 21 06 67 76 21

DC 80 0A 0E 07 21 3D 06 67 01 02 00 DC B9

DC 8A 00 0B 06 3D 21 05 18 AC 0A

DC 80 0A 0E 07 21 3D 05 18 01 00 00 C2 92

DC 8A 00 0B 06 3D 21 06 67 76 21

DC 80 0A 0E 07 21 3D 06 67 01 02 00 DC B9

Capture pendant les manipulations de la sonde intérieure :

DC 86 00 0B 06 3D 2D 05 8E 2B A3

DC 80 06 0E 07 2D 3D 05 8E 00 04 C0 B4 39

DC 86 00 0B 06 3D 2D 05 90 D8 5C

DC 80 06 0E 07 2D 3D 05 90 00 04 40 9C 4C

DC 86 00 0B 06 3D 2D 05 A5 BE AA

DC 80 06 0E 07 2D 3D 05 A5 00 07 00 11 77

Nous avions déjà constaté que les trames étaient capturées par séquence de deux messages.

Cela ressemble fortement à un fonctionnement de type « question/réponse ». Nous al ons avancer avec cette hypothèse :

• Question de l’interface de la PAC : DC 8A 00 0B 06 3D 21 06 67 76 21

• Réponse : DC 80 0A 0E 07 21 3D 06 67 01 02 00 DC B9

• Question de la sonde intérieure : DC 86 00 0B 06 3D 2D 05 8E 2B A3

• Réponse : DC 80 06 0E 07 2D 3D 05 8E 00 04 C0 B4 39

Il semblerait que les deuxièmes et troisièmes octets correspondent à l’adressage. Si l’on regarde de plus près ces deux octets :

• Question de l’interface de la PAC : 0x8A 0x00

• Réponse : 0x80 0x0A

• Question de la sonde intérieure : 0x86 0x00

• Réponse : 0x80 0x06

La première hypothèse est que l’adresse source est contenue dans le second octet du message.

Le premier quartet serait 0x8 (valeur binaire : 1000) et l’adresse serait la valeur du second quartet.

De la même manière, l’adresse de destination d’un message serait sur le troisième octet, avec le premier quartet qui vaudrait 0x0, et l’adresse de destination sur le second quartet.

Cette hypothèse semblait cohérente jusqu’à ce que je capture les deux messages suivants : DC 8A 7F 14 02 05 00 00 6C 00 75 03 05 07 10 34 24 00 2A 1F

DC 80 7F 17 02 05 00 02 19 03 45 00 00 FF FF FF FF FF FF 00 0F 7D C1

Ces messages sont isolés, et ne semblent pas correspondre au schéma « question/réponse ».

La valeur du second octet semble indiquer que la source du premier message est l’interface de la PAC. Le troisième octet, 0x7F, est particulier. Son écriture binaire est 0111 1111, ce qui ressemble étrangement à une adresse de broadcast [1] si on se focalise sur les 7 bits de poids faible.

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

HACKABLE MAGAZINE n°19

91

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

L’hypothèse la plus probable est donc que les adresses soient codées sur 7 bits, et non pas sur 4.

Voici les 3 adresses identifiées sur le bus :

• 0x0A : IHM de la pompe à chaleur ;

• 0x06 : sonde intérieure ;

• 0x00 : système central, qui semble être le cœur du système.

Maintenant que nous avons identifié le rôle des 4 premiers octets, focalisons-nous sur la suite des messages.

D’après les captures réalisées, l’interface de la pompe à chaleur semble questionner en permanence le système sur la valeur à afficher sur l’écran toutes les 10 secondes environ. Par exemple, sur l’écran principal, l’état de la PAC est affiché. Nous observons toutes les 10 secondes les messages suivants : DC 8A 00 0B 06 3D 05 17 DC 0A D5

DC 80 0A 0E 07 05 3D 17 DC 00 00 33 65 2E

En affichant l’écran suivant, qui correspond à l’état du bal on d’eau chaude, les messages observés sont : DC 8A 00 0B 06 3D 05 17 CE 38 A6

DC 80 0A 0E 07 05 3D 17 CE 00 00 4B 6C 7E

Le cinquième octet semble donc être le type de message. Nous pouvons dire que 0x06 semble identifier une requête sur une valeur ou un état, et 0x07 une réponse avec la valeur attendue.

La suite du message correspond probablement à l’élément sur lequel porte la requête :

• 3D 05 17 DC : Quel est l’état de la PAC ?

• 05 3D 17 DC 00 00 33 : L’état de la PAC est « pas de demande ».

La requête est codée sur 4 octets. La réponse reprend ces 4 octets, puis on observe 3 octets qui semblent correspondre à la valeur du paramètre retourné (0x000033 = Pas de demande). On peut néanmoins constater une subtilité, les deux premiers octets de l’identifiant de la requête sont inversés entre la requête et la réponse. La distinction entre les deux types de messages est déjà codée sur le cinquième octet (0x06 ou 0x07). Je n’ai pas trouvé d’explication logique pour expliquer le rôle donné à l’inversion de ces deux octets.

Nous venons d’analyser la transmission d’un état, essayons maintenant d’observer la récupération d’une valeur de température. Après avoir fait défiler les écrans de la PAC jusqu’à l’affichage de la température extérieure, voici les messages capturés :

DC 8A 00 0B 06 3D 05 05 21 51 76

DC 80 0A 0E 07 05 3D 05 21 00 03 06 B0 99

Sur le même principe que l’analyse précédente, on peut en déduire le sens des messages :

• 3D 05 05 21 : Quel e est la température extérieure ?

• 05 3D 05 21 00 03 06 : La température extérieure est de 12,1°C.

La valeur de température est donc codée avec 0x000306 = 774 en valeur décimale. En début d’article, nous avions utilisé les variations de température de consigne pour déduire le codage des messages. Nous avions identifié que la valeur décimale correspondait à 1/64°C, nous retrouvons bien 774/64=12,1 arrondi au dixième de degré.

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Pilotez votre pompe à chaleur Atlantic en utilisant le bus Siemens BSB

Maintenant que nous avons trouvé le moyen de décrire

Le message diffusé en broadcast,

l’état du système, nous pouvons nous intéresser aux com-

c’est-à-dire à l’ensemble des élé-

mandes afin de comprendre ce qui se passe lorsque l’on

ments connectés sur le bus, contient

al ume, éteint, force le régime réduit, etc.

l’état du système. C’est vraisembla-

La sonde intérieure dispose d’un bouton permettant

blement ce message qui va entraîner

de basculer sur chacun de ces modes. Pour commen-

la modification des écrans affichant

cer, nous nous positionnons sur le mode arrêt. Nous

le mode de fonctionnement du chauf-

capturons les trois messages suivants :

fage (à l’arrêt, régime confort, régime

réduit...).

• Message 1 : DC 86 00 0D 03 3D 2D 05 74 01 00

B1 5B

En reprenant notre méthodologie,

nous pouvons déduire le codage de

→ Source : 0x06 (sonde ambiance)

l’ensemble des messages et de leurs

→ Destination : 0x00 (système central)

valeurs. Voici quelques exemples :

→ Signification : commande arrêt ?

Type de message (5ème octet) :

• Message 2 : DC 80 06 0B 04 2D 3D 05 74 58 5F

• 0x03 : Commande sur la PAC

→ Source : 0x00 (système central)

• 0x04 : Acquittement de la com-

→ Destination : 0x06 (sonde ambiance)

mande (précédé par un mes-

→ Signification : acquittement de la commande

sage de type 0x03)

d’arrêt ?

• 0x06 : Requête sur un paramètre

• Message 3 : DC 80 7F 15 02 2D 00 02 11 00 00

• 0x07 : Réponse contenant la

00 90 FF FF FF FF 00 01 C8 CF

valeur d’un paramètre (précé-

→ Source :

dée par un message de type

0x00 (système central)

0x06)

→ Destination : 0x7F (broadcast)

→ Signification : diffusion du nouvel état du

Commandes sur la PAC :

système ?

• Mode de fonctionnement du

Nous venons donc de mettre en évidence un nouveau

chauffage : 3D 2D 05 74

type de message. Le cinquième octet 0x03 pourrait indi-

Valeurs possibles :

quer qu’il s’agit d’une commande pour modifier un état, et

• 0x0100 : à l’arrêt

la valeur 0x04 serait l’acquittement d’une commande. En

• 0x0101 : automatique

analysant les deux premiers messages, on peut déduire

le format de la commande.

• 0x0102 : réduit

• 0x0103 : confort

À partir du premier message :

• Mode de fonctionnement du bal-

• 3D 2D 05 74 : action sur le mode de fonctionnement

lon d’eau chaude : 3D 31 05 73

du chauffage, codé sur 4 octets ;

Valeurs possibles :

• 01 00 : valeur de l’état : « arrêt », codé sur 2 octets.

• 0x0100 : charge forcée

À partir du second message :

Paramètres de la PAC :

• 2D 3D 05 74 : acquittement du mode de fonctionne-

ment demandé.

• État PAC : 3D 05 17 DC

Valeurs possibles :

Comme pour les requêtes sur les valeurs du système,

les deux premiers octets qui décrivent le message sont

• 0x000033 : Pas de demande

inversés entre la commande et l’acquittement (ici 0x3D et

• 0x00002E : Compresseur en

0x2D).

fonction

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

HACKABLE MAGAZINE n°19

93

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

• 0x000011 : Temporisation arrêt actif

• 0x00007D : Dégivrage actif

• 0x00002C : Compresseur et résistance électrique en marche

• État ECS : 3D 05 17 CE

Valeurs possibles :

• 0x00004B : Chargé

• 0x000045 : Charge active

• 0x00005E : Charge accélérée active

Température extérieure : 3D 05 05 21

Température d’ambiance : 3D 2D 05 1E

Consigne de chauffage : 3D 2D 05 8E

Consigne d’ambiance : 3D 2D 05 93

Toutes les valeurs de températures sont des entiers signés, codés sur 2 octets, et correspondent à 1/64ème degré Celsius. La valeur est précédée d’un octet nul. Il s’agit d’un padding pour arriver à 3 octets.

2.3 Transmission sur le BUS

Nos recherches permettent maintenant de lire correctement les données qui transitent sur le bus.

La récupération des paramètres ne fonctionne que si un des éléments connectés au bus émet une requête pour en connaître sa valeur, ce qui n’est pas fiable, puisque cela dépend par exemple de la page affichée sur l’écran de la PAC.

Il faudrait donc être capable d’émettre ses propres requêtes. Nous avons jusqu’à présent identifié 4 adresses : le système central 0x00, l’écran de configuration 0x0A, la sonde intérieure 0x06 et l’adresse de diffusion 0x7F.

Le code suivant permet d’envoyer une requête sur le bus :

1: #!/usr/bin/python

2: #! -*- coding=utf-8 -*-

3:

4: import serial

5: import sys

6: import crcmod

7:

8: ser = serial.Serial('/dev/ttyAMA0', 4800, timeout=1, bytesize=8, 9: stopbits=1, parity=serial.PARITY_ODD) 10:

11: # Température intérieure ?

12: msgData = "\x06\x3D\x05\x05\x21"

13:

14: srcAddr = 0x07 # Adresse source

15: dstAddr = 0x00

16:

17: lenMsg = len(msgData) + 6

18:

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Pilotez votre pompe à chaleur Atlantic en utilisant le bus Siemens BSB

19: msg = "\xDC" # Préfixe de chaque message

20: msg += chr(srcAddr | 0x80 ) # Adresse source avec le premier bit à 1

21: msg += chr(dstAddr) # Adresse de destination

22: msg += chr(lenMsg) # Longueur du message

23: msg += msgData # Contenu du message

24:

25: # Calcul et ajout du CRC

26: crc16 = crcmod.predefined.Crc('xmodem')

27: crc16.update(msg)

28: # Récupération de la valeur du CRC sur 16 bits, découpé en 2 octets distincts 29: msg += chr((crc16.crcValue & 0xFF00) >> 8) + chr(crc16.crcValue & 0xFF) 30:

31: msgToSend = ""

32: for idx in range(len(msg)):

33: # Inversion des bits avant la transmission sur le bus 34: msgToSend += chr(255-ord(msg[idx]))

35:

36: ser.write(msgToSend)

Arbitrairement, nous al ons affecter à notre montage l’adresse 0x07 (ligne 14). Cette valeur ne semble pas être utilisée. La bibliothèque crcmod permet de calculer le CRC. La valeur de 16 bits obtenue est scindée en 2 octets distincts grâce à une manipulation binaire (ligne 29).

La variable msgData est définie en ligne 12 avec la valeur précédemment relevée qui correspond à une requête sur la température extérieure.

En lançant en paral èle le code qui permet de lire les données, nous récupérons bien la re-quête, ainsi que la réponse avec la valeur de la température extérieure :

• DC 87 00 0B 06 3D 05 05 21 07 12 : Quel e est la température extérieure ?

• DC 80 07 0E 07 05 3D 05 21 00 02 FA 25 00 : La température extérieure est 11,9°C : (0x0002FA = 762, donc 762/64 = 11,9)

En adaptant le code, il est désormais tout à fait possible de modifier le mode de chauffage.

Ainsi le programme suivant mettra le circuit de chauffage à l’arrêt : 1: #!/usr/bin/python

2: #! -*- coding=utf-8 -*-

3:

4: import serial

5: import sys

6: import crcmod

7:

8: ser = serial.Serial('/dev/ttyAMA0', 4800, timeout=1, bytesize=8, 9: stopbits=1, parity=serial.PARITY_ODD) 10:

11: # Calcul et ajout du CRC

12: def processCRC(msg):

13:

14: crc16 = crcmod.predefined.Crc('xmodem')

15: crc16.update(msg)

16:

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

HACKABLE MAGAZINE n°19

95

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

CONNECT ÉVOLUE !

LISEZ CE NUMÉRO ET PLUS

17: # Les 16 bits du CRC

DE 20 AUTRES EN LIGNE !

18: return chr((crc16.crcValue & 0xFF00) >> 8) + chr(crc16.crcValue & 0xFF) 19:

20: srcAddr = 0x07

21: dstAddr = 0x00

22

23: # Mode du chauffage

24: msgData = "\x03\x3D\x2D\x05\x74\x01\x03"

25: # Mode arrêt

26: msgData += "\x01\x00"

27:

28: lenMsg = len(msgData) + 6 # 6 octets d'en tête + crc

29:

30: msg = "\xDC" # Préfixe de chaque message

31: msg += chr(srcAddr | 0x80 ) # Adresse source avec le premier bit à 1

32: msg += chr(dstAddr) # Adresse de destination

33: msg += chr(lenMsg) # Longueur du message

34: msg += msgData # Contenu du message

35: msg += processCRC(msg)

36:

37: # Inversion des bits avant la transmission sur le bus

38: msgToSend = ""

39: for idx in range(len(msg)):

40: msgToSend += chr(255-ord(msg[idx]))

41:

42: ser.write(msgToSend)

Il faudrait améliorer le code pour vérifier que l’on reçoit bien l’acquittement pour valider le nouvel état. De la même façon, il est tout à fait possible de commander la production d’eau chaude, ou de modifier le paramétrage de certaines valeurs comme la consigne du chauffage.

ACTUELLEMENT SUR CONNECT :

3. TABLEAU DE BORD

CE NUMÉRO

2 numéro

Pour terminer notre cheminement, nous al ons nous pencher sur la génération de graphes pour suivre quelques-uns des indicateurs que nous avons identifiés.

et + de 15 autres numéros

Hors-Série de

+

Pendant longtemps, pour générer des graphes qui représentent des valeurs dans le temps, la réfé-

rence a été d’utiliser la suite RRDtools qui permet notamment de générer des graphes sous forme de de Hackable

Hackable

fichiers image (PNG ou JPEG). Désormais, la mode est d’utiliser des interfaces comme Grafana, beaucoup plus flexibles que RRD puisque la génération de graphes se fait directement sur le navigateur.

Le stockage des données se fait en utilisant une base de données orientée « Time Series » [2], TOUT CELA À PARTIR DE 149 € TTC*/AN !

comme OpenTSDB, Graphite ou InfluxDB. La figure 5, page suivante, présente le genre de tableau de

* Tarif France Métropolitaine

bord qu’il est possible de mettre en place.

Sur la première partie du graphe, on peut distinguer un cycle de production d’eau chaude, avec la température de départ de la PAC qui dépasse les 55°C. Ensuite, un peu avant 4 heures du matin, la OFFRE DÉCOUVERTE CONNECT

température est passée sous les 19°C, qui est la valeur de consigne, et a déclenché un cycle de chauffage, jusqu’à ce que la température d’ambiance atteigne les 19,5°C (consigne + 0,5°C).

1 MOIS GRATUIT, RÉSERVÉE AUX PROFESSIONNELS

Je n’aborderai pas en détail la création de dashboard Grafana. Cet aspect pourrait à lui seul faire l’objet d’un article spécifique. Il existe beaucoup de documentation sur Internet à ce sujet.

Appelez le 03 67 10 00 28 et donnez le code « HK19 » pour

découvrir Connect gratuitement pendant 1 mois !

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Pour tous renseignements complémentaires, contactez-nous via notre site internet : www.ed-diamond.com, par téléphone : 03 67 10 00 28 ou envoyez-nous un mail à connect@ed-diamond.com !

pub_magazines_juin2017.indd 11

21/06/2017 13:54

CONNECT ÉVOLUE !

LISEZ CE NUMÉRO ET PLUS

DE 20 AUTRES EN LIGNE !

ACTUELLEMENT SUR CONNECT :

CE NUMÉRO

2 numéro

et + de 15 autres numéros

Hors-Série de

+

de Hackable

Hackable

TOUT CELA À PARTIR DE 149 € TTC*/AN !

* Tarif France Métropolitaine

OFFRE DÉCOUVERTE CONNECT

1 MOIS GRATUIT, RÉSERVÉE AUX PROFESSIONNELS

Appelez le 03 67 10 00 28 et donnez le code « HK19 » pour

découvrir Connect gratuitement pendant 1 mois !

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

HACK

Pour tous renseignements complémentaires, contactez-nous via notre site internet : ABLE MAGAZINE n°19

www.ed-diamond.com,

97

par téléphone : 03 67 10 00 28 ou envoyez-nous un mail à connect@ed-diamond.com !

pub_magazines_juin2017.indd 11

21/06/2017 13:54

DOMOTIQUE & ROBOTIQUE

POMPE À CHALEUR

Figure 5 : Exemple

de graphe obtenu

avec Grafana.

CONCLUSION

les prévisions météorologiques,

dans le but de ne pas se retrou-

Cet article balaie les principales étapes incontour-

ver avec de l’eau froide, tout en

nables lorsque l’on souhaite s’aventurer dans l’explo-

réduisant au maximum les coûts

ration d’un système fermé. Heureusement pour nous,

en électricité.

le protocole utilisé par les composants instal és dans

ma pompe à chaleur reste accessible pour peu que

De la même façon, le circuit de

l’on prenne les bonnes directions.

chauffage doit pouvoir être amé-

lioré. Selon l’exposition et l’iso-

Maintenant qu’il est possible de se connecter au

lation de votre habitation, il n’est

bus de communication, les possibilités sont tout de

peut-être pas utile de démarrer un

suite très nombreuses. Par exemple, il devient envi-

plancher chauffant en fin de nuit

sageable de construire sa propre sonde d’ambiance

si on sait que le ciel sera dégagé

pour remplacer cel e déjà instal ée. Pourquoi ne pas

dès le lever du soleil, et que son

utiliser un ensemble de capteurs de température

rayonnement produira assez de

répartis dans l’habitation, et choisir la tempéra-

chaleur pour retrouver le seuil mi-

ture d’ambiance annoncée à la PAC (température

nimal que l’on s’est fixé. Ce genre

moyenne de l’habitation, température minimale, etc.)

de configuration n’est possible que

au lieu de se contenter d’une seule mesure, bien

si nous avons le contrôle complet

souvent captée au beau milieu du salon ?

du système de chauffage. EL

Il devient même possible d’aller plus loin, en as-

surant une partie du travail de l’automate. Imaginons

RÉFÉRENCES

que l’on démarre la production d’eau chaude en ne

se basant pas uniquement sur un seuil de tempéra-

[1] https://fr.wikipedia.org/wiki/

ture et un créneau horaire (probablement réglé pour

Broadcast_(informatique)

fonctionner sur le tarif réduit de votre fournisseur

[2] https://en.wikipedia.org/wiki/

d’électricité), mais en se basant sur les habitudes,

Time_series_database

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

HACKABLE MAGAZINE n°19

http:/ www.hackable.fr/

Crédit photo : © Daniel Botelho / Hans Lucas - *cibles du monde Ce document est la propriété exclusive de Alex Arnaud(balinuxdroid@gmail.com) http:/ www.ed-diamond.com

HACKABLE MAGAZINE n°19

99

210x280_15mm.indd 1

15/06/17 12:19

N

a

n

t

e

s

P

rés

enté p

ar L

er

o

y Merlin

Nantes

Prés

Prés Nante

enté par L

enté p

er

ar L o

ero

s

Nantes

Nante

y Merlin

Présenté par Leroy Merlin

y Merlin

Présenté par Leroy Merlin

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

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

Document Outline

- ajoutez_un_ecran_intelligent_a_vos_proje

- les_ecrans_nextion

- creer_votre_interface

- installez_les_bibliotheques

- premier_exemplel_ecran_comme_afficheur

- second_exempleun_ecran_pour_controler_un

- tout_n_est_pas_parfait_loin_de_la

- decouvrez_lorawan_et_creez_votre_passere

- lorawan

- the_things_network

- creons_notre_concentrateur_lorawanle_mat

- installation_de_votre_concentrateur

- creation_de_compte_et_configuration_cote

- ceci_n_est_pas_la_seule_facon_de_faire

- construisez_un_emetteur_433_mhz_pour_rem

- dans_les_episodes_precedents

- reconstruire_apres_avoir_reutilise

- adaptation_du_composant

- le_quartz

- l_antenne

- conclusion

- creez_vos_montages_arduino_communicants_

- des_adresses_des_identifiants_et_de_la_s

- le_materiel_utilise

- ttn_et_enregistrement_de_l_application_e

- creons_notre_node_arduino_lora_shield

- les_donnees_sont_la_faisons-en_quelque_c

- limitations_usage_raisonne_et_serveur_pr

- obtenez_n_importe_quelle_tension_a_parti

- demontage_et_documentation

- adaptez_la_tension_a_vos_besoins

- pour_finir

Table of Contents

ajoutez_un_ecran_intelligent_a_vos_proje

les_ecrans_nextion

creer_votre_interface

installez_les_bibliotheques

premier_exemplel_ecran_comme_afficheur

second_exempleun_ecran_pour_controler_un

tout_n_est_pas_parfait_loin_de_la

decouvrez_lorawan_et_creez_votre_passere

lorawan

the_things_network

creons_notre_concentrateur_lorawanle_mat

installation_de_votre_concentrateur

creation_de_compte_et_configuration_cote

ceci_n_est_pas_la_seule_facon_de_faire

construisez_un_emetteur_433_mhz_pour_rem

dans_les_episodes_precedents

reconstruire_apres_avoir_reutilise

adaptation_du_composant

le_quartz

l_antenne

conclusion

creez_vos_montages_arduino_communicants_

des_adresses_des_identifiants_et_de_la_s

le_materiel_utilise

ttn_et_enregistrement_de_l_application_e

creons_notre_node_arduino_lora_shield

les_donnees_sont_la_faisons-en_quelque_c

limitations_usage_raisonne_et_serveur_pr

obtenez_n_importe_quelle_tension_a_parti

demontage_et_documentation

adaptez_la_tension_a_vos_besoins

pour_finir