# Contiki

Contiki est un système d’exploitation léger et flexible pour capteurs miniatures en réseau. Ces dernières années, le monde scientifique a porté une attention importante aux réseaux de capteurs sans fil. La miniaturisation des capteurs et leur prix relativement faible, permettent d'imaginer des applications très variées dans les domaines scientifiques, militaires, industriels et domotiques. Pour faciliter le développement de ces applications, une équipe du centre suédois de recherche scientifique SICS (en) a créé Contiki. Destiné à être embarqué dans des capteurs miniatures ne disposant généralement que de ressources limitées, Contiki propose malgré tout les principales caractéristiques et fonctionnalités d'un système d'exploitation tout en favorisant une consommation énergétique et une empreinte mémoire minimales. Ses principaux atouts sont le support des protocoles IPv6 et 6LoWPAN, sa flexibilité et sa portabilité. Disponible gratuitement sous licence BSD, Contiki peut être utilisé et modifié, même à des fins commerciales.
Récemment une nouvelle branche mise à jour a été créée : Contiki-NG

## Fonctionnement et théorie

Écrit en langage C, Contiki est constitué d’un noyau, de bibliothèques, d’un ordonnanceur et d’un jeu de processus. Comme tout système d'exploitation, son rôle est de gérer les ressources physiques telles que le processeur, la mémoire, les périphériques informatiques (d'entrées/sorties). Il fournit ensuite aux applications informatiques des interfaces permettant d'utiliser ces ressources. Conçu pour les modules de capteurs sans fil miniatures, il occupe peu d'espace en mémoire et permet une consommation électrique très faible.
Contiki offre deux types de connectivité :
* la couche Rime, elle permet un dialogue vers les capteurs voisins ainsi que le routage.
* la couche uIP, orientée Internet, elle offre les services essentiels du protocole IP mais nécessite plus de ressources que Rime.
Pour économiser la mémoire, tout en fournissant un bon contrôle de flux dans le code, Contiki utilise un mécanisme appelé Protothreads. Protothreads est un compromis entre la programmation événementielle et la programmation multi-threads. Contiki gère les standards 6LoWPAN, RPL, CoAP. Le système de fichier Coffee permet des opérations sur des fichiers stockés sur une mémoire flash externe. Contiki offre également des services comme un serveur telnet fournissant un accès similaire à un Shell Unix, un serveur web, une interface graphique fournie par un serveur VNC et d'autres fonctionnalités comme un navigateur web.

### Les caractéristiques

Un système d'exploitation pour capteur en réseau a différentes caractéristiques :

#### Empreinte mémoire

L'espace mémoire utilisé par le système d'exploitation et par l'application doit être suffisamment faible pour être contenu dans la mémoire du capteur. Une configuration typique de Contiki (le noyau et le chargeur de programmes) consomme 2 kilooctets de RAM et 40 kilooctets de ROM.

#### Consommation électrique

L'énergie électrique, souvent apportée par une batterie de piles, peut être problématique à renouveler. Si des systèmes de captage, comme des éléments photovoltaïques, éoliennes, ou autres peuvent être utilisés dans certains cas, les recherches scientifiques explorent les possibilités de réduire la consommation des capteurs. L'élément le plus consommateur est le module radio. La réduction de temps de transmission et de réception radio est primordiale. Pour cela, le module radio est activé lorsque nécessaire, et arrêté ou mis en veille le reste du temps. Mais lorsque le module radio est arrêté, le capteur ne reçoit pas les messages qui lui sont destinés. Un réveil périodique risque d'être inutile, et donc de consommer de l'énergie de façon inefficace. Pour gérer cette problématique, Contiki propose par défaut ContikiMAC, un mécanisme conçu pour rester en communication avec le réseau efficacement, tout en permettant la mise hors tension du module radio 99 % du temps. D'autres techniques permettent de limiter la consommation tel que le compactage des données à transférer, le pré-calcul (afin de ne transmettre que les données réellement utiles), mais aussi une optimisation du routage. Dans certains cas, il peut être utile de stocker des informations dans une base de données locale au capteur, telle qu'Antelope, en effet, si le capteur doit envoyer un ensemble de mesures semblables à des résultats déjà envoyés à un autre moment, il peut être préférable d'envoyer une référence à ces données déjà envoyées (Parcourir 100 enregistrements dans une base coûte moins d'énergie que de transmettre un paquet radio).

