LO52 / zigbee_c6 / presentation.tex

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
\documentclass[trans]{beamer}
%\documentclass{beamer}

\usepackage{natim-beamer}
\usepackage{multirow}
\usepackage{listings}

\usetheme[shownavigation={true},  % true | false
          logo={images/ionyse.png},
          titlepageimage={images/titleimage.png},
          header=utbm,          % fullnav | shortnav | utbm
          dept={Logiciels Embarqués et Informatique Mobile}
        ]{UTBM}
\usecolortheme{UTBMOfficial}
\usepackage{upgreek}

\title[Zigbee Avancé]{Zigbee Avancé}
\subtitle{LO52 - Automne \the\year}
\author{Rémy HUBSCHER}
\institute{remy.hubscher@utbm.fr}
\date{\today}


\hypersetup{
      pdfpagemode = FullScreen,% afficher le pdf en plein écran
      pdfauthor   = {Rémy HUBSCHER},%
      pdftitle    = {LO52 : Zigbee Avancé},%
      pdfsubject  = {UTBM - LO52},%
      pdfkeywords = {utbm, leim, lo52, zigbee, gateways},%
      pdfcreator  = {PDFLaTeX},%
      pdfproducer = {PDFLaTeX}%
}

\begin{document}
\lstset{language=C,breaklines=true,xleftmargin=7mm,basicstyle=\scriptsize,frame=single,framexleftmargin=7mm,captionpos=b,tabsize=2,numbers=left,numberstyle=\scriptsize,escapechar={\%}{\_}}

\selectlanguage{french}

\begin{frame}[plain]
  \titlepage
\end{frame}

\AtBeginSection[]{
   \begin{frame}
     \frametitle{Sommaire}
     %%% affiche en début de chaque section, les noms de sections et
     %%% noms de sous-sections de la section en cours.
     \tableofcontents[currentsection,hideothersubsections]
   \end{frame} 
}

\begin{frame}
  \frametitle{Sommaire}
  \tableofcontents[pausesections,hideothersubsections]
\end{frame}

\section{ZigBee Stack Layers}
\begin{frame}
  \frametitle{ZigBee Stack Layers}
  \begin{enumerate}
    \item Comme vu précédement, ZigBee est découpé en couches
    \pause \item Ce sont des parties de protocole qui ont des objectifs différents
    \pause \item Ensemble, ils mettent en place une structure pour réaliser des réseaux maillés de capteurs organisés et flexibles.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{ZigBee Stack Layers}
  \image{Zigbee_protocol}{0.5}
\end{frame}

\begin{frame}
  \frametitle{ZigBee Stack Layers}
  \begin{enumerate}
    \item Nous avons déjà parlé de la couche PHY et de la couche MAC que nous avons testé en TP
    \pause \item Ce sont les couches du protocole 802.15.4
    \pause \item Nous venons de parler de la couche Network qui permet de faire le routage des paquets.
    \pause \item Il reste donc deux couches à explorer :
      \begin{itemize}
        \pause \item - Application Support Sublayer (APS)
        \pause \item - ZigBee Device Objects (ZDO)
      \end{itemize}
  \end{enumerate}
\end{frame}

\subsection{Application Support SubLayer (APS)}
\begin{frame}
  \frametitle{Application Support SubLayer (APS)}
  \begin{enumerate}
    \item C'est la couche qui définit les standards de communication, la structure des messages pour des tâches spécifiques.
    \pause \item Ainsi des périphériques de différents constructeurs peuvent former un même réseau
    \pause \item Par exemple pour de la domotique, 
    \pause \item Si on achète une lampe chez un constructeur
    \pause \item Et un interrupteur chez un autre
    \pause \item Il faut qu'ils soient compatibles.
  \end{enumerate}
\end{frame}

