Vous êtes sur la page 1sur 7

ENSEEIHT Tlcommunications et Rseaux

3re anne 2010-2011 TP n 1 - Rseaux de capteurs

3me anne 2010-2011

Premiers pas sur TinyOS


Janvier 2011

Prsentation de l'outil

1.1

Introduction

TinyOS est un systme d'exploitation open-source conu pour des rseaux de capteurs sans-l. Il respecte une architecture base sur une association de composants, rduisant la taille du code ncessaire sa mise en place. Cela s'inscrit dans le respect des contraintes de mmoires qu'observent les rseaux de capteurs. Pour autant, la bibliothque de composant de TinyOS est particulirement complte puisqu'on y retrouve des protocoles rseaux, des pilotes de capteurs et des outils d'acquisition de donnes. L'ensemble de ces composants peut tre utilis tel quel, il peut aussi tre adapt une application prcise. En s'appuyant sur un fonctionnement vnementiel, TinyOS propose l'utilisateur une gestion trs prcise de la consommation du capteur et permet de mieux s'adapter la nature alatoire de la communication sans l entre interfaces physiques.
1.2 Proprits de l'OS

Disponibilit et sources : TinyOS est un systme principalement dvelopp et soutenu par l'universit

amricaine de Berkeley, qui le propose en tlchargement sous la licence BSD et en assure le suivi. Ainsi, l'ensemble des sources sont disponibles pour de nombreuses cibles matrielles.

Event-driven : Le fonctionnement d'un systme bas sur TinyOS s'appuie sur la gestion des vne-

ments se produisant. Ainsi, l'activation de tches, leur interruption ou encore la mise en veille du capteur s'eectue l'apparition d'vnements, ceux-ci ayant la plus forte priorit. Ce fonctionnement vnementiel (event-driven) s'oppose au fonctionnement dit temporel (time-driven) o les actions du systme sont gres par une horloge donne. nous allons dtailler plus loin.

Langage : Comme nous l'avons voqu plus haut, TinyOS a t programm en langage NesC que Premptif : Le caractre premptif d'un systme d'exploitation prcise si celui-ci permet l'interruption

d'une tche en cours. TinyOS ne gre pas ce mcanisme de premption entre les tches mais donne la priorit aux interruptions matrielles. Ainsi, les tches entre-elles ne s'interrompent pas mais une interruption peut stopper l'excution d'une tche. ses tches permettant de respecter des chances donnes par son environnement. Dans le cas d'un systme strict, aucune chance ne tolre de dpassement contrairement un systme temps rel mou. TinyOS se situe au-del de ce second type car il n'est pas prvu pour avoir un fonctionnement temps rel. capteur. Ainsi, lorsqu'aucune tche n'est active, il se met automatiquement en veille.

Temps rel : Lorsqu'un systme est dit  temps rel  celui-ci gre des niveaux de priorit dans

Consommation : TinyOS a t conu pour rduire au maximum la consommation en nergie du

Premiers pas avec TinyOS


Rahim Kacimi

ENSEEIHT Tlcommunications et Rseaux


1.3 Allocation de la mmoire

3re anne 2010-2011 TP n 1 - Rseaux de capteurs

Il est important de prciser de quelle faon un systme d'exploitation aborde la gestion de la mmoire. C'est encore plus signicatif lorsque ce systme travaille dans un espace restreint. TinyOS a une empreinte mmoire trs faible puisqu'il ne prend que 300 400 octets dans le cadre d'une distribution minimale. En plus de cela, il est ncessaire d'avoir 4 Ko de mmoire libre qui se rpartissent suivant le schma ci-contre.
La pile : sert de mmoire temporaire au fonctionnement du systme notamment pour l'empilement

et le dpilement des variables locales.

Les variables globales : rservent un espace mmoire pour le stockage de valeurs pouvant tre

accessible depuis des applications direntes.

La mmoire libre : pour le reste du stockage temporaire.

La gestion de la mmoire possde de plus quelques proprits. Ainsi, il n'y a pas d'allocation dynamique de mmoire et pas de pointeurs de fonctions. Bien sur cela simplie grandement l'implmentation. Par ailleurs, il n'existe pas de mcanisme de protection de la mmoire sous TinyOS ce qui rend le systme particulirement vulnrable aux crash et corruptions de la mmoire.
1.4 Structure logicielle