#### Communications

Contiki implémente deux mécanismes de communication :
La couche de protocole Rime. Elle fournit à la couche applicative un jeu d'instructions de communication, permettant les différentes connexions avec les capteurs voisins. Les applications ou protocoles exécutés au-dessus de la couche Rime peuvent utiliser une ou plusieurs instructions de communication fournies par la couche Rime. Rime peut être associé au mécanisme Chameleon afin de s'adapter aux protocoles de la couches MAC. Chameleon gère la création, la lecture et la transformation des entêtes des protocoles de la Couche liaison de données du modèle OSI et communique avec la couche Rime en associant des attributs aux paquets. Les informations importantes des entêtes des protocoles inférieurs pourront ainsi remonter vers la couche applicative ou le protocole situé au-dessus de la couche Rime.
La couche uIP. Contiki implémente uIPv4 et uIPv6. uIP supporte les protocoles IP, TCP, UDP et ICMP. uIPv6 est la première implémentation d'IPv6 pour capteurs miniatures à avoir obtenu le label IPv6 Ready Phase-1, elle répond aux exigences de la RFC4229. Pour les communications radio via le protocole IEEE 802.15.4, Contiki implémente 6LoWPAN. Lors de communications radio suivant la norme IEEE 802.15.4 communément utilisée par les capteurs, la taille d'un paquet est limitée à 127 octets, ce qui est insuffisant pour transmettre un paquet IPv6 dont la taille maximum est de 1 280 octets. L'IETF a créé une couche d'adaptation 6LoWPAN qui se situe entre les couches liaison et réseau du modèle OSI. 6LoWPAN permet la compression de l'entête du paquet IPv6 ainsi que la fragmentation et le ré-assemblage des datagrammes. Pour le routage d'IPv6 à travers le réseau de capteur, Contiki intègre ContikiRPL dans la couche uIPv6, une implémentation du protocole de routage RPL (routing protocol for Low power and Lossy Networks).

#### Portabilité

La portabilité consiste à adapter le système d'exploitation aux capteurs, selon les éléments électroniques les constituant. Contiki est complètement écrit en langage C, ce langage de programmation est le langage le plus répandu pour la programmation des systèmes. La plupart des constructeurs de microprocesseurs et de micro-contrôleur fournissent une solution de compilation croisée permettant de compiler sur une machine de type PC le code source écrit en C afin d'obtenir un programme en langage machine qui sera compris par le microprocesseur. Le portage de Contiki est effectué pour les plateformes suivantes: exp5438, RE-mote, Firefly, Zoul, wismote, avr-raven, avr-rcb, avr-zigbit, iris, micaz, redbee-dev, redbee-econotag, mb851, mbxxx, sky, jcreate, sentilla-usb, msb430, esb, avr-atmega128rfa, cc2530dk, sensinode ainsi que sur apple2enh, atari, c128, c64

#### Interopérabilité

L’interopérabilité d'un capteur est le fait de pouvoir communiquer avec des capteurs gérés par un système d'exploitation différent. Adams Dunkels de l'équipe scientifique suédoise présente dès 2003 uIP et lwIP permettant d'implémenter le protocole IP sur les systèmes limités en ressources tel que les capteurs. Jusque-là, les capteurs utilisaient des protocoles de communication propriétaires ou alors des adaptations d'IP permettant le fonctionnement des applications mais sans offrir toutes les fonctionnalités du protocole IP$^,$. Dès la présentation de Contiki en 2004, uIP et lwIP étaient disponibles. De ce fait, les applications exécutées sur Contiki pouvaient dialoguer vers n'importe quel matériel supportant le protocole IP. L'arrivée de IPv6 et uIPv6 sur Contiki apporte une nouvelle interopérabilité vers les matériels supportant ce protocole. Le support de 6LoWPAN permet à Contiki de communiquer avec les matériels via un réseau sans-fil suivant la norme 802.15.4. Contiki est réputé pour être un système d'exploitation robuste et mature, fournissant IPv4 et IPv6 pour les réseaux de capteurs sans-fil. Selon une étude publiée en 2011, comprenant des tests d'interopérabilité entre des capteurs sous Contiki et d'autres sous TinyOS, l'interopérabilité est bien au rendez-vous, mais des efforts sont à faire pour mesurer et améliorer les performances des couches réseaux.