\subsection{ZigBee Device Objects (ZDO)}
\begin{frame}
  \frametitle{ZigBee Device Objects (ZDO)}
  \begin{enumerate}
    \item C'est une API 
    \pause \item Elle permet à une application de découvrir
      d'autres périphériques ZigBee 
    \pause \item ainsi que les services qu'ils proposent.
    \pause \item Cette couche apporte aussi des possibilités de gestion du réseau
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{ZigBee Stack Layers}
  \begin{enumerate}
    \item Ces deux couches supérieures ont un intérêt dès lors qu'il vous faut communiquer avec des périphériques ZigBee certifiés achetés dans le commerce.
    \pause \item Notamment Smart Energy, Home Automation, Consumer Electronics, Health Care ...
    \pause \item Si c'est juste pour communiquer au sein de votre réseau pas là peine de s'en préoccuper.
  \end{enumerate}
\end{frame}

\section{Application Support Layer}

\begin{frame}
  \frametitle{Application Support Layer (APS)}

  Cette couche implémente les profiles d'application, les clusters et les terminaux

  \begin{enumerate}
    \pause \item \textbf{Profile} : Le sujet général de ce que vous faites
    \pause \item \textbf{Cluster} : Les actions spécifiques qui sont réalisées
    \pause \item \textbf{Terminal} : L'endroit, à travers le module, où va se dérouler l'action.
  \end{enumerate}
\end{frame}

\subsection{Profile}

\begin{frame}
  \frametitle{Application Support Layer - Profile}

  \begin{enumerate}
    \item Il s'agit d'un exemple de protocoles de communication inter-module
    \pause \item Qui leurs permettent de communiquer entre-eux dans un certain domaine
    \pause \item Chaque profile définie les types de périphériques et les actions qu'ils doivent être capables d'effectuer.
    \pause \item Les plus intéressants sont ceux définis par la ZigBee Alliance
    \pause \item Ce qui garantie une interoperabilité entre les différents constructeurs.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Application Support Layer - Profile}

  \begin{enumerate}
    \item Par exemple un capteur de pouls pourra correspondre avec n'importe quel moniteur si les deux sont certifiés Health Care
    \pause \item Un constructeur peut aussi définir un standard de
    communication et le partager avec d'autres constructeurs au sein d'un partenariat
  \end{enumerate}
\end{frame}


\begin{frame}
  \frametitle{Application Support Layer - Profile}

  \begin{enumerate}
    \item Dans le cas de Xbee, ils sont connectés avec le Drop-in Networking Profile
    \pause \item Cela permet notamment de communiquer les valeurs de PIN Analogique en utilisant des commandes AT spécifiques
    \pause \item Qu'il soit public ou privé, un profile a un nom et un identifiant sur 16-bits.
    \pause \item Par exemple Smart Energy a l'identifiant \textit{0x0109}
    \pause \item Chaque périphérique qui souhaite supporter Smart Energy doit proposer les fonctions standard du profile et identifier ses messages avec l'identifiant \textit{0x0109}
    \pause \item Chaque profile définit un nombre de clusters qui décrivent comment les modules radio doivent intéragir au sein du profile.
    \pause \item Plusieurs clusters peuvent être définit dans un même terminal
  \end{enumerate}
\end{frame}


\subsection{Terminaux}
\begin{frame}
  \frametitle{Application Support Layer - Terminaux}

  \begin{enumerate}
    \item Avec ZigBee, un même terminal peut implémenter plusieurs profiles.
    \pause \item Ainsi on peut avoir un périphérique qui implémente les deux profiles Home Automation et Consumer Electronics et peut servir ainsi de Thermostat ou de Capteur de température
    \pause \item C'est le rôle du terminal de définir les applications qui tournent sur un périphérique
    \pause \item Les terminaux sont comme les boites aux lettres a bas d'un immeuble.
    \pause \item Il faut connaitre l'adresse du terminal ainsi que le numéro de la boite à laquelle transmettre le message.
    \pause \item Il est fréquent d'avoir des périphériques avec plusieurs terminaux.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Application Support Layer - Terminaux}

  \begin{enumerate}
    \item On peut faire le parrallèle entre les terminaux ZigBee et les ports de TCP/IP
    \pause \item Chaque message est envoyé du terminal d'un périphérique au terminal d'un autre périphérique.
    \pause \item Ensuite les terminaux contiennent plusieurs clusters qui sont spécifiques à un profile.
    \pause \item Chaque terminal est identifié avec une adresse 8-bits de \textit{0x0} à \textit{0xF0}
  \end{enumerate}