Le systme d'exploitation TinyOS s'appuie sur le langage NesC. Celui-ci propose une architecture base sur des composants, permettant de rduire considrablement la taille mmoire du systme et de ses applications. Chaque composant correspond un lment matriel (LEDs, timer, ADC . . . ) et peut tre rutilis dans direntes applications. Ces applications sont des ensembles de composants associs dans un but prcis. Les composants peuvent tre des concepts abstraits ou bien des interfaces logicielles aux entres-sorties matrielles de la cible tudie (carte ou dispositif lectronique). L'implmentation de composants s'eectue en dclarant des tches, des commandes ou des vnements.

Figure 1: Interactions internes au systme TinyOS Les tches sont utilises pour eectuer la plupart des blocs d'instruction d'une application. A l'appel d'une tache, celle-ci va prendre place dans une le d'attente de type FIFO (First In First Out) pour y tre excute. Comme nous l'avons vu, il n'y a pas de mcanisme de premption entre les tches et une tache active s'excute en entier. Ce mode de fonctionnement permet de bannir les oprations pouvant bloquer le systme (inter-blocage, famine, . . . ). Par ailleurs, lorsque la le d'attente des taches est vide, le systme d'exploitation met en veille le dispositif jusqu'au lancement de la prochaine interruption (on retrouve le fonctionnement event-driven). Les commandes correspondent l'excution d'une fonctionnalit prcise dans un autre composant.

Premiers pas avec TinyOS


Rahim Kacimi

ENSEEIHT Tlcommunications et Rseaux

3re anne 2010-2011 TP n 1 - Rseaux de capteurs

Les vnements sont prioritaires par rapport aux tches et peuvent interrompre la tache en cours d'excution. Ils permettent de faire le lien entre les interruptions matrielles (pression d'un bouton, changement d'tat d'une entre, . . . ) et les couches logicielles que constituent les taches. Dans la pratique, NesC permet de dclarer 2 types de composants : les modules et les congurations :
Les modules constituent les briques lmentaires de code et implmentent une ou plusieurs inter-

faces.

Une application peut faire appel des chiers de conguration pour regrouper les fonctionnalits

des modules. Un chier top-level conguration permet de faire le lien entre tous les composants.

Les interfaces sont des chiers dcrivant les commandes et vnements proposs par le composant

qui les implmente. L'utilisation des mots clefs  Use  et  Provide  au dbut d'un composant permet de savoir respectivement si celui-ci fait appel une fonction de l'interface ou rednit son code.
L'ordonnanceur TinyOS

1.5

Nous allons dtailler le fonctionnement prcis de l'ordonnanceur TinyOS qui est au cur de la gestion des tches et des vnements du systme. Le choix d'un ordonnanceur dterminera le fonctionnement global du systme et le dotera de proprits prcises telles que la capacit fonctionner en temps rel. L'ordonnanceur TinyOS c'est :
2 niveaux de priorit (bas pour les tches, haut pour les vnements) 1 le d'attente FIFO (disposant d'une capacit de 7)

Par ailleurs, entre les tches, un niveau de priorit est dni permettant de classer les tches, tout en respectant la priorit des interruptions (ou vnements). Lors de l'arrive d'une nouvelle tache, celle-ci sera place dans la le d'attente en fonction de sa priorit (plus elle est grande, plus le placement est proche de la sortie). Dans le cas ou la le d'attente est pleine, la tche dont la priorit est la plus faible est enleve de la FIFO.
1.6 Package TinyOS