### Des fonctionnalités
#### Accès distant

Contiki propose plusieurs moyens de connexion à distance :
* un serveur telnet
* un serveur web
* un web service
* une interface graphique via un serveur VNC

#### Autres

Le code source de Contiki contient un répertoire apps dans lequel on trouve des applications optionnelles :
* un shell de commandes : Contiki propose également dans ses options un shell de commandes dans le style unix. Un certain nombre de commandes utiles au développement et au debug sont disponibles. Comme dans un Shell Unix, les commandes peuvent s'enchainer à travers un pipe. Le développeur peut enrichir le shell avec ses propres commandes.
* un navigateur web
* un client ftp
* un client dhcp
* un client mail
* un client de messagerie instantanée IRC
* un analyseur/générateur JSON
* un client telnet
* un client twitter
* une calculatrice

#### Mise à jour, ou mise en place de nouvelles applications à distance

Contiki est un système d'exploitation modulaire. Contrairement à un système d'exploitation monolithique où le système complet ainsi que les applications sont enregistrées dans un fichier binaire qui est chargé d'un seul bloc dans l'EEPROM du capteur, sur Contiki le fichier binaire contient uniquement le système, les applications sont enregistrées séparément sous forme de modules. Contiki réalise le chainage des références de façon dynamique (Dynamic Linking (en)), les modules sont au format ELF qui est le format par défaut produit par le compilateur GCC, ou bien au format Compact ELF. Contiki peut ainsi charger et décharger des applications dynamiquement, ce qui permet une flexibilité pour la maintenance et la mise à jour de ces applications. Ce système modulaire apporte plusieurs avantages :
* Réduction de la consommation d'énergie. Lors d'une mise à jour applicative, seuls les modules concernés seront transférés.
* Réduction de l'utilisation de la mémoire vive : Le fait de ne charger les programmes qu'en temps utile réduit l'utilisation de la mémoire.
* Simplification de la maintenance du code : Le système est compilé une seule fois par type de capteur. La maintenance du code se fera par module applicatifs, qui pourront être chargés différemment selon les fonctions des capteurs dans le réseau.
La présentation de Snap par Simon Duquennoy montre que la mise à jour ou l'installation d'une nouvelle application peut se faire d'une façon extrêmement simple à l'aide d'un smartphone via un stockage d'applications pour capteurs (a sensornet appstore).

#### Accès à une mémoire morte externe à l'aide d'un système de fichier

L'utilisation sur les capteurs d'une mémoire morte complémentaire de type mémoire flash se généralise par la présence d'un lecteur de carte microSD. Plusieurs facteurs expliquent cela : le faible coût, le faible encombrement et la résistance aux chocs, la taille importante de la capacité de stockage allant de nos jours jusqu'à plusieurs Gigaoctets. L'utilisation de ce type de mémoire apporte divers avantages :
* l'archivage des valeurs mesurées afin d'optimiser leur diffusion en mode différé. L'écriture des données sur une carte SD, puis la lecture des données, leur traitement et l'envoi en paquets peut être plus économe en énergie que la transmission en direct des données via le module radio.
* le stockage des modules applicatifs, modules qui seront chargés dynamiquement par les programmes.
* l'utilisation de mémoire virtuelle.
* le stockage d'une base de données.
Contiki implémente un système de fichiers ou filesystem nommé Coffee. Coffee a l'avantage d'utiliser peu de RAM, son empreinte mémoire est inférieure à 200 octets, et chaque fichier ouvert nécessite 15 octets supplémentaires lorsque l'offset est de 32 bits.

#### Gestion du multi-threading