\end{frame}


\subsection{Clusters}
\begin{frame}
  \frametitle{Application Support Layer - Clusters}

  \begin{enumerate}
    \item Avec ZigBee, les profiles des périphériques intéragissent deux à deux à travers leurs clusters
    \pause \item Les clusters ZigBee sont des ensembles de fonctions que
    les applications peuvent effectuer avec un profile.
    \pause \item Chaque cluster est associé à une action ou un service.
    \pause \item Par exemple, avec le profile Smart Energy, l'un des clusters est dédié au prix.
    \pause \item Qu'il s'agissent de lire, modifier ou nommer les différents scénarios de tarification de l'énergie.
    \pause \item Il y a deux types de clusters
      \begin{itemize}
        \pause \item - Les clusters clients
        \pause \item - Les cluster serveurs
      \end{itemize}
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Application Support Layer - Clusters serveurs}

  \begin{enumerate}
    \item Un module implémentant un service implémente un cluster serveur
    \pause \item Par exemple : Envoyer des informations de tarification
    \pause \item Lorsqu'il a un prix à transmettre, il interagit avec le cluster client d'un autre module
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Application Support Layer - Clusters clients}

  \begin{enumerate}
    \item D'un autre côté, les clusters clients vont envoyer des commandes qui vont :
      \begin{itemize}
        \pause \item - Soit modifier la valeur des attributs
        \pause \item - Soit lancer des actions sur un cluster serveur
      \end{itemize}
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Application Support Layer - Clusters}

  \begin{enumerate}
    \item Chaque cluster a un identifiant sur 16-bits \pause | Ex: \texttt{0x700} pour le prix
    \pause \item Ils contiennent aussi divers attributs and types de commandes identifié par d'autres valeurs numériques.
    \pause \item Avec Xbee, la frame de l'API qui va publié le tarif d'une énergie va contenir la commande \texttt{0x00} ainsi que :
      \begin{itemize}
        \pause \item - L'ID du provider
        \pause \item - Le nom du cours
        \pause \item - La date
        \pause \item - L'unité de mesure
        \pause \item - La monnaie (EUR, USD, ...)
        \pause \item - ...
      \end{itemize}
    \pause \item En gros les clusters se rapproche de la POO
      \begin{itemize}
        \pause \item - Ils contiennent des attributs
        \pause \item - Et des méthodes
      \end{itemize}
  \end{enumerate}
\end{frame}

\section{Routing}

\begin{frame}
  \frametitle{Routing}

  \begin{enumerate}
    \item ZigBee utilise différentes méthodes de routage pour envoyer les données d'un endroit à l'autre du réseau
    \pause \item Il y en a une par défaut et les autres peuvent être utiles pour les réseaux de plus de 40 nœuds.
    \pause \item \textbf{Ad hoc On-demand Distance Vector | AODV mesh routing} 
    \pause \item \textbf{Many-to-one routing}
    \pause \item \textbf{Source routing}
  \end{enumerate}
\end{frame}

\subsection{Ad hoc On-demand Distance Vector mesh routing}
\begin{frame}
  \frametitle{Ad hoc On-demand Distance Vector mesh routing}

  \begin{enumerate}
    \item Trouve automatiquement un chemin entre la source et la destination
    \pause \item Ils peuvent traverser plusieurs routeurs
    \pause \item Comme il y a peu d'espace de stockage, il faut souvent trouver à nouveau le chemin
  \end{enumerate}
\end{frame}

\subsection{Many-to-one routing}
\begin{frame}
  \frametitle{Many-to-one routing}

  \begin{enumerate}
    \item Souvent dans un réseau de capteur, les modules doivent
      envoyer les données récoltées en un même point central.
    \pause \item Many-to-one routing est optimisé pour ce cas de figure
    \pause \item Le point central broadcast un message de routage afin
    que chaque end-device mette à jour sa table de routage sur le
    chemin inverse.
    \pause \item Une fois que le chemin est sauvegardé il n'y a plus besoin de le chercher à nouveau.
    \pause \item On utilise la commande \texttt{ATAR} pour configurer ce mode de routage
  \end{enumerate}
