Source

LO52 / zigbee_c4 / presentation.tex

Full commit
  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
%\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 Sleep Mode]{Zigbee et le mode veille}
\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 Sleep Mode},%
      pdfsubject  = {UTBM - LO52},%
      pdfkeywords = {utbm, leim, lo52, sleep, mode, zigbee},%
      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{Sleep mode}
\begin{frame}
  \frametitle{Sleep mode}
  \begin{enumerate}
    \item Mode pendant lequel le module se met en veille
    \pause \item Pendant la veille, le module ne peut rien faire
    \pause \item Zigbee est prévu pour gérer un réseau avec des modules régulièrement en veille
    \pause \item Grâce à cela, nous pouvons augmenter la durée de vie
    des batteries à plusieurs années tout en conservant un réseau fonctionnel et réactif.
  \end{enumerate}
\end{frame}

\subsection{End devices}
\begin{frame}
  \frametitle{End devices}
  \begin{enumerate}
    \item Version réduite des routeurs
    \pause \item Ils peuvent rejoindre un réseau et communiquer avec
    \pause \item Comme ils sont régulièrement éteints ils ne peuvent jouer le rôle de messagers
    \pause \item Ils ont besoin d'un routeur ou d'un coordinateur avec lequel communiquer en P2P
    \pause \item C'est ce routeur et coordinateur qui va les aider à communiquer avec le reste du réseau
    \pause \item C'est aussi ce routeur qui va stocker les messages qui lui sont destinés lorsqu'il est en veille.
    \pause \item Un seul coordinateur peut être le parent de plusieurs end devices
  \end{enumerate}
\end{frame}

\subsection{Storing and forwarding}
\begin{frame}
  \frametitle{Storing and forwarding}
  \begin{enumerate}
    \item Lorsqu'un module est en veille, il est deconnecté du réseau
    \pause \item Il est donc impossible de communiquer avec lui
    \pause \item Le rôle du parent est donc de stocker les messages lorsqu'il est en veille
    \pause \item et de les lui envoyer lorsqu'il se reveille.
    \pause \item La couche Zigbee permet de gérer cela automatiquement (sur les puces Xbee S2 notamment)
    \pause \item Vous n'avez donc rien de plus à écrire pour gérer cela.
    \pause \item Si ce n'est vérifier que votre puce Xbee est bien la bonne, les S1 ne fonctionneront pas.
  \end{enumerate}
\end{frame}

\subsection{Contraintes}
\begin{frame}
  \frametitle{Contraintes}
  \begin{enumerate}
    \item Hélas, il y a des contraintes inhérentes à ce gain d'énergie
    \pause \item Plus un module hiberne, plus il y a des messages à stocker.
    \pause \item Les puces Xbee ne peuvent en stocker qu'un à la fois.
    \pause \item Il faut donc bien penser son réseau.
    \pause \item Tous les autres messages seront perdus.
    \pause \item Pour connaitre la valeur maximale de end-device que peut gérer un routeur : \texttt{ATNC}
  \end{enumerate}
\end{frame}

\subsection{Avantages}
\begin{frame}
  \frametitle{Avantages}
  \begin{enumerate}
    \item On peut étendre ainsi la durée de vie de la batterie de quelques heures à plusieurs années.
    \pause \item Par exemple, si une batterie a une durée de vie en utilisation théorique de 4h
    \pause \item Il suffit de le mettre en veille 1 seconde sur 2 pour passer à 8h d'autonomie
    \pause \item Si le module est en veille 59 secondes par minutes on passe à 10 jours.
    \pause \item Si le module est en veille 59.98 secondes par minutes on passe à plus d'un an.
    \pause \item Évidement ce n'est que théorique puisque les
    batteries ont des propriétés chimiques qui leur son propre.
  \end{enumerate}
\end{frame}

\section{Configuring Sleep Mode}

\begin{frame}
  \frametitle{Configurer la veille}
  \begin{enumerate}
    \item Il y a 6 AT commandes associées au mode veille
    \pause \item Elles fonctionnent ensemble pour configurer finement la veille
    \pause \item Souvent trois vous suffirons :
    \begin{itemize}
      \pause \item - Sleep mode
      \pause \item - Sleep period
      \pause \item - Time before sleep
    \end{itemize}
  \end{enumerate}