Contiki utilise un ordonnanceur événementiel. Un événement matériel ou logiciel déclenche l’exécution d'un processus qui sera mené à son terme avant de rendre la possibilité à l'ordonnanceur de démarrer l’exécution d'une nouvelle tâche. Ce type d'ordonnancement est le plus économe en ressource et est généralement adapté à l'utilisation des capteurs sur lesquels un événement extérieur est souvent à l'origine d'un nouveau traitement. Le multi-threading est plus flexible, il permet au programmeur de faire abstraction des appels systèmes, mais il est consommateur de ressources mémoire, car chaque thread nécessite son contexte d’exécution en mémoire. Pour permettre l’exécution en parallèle de plusieurs tâches, (par exemple de services), contiki apporte le concept des protothreads. Ce concept se situe entre les deux modèles, événementiels et multi-threads. Il permet de bloquer l'exécution d'un programme dans l'attente d'un événement ou d'une condition particulière. Le programme reprend son exécution lorsque l'événement attendu est survenu. Contrairement au multi-threading, où chaque thread dispose de son contexte mémoire, les protothreads partagent le même contexte d’exécution. Le surcout mémoire d'un protothread est de 2 octets, ce qui correspond à l'espace nécessaire au stockage de l'adresse du pointeur permettant de rappeler le programme au niveau où le blocage est intervenu. Par contre les variables locales ne sont pas maintenues ni restaurées lors de la reprise du programme, ce qui risque de rendre le code instable. Les protothreads permettent au programmeur de coder avec de simples instructions conditionnelles les attentes d'événements, ils simplifient donc l'écriture du code et diminuent de par ce fait le nombre de lignes à écrire. Mais le multi-thread permet des exécutions en parallèle, ce qui peut être indispensable, par exemple pour des applications en temps réel. Contiki propose une bibliothèque qui peut être chargée par le programmeur si son application nécessite le multi-threading.

#### Exécution d'applications en temps réel

Contiki n'est pas un système d'exploitation permettant l'exécution d'applications en temps réel. Bien qu'il soit possible de charger la bibliothèque permettant d'exécuter des threads en parallèle, le multi-threading est chargé par-dessus l’ordonnanceur événementiel. Une tâche lancée par l'ordonnanceur en mode événementiel ne peut pas être interrompue par les tâches exécutée en mode multi-thread.

#### Sécurité des données et des transmissions

Contiki implémente ContikiSec qui permet au développeur de choisir entre trois niveaux de sécurité pour les transmissions radio :
* un mode confidentiel, celui-ci est obtenu par le chiffrement des blocs de donnés transmis.
* un mode d'authentification seul, s'assure de l'authenticité du partenaire.
* un mode confidentiel et authentifié, c'est la somme des deux modes précédents.
Le pare-feu AEGIS, conçu pour les systèmes d'exploitation modulaires, est compatible avec Contiki. Il permet le filtrage des paquets entrants et sortants.

#### La simulation

Contiki propose un simulateur de réseau appelé Cooja. Ce simulateur permet l'émulation de différents capteurs sur lesquels seront chargés un système d'exploitation et des applications. Cooja permet ensuite de simuler les connexions réseaux et d'interagir avec les capteurs. Cet outil permet aux développeurs de tester les applications à moindre coût. Les capteurs supportés à ce jour par Cooja sont : exp5438, z1, wismote, micaz, sky, jcreate, sentilla-usb, esb.

#### Une interface de développement

Pour simplifier le développement, Contiki propose un environnement de développement complet et fonctionnel nommé Instant Contiki, téléchargeable sous la forme d'une machine virtuelle VMware. Cette machine virtuelle peut être lancée par VMware Player qui est fourni gratuitement sur le site de VMware. Cette machine virtuelle contient un environnement de développement Eclipse et tout le code source de contiki avec quelques exemples. Elle contient également le simulateur Cooja avec plusieurs exemples de simulations.

## Systèmes existants
### Présentation