\end{frame}

\subsection{Source routing}
\begin{frame}
  \frametitle{Source routing}

  \begin{enumerate}
    \item Le but d'autres réseaux est d'envoyer des messages d'un
      point central à plusieurs end-device
    \pause \item Avec cette méthode de routage, il sera possible de
    stocker les différentes routes vers les différents modules
    avec lesquel l'émetteur doit communiquer.
    \pause \item La table de routage n'est pas sauvegardé sur le module émetteur
    \pause \item Elle est obtenu à partir du périphérique ou de l'ordinateur connecté à l'émetteur
    \pause \item Au moment d'envoyer un message à un nœud du réseau,
    le module via l'API demande le chemin à l'aide d'une trame API :
    Create Route Record API frame.
    \pause \item Ensuite il créé un API Transmit Request en donnant
    les données et l'adresse de destination
    \pause \item La route contient les adresses de tous les points du
    réseau par lesquels doit passer le paquet.
  \end{enumerate}
\end{frame}

\subsection{Avantages et Inconvénients}
\begin{frame}
  \frametitle{Avantages et Inconvénients}

  \begin{enumerate}
    \item \textbf{AODV routing} : Fonctionne dans tous les cas mais
      nécessite des requêtes de routages répétées
    \pause \item \textbf{Many-to-one routing} : Performances
    excellentes dans un cas spécifique mais pas dans les autres
    \pause \item \textbf{Source routing} : Performances excellentes
    mais nécessite de coder un programme qui va gérer la table de
    routage du module et répondre aux requêtes de l'API
  \end{enumerate}
\end{frame}

\section{Sécurité}
\begin{frame}
  \frametitle{Sécurité}

  \begin{enumerate}
    \item Encrypter ses données fait souvent peur aux utilisateurs de ZigBee
    \pause \item Cependant, selon les données qui transittent sur les
    réseaux ça peut être nécessaire
    \pause \item ça peut aussi être un handicap en terme de
    développement et de ressources réseaux.
    \pause \item Il faut donc voir si c'est vraiment nécessaire et quel est l'enjeu
  \end{enumerate}
\end{frame}

\subsection{Network and link keys}
\begin{frame}
  \frametitle{Clé réseau et clé de connexion}

  \begin{enumerate}
    \item Il y a deux types d'encryption possibles qui peuvent également être utilisé ensemble :
      \begin{itemize}
        \pause \item - Clé réseau
        \pause \item - Clé de connexion
      \end{itemize}
    \pause \item \textbf{Les clés réseaux} : Les données sont
    décryptées et réencryptées à chaque routeur
    \pause \item \textbf{Les clés de connexion} : Les données sont
    décryptés une fois arrivée à destination
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Pour configurer l'encryption}

  \begin{enumerate}
    \item \texttt{ATEE 1} : Active l'encryption
    \pause \item \texttt{ATNK 0} : 0 pour une clé aléatoire sur 128-bits (Network Key)
    \pause \item \texttt{ATKY 0x1 to 0xFFFFFFFFFFFFFFFF} : Mettre la même sur tous les modules
    \pause \item Les registres NK et KY sont en écriture seule
    \pause \item En utilisant l'API, on peut décider d'encrypter certains paquets seulement
    \pause \item Utiliser l'encryption fait baiser le taille
    de données disponibles par paquet, donc ralenti le réseau
  \end{enumerate}
\end{frame}


\section{Serial Flow Control}

\begin{frame}
  \frametitle{Serial Flow Control}

  \begin{enumerate}
    \item Lorsque nous avons utilisé Xbee, nous avons utilisé essentiellement les ports 2 et 3 (RX et TX)
    \pause \item Seulement, cela ne suffit pas à s'assurer que les données ont bien été reçue
    \pause \item Pour être sûr de ne rien perdre, on peut utiliser le Serial Flow Control
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Serial Flow Control}

  \begin{enumerate}
    \item Lorsqu'on envoie des données au module Xbee, elles sont
      stockées dans un buffer en attendant que le module les
      transmettent ou les reçoivent
    \pause \item Ces buffers sont, bien sûr, limités en taille
    \pause \item Et il faut parfois s'en préoccuper si on ne veut rien perdre.
    \pause \item Lorsqu'on écrit sur le module, les données sont
    stockés dans le buffer jusqu'à ce qu'il y en ai assez pour remplir
    un packet ou jusqu'à ce que Xbee ne reçoivent plus de donnée
    pendant un certain temps et décide de les envoyer.
    \pause \item Lorsque le module reçoit des données, il les stocke
    dans le buffer car il ne peut les recevoir et les écrires sur le
    port série en même temps.
    \pause \item Parfois, le microcontrolleur connecté au port série n'est
      pas prêt à lire les données et elle reste dans le buffer.
  \end{enumerate}