\end{frame}

\subsection{Sleep Mode}
\begin{frame}
  \frametitle{Sleep mode}
  \begin{enumerate}
    \item Il y a 4 modes de veille
    \pause \item On les configure avec la commande \texttt{ATSM}
    \pause \item \texttt{ATSM 0} : Désactive le mode veille
    \pause \item \texttt{ATSM 1} : Pin wake mode
    \begin{itemize}
      \pause \item - Lorsqu'une tension de 0V est fournie au PIN
      9. Le module fini de transmettre et recevoir puis se met en
      veille
      \pause \item - Lorsqu'une tension de 3.3V est fournie au PIN 9. Le module se reveille.
      \pause \item - La consommation dans ce mode de veille est de $10\mu{}A$
      \pause \item - Le reveil prend 13 millisecondes
      \pause \item - On utilise ce mode lorsqu'un microcontrolleur est
      capable de changer la valeur du PIN 9
    \end{itemize}
    \pause \item \texttt{ATSM 2 et 3}
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Sleep mode}
  \begin{enumerate}
    \item \texttt{ATSM 4} : Cyclic sleep mode
    \begin{itemize}
      \pause \item - Permet de programmer les cycles de veille
      \pause \item - Le meilleur moyen pour conserver la batterie lorsque le module est un simple capteur
      \pause \item - On configure la fréquence et la durée de veille avec \texttt{ATSP} et \texttt{ATST}
      \pause \item - Lors du réveil, le module va demander au parent de lui transmettre son message.
      \pause \item - La consommation dans ce mode de veille est de $50\mu{}A$
      \pause \item - Le reveil prend 2 millisecondes
    \end{itemize}
    \item \texttt{ATSM 5} : Cyclic sleep mode with pin wake
    \begin{itemize}
      \pause \item - Permet les deux usages en simultané.
      \pause \item - La consommation dans ce mode de veille est de $50\mu{}A$
      \pause \item - Le reveil prend 2 millisecondes pour le cyclic
      wake et 13 millisecondes pour pin wake
    \end{itemize}
  \end{enumerate}
\end{frame}

\subsection{Sleep Period}

\begin{frame}
  \frametitle{Sleep Period}
  \begin{enumerate}
    \item \texttt{ATSP} : Sleep Period
    \begin{itemize}
      \pause \item - La durée de temps de veille, cette durée est
      multipliée par 10 pour donner le nombre de milliseconde de
      veille.
      \pause \item - Entre 0x20 et 0xAF0 (De 320 milliseconds à 28 secondes)
      \pause \item - Il est possible d'avoir des durées plus longues en donnant le nombre de periodes de veille consécutive 
      \pause \item - En configurant\texttt{ATSN et ATS0}
    \end{itemize}
  \pause \item Les routeurs doivent avoir la même valeur ou une valeur supérieure de \texttt{ATSP} que les end-devices car c'est aussi la durée de conservation des messages.
  \end{enumerate}
\end{frame}

\subsection{Time Before Sleep}

\begin{frame}
  \frametitle{Time Before Sleep}
  \begin{enumerate}
    \item \texttt{ATST} : Time Before Sleep
    \begin{itemize}
      \pause \item - Cela correspond à la valeur minimale avant le retour en veille.
      \pause \item - Le module Xbee ne se mettra pas en veille lors de
      l'envoi ou la réception de messages.
      \pause \item - Le timeout correspond à la durée de temps ``de
      silence'' avant de se remettre en veille.
      \pause \item - La valeur minimale est 0x1 pour 1 milliseconde
      \pause \item - La valeur maximale est 0xFFFF pour environ 65 secondes
    \end{itemize}
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Commandes avancées}
  \begin{enumerate}
    \item Ces commandes sont là pour des cas spéciaux.
    \pause \item Pour une station météo nécessitant un temps de démarrage
    \pause \item Pour faire clignoter une signalisation lors de la détection d'un véhicule
    \pause \item Le PIN 13 du Xbee correspond au On/sleep indicator.
    \pause \item Sa valeur est HIGH lorsque le module est réveillé et LOW lorsqu'il est en veille
    \pause \item Il suffit d'y brancher une LED pour avoir une indication du mode courant
    \pause \item On peut aussi l'utiliser pour contrôler un
    périphérique annexe, alimenté uniquement lorsque le module est
    réveillé.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Xbee PIN 9 et PIN 13}

  \image{Pin9-Pin13}{0.5}