Les articles de Dong de 2010 et 2011 ainsi que celui de Saraswat de 2010 recensent les principaux systèmes d'exploitation pour les réseaux de capteurs sans fil: TinyOS, Contiki, SOS, Mantis OS, Nano-RK (en), LiteOS, RETOS, SenSpireOS, Riot OS, et en décrivent sommairement les caractéristiques.
L'état de l'art de mai 2011 s'intéresse aux plus populaires. Y sont développés l'architecture, le modèle d'exécution du système, la gestion de l'énergie, la gestion de la mémoire, la reprogrammation, la sécurité, l'ordonnancement et les protocoles de communication pour les cinq OS suivants : TinyOS, Contiki, Mantis OS, Nano-RK (en), LiteOS.
De nombreux systèmes d'exploitation disponibles sont également cités dans l'article de 2011, mais ne sont détaillés et comparés que les deux qu'ont privilégié les développeurs, TinyOS et Contiki, et le dernier arrivé sur le marché, LiteOS. Il est également souligné que Contiki est le premier système d'exploitation pour capteur sans fils à établir une communication avec une pile TCP/IP uIP. En 2008, Contiki implémente uIPv6, la plus petite stack (pile) ipv6 au monde.
Le même choix se retrouve dans le document de 2010, qui détaille également TinyOS et Contiki, en rajoutant Mantis. Les auteurs font ce choix car ces trois OS sont les plus importants et les plus utilisés dans le domaine des WSN, et au vu du nombre de publications scientifiques concernant ces système d'exploitation dans les bases IEEE Xplore, ACM Digital Library et Science Direct. Les pourcentages sont de 81 % pour TinyOS, 9 % pour Contiki, 8 % pour Mantis et de 2 % pour les autres.
Enfin dans un article d’août 2012, on retrouve encore ce choix, puisque les auteurs précisent qu'il existe un grand nombre de systèmes d'exploitation pour WSN mais ne comparent que TinyOS et Contiki qu'ils jugent deux des meilleurs :
Caractéristiques des systèmes d'exploitation pour WSN référencés dans l'état de l'art de 2011 :
| | TinyOS | Contiki | Mantis | Nano-RK | LiteOS |
| Publication (année) | ASPLOS (2000) | EmNets (2004) | MONET (2005) | RTSS (2005) | IPSN (2008) |
| Statique/Dynamique | Statique | Dynamique | Dynamique | Statique | Dynamique |
| Événementiel/Thread | Event&Thread (TinyThread, TOSThreads) | Event&Threads (Protothreads) | Thread&Event (TinyMOS) | Thread | Event&Thread (through callback) |
| Monolithique/Modulaire | Monolithique | Modulaire | Modulaire | Modulaire | Modulaire |
| Réseau | Message Actif | uIP, uIPv6, Rime | "comm" | socket | File-Assisted |
| Langage de programmation | nesC | C | C | C | LiteC++ |
| Système de fichier | Un seul niveau | Coffee | non | non | Hiérarchique de type Unix |
| Reconfiguration | oui | oui | non | non | oui |
| Débogage distant | oui | non | oui | non | oui |

### Comparaison
#### Les caractéristiques

En comparant les caractéristiques importantes de TinyOS, Contiki et LiteOS, il en ressort que Contiki et LiteOS, avec leurs systèmes dynamiques et modulaires sont, contrairement à TinyOS basé sur un système statique et monolithique, plus flexibles et donc plus adaptés pour un changement d'environnement dynamique ou dans le cas d'une reprogrammation au travers du réseau. Cette flexibilité de Contiki par rapport à TinyOS est également confirmée dans l'article d'août 2012.
* Le système d'exploitation de Contiki, contrairement à TinyOS écrit en NesC ou celui de LiteOS écrit en LiteC++, est codé en langage C ce qui le rend très portable. L'article de Laraja précise que la programmation en C implique une courbe d'apprentissage beaucoup moins raide que celle nécessaire en NesC pour lequel les développeurs doivent s'approprier un nouveau paradigme dans les concepts tel que les modules, les composants, les interfaces ou configurations. La programmation complexe en NesC permet d'obtenir un code léger. Ce point est également souligné par Philip Levis dans son article retraçant le développement de TinyOS sur la dernière décennie. Il y précise qu'aujourd'hui, même si TinyOS est plus léger et efficace, la majorité des recherches autour des réseaux de capteur sans fil se fait avec Contiki qui est plus facile d'apprentissage.
* Le modèle de programmation supporté par un système d'exploitation a un impact significatif sur le développement d'applications. TinyOS, Contiki et LiteOS supporte le modèle d'exécution évènementiel et multithreads. Mais il est précisé que l'ordonnanceur évènementiel de Contiki, contrairement à celui de Mantis, est sans préemption.
* L'implémentation du mécanisme de multithreads est également différente puisque liteOS la gère nativement, TinyOS uniquement grâce à sa bibliothèque TinyThreads, et contiki obtient ce mode d'exécution soit par bibliothèque, soit par protothreads. Le protothread de contiki réduit l'utilisation mémoire, au détriment de certaines fonctionnalités comme le maintien des variables locales.
* La pile réseau de TinyOS est la plus légère, elle est basée sur le principe de messages pondérés (en). Celle de LiteOS est basée sur un principe de fichier type commande Shell Unix. Contiki quant à lui contient deux couches de communication, Rime et uIP qui lui permettent de communiquer avec les protocoles de l'internet, y compris en IPv6. Contiki implémente uIPv6, la plus petite couche IPv6 au monde, utilisable dans le domaine des capteurs sans fils.
* Concalves montre que les mécanismes de mise en veille sont implémentés différemment sur les quatre OS comparés. Le processeur de TinyOS est mis en veille lorsque sa file de traitement est vide, celui de Nano-RH lorsque toutes les tâches sont suspendues, celui de Mantis lorsque tous les threads ont demandé la mise en sommeil, et celui de Contiki lorsque l'application le décide.
* L'empreinte mémoire du noyau de Contiki est aussi plus importante que celle de TinyOS qui ne propose qu'un ordonnancement FIFO, contrairement à Contiki qui permet en plus la gestion de priorités.
* Concernant le mécanisme de mise à jour dynamique du logiciel, il est natif sur LiteOS et Contiki.