\end{frame}

\subsection{RTS et CTS}
\begin{frame}
  \frametitle{RTS et CTS}

  \begin{enumerate}
    \item Les pins RTS (PIN 16) et CTS (PIN 12) agissent comme des
      feux de circulations éléctroniques pour gérer le flux
      d'information sur les pin RX (PIN 2) et TX (PIN 3)
    \pause \item \textbf{CTS} : Prêt à envoyer des données au XBee
    \pause \item \textbf{RTS} : Demande d'envoie de données au XBee
  \end{enumerate}
\end{frame}

\begin{frame}[fragile]
  \frametitle{CTS pin}

  \begin{enumerate}
    \item Lorsque ce pin est LOW, l'ordinateur peut envoyer des données sur le port série
    \pause \item Par exemple avec Arduino :
  \begin{lstlisting}
if(digitalRead(ctsPin == LOW)) {
  Serial.print(important_data);
}
  \end{lstlisting}
    \pause \item Le pin est HIGH lorsque le buffer du XBee est
    quasiment plein afin d'éviter que des données soient perdues.
  \end{enumerate}
\end{frame}

\begin{frame}[fragile]
  \frametitle{RTS pin}

  \begin{enumerate}
    \item Lorsque ce pin est LOW, le XBee peut écrire les données sur le port série
    \pause \item Le PIN est mis à HIGH lorsque le microcontroleur est occupé
    \pause \item Par exemple avec Arduino :
  \begin{lstlisting}
digitalWrite(rtsPin, LOW);
if(Serial.available() > 0) {
  inVar = Serial.read();
}
digitalWrite(rtsPin, HIGH);
delay(10000);
  \end{lstlisting}
  \end{enumerate}
\end{frame}

\section{Le futur de ZigBee}
\begin{frame}
  \frametitle{Le futur de ZigBee}

  \begin{enumerate}
    \item Le protocole va encore évoluer
    \pause \item On s'attends à terme à pouvoir donner une adresse IPv6 à un module ZigBee
    \pause \item Et ensuite à pouvoir contacter des objets ZigBee avec des API HTTP RESTful
  \end{enumerate}
\end{frame}

\section{Idées de projets}
\begin{frame}
  \frametitle{Idées de projets}

  \begin{enumerate}
    \item Commandé un avion de modélisme
    \pause \item Transformer une pièce en un instrument de musique
    \pause \item Suivre en temps réel sa consommation d'énergie afin de la réduire
    \pause \item Connaitre le nombre et l'emplacement des places disponibles sur le parking de l'UTBM
    \pause \item Lier le flux des tremblements de terre du monde à votre chaise à masser
    \pause \item Créer des capteurs de chaussette qui détecte les
    pieds froids et prévienne de mettre ses chaussons ou allume les chaussons USB
    \pause \item Monitorer les chuttes du pluie dans un verger
    \pause \item Faire un bracelet qu'il s'allume lorsqu'on est proche de son meilleur ami
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Idées de projets}

  \begin{enumerate}
    \item Construire une maison hanté interractive
    \pause \item Monitorer la qualité de l'air dans une forêt
    \pause \item Envoyer des messages secrets à ses amis
    \pause \item Planter un jardin en autogestion
    \pause \item Construire un ventilateur qui tourne à l'intérieur à la vitesse du vent dehors
    \pause \item N'oubliez pas de partager votre travail sur internet,
    Flickr, Twitter, Youtube avec le tag \#BWSN
  \end{enumerate}
\end{frame}

\end{document}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.