Réseau de lampes

De Wiki de Projets IMA

Cahier des charges

Présentation générale du projet

Contexte

Dans le cadre du module transversal "Internet des Objets", nous avons choisi de travailler sur un réseau de lampes connectés. En effet, dans un contexte économique et écologique, il est primordial d'avoir un contrôle à distance des lumières domestiques, lorsqu'il y a absence de personnes.

Objectif du projet

L'objectif principal du projet est d'avoir un système capable d'allumer, d'éteindre et de visualiser les états des lumières via un navigateur tout en se basant sur la présence ou non des personnes dans les pièces.

Description du projet

Le réseau de lumière peut, par exemple, être utilisé dans une maison. Dans chaque pièce on a un capteur et une lumière.

Choix techniques : matériel et logiciel

  • Raspberry Pi
  • OpenMote Base / OpenMote Battery / OpenMote cc2538
  • Contiki : OS pour les capteurs miniatures en réseau.

Étapes du projet

Partie 1

  • Installation de Contiki, RIOT ou tout autre OS sur les OpenMote permettant la communication entre elles.

Partie 2

  • Communication Rx/Tx entre la RaspberryPI et un OpenMote.
  • Réception de l'état d'un capteur de présence connecté à un OpenMote et extinction/allumage d'une LED de l'OpenMote (via traitement sur la RaspberryPI) en fonction de l'état du capteur.

Partie 3

  • Installation d'un serveur Apache sur la RaspberryPI pour la gestion des lumières via un interface web (sur un smartphone, ordinateur ou autre).
  • Mise en réseau et routage des OpenMote pour permettre la communication relai entre eux. Cela permettra la communication entre la RaspberryPI (connectée à la box) et n'importe quel OpenMote indépendamment de sa distance.

Suivi de l'avancement du Projet

Séance 1

Nous avons d'abord réalisé des tests préliminaires sur un OpenMote afin de nous familiariser avec par exemple l'allumage/extinction d'une LED.
Les OpenMote sont livrées avec un OS pré-installé : FreeRTOS.
Nous avons donc suivi un tutoriel de Bootstrapping.

On installe toutes les librairies ARM Cortex nécessaires au bon fonctionnement du chip embarqué sur l'OpenMote :

wget http://mirrors.kernel.org/ubuntu/pool/universe/libs/libstdc++-arm-none-eabi/libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb sudo dpkg -i libstdc++-arm-none-eabi-newlib_4.8.3-11ubuntu1+4_all.deb

On copie ensuite le firmware de l'OpenMote :

git clone --recursive https://github.com/OpenMote/firmware.git OpenMote/firmware

Avant de passer à la suite, il convient d'effectuer quelques manipulations non explicitées sur le tutoriel, mais pourtant indispensables : (Merci à T. Vantroys pour ces manipulations)

cd OpenMote/firmware/platform/cc2538/libcc2538
make
cp libcc2538 ..
cd ../../../test            // répertoire OpenMote/firmware/test
chmod u+x tests-projetcts.sh
./tests-projects.sh

On se place dans le dossier projects :

cd ../projects           // répertoire OpenMote/firmware/projects

Ce dossier contient de nombreux projets déjà écrits qu'il suffit de tester. On va dans notre cas tester les LED. Plaçons nous alors dans le dossier correspondant :

cd test-leds/src 

Puis compilons !

make TARGET=cc2538 all BOARD=openmote-cc2538 all

La compilation faite, il faut maintenant flasher le programme sur l'OpenMote :

make TARGET=cc2538 all BOARD=openmote-cc2538 bsl

On remarque que le programme tourne bien (les LED flashent).
/!\ Attention /!\ : Sur les OpenMote (contrairement à un Arduino par exemple) il est impossible de flasher de nouveau un programme si le programme courant tourne ! En pressant le bouton USER nous pouvons de nouveau flasher un programme.

Séance 2

Compilation du premier programme sous Contiki

Cette séance est consacrée à l'installation de Contiki. Contiki est un OS Open-Source, consacré à l'Internet des Objets, c'est pourquoi nous souhaitons l'utiliser !
Nous avons souhaité suivre ce tutoriel.

Crédit : http://www.openmote.com/

Il faut posséder un compte github. Ensuite, il faut forker ce répertoire (tout en étant connecté à notre compte). Crédit : http://www.openmote.com/

Ensuite dans le terminal, nous clonons ce répertoire :

git clone https://github.com/USERNAME/contiki.git ~/Contiki

Si l'utilisateur souhaite contribuer à Contiki, il peut également ajouter le dépôt origine de Contiki comme une branche de suivi dans git. On taperait donc :

git remote add upstream https://github.com/contiki-os/contiki.git
git fetch origin -v
git fetch upstream -v
git merge upstream/master

Maintenant que nous avons le code source Contiki sur l'ordinateur, il est temps de le compiler. Nous commençons avec un projet simple "Hello World". Nous entrons les commandes suivantes :

cd ~/Contiki/examples/hello-world
make TARGET=cc2538dk hello-world

La compilation se fait :
Crédit : http://www.openmote.com/

Une fois la compilation terminée, on a l'écran suivant :
Crédit : http://www.openmote.com/

La suite du tutoriel utilise un J-Tag pour flasher Contiki sur l'OpenMote. Nous n'avons malheureusement pas de J-Tag, donc nous allons flasher l'application exactement comme nous l'avions fait avec les tests préliminaires de la séance 1.

Flash de l'application

On se place dans [Modification en cours]

Séance 3

  • Nous avons décidé de changer de matériel puisque nous n'avons pas réussi de flasher notre programme sur Contiki de notre OpenMote., nous avons donc décidé d'utilser la RaspberryPI uniquement.
  • Adresse IP de la RaspberryPI lors des séances de projet :
172.26.79.239
  • Nous avons installé un serveur Apache sur la RaspberryPI.

Séance 4

[Notes]
Connexion ESP en USB (via FTDI)
Sequence boutons (GPIO & RESET)
Code test

#define ESP8266_LED 2
void setup() 
{
pinMode(ESP8266_LED, OUTPUT);
}
void loop() 
{
digitalWrite(ESP8266_LED, HIGH);
delay(500);
digitalWrite(ESP8266_LED, LOW);
delay(500);
}

Interaction Wi-Fi via un smartphone:
https://learn.adafruit.com/adafruit-io-basics-digital-input/adafruit-io-setup

Séance 5

  • Pour l'alimentation de notre ESP8266 nous avons utilisé un arduino ( 3,3V ). Alimentation onéreuse mais qui fonctionne.
  • Nous avons décidé de représenter notre "lampe" par une led. Nous l'avons donc connectée au Gpio14 de l'ESP

( /!\ Remarque : Gpio15 ne peut pas être utiliser pour brancher la led sur l'ESP )

  • Nous avons réussi à connecté la carte au wifi de notre portable.