TinyOS est prvu pour fonctionner sur une multitude de plateformes, disponibles ds l'installation. En eet, TinyOS peut tre install partir d'un environnement Windows (2000 et XP) ou bien GNU/Linux (Red Hat essentiellement, mais d'autres distributions sont galement possibles). Deux principales versions de TinyOS sont disponibles : la version stable (v. 1.1.0) et la version actuellement en cours de tests (v. 1.1.15); la premire prsente moins de risques mais est nettement moins rcente.
Windows : un guide propose l'installation de tous les principaux outils ncessaires au bon fonction-

nement du systme, notamment Cygwin (couche d'mulation de l'API Linux) qui permet d'avoir une interface Unix sous Windows. Le JDK Java 1.4 de Sun est ncessaire an d'eectuer la procdure d'installation. suivre. Les distributions Linux ayant un autre gestionnaire de paquet peuvent utiliser un programme (comme  Alien ) pour installer les packages, ou compiler directement partir des sources. Le JDK de IBM est ncessaire.

GNU/Linux : des packages RPM sont proposs au tlchargement, un guide explique la marche

Par la suite, des packages supplmentaires peuvent tre ajouts en passant par le site SourceForge, qui met disposition le code open source de TinyOS et d'un ensemble de programmes ddis.

Premiers pas avec TinyOS


Rahim Kacimi

ENSEEIHT Tlcommunications et Rseaux


1.7 Cibles possibles pour TinyOS

3re anne 2010-2011 TP n 1 - Rseaux de capteurs

Il existe de nombreuses cibles possibles pour ce systme d'exploitation embarqu. Malgr leurs diffrences, elles respectent toutes globalement la mme architecture base sur un noyau central autour duquel s'articule les direntes interfaces d'entre-sortie, de communication et d'alimentation. Voici un schma reprsentant cette architecture :

Figure 2: Architecture gnrale des cibles utilisant TinyOS Mote, processeur, RAM et Flash : On appelle gnralement Mote la carte physique utilisant TinyOS pour fonctionner. Celle-ci a pour cur le bloc constitu du processeur et des mmoires RAM et Flash. Cet ensemble est la base du calcul binaire et du stockage, la fois temporaire pour les donnes et dnitif pour le systme TinyOS. Radio et antenne : TinyOS est prvu pour mettre en place des rseaux sans ls, les quipements tudis sont donc gnralement quips d'une radio ainsi que d'une antenne an de se connecter la couche physique que constitue les missions hertziennes. LED, interface, capteur : TinyOS est prvu pour mettre en place des rseaux de capteurs, on retrouve donc des quipement bards de dirents types de dtecteurs et autres entres. Batterie : Comme tout dispositif embarqu, ceux utilisant TinyOS sont pourvus d'une alimentation autonome telle qu'une batterie.
2 Exemple : l'application Blink

2.1

Blink.nc

/** * Blink is a basic application that toggles the leds on the mote on every clock interrupt. * The clock interrupt is scheduled to occur every second. The initialization of the clock * can be seen in the Blink initialization function, StdControl.start().<p> * * @author tinyos-help@millennium.berkeley.edu **/ configuration Blink { } implementation { components Main, BlinkM, SingleTimer, LedsC; Main.StdControl -> SingleTimer.StdControl; Main.StdControl -> BlinkM.StdControl; BlinkM.Timer -> SingleTimer.Timer; BlinkM.Leds -> LedsC; }

2.2

BlinkM.nc
Toggle the red LED when a Timer fires.

/** * Implementation for Blink application. **/ module BlinkM { provides { interface StdControl; } uses { interface Timer; interface Leds;

Premiers pas avec TinyOS


Rahim Kacimi

ENSEEIHT Tlcommunications et Rseaux


} } implementation { /** * Initialize the component. * * @return Always returns <code>SUCCESS</code> **/ command result_t StdControl.init() { call Leds.init(); return SUCCESS; } /** * Start things up. This just sets the rate for the clock component. * * @return Always returns <code>SUCCESS</code> **/ command result_t StdControl.start() { // Start a repeating timer that fires every 1000ms return call Timer.start(TIMER_REPEAT, 1000); } /** * Halt execution of the application. This just disables the clock component. * * @return Always returns <code>SUCCESS</code> **/ command result_t StdControl.stop() { return call Timer.stop(); } /** * Toggle the red LED in response to the <code>Timer.fired</code> event. * * @return Always returns <code>SUCCESS</code> **/ event result_t Timer.fired() { call Leds.redToggle(); return SUCCESS; }

3re anne 2010-2011 TP n 1 - Rseaux de capteurs

2.3

le Makele

COMPONENT=Blink include ../Makerules

2.4

Compilation

$ make mica2 /* installer l'application sur un capteur mica2 */ ou $ make pc /* compiler l'application sur pc pour la tester avec le simulateur tossim cela generera un dossier build/pc/ dans lequel se trouve votre main.exe */

Pour lancer un vizualisateur graphique :


$ tinyviz -run build/pc/main.exe 10 /* lancer l'application avec 10 noeuds */

Premiers pas avec TinyOS


Rahim Kacimi

ENSEEIHT Tlcommunications et Rseaux


3 Travail demand

3re anne 2010-2011 TP n 1 - Rseaux de capteurs

3.1

Extention de l'application Blink : Bonne anne avec l'alphabet morse

L'alphabet morse, ou code morse, est un code permettant de transmettre un texte l'aide de sries d'impulsions courtes et longues (voir Fig. 3). Invent en 1835 par Samuel Morse pour la tlgraphie, ce code assigne chaque lettre, chire et signe de ponctuation une combinaison unique de signaux intermittents. Considr comme le prcurseur des communications numriques, le code morse a depuis le 1er fvrier 1999 t dlaiss au prot d'un systme satellitaire pour les communications maritimes. Dans cet exercice, nous allons programmer les LEDs (Light-Emitting Diode) du capteur pour acher un code morse.

Figure 3: Code morse international 1. Traduisez l'expression "bonne annee" en morse. 2. Compilez l'application avec le simulateur.
Blink

disponible dans le rpertoire

tinyos-1.x/apps/Blink

puis lancez-la

3. partir de l'application Blink (vue en cours), dveloppez une autre application BonneAnnee qui permet d'acher avec le LED rouge le code morse de l'expression "Bonne annee".
3.2 Hello World

Il s'agit d'implmenter une application HelloWorld sous tinyos pour un rseau de capteurs. Chaque nud maintient une table de voisins contenant leurs adresses. l'initialisation, chaque nud tire un indice alatoire et regarde dans sa table si a correspond une adresse d'un voisin. Dans ce cas il lui envoi un juste un "Bonjour" en unicast. Sinon, il envoit "HelloWorld" en broadcast.
3.3 Surveiller la temprature avec un rseau de capteurs

Dans cette partie, nous voulons dployer des capteurs de temprature au niveau du 1er tage du laboratoire IRIT-N7. l'objectif est de calculer la moyenne des tempratures releves dans tous les bureaux de l'tage. Toutes les lectures sont collectes sur une station de base (mote 1) plac dans le bureau I112.
Principe de fonctionnement :

Aprs leurs mise en marche, le nud 1 envoit un la rception de ce


Beacon

Beacon

tous les autres nuds du rseau.

chaque nud envoit son adresse pour dclarer sa prsence.

chaque top d'horloge, un nud lit la temprature puis envoit sa lecture sous forme d'un message au nud 1. Ce dernier calcule la moyenne de toutes les tempratures reues.

On dveloppera la mme application, et pour le nud 1 et pour les autres, alors il sut de jouer sur l'identiant du nud dans le code.
Indication :

Premiers pas avec TinyOS


Rahim Kacimi

ENSEEIHT Tlcommunications et Rseaux 1. Ecrire le module TemperatureM.nc et la conguration 2. Compilez l'application "Temperature" 3. Lancer l'application en utilisant
tinyviz

3re anne 2010-2011 TP n 1 - Rseaux de capteurs


Temperature.nc

avec 10 nuds.

4. Vous pouvez simulez la perte de nuds en les arrtant directement sur l'interface de l'outil.
3.4 Dploiement d'une application sur des capteurs TmoteSky

L'application Delta est un exemple de systme multi-sauts de collecte de donnes. En installant Delta sur les capteurs de Moteiv, les dispositifs prlveront leurs tempratures internes et les rapportent en utilisant une topologie en Multi-sauts/Mesh. 1. Etudiez l'application Delta (elle sera bientt disponible sur le site) 2. Compilez cette application et installez-la sur les dirents capteurs
$ make tmote $ make tmote reinstall,0 /* pour la station de base */ ou $ make tmote reinstall,1 /* pour le noeud 1 */ etc...

3. Lancez l'application java Trawler. Cette application communique avec la station de base connecte au PC puis elle construit la topologie du rseaux.
/* brancher la station de base au PC par un port usb */ $ motelist /* pour recuperer le CommPort */ Reference CommPort Description ----------- -------------- ---------------------M4A3SVF COM5 tmote sky $ MOTECOM=serial@COM5:tmote java com.moteiv.trawler.Trawler

Premiers pas avec TinyOS


Rahim Kacimi