\end{frame}

\subsection{Number of sleep periods}
\begin{frame}
  \frametitle{Commandes avancées}
  \begin{enumerate}
    \item \texttt{ATSN} : Nombre de périodes de veille
    \pause \item Définit le nombre de périodes de veille pendant
    lesquelle il ne faut pas activer le PIN 13 s'il aucune donnée
    n'est reçue.
    \pause \item La valeur par défaut est \texttt{0x01} ce qui réveille le PIN à chaque fois
    \pause \item Si on le mets à la valeur \texttt{0x09} va laisser
    passer 8 périodes sans données reçues avant de réveiller le PIN
    13.
    \pause \item La valeur maximale est 0XFFFF soit 65,535 réveil
    avant d'obliger le réveil du PIN 13.
    \pause \item Si lors d'une période de réveil, une donnée est
    reçue, le PIN va forcément se réveiller
    \pause \item Un deuxième usage est d'utiliser cette valeur comme
    un multiplicateur de \texttt{ATSP} en utilisant \texttt{ATS0}
  \end{enumerate}
\end{frame}

\subsection{Wake Host}
\begin{frame}
  \frametitle{Commandes avancées}
  \begin{enumerate}
    \item \texttt{ATWH} : Wake Host
    \pause \item Définit la durée nécessaire au réveil du périphérique sur lequel il est connecté
    \pause \item C'est une durée d'attente entre l'activation du PIN 13 et le début de la communication du module Xbee.
    \pause \item \texttt{0x0} pour aucun délai
    \pause \item \texttt{0xFFFF} pour environ 65 secondes de delai
    \pause \item Le timer est stoppé immédiatement dès lors que quelque chose est écrit sur le port série.
  \end{enumerate}
\end{frame}

\subsection{Sleep Options}
\begin{frame}
  \frametitle{Commandes avancées}

  \begin{enumerate}
    \item \texttt{ATS0} : Sleep Options
    \pause \item Trois états possibles :
    \begin{itemize}
      \pause \item - \texttt{0x0} : Aucune option activé
      \pause \item - \texttt{0x2} : Toujours se réveiller pour
      \texttt{ST} même si aucune donnée n'est reçue
      \pause \item - \texttt{0x4} : Toujours dormir pour $SN \times 10
      \times{} SP$ millisecondes soit un maximum de 1,834,980,000
      millisecondes soit plus de 3 semaines et une durée de batteries
      de plusieurs années.
    \end{itemize}
  \end{enumerate}
\end{frame}

\section{AT Command de gestion du Sleep Mode}
\begin{frame}
  \frametitle{Commandes avancées}

  \vfill

  Voici un résumé des 6 commandes permettant la gestion du mode veille.

  \vfill

  \begin{tabular}{|c|l|c|c|c|}
    \hline
    \textbf{AT} & \textbf{Description}                  & \textbf{Node type} & \textbf{Paramètre}    & \textbf{Default}\\
    \hline
    \textit{SM}         & \textbf{Sleep mode}           & \textit{E}         & \textit{0, 1, 4, 5}   & \textit{0}\\
    \hline
    \texttt{SN}         & \textbf{Nb of Sleep Period}   & \textit{CRE}       & \textit{1 - 0xFFFF}   & \textit{1}\\
    \hline
    \texttt{SP}         & \textbf{Sleep Period}         & \textit{CRE}       & \textit{0x20 - 0xAF0} & \textit{0x20}\\
    \hline
    \texttt{ST}         & \textbf{Time bf Sleep}        & \textit{E}         & \textit{1 - 0xFFFE}   & \textit{0x1388}\\
    \hline
    \texttt{S0}         & \textbf{Sleep options}        & \textit{E}         & \textit{0 - 0xFF}     & \textit{0}\\
    \hline
    \texttt{WH}         & \textbf{Wake Host}            & \textit{E}         & \textit{0 - 0xFFFF}   & \textit{0}\\
    \hline
  \end{tabular}

  \vfill
\end{frame}

\section{En pratique}

\subsection{Easy Sleeping}
\begin{frame}
  \frametitle{Easy sleeping}

  \begin{enumerate}
    \item Beaucoup d'options mais souvent peut sont utilisées.
    \pause \item Exemple : Réveil toutes les 5 secondes : 
    \begin{itemize}
      \pause \item \texttt{ATSM 4} : Activation du cyclic sleep mode
      \pause \item \texttt{ATSP 1F4} : Configuration de la durée de veille à 5000 millisecondes (0x1F4 == 500)
    \end{itemize}
    \pause \item La sortie du mode veille envoie toujours un I/O sample si \texttt{ATIR} est différent de 0
  \end{enumerate}
\end{frame}

\subsection{Exemple de configuration}
\begin{frame}
  \frametitle{Exemple de configuration}

  \begin{enumerate}
    \item \texttt{+++OK}
    \pause \item \texttt{ATID 1347} : Saisie du PAN ID
    \pause \item \texttt{ATDH 0} : \texttt{0} en adressage 16-bits
    \pause \item \texttt{ATDL 0} : Adresse du coordinateur \texttt{0x0}
    \pause \item \texttt{ATD0 2} : PIN 0 (Xbee n°20) in Analog Mode
    \pause \item \texttt{ATIR 3E8} : Sample rate à 1000ms
    \pause \item \texttt{ATSM 4} : Cyclic mode
    \pause \item \texttt{ATSP 64} : Sleep for 1 second ($100\times{}10$)
    \pause \item \texttt{ATST 14} : Timeout for 20 milliseconds
    \pause \item \texttt{ATWR} : To save the configuration
  \end{enumerate}

  \pause
  Maintenant que vous êtes en sleep mode, il se peut que votre Xbee ne
  réponde plus, c'est normal, par moment il dort.
\end{frame}

\begin{frame}
  \frametitle{Simple Sensor Node - LM335 breadboard layout}

  \image{simple-sensor-node}{0.3}

\end{frame}

\subsection{Communiquer avec un Xbee dormant}
\begin{frame}
  \frametitle{Communiquer avec un Xbee en sleep mode}

  \begin{enumerate}
    \item Dès lors que \texttt{ATSM} est à une valeur différente que
      0, votre module dort par moment.
    \pause \item Durant ce temps, le module ne réponds pas.
    \pause \item Voici quelques moyens de quand même pouvoir le configurer.
    \pause \item Si c'est en \texttt{ATSM 1} ou \texttt{ATSM 5}, il suffit de brancher le PIN 9 sur 3.3V pour le réveiller.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Communiquer avec un Xbee en sleep mode}

  \begin{enumerate}
    \item Si le module est en \texttt{ATSM 4} il y a plusieurs options :
    \begin{itemize}
      \pause \item - Envoyer +++ jusqu'à ce que le module réponde
      \pause \item - Si \texttt{ATSP} est très long ou que \texttt{ATST} est très court ça peut prendre du temps...
      \pause \item - Avec X-CTU, il demande l'appuie sur le bouton reset et prends la main tout de suite après.
      \pause \item - CoolTerm permet d'afficher une voyant lorsque le module sort de la veille.
      \pause \item On peut aussi forcer la mise en place d'un nouveau firmware avec X-CTU (Checkbox ``Flow Control Hardware'' + ``Always Update Firmware'')
      \pause \item Dans le pire des cas on peut contacter le support de Digi.
    \end{itemize}
  \end{enumerate}
\end{frame}

\section{En résumé}
\begin{frame}
  \frametitle{Résumé}

  A ce stade, si vous avez suivi les 4h dernières heures de cours, vous savez :

  \begin{enumerate}
    \pause \item Flasher vos modules avec le bon firmware AT/API - Coordinateur, Routeur, End device
    \pause \item Configurer vos modules pour leur permettre de communiquer en réseau P2P, en réseau star ou en réseau MESH
    \pause \item Utiliser Arduino pour faire simplement des prototypes de réseau Xbee
    \pause \item Utiliser Xbee pour commander à distance un capteur \texttt{INPUT} ou un actionneur \texttt{OUTPUT}
    \pause \item Transmettre des données en Transparent Mode et en API Mode
    \pause \item Gérer la veille du module zigbee afin d'économiser de la batterie
  \end{enumerate}

  \pause \centerline{\textbf{Vous êtes donc pratiquement des experts Zigbee.}}

\end{frame}

\end{document}