Beruflich Dokumente
Kultur Dokumente
- LE CAM Quentin
- TRICHA Mhamed
Prsentation
du projet
Nous avons ainsi russi acqurir des connaissances fondamentales dans le domaine du
dveloppement embarqu, et dcouvrir ainsi de nouvelles fonctionnalits qui ne pourront
qutre un plus pour nos futures carrires.
Dans le cadre de notre TER, nous allons nous intresser au domaine des systmes
embarqus, et plus spcifiquement aux applications Android.
Notre travail essayera de rpondre dabord aux questions basiques quon pourrait se
poser en se penchant sur le sujet, savoir : Comment se fait la rcolte des donnes depuis
les capteurs utiliss ? Comment fonctionne notre application ? Quels sont les lments cl
de cette opration ? Quels sont les acteurs ? etc
Pour une tude plus pratique, nous avons dcid de tester en premier, la carte Arduino
sur une base de donnes locale, avant de nous attaquer aux nombreux capteurs de la carte
Libelium pour un accs a une base de donnes distante. Nous esprons que ce travail ralis
sera la hauteur de vos esprances et rpondra toutes vos questions.
Les premiers tests pratiques ont commenc sur la carte Arduino, avec les capteurs de
prsence et de temprature. Il nous a pas fallu beaucoup de temps pour pouvoir rcuprer
Utilisant en un premier temps une base de donnes MySQL locale, et ne voulant plus
dpendre des contraintes quimposent ce mode (adresse IP non-fixe entre-autres), on a
dcid dutiliser une base de donnes externe, hberge sur le domaine de Quentin.
Ce prsent rapport a t rdig par nous deux, chacun compltant les informations de
lautre, afin de vous proposer une documentation complte de notre travail.
Fondements
thoriques
Dans nos tests pratiques, nous avons eu accs 2 cartes lectroniques, Arduino et
Libelium, capables de communiquer entre elles grce des adaptateurs Xbee que nous
prsenterons plus tard.
2.1.1. Arduino
a. Prsentation et caractristiques :
La carte Arduino Mega 2560, prte gnreusement pour le besoin du TER, est une
carte microcontrleur base sur un Atmega2560.
b. Programmation :
Afin de pouvoir programmer la carte Arduino, il faudra le logiciel Arduino pour charger le
code en question. Le logiciel Arduino a pour fonctions principales :
Le logiciel Arduino intgre galement un TERMINAL SERIE (fentre spare) qui permet
dafficher des messages textes reus de la carte Arduino et denvoyer des caractres vers la
carte Arduino. Cette fonctionnalit permet une mise au point facilite des programmes,
permettant dafficher sur lordinateur ltat de variables, de rsultats de calculs ou de
conversions analogique-numrique : un lment essentiel pour amliorer, tester et corriger
ses programmes.
2.1.2. Libelium
La socit Libelium propose Waspmote, une plateforme Zigbee base sur Arduino et
destine recevoir une multitude de capteurs industriels :
Pour communiquer, Waspmote utilise les bandes 2.4 GHz, 900 MHz, 868 MHz, voir le
GPRS. Les portes sont de 40 km maximum sur 868 MHz.
Ces Waspmotes sont programmables en C++ via le logiciel Waspmote IDE. Ils doivent
tre connects lordinateur par USB pour la programmation. Une fois programms et
allums, ils peuvent communiquer entre eux de la faon souhaite.
2.2. Capteurs
Afin doptimiser notre travail et rcolter le maximum de donnes possibles, nous avons
procd lessai des capteurs suivants :
Capteur de temprature
Capteur de prsence
Capteur de CO2
Capteur de qualit dair
Ethanol (CH3
Isobutane (C4H10).
Monoxyde de Carbone (CO).
Mthane (CH4).
2.3. Transmetteurs
a. Xbee :
Les modules RF 802.15.4 Xbee-PRO pour OEM sont des solutions embarques offrant
une connectivit sans fils aux terminaux finaux. Ces modules exploitent le protocole IEEE
802.15.4 pour une mise en rseau point--multipoint ou point--point rapide. Ils
conviennent aux applications de hauts dbits ncessitant une faible latence et des dlais de
communications prvisibles.
b. Waspmote Gateway :
Figure 3 : Gateway
La collecte de donnes est une proccupation de plus en plus majeure pour les
entreprises, tant sur les individus que sur lenvironnement. Elles permettent ainsi dtudier
la nature ou de surveiller un espace sur des caractristiques prcises, ou dtre vendues
directement dautres entreprises.
La base de donnes est un service qui propose de stocker des donnes structures
afin de pouvoir les manipuler. Ce service est plac sur un serveur qui va tre interrog par
les diverses applications site web, logiciel, etc . Une solution qui permet dinteragir avec
une base de donnes est dutiliser les web services. Ce sont des applications dveloppes
dans un langage tel que Java ou Php, elles font le lien entre une application externe et une
base de donnes, permettant ainsi daccder au contenu tout en la gardant en scurit. Car
le fait de pouvoir accder une base de donnes depuis lextrieur directement peut tre
risqu.
2.6. Android
Android os a t cr par une socit portant le mme nom, celle ci fut rachete par
Google en 2007. Depuis, ce systme dexploitation pour mobile bas sur le noyau Linux est
propos aux constructeurs afin quils puissent lintgrer leurs smartphones. Android est
aussi une plateforme ouverte proposant aux dveloppeurs tiers de le modifier ou dy
dvelopper une application qui pourra tre propose au public via un market Google
play . Ces applications sont dveloppes en Java et interprtes par une machine virtuelle
Application
ralise
Radio
Base de donnes
distante
Interne
Application Android
Nous avons dans un premier temps utilis la carte Arduino pour calculer la temprature
ambiante. Le capteur de temprature MCP9700A lit des donnes quon convertit en valeurs
utilisables selon la mesure requise.
Pour cela, nous avons besoin du logiciel open-source Arduino, tlchargeable sur le site
officiel. Aprs avoir install le driver correspondant, il faudra galement slectionner la carte
et le port avant utilisation depuis longlet Tools.
Un programme Arduino est un fichier de code crit en langage proche du java. Une fois
compil et transfr vers la carte Arduino (via USB), on peut accder aux rsultats du
programme via le terminal incorpor au logiciel. Ici un extrait du code utilis pour relever les
valeurs de temprature depuis le capteur de temprature :
void loop()
{ int reading = analogRead(sensorPin);
float voltage = reading * 5.0;
voltage /= 1024.0;
float temperatureC = (voltage - 0.5) * 100 ;
Serial.print(temperatureC);
delay(1000);
}
Il suffira ensuite de mettre ce code dans une boucle loop() pour recevoir ces donnes
aprs un dlai (au choix) d1 seconde.
Pour la carte Liblium qui offre lopportunit de tester des capteurs de gaz comme le
CO2, le principe reste le mme, si ce nest que les capteurs de gaz demandent une dure
minimale de 30 secondes pour chauffer avant de transmettre la valeur souhaite.
Il faut savoir galement quon peut rcuprer plusieurs donnes (de diffrents
capteurs) durant le mme envoi de donnes. Pour cela, il suffit de concatner ces donnes
sous forme de chaine de caractres envoyer aprs un dlai fixe.
Ci-dessous un exemple de code pour relever les taux de CO2 :
void loop()
{
SensorGas.setBoardMode(SENS_ON);
SensorGas.configureSensor(SENS_CO2,GAIN_CO2);
SensorGas.setSensorMode(SENS_ON, SENS_CO2);
delay(30000);
float valco2 = SensorGas.readValue(SENS_CO2);
float co2 = 350*pow(10, valco2);
SensorGas.setSensorMode(SENS_OFF, SENS_CO2);
USB.println(co2);
}
void loop(){
SensorEvent.attachInt();
PWR.sleep(UART0_OFF | UART1_OFF | BAT_OFF | RTC_OFF);
SensorEvent.detachInt();
SensorEvent.loadInt();
if (SensorEvent.intFlag & SENS_SOCKET7){
XBee.setMode(XBEE_ON);
XBee.begin();
delay(200);
v = SensorEvent.readValue(SENS_SOCKET7);
XBee.print("1");
XBee.print(v);
delay(200);XBee.close();
}
}
3.1.2. Rception des donnes
Une fois la valeur de temprature acquise, il faudra dsormais lenvoyer vers notre
machine de travail pour pouvoir la stocker dans une base de donnes MySQL. Pour cela,
nous allons utiliser la connexion Radio qui relie 2 modules Xbee via le protocole 802.15.4. En
effet, lordinateur reoit les valeurs envoyes par la carte Arduino qui seront ensuite lues et
traites sur Eclipse grce la librairie RXTX, une librairie open-source externe qui permet au
JDK de communiquer avec dautres objets. Cette librairie nous offre la possibilit de lire sur
le port slectionn (ici USB), de la mme manire quun port srie. Dans un premier temps, il
faut ouvrir la connexion sur une frquence et ensuite crer les ouputStream et inputStream
qui nous permettrons de lire et crire sur le port srie.
@Override
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
int chunk = input.read();//Lecture sur le port srie
if (chunk == '0') {//nouvelle carte libelium alum
System.out.println("demarrage d'une carte");
}
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
Le programme Java se chargera de crer une liaison et de convertir les donnes reues
dans un format correspondant.
Vient ensuite ltape des Webservices : Le code Java appelle un script PHP auquel il
passera les valeurs releves sous forme de paramtres. Le script PHP se charge alors
dinsrer ces dernires dans une base de donnes.
Ci-dessous un extrait du code Java sur Eclipse qui permet denvoyer les donnes reues
depuis la carte Liblium :
Cest une mthode qui permet un change de donnes en direct entre les deux
services, ici le programme java qui contrle les cartes liblium et le smartphone Android.
Ce qui permet davoir la rception de linformation au moment o elle a t mise.
Socket
Application Android
Sur la machine host qui fait le lien entre la carte et le smartphone, il faut mettre en place
une socket serveur dcoute sur un port prcis, qui va attendre larrive dun nouveau client
afin de lui envoyer les informations sur ltat du capteur.
ServerSocket s = new
ServerSocket(3434,0,InetAddress.getLocalHost());
Socket cli = s.accept();//attende dun client
OutputStream os = cli.getOutputStream();
os.write("connection ok".getBytes());//envoi dun message
a. Principe :
La programmation OTA (Over The Air) est une technologie sans-fil permettant la
programmation et la transmission de donnes sans avoir relier le matriel grce a un cble.
Les cartes Libelium Waspmote intgrent en effet cette technologie, et permettent la
programmation de ces cartes sans-fil via le protocole 802.15.4 accessible grce aux XBee.
Parmi les fonctionnalits de cette technologie, on peut citer :
b. Application :
Dabord, il faut sassurer que la carte SD est compatible avec lOTA. Une carte SD
contient en gnral des blocs dfectueux qui ne peuvent tre ignors lors de lutilisation de
la programmation OTA, cest pour cela que les seules cartes SD garanties fonctionner sont
celles distribues par Libelium, ayant comme capacit 1,86 Go.
Ensuite, il faut vrifier que les cartes Waspmote aient une configuration identique.
Pour cela, nous avons utilis le logiciel X-CTU, qui permet de modifier la configuration dune
carte Waspmote.
Nous avons commenc par installer un environnement Java, avec Eclipse (version
Indigo). Afin de pouvoir lire et modifier les donnes reues depuis les cartes et leurs
capteurs, il est impratif dutiliser la libraire RXTX pour de pouvoir lancer le programme.
Vient ensuite ltape dinstallation du SDK Android, savoir lenvironnement de travail
consacr la programmation pour Android. Celui-ci propose une dition dinterface en
graphique et permet dutiliser les librairies requises pour la conception dune application.
Lun des avantages du SDK Android sur Eclipse est la disponibilit davoir un mulateur
permettant ainsi de vrifier le fonctionnement des applications ainsi que leur rendu avant de
les tester sur du matriel.
Pour crer une application Android, il suffit de commencer un nouveau projet Android et
indiquer lAPI minimum requise pour son utilisation, ce qui permet choisir la version
minimum dAndroid.
Lapplication Android, offre un menu son ouverture afin de pouvoir choisir les donnes
afficher.
La connexion avec la base de donnes se fait sous forme dune requte HTTP afin
dappeler un script PHP, hberg sur un serveur externe WebService . Ci-dessous un
extrait du code Java pour lappel du script:
Ci-dessous un extrait du script PHP utilise pour extraire les donnes. Ce dernier va
convertir les donnes reues via la requte SELECT en format JSON compatible avec Android:
<?php
$req =mysql_query("SELECT temperature.INDEX, HEURE, CELSIUS from
temperature ORDER BY temperature.INDEX DESC");
while ($row=mysql_fetch_array($req)) {
$output[]=$row;
}
print(json_encode($output));
?>
[{"0":"809","INDEX":"809","1":"13:45:37","HEURE":"13:45:37","2":"20.80","
CELSIUS":"20.80"},{"0":"808","INDEX":"808","1":"13:45:36","HEURE":"13:45:
36","2":"20.31","CELSIUS":"20.31"},{"0":"803","INDEX":"803","1":"13:45:31"
,"HEURE":"13:45:31","2":"20.31","CELSIUS":"20.31"},{"0":"802","INDEX":"80
2","1":"13:45:30","HEURE":"13:45:30","2":"21.29","CELSIUS":"21.29"}, ]
Pour ce qui est du client Android , cest la cration dun socket sur une adresse IP et
un numro de port qui va crer la connexion sur le serveur. Une fois la connexion tablie, il
ne reste plus qu utiliser les inputStream et outputStream pour communiquer avec
le serveur.
s = new Socket("172.29.76.254",3434);//connection
byte[] b = new byte[512];
int n;
//teste si la connection a bien t effectu
if (s.isConnected()) {
handler.sendEmptyMessage(INFO_CONNECTION);
OutputStream os = s.getOutputStream();
os.write("connection".getBytes());
//se place en lecture de flux
InputStream is = s.getInputStream();
while((n=is.read(b))>0){
char car = (char) b[0];
//teste si il s'agit d'une information capteur de prsence
if(car == '1'){
//envoi un message au handler
handler.sendEmptyMessage(INFO_CAPTEUR);
}
b = new byte[512];
}
}
Application IHM
Thread socket
Signal
Thread principal
Socket
Matriel
Sur Android lIHM est la proprit du thread principal, il est donc impossible de
modifier ou de lancer une autre interface via le thread qui gre le socket. Cest pourquoi il
faut utiliser un Handler, qui va permettre lchange de messages entre les Threads avec la
fonction handler.sendEmptyMessage(INFO_CAPTEUR). Celui-ci en fonction de la valeur
passe en paramtre va effectuer une action dans le Thread principal.
Socket
Socket
Support Arduino
http://arduino.cc/en/Tutorial/HomePage
Documentation Waspmote
http://www.libelium.com/support/waspmote
Forum Libelium :
http://www.libelium.com/forum/
Tutorial ralis :
http://pagesperso.univ-brest.fr/~e21105243/Tuto.html
Logo :
Nom : Arduino
Produit : Arduino Mega 2560
Microcontrleur : ATmega2560
Mmoire Programme Flash : 256 KB
Mmoire SRAM : 8 KB
Mmoire EEPROM : 4 KB
Vitesse d'horloge : 16 MHz
Tableau 1 : Fiche technique de la carte Arduino
Logo :
Nom : Libelium
Produit : Waspmote v1.1
Microcontrleur : ATmega1281
Mmoire Programme Flash : 128 KB
Mmoire SRAM : 8 KB
Mmoire EEPROM : 4 KB
Vitesse d'horloge : 8 MHz
Tableau 2: Fiche technique de la carte Libelium
Nom : TGS2600
Capteur :
Nom : MCP9700A
Capteur :
Nom : TGS4161
Capteur :
Nom : PIR