Réseau de lampes : Différence entre versions
(→Cahier des charges) |
(→Séance 3) |
||
(17 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 8 : | Ligne 8 : | ||
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. | 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==== | ====Choix techniques : matériel et logiciel==== | ||
− | * | + | * Raspberry Pi |
* OpenMote Base / OpenMote Battery / OpenMote cc2538 | * OpenMote Base / OpenMote Battery / OpenMote cc2538 | ||
+ | * Contiki : OS pour les capteurs miniatures en réseau. | ||
==Étapes du projet== | ==É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== | ==Suivi de l'avancement du Projet== | ||
===Séance 1 === | ===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.<br> | ||
+ | Les OpenMote sont livrées avec un OS pré-installé : [http://www.freertos.org/ FreeRTOS].<br> | ||
+ | Nous avons donc suivi un [http://www.openmote.com/blog/bootstrapping-the-openmote-platform.html tutoriel de Bootstrapping].<br><br> | ||
+ | |||
+ | 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 [http://vantroys.polytech-lille.net/mediawiki/index.php?title=OpenMote 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).<br> | ||
+ | '''/!\ 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 === | ===Séance 2 === | ||
+ | ====Compilation du premier programme sous Contiki==== | ||
+ | Cette séance est consacrée à l'installation de [http://www.contiki-os.org/ Contiki]. Contiki est un OS Open-Source, consacré à l'Internet des Objets, c'est pourquoi nous souhaitons l'utiliser !<br> | ||
+ | Nous avons souhaité suivre [http://www.openmote.com/blog/getting-started-with-contiki-and-openmote.html ce tutoriel].<br> | ||
+ | |||
+ | [[Fichier:Contiki-Setup.jpg|400px|Crédit : http://www.openmote.com/]]<br><br> | ||
+ | |||
+ | Il faut posséder un [https://github.com/ compte github]. Ensuite, il faut forker [http://www.openmote.com/ftp/wp-content/uploads/2014/05/Fork-Contiki.png ce répertoire] (tout en étant connecté à notre compte). | ||
+ | [[Fichier:Fork-Contiki.png|700px|Crédit : http://www.openmote.com/]]<br><br> | ||
+ | |||
+ | 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 :<br> | ||
+ | [[Fichier:Compile-Contiki.png|500px|Crédit : http://www.openmote.com/]]<br><br> | ||
+ | |||
+ | Une fois la compilation terminée, on a l'écran suivant : <br> | ||
+ | [[Fichier:Compiled-Contiki.png|500px|Crédit : http://www.openmote.com/]]<br><br> | ||
+ | |||
+ | 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.<br><br> | ||
+ | |||
+ | ====Flash de l'application==== | ||
+ | On se place dans '''[Modification en cours]''' | ||
+ | |||
===Séance 3 === | ===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 === | ===Séance 4 === | ||
+ | [Notes]<br> | ||
+ | Connexion ESP en USB (via FTDI)<br> | ||
+ | Sequence boutons (GPIO & RESET)<br> | ||
+ | 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:<br> | ||
+ | https://learn.adafruit.com/adafruit-io-basics-digital-input/adafruit-io-setup<br> | ||
+ | |||
===Séance 5 === | ===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. |
Version actuelle datée du 20 janvier 2016 à 13:53
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.
Il faut posséder un compte github. Ensuite, il faut forker ce répertoire (tout en étant connecté à notre compte).
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
Une fois la compilation terminée, on a l'écran suivant :
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.