#### TinyOS / Contiki

Une expérimentation réalisée par un centre de recherche Brésilien, compare TinyOS et Contiki lorsqu’ils sont implémentés sur un capteur de type Crossbow TelosB. Les tâches sont plus rapidement exécutées avec Contiki, mais TinyOs est moins consommateur. Pour l’exécution d’algorithme de sécurité, les résultats des deux OS sont similaires. Les tâches de communication fonctionnent mieux sur TinyOS, probablement en raison d'une utilisation plus efficace de la pile de communication. Les résultats ont montré que les deux OS peuvent être optimisés pour réduire la consommation d'énergie lorsqu’ils sont paramétrés en conséquence par les développeurs. TinyOS et Contiki ont été validés sur de multiples plates-formes matérielles$^,$. Mais, l'article précise que généralement TinyOS peut fonctionner avec des conditions de ressource inférieure liées au fait que le noyau Contiki est plus complexe. L'article précise aussi que TinyOS est plus adapté lorsqu'une faible empreinte mémoire est la priorité. Par contre si la flexibilité est prioritaire, le choix se portera sur Contiki.
Dans le cas d'un scénario d'une ville intelligente où TinyOS et Contiki sont en concurrence, Contiki est privilégié d'abord parce qu'il est écrit en C et surtout à cause de sa caractéristique majeure : la petite taille de sa pile uIP.
Concernant l'interopérabilité entre les deux OS, elle fonctionne bien, lorsque la couche Contiki-MAC et TinyOS est correctement paramétrée.

## Applications et perspectives

Les réseaux de capteur sans fil peuvent être utilisés dans des domaines très différents comme l'agriculture de précision, l'industrie, la santé, le domaine militaire, le contrôle environnemental, la surveillance de l'habitat, la détection et la sécurité, etc.$^,$. Cette technologie ouvre la voie de l'internet des objets, et permettra de créer des applications et des services pour rendre les villes, les maisons et les objets intelligents.

### Applications

Les applications WSN peuvent être réparties en deux catégories, celles basées sur les technologies IP comme Contiki, et les autres implémentant des standards WSN comme WirelessHART (en), ZigBee ou d'autres protocoles propriétaires. Aujourd'hui, avec les microcontrôleurs 32 bits, l'optimisation des piles de protocoles et la disponibilité du grand nombre d'adresse IPv6, la tendance est d'utiliser les technologies de l'internet. Avec sa propre adresse IP chaque objet intelligent se connecte nativement à l'internet pour former l'internet des objets.
* Le projet INGA utilise Contiki pour son réseau de capteurs sans fils de mouvement et de position. Les mesures de l'accéléromètre, du gyroscope et des capteurs de pression, détectent le mouvement et la position en temps réel avec une visualisation possible en 3D grâce à une transmission TCP/IPv6 sur connexion IEEE 802.15.4. Les premières applications se font dans le domaine de la santé pour la surveillance des personnes âgées, et dans le domaine de l'aéronautique (quadrocopters (en)).
* Le projet de SICS (en) pour contrôler l'environnement marin met en œuvre un réseau de capteurs se servant de Contiki Coffee pour stocker une grande quantité de données et limiter ainsi des tâches trop consommatrices d'énergie.
* WiSMote mini, est un module qui embarque Contiki, dans le but de gérer et de traiter toutes sortes de grandeurs physiques dans les domaines de l'environnement, la santé, les compteurs intelligents, la domotique, la logistique ou les applications industrielles.
* Le projet NOBEL réalise une infrastructure qui met en réseau des compteurs intelligents grâce à Contiki. Ce système surveille les réseaux électriques tout en permettant aux fournisseurs d'électricité d'optimiser la tension électrique délivrée.

### Perspectives

Pour déployer un Internet des objets fiable, robuste et efficace, des recherches plus approfondies sont nécessaires dans le domaine de la technologie d'identification, dans le domaine des protocoles de communication, pour interopérabilité et dans les architectures distribuées.
D’après les articles étudiés, les recherches futures concernant Contiki vont porter sur :
* l’amélioration de l'algorithme de compression EXI (en) pour utiliser plus efficacement la mémoire RAM
* L’amélioration de la fiabilité de LoWPAN et les solutions WSN avec une mobilité des capteurs ou une connectivité intermittente. Les recherches qui ne sont pour l’instant qu’vont se diriger vers des applications réelles afin de tester la performance de 6LoWDTN
* Les possibilités et les limitations d’une architecture RESTful dans le domaine IoT, son fonctionnement en termes de latence, sa fiabilité et la durée de vie de la batterie.
* Enrichissement de l'interopérabilité des réseaux de capteurs
La création de Thingsquare Mist, logiciel open-source embarquant Contiki, utilise des standards tels que IPv6, 6LoWPAN, le protocole de routage RPL et le standard de chiffrement avancé AES. Il donne la possibilité aux concepteurs de systèmes intelligents de connecter facilement leurs appareils à des réseaux existants basés sur le protocole Internet IP (éclairage, des villes, des habitations et des immeubles ). Thingsquare Mist facilite énormément le développement et le déploiement de l'Internet des objets. Thingsquare collabore avec plusieurs fabricants majeurs de matériel informatique afin d'adapter Thingsquare Mist à une large gamme de plateformes matérielles. Thingsquare Mist est actuellement en phase bêta privée auprès d'un ensemble de clients sélectionnés et sera disponible au cours du premier trimestre 2013.
Un nombre important de recherches, concernant l'internet des objets sont financés par des pays, des multinationales et même la Commission européenne. Dans ce cadre, cette dernière a lancé le projet Calipso, qui interconnecte des objets intelligents par le biais de réseaux de capteurs sans fil en IPv6, embarquant le système d'exploitation contiki, pour des applications diverses : infrastructures intelligentes, villes intelligentes, objets intelligents.

## Historique
### 2003

Présentation par Adam Dunkels de FULL TCP/IP sur une architecture 8 bits.

### 2004

CONTIKI présenté par Adam DUNKELS, Björn GRONVALL et Thiemo VOIGT à Tampa en Floride USA, lors de la 29e conférence annuelle de l’IEEE à l’occasion du premier atelier de l’IEEE sur les capteurs en réseau.

### décembre 2007

Contiki 2.1

### juillet 2008

Contiki 2.2
Collaboration de Cisco Systems pour implèmenter Open-source uIPv6. Making sensor networks IPv6 ready.

### juin 2009

Contiki 2.3
ContikiSec: A Secure Network Layer for Wireless Sensor Networks under the Contiki Operating System.

### février 2010

Contiki 2.4

### septembre 2011

Contiki 2.5
A Low-Power CoAP for Contiki.
Low-power wireless IPv6 routing with ContikiRPL.
ContikiMAC, mecanisme qui permet de mettre les capteurs en veille 99 % du temps dans le but de réduire la consommation d'énergie.

### juillet 2012

Contiki 2.6

### septembre 2012

Dans le but de développer un ensemble de produits logiciels basé sur Contiki, Fredrik Österlind, Roger Bergdahl et Adam Dunkels fondent une société nommée Thingsquare qui fournit des logiciels open-source destinés à l'Internet des objets.

### octobre 2012

Commercialisation de Thingsquare Mist, une plate-forme dédiée aux marchés de la domotique, de l’automatisation des bâtiments et de l’éclairage intelligent.