Source

LO52 / zigbee_c5 / 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
421
422
423
424
425
426
427
428
429
%\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 Gateways]{Zigbee Gateways}
\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 Gateways},%
      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{Over the border}
  \begin{enumerate}
    \item Zigbee n'est qu'un moyen pratique de communiquer parmi d'autres
    \pause \item Il est de plus adapté à la taille d'un réseau personnel
    \pause \item Nous allons maintenant voir comme connecter son
    réseau Xbee avec le reste du réseau et notamment avec internet.
  \end{enumerate}
\end{frame}

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

\section{Gateways}
\begin{frame}
  \frametitle{Gateways}
  \begin{enumerate}
    \item Il y a de nombreux standards que nous avons vu lors du premier cours.
    \pause \item Bluetooth, IPv6, UDP, \pause ZigBee, SMS, VoIP, \pause WiFi, Ethernet, 4G, \pause SMTP, TCP/IP, ...
    \pause \item Tous définissent des protocoles standardisés ou des couches standardisées de ces protocles
    \pause \item Il n'y a pas de réseau parfait, c'est pourquoi il y a plusieurs manière de le faire
    \pause \item Chaque protocole s'attache à résoudre un problème spécifique
    \pause \item Et la plupart remplisse très bien leur rôle
    \pause \item Cependant ils ont tous des limitations
    \pause \item Par exemple, connecter 8 périphériques en Bluetooth fonctionne très bien
    \pause \item Mais dès lorsqu'il faut en mettre des centaines ou des milliers ça ne fonctionne plus.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Gateways}
  \begin{enumerate}
    \item Heureusement, il est possible de combiner les
    protocoles pour les faire fonctionner ensemble.
    \pause \item Une passerelle (Gateway) est un périphérique qui permet de connecter deux réseaux.
    \pause \item Ce peut-être des réseaux utilisants des protocoles différents
    \pause \item Ou des réseaux utilisants les même protocoles, nécessitant une passerelle pour des questions de sécurité ou de traffic.
    \pause \item On va utiliser une passerelle pour connecter les
    informations collectées sur notre réseau ZigBee et les rendre
    disponible dans toute une toile de réseau et même nous permettre
    d'effectuer des tâches extraordinaires.
    \pause \item Par exemple gérer l'allumage de la chaudière en
    partant du bureau afin que la maison soit chaude en arrivant.
    \pause \item Suivre les déplacements des bus en temps réel avec le nombre de place disponibles
  \end{enumerate}
\end{frame}

\subsection{Serial Gateways}
\begin{frame}
  \frametitle{Gateways}
  \begin{enumerate}
    \item Xbee est déjà une passerelle entre le protocole ZigBee sans-fil et le port série TTL
    \pause \item C'est le circuit interne à Xbee qui s'occupe de faire
    la passerelle entre les deux protocoles.
    \pause \item Cela permet ensuite au Arduino d'écrire normalement
    sur le port série que le module le transforme en ondes ZigBee.
    \pause \item D'autres modules permette de connecter un port série
    à du Bluetooth, CAN-bus, Ethernet, GPRS, HomePlug, RF, RFID, USB,
    WiFi, X-10, Z-Wave
    \pause \item La plupart du temps, il suffit de connecter le RX du
    premier port série au TX du deuxième port série pour faire une
    passerelle (Après avoir configurer les devices)
    \pause \item Bien sur il faut parfois modifier la structure de la
    donnée entre les deux
  \end{enumerate}
\end{frame}

\subsection{Internet Gateway}
\begin{frame}
  \frametitle{Internet Gateways}
  \begin{enumerate}
    \item Ce qui peut être intéressant, c'est de faire une passerelle avec Internet
    \pause \item Pour stocker la donnée, la présenter, activer un
    module à distance ou tout à la fois.
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Internet Media}
   Pour se connecter à internet, trois options :
   \begin{enumerate}
     \pause \item \textbf{Ethernet :} en utilisant un cable réseau
     \pause \item \textbf{WiFi :} c'est sans-fil et souvent présent dans une maison
     \pause \item \textbf{Mobile data :} GPRS, 3G, 4G
   \end{enumerate}
\end{frame}


\subsection{Computer versus dedicated devices}
\begin{frame}
  \frametitle{Computer versus Dedicated Device}
   \begin{enumerate}
     \item La plupart des ordinateurs portables ont déjà plusieurs de ces médias
     \pause \item Il suffit de rajouter un Sparkfun explorer avec un module Xbee et vous avez une passerelle 
     \pause \item D'un autre côté c'est une passerelle qui ne
     fonctionnera que lorsque l'ordinateur sera lancé et écoutera sur
     le port COM.
     \pause \item Pour du prototypage ça fera l'affaire, surtout qu'il n'y aura rien de plus à acheter.
     \pause \item Et il sera très facile de faire un petit programme qui va jouer le rôle de passerelle.     
   \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Computer versus Dedicated Device}
   \begin{enumerate}
     \item D'un autre côté les passerelles clés en main sont un vrai bonheur
     \pause \item Elles arrivent comme un routeur avec une logiciel complet incorporé accessible en HTTP
     \pause \item Il n'y a qu'à les brancher pour démarrer de manière fiable
     \pause \item Ils sont optimisés pour une faible consommation d'énergie
     \pause \item Ils prennent peu de place
     \pause \item Digi propose une gamme de passerelle appellée \textbf{ConnectPorts}
   \end{enumerate}
\end{frame}

\section{Digi ConnectPorts Internet Gateway}

\begin{frame}
  \frametitle{Digi ConnectPort}
   \begin{enumerate}
     \item Utilise les modules Xbee que vous connaissez
     \pause \item Sont livrés avec une interface web simple
     \pause \item Et un shell Python intégré ce qui permet d'écrire et
     de lancer des programmes pour manipuler les données entrante et
     sortante d'un réseau à l'autre.
     \pause \item On peut donc avec une API HTTP REST et transformer
     les demandes en commandes Xbee au moment du passage au réseau
     ZigBee.
   \end{enumerate}
\end{frame}


\begin{frame}
  \frametitle{Digi Connect Port}

  \image{connect_port}{0.4}

  \centerline{À partir de 90\texteuro{}}
\end{frame}

\begin{frame}
  \frametitle{Digi Device Discovery}

  \image{device_discovery}{0.8}

  \centerline{Configuration : \url{http://192.168.5.196/}}
\end{frame}

\begin{frame}
  \frametitle{Digi ConnectPort X2 Configuration and Management}

  \image{xbee_configuration_connect_port}{0.3}
  
  Il est même possible d'utiliser l'interface pour configurer tous les Xbee du réseau.
\end{frame}

\subsection{iDigi Connectivity Server}

\begin{frame}
  \frametitle{iDigi Connectivity Server}

   \begin{enumerate}
     \item iDigi est un service Cloud proposé par Digi
     \pause \item Ce qui permet de configurer les ConnectPorts ainsi
     que tous les modules qui y sont connecté depuis internet
     \pause \item Vous pouvez contrôler gratuitement jusqu'à 5 ConnectPorts
     \pause \item \url{http://developer.idigi.com}
   \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{iDigi Connectivity Server}

  \image{idigi}{0.5}
\end{frame}

\section{XBee Internet Gateway (XIG)}

\section{Configurer XIG}
\begin{frame}
  \frametitle{XBee Internet Gateway (XIG)}

   \begin{enumerate}
     \item XIG est un programme Python Open Source qui une fois
       charger sur le ConnectPort joue le rôle d'un client HTTP.
     \pause \item \url{http://code.google.com/p/xig/}
     \pause \item Une fois XIG lancé, toute URL envoyée sur le port
     série au ConnectPort va retourner le résultat de cette dernière.
     \pause \item La résolution DNS, les redirections HTTP, timeout, securité, ... tout est géré par XIG
     \pause \item Dans la console d'administration il faut simplement charger \texttt{xig.py} et \texttt{\_xig.zip}
     \pause \item Ne pas oublier de mettre un mot de passe à l'interface d'administration du
     ConnectPort vu qu'il est connecté à internet.
   \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{XBee Internet Gateway (XIG)}

  \image{Digi_ConnectPort_Auto-start_XIG_Python_Script}{0.25}

  \centerline{Après reboot, le ConnectPort va lancer automatiquement XIG}
\end{frame}

\subsection{Tester XIG}
\begin{frame}
  \frametitle{Test de la XBee Internet Gateway}

   \begin{enumerate}
     \item En se connectant au XBee en Transparent Mode
     \pause \item On configure \texttt{ATID AAAA} recommandé PAN ID pour XIG
     \pause \item Puisque XIG peut envoyer pas mal de données, on peut
     souhaiter augmenter la vitesse du port série \texttt{ATBD 7}
     \pause \item Il faut alors changer la vitesse dans le terminal à 115,200bps
     \pause \item Pour tester XIG, on peut juste envoyer \texttt{help}
     \pause \item On peut aussi tester de récupérer une URL simple : \url{http://www.perdu.com/}
   \end{enumerate}

\end{frame}

\subsection{Exemple d'utilisation de XIG avec Arduino}
\begin{frame}[fragile]
  \frametitle{Exemple d'utilisation de XIG avec Arduino}

  \begin{lstlisting}
void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  String stringOne = "http://api.thingspeak.com/update?key=T39xxxx966Wxxxx&field2=";
  String stringTwo = stringOne + sensorValue;
  Serial.println(stringTwo);
  delay(10000); // prevents overwhelming the serial port
}
  \end{lstlisting}

  \pause
  \begin{columns}
    \begin{column}[l]{6cm}
      \image{potentiometer}{0.3}
    \end{column}
    \pause
    \begin{column}[r]{6cm}
      ThingSpeak est un service OpenSource pour l'internet des objets
      pour stocker et récupérer des données via une API HTTP.
      \url{http://www.thingspeak.com}
    \end{column}
  \end{columns}
\end{frame}

\begin{frame}
  \frametitle{XBee Internet Gateway (XIG)}

  \image{XIG_System_Diagram}{0.6}
\end{frame}

\section{Exemple : Twitter Reader}
\begin{frame}
  \frametitle{Exemple : Twitter Reader}

   \begin{enumerate}
     \item Je ne vous présente plus Twitter, ce système de microblogging populaire
     \pause \item Il est commun de recevoir des tweets sur son téléphone ou son ordinateur.
     \pause \item Nous allons les recevoir sur notre réseau ZigBee et les afficher sur un écran LCD.
   \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Exemple : Twitter Reader}

   \image{twitter_lcd}{0.3}
\end{frame}

\begin{frame}
  \frametitle{Exemple : Twitter Reader}

   \begin{enumerate}
     \item Le montage est un peu spécifique car nous allons avoir besoin de deux ports séries
     \pause \item Un pour recevoir et envoyer des ordres via notre module Zigbee
     \pause \item L'autre pour envoyer les tweet à notre écran LCD
     \pause \item Pour gérer ces deux ports séries, nous allons utiliser \texttt{SoftwareSerial}
     \pause \item Pour gérer l'écran LCD nous allons utiliser la bibliothèque \texttt{LiquidCrystal}
     \pause \item Pour gérer la concaténation nous allons utiliser la bibliothèque \texttt{WString}
   \end{enumerate}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Exemple : Twitter Reader}

  \begin{lstlisting}
#include <WString.h>
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

// create a software serial port for the XBee
SoftwareSerial mySerial(6, 7);
// connect to an LCD using the following pins for rs, enable, d4, d5, d6, d7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// defines the character width of the LCD display
#define WIDTH 16
void setup() {
  // set up the display and print the version
  lcd.begin(WIDTH, 2);
  lcd.clear();
  lcd.print("Twitter_Reader");
  lcd.setCursor(0,1);
  lcd.print("v1.06");
  delay(1000);
  mySerial.begin(9600);
}
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Exemple : Twitter Reader}
\vspace{-0.2cm}
  \begin{lstlisting}
void loop() {
  String text; // prepare to load some text
  unsigned long startTime = millis();
  lcd.clear(); lcd.print("loading...");
  mySerial.flush(); // remove anything weird from buffer
  mySerial.print("http://twansform.appspot.com/utbm_fr/text/1");
  mySerial.print("\r");
  char newChar; // parse the incoming characters
  int timeout = 4000;
  while (millis()-startTime < timeout) {
    if (mySerial.available()) {
      newChar = (char)mySerial.read();
      if (newChar == '\r' || newChar == '\n') { break; } 
      else { text += newChar; }
  }}
  if (text.length()>0) {   // Present the String
    unsigned long displayTime = 60000; // 1 minute
    while(millis()-startTime < displayTime) {
      lcd.clear(); showText(text); delay(2000); lcd.clear(); 
    }
}}
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Exemple : Twitter Reader}
\vfill
\verb+showText+ Prépare le texte pour l'afficheur LCD
\vfill
\pause
\url{http://twansform.appspot.com/utbm_fr/text/1} retourne le dernier tweet de \verb+@utbm_fr+ au format texte
\vfill
\pause
Téléchargez le code complet sur :
\url{http://examples.oreilly.com/9780596807740/code/Twitter_Reader/Arduino-1.0/Twitter_Reader_Uno.ino}
\vfill
\end{frame}

\begin{frame}
  \frametitle{Résolution des problèmes}

  Et si ça fonctionne pas ?

  \begin{enumerate}
    \item Il faut commencer par tester que votre module est bien reconnu par le ConnectPorts
    \pause \item Vérifier que XIG répond correctement
    \pause \item Vérifiez que vous avez bien une connexion internet fonctionnelle
    \pause \item En plaçant une LED sur le PIN 15 du Xbee vous devez
    la voir clignoter lors de la réception des données
    \pause \item Vérifiez que l'écran LCD affiche bien Twitter Reader
    et le numéro de version au démarrage, sinon vérifiez le
    branchement de l'écran LCD
    \pause \item Essayez d'expliquer le fonctionnement complet de
    votre système à un ami, ça vous permettra surement de trouver le
    problème.
  \end{enumerate}
\end{frame}

\end{document}