<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ayanmaz</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ayanmaz"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Ayanmaz"/>
		<updated>2026-05-13T00:01:42Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=17558</id>
		<title>Projets IMA5 2014/2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=17558"/>
				<updated>2015-02-24T00:49:01Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapports finaux&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P1 Modélisation et commande de l'auto-ignition d'un moteur HCCI]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Moulé Alexandre / Taché Clément &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Anne-Lise Gehin / Jean-Yves Dieulot &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Fichier:Rapport decembre moule tache.pdf]]  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P5 Filtrage des indicateurs numériques de diagnostic]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; ZIOU Ismaïl / HAMZAOUI Oussama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:rapport_Z.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P6 Gestion des flux thermiques du bâtiment Polytech]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Florian Royer / Zohour Assaieb &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; [[Fichier:Rapport_Intermédiaire_Royer_Assaieb.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P7 Utilisation d'un Robot Nao pour les enfants autistes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rodriguez Loïc/Ismaïl Tahry&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Projetpfenaomi.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P8 Pilulier]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Mercier / Emile Pinet&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS / Alexandre BOE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport decembre PFE pilulier mercier pinet.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P9 Agenda pour personnes non lectrices]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Cédric DESPREZ &amp;amp; Soufiane HADDAOUI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_MiSoutenance_DESPREZ_HADDAOUI.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P11 Détecteur d'obstacles pour fauteuils électriques]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Geoffrey ROSE / Marjorie TIXIER &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS / Blaise Conrard &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_Intermédiaire_PFE_GAPAS_Rose_Tixier.pdf]]&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P12 Automatiser à l'aide d'une interface LabView la procédure de mesure de conductivité électrique d'un alternateur à griffes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Hugo FONDU &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Abdelkader Benabou &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:rapport_presoutenance.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P13 Construction d'un support motorisé pour la réalisation des essais de décharges électrostatique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; JEBBARI Zineb / BEKRAOUI Oumaima &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Nathalie Rolland &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:rapportJebbek.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P19 Contrôle et synchronisation d'instruments en microscopie]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Simon Duthoit&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Samuel Hym &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P21 Balise Bluetooth Low Energy]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Kévin CHALONO / Armagan YAMNAZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[ Fichier:ProjetBLE 1 pdf.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_PFE_Yanmaz_Chalono2.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P21 Bis Prototypage d'interactions localisées et contextualisées ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Olivier Tailliez&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas Vantroys / Yvan Peter &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P22 Google Glass en logistique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémy Gondry / Vincent Meunier &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_intermediaire_Gondry_Meunier.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_final_PFE_Meunier_Gondry.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P24 Robot de surveillance domestique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Sébastien DELTOMBE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Xavier Redon &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_PFE_P24_Deltombe.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P25 SmartMeter]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas Ederlé / Sylvain Fossaert&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Guillaume Renault / Xavier Redon / Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:RapportFossaertEderle.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P26 Vehicule Electrique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Smain Labdouni / Adnane Jaoui &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Arnaud Chielens / Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  [[Fichier:RAPPORT_VE_DEC.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  [[Fichier:Rapport_pfe_Jaoui_Labdouni_Fevrier.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P27 Controle Direct de Puissance d'un Convertisseur Matriciel ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Quentin Pesqueux / Nicolas Alexandre &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  [[Fichier:PFE_IMA5_MATRIX_CONVERTER_Alexandre_Pesqueux.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P28 Modélisation d'un robot chirurgical déformable pour la simulation et le contrôle]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Charlotte BRICOUT / Nathan MARTIN &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémie DEQUIDT&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:-BRICOUT MARTIN--Rapport PFE.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P33 Ligthing contactless / &amp;quot;wireless&amp;quot;]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benjamin Lafit &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_Benjamin_Lafit.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P35 Hack-a-Wii : Emulation de wiimote pour rendre la Wii accessibles aux personnes handicapées ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Fabien Violier &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P37 Creation d'un composant d'audit des accès cache mémoire sur un microprocesseur LEON3 simulé en FPGA ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérôme Vaessen &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Julien Cartigny / Pierrick Buret &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_VAESSEN_presoutenance.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P44 Création d'un systeme domotique sans fil ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benoit MALIAR / Thomas MAURICE&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierrick BURET / Thomas VANTROYS  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:RapportMaliarMauriceDecembre.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P45 Aide à la navigation d'un véhicule autonome]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierre APPERCÉ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P46 Simulation Temps Réel d'un Environnement de Robots Autonomes Logisticiens]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Valentin VERGEZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P57 CHRU Lille : Smart Picking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu Bossennec / Florian Caron&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Gwénaëlle Maton / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P58 Transformation des spectateurs d’un concert en afficheur géant interactif]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Hautecoeur Mélanie &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Fichier : PFE_Rapport_Hautecoeur_Melanie.pdf‎]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P59 Assistance globale pour aide au parking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu GERIER / Céline LY &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre BOE / Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=17552</id>
		<title>Projets IMA5 2014/2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=17552"/>
				<updated>2015-02-24T00:07:49Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapports finaux&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P1 Modélisation et commande de l'auto-ignition d'un moteur HCCI]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Moulé Alexandre / Taché Clément &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Anne-Lise Gehin / Jean-Yves Dieulot &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Fichier:Rapport decembre moule tache.pdf]]  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P5 Filtrage des indicateurs numériques de diagnostic]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; ZIOU Ismaïl / HAMZAOUI Oussama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:rapport_Z.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P6 Gestion des flux thermiques du bâtiment Polytech]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Florian Royer / Zohour Assaieb &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; [[Fichier:Rapport_Intermédiaire_Royer_Assaieb.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P7 Utilisation d'un Robot Nao pour les enfants autistes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rodriguez Loïc/Ismaïl Tahry&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Projetpfenaomi.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P8 Pilulier]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Mercier / Emile Pinet&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS / Alexandre BOE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport decembre PFE pilulier mercier pinet.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P9 Agenda pour personnes non lectrices]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Cédric DESPREZ &amp;amp; Soufiane HADDAOUI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_MiSoutenance_DESPREZ_HADDAOUI.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P11 Détecteur d'obstacles pour fauteuils électriques]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Geoffrey ROSE / Marjorie TIXIER &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS / Blaise Conrard &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_Intermédiaire_PFE_GAPAS_Rose_Tixier.pdf]]&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P12 Automatiser à l'aide d'une interface LabView la procédure de mesure de conductivité électrique d'un alternateur à griffes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Hugo FONDU &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Abdelkader Benabou &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:rapport_presoutenance.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P13 Construction d'un support motorisé pour la réalisation des essais de décharges électrostatique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; JEBBARI Zineb / BEKRAOUI Oumaima &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Nathalie Rolland &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:rapportJebbek.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P19 Contrôle et synchronisation d'instruments en microscopie]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Simon Duthoit&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Samuel Hym &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P21 Balise Bluetooth Low Energy]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Kévin CHALONO / Armagan YAMNAZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[ Fichier:ProjetBLE 1 pdf.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_PFE_Yanmaz_Chalono.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P21 Bis Prototypage d'interactions localisées et contextualisées ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Olivier Tailliez&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas Vantroys / Yvan Peter &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P22 Google Glass en logistique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémy Gondry / Vincent Meunier &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_intermediaire_Gondry_Meunier.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_final_PFE_Meunier_Gondry.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P24 Robot de surveillance domestique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Sébastien DELTOMBE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Xavier Redon &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[[Fichier:Rapport_PFE_P24_Deltombe.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P25 SmartMeter]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas Ederlé / Sylvain Fossaert&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Guillaume Renault / Xavier Redon / Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:RapportFossaertEderle.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P26 Vehicule Electrique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Smain Labdouni / Adnane Jaoui &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Arnaud Chielens / Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  [[Fichier:RAPPORT_VE_DEC.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  [[Fichier:Rapport_pfe_Jaoui_Labdouni_Fevrier.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P27 Controle Direct de Puissance d'un Convertisseur Matriciel ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Quentin Pesqueux / Nicolas Alexandre &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  [[Fichier:PFE_IMA5_MATRIX_CONVERTER_Alexandre_Pesqueux.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P28 Modélisation d'un robot chirurgical déformable pour la simulation et le contrôle]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Charlotte BRICOUT / Nathan MARTIN &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémie DEQUIDT&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:-BRICOUT MARTIN--Rapport PFE.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P33 Ligthing contactless / &amp;quot;wireless&amp;quot;]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benjamin Lafit &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_Benjamin_Lafit.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P35 Hack-a-Wii : Emulation de wiimote pour rendre la Wii accessibles aux personnes handicapées ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Fabien Violier &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P37 Creation d'un composant d'audit des accès cache mémoire sur un microprocesseur LEON3 simulé en FPGA ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérôme Vaessen &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Julien Cartigny / Pierrick Buret &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:Rapport_VAESSEN_presoutenance.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P44 Création d'un systeme domotique sans fil ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benoit MALIAR / Thomas MAURICE&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierrick BURET / Thomas VANTROYS  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:RapportMaliarMauriceDecembre.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P45 Aide à la navigation d'un véhicule autonome]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierre APPERCÉ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P46 Simulation Temps Réel d'un Environnement de Robots Autonomes Logisticiens]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Valentin VERGEZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P57 CHRU Lille : Smart Picking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu Bossennec / Florian Caron&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Gwénaëlle Maton / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P58 Transformation des spectateurs d’un concert en afficheur géant interactif]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Hautecoeur Mélanie &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P59 Assistance globale pour aide au parking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu GERIER / Céline LY &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre BOE / Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17415</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17415"/>
				<updated>2015-02-21T18:50:49Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Développement de l'application mobile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====Envoi manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====Envoi automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====Bench====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====Envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur le choix d'une interface plus facile d'utilisation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur la génération d'uuid unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration de deux boutons Start Service / Stop Service&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur une façon de générer des UUID unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nouveau bouton &amp;quot;Sélectionner une photo&amp;quot; dans la vue &amp;quot;Mes informations&amp;quot; qui permet de choisir une photo et de l'enregistrer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur un moyen d'envoyer la photo(donnée de grande taille)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Utilisation d'un module Nodejs &amp;quot;node-uuid&amp;quot; pour générer des UUID aléatoires&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 18'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Encodage de la photo en format Base64String&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découpage du String en paquets de String de 20 octets / Envoi vers la raspberry par boucle ce ces paquets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Le bouton &amp;quot;Start Service&amp;quot; permet de faire en sorte d’exécuter l'analyse des appareils en arrière-plan et rend possible la communication autonome avec le réseau blueooth low energy environnant le mobile &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Continue les recherches sur &amp;quot;node-uuid&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 19'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modification du script Nodejs pour enregistrer directement dans un fichier les informations envoyées&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupération dans le fichier du nom/prenom/mail et du String de l'image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Décodage du String et reproduction de la photo initiale envoyée grâce au site web [http://www.askapache.com/online-tools/base64-image-converter/ Décodage Base64String &amp;lt;-&amp;gt;Image]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;L'envoi d'une image est possible si l'image de la taille est petite (75x75 pixels). Si cette taille est excédée, l'image est mal envoyée&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 20'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation du rapport&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réalisation de la vidéo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation de la soutenance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17414</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17414"/>
				<updated>2015-02-21T18:47:51Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur le choix d'une interface plus facile d'utilisation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur la génération d'uuid unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration de deux boutons Start Service / Stop Service&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur une façon de générer des UUID unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nouveau bouton &amp;quot;Sélectionner une photo&amp;quot; dans la vue &amp;quot;Mes informations&amp;quot; qui permet de choisir une photo et de l'enregistrer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur un moyen d'envoyer la photo(donnée de grande taille)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Utilisation d'un module Nodejs &amp;quot;node-uuid&amp;quot; pour générer des UUID aléatoires&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 18'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Encodage de la photo en format Base64String&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découpage du String en paquets de String de 20 octets / Envoi vers la raspberry par boucle ce ces paquets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Le bouton &amp;quot;Start Service&amp;quot; permet de faire en sorte d’exécuter l'analyse des appareils en arrière-plan et rend possible la communication autonome avec le réseau blueooth low energy environnant le mobile &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Continue les recherches sur &amp;quot;node-uuid&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 19'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modification du script Nodejs pour enregistrer directement dans un fichier les informations envoyées&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupération dans le fichier du nom/prenom/mail et du String de l'image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Décodage du String et reproduction de la photo initiale envoyée grâce au site web [http://www.askapache.com/online-tools/base64-image-converter/ Décodage Base64String &amp;lt;-&amp;gt;Image]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;L'envoi d'une image est possible si l'image de la taille est petite (75x75 pixels). Si cette taille est excédée, l'image est mal envoyée&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 20'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation du rapport&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réalisation de la vidéo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation de la soutenance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17413</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17413"/>
				<updated>2015-02-21T18:47:17Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur le choix d'une interface plus facile d'utilisation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur la génération d'uuid unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration de deux boutons Start Service / Stop Service&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur une façon de générer des UUID unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nouveau bouton &amp;quot;Sélectionner une photo&amp;quot; dans la vue &amp;quot;Mes informations&amp;quot; qui permet de choisir une photo et de l'enregistrer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur un moyen d'envoyer la photo(donnée de grande taille)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Utilisation d'un module Nodejs &amp;quot;node-uuid&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 18'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Encodage de la photo en format Base64String&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découpage du String en paquets de String de 20 octets / Envoi vers la raspberry par boucle ce ces paquets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Le bouton &amp;quot;Start Service&amp;quot; permet de faire en sorte d’exécuter l'analyse des appareils en arrière-plan et rend possible la communication autonome avec le réseau blueooth low energy environnant le mobile &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Continue les recherches sur&amp;quot;node-uuid&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 19'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modification du script Nodejs pour enregistrer directement dans un fichier les informations envoyées&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupération dans le fichier du nom/prenom/mail et du String de l'image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Décodage du String et reproduction de la photo initiale envoyée grâce au site web [http://www.askapache.com/online-tools/base64-image-converter/ Décodage Base64String &amp;lt;-&amp;gt;Image]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;L'envoi d'une image est possible si l'image de la taille est petite (75x75 pixels). Si cette taille est excédée, l'image est mal envoyée&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 20'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation du rapport&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réalisation de la vidéo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation de la soutenance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17412</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17412"/>
				<updated>2015-02-21T18:41:55Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur le choix d'une interface plus facile d'utilisation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur la génération d'uuid unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration de deux boutons Start Service / Stop Service&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nouveau bouton &amp;quot;Sélectionner une photo&amp;quot; dans la vue &amp;quot;Mes informations&amp;quot; qui permet de choisir une photo et de l'enregistrer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur un moyen d'envoyer la photo(donnée de grande taille)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 18'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Encodage de la photo en format Base64String&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découpage du String en paquets de String de 20 octets / Envoi vers la raspberry par boucle ce ces paquets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Le bouton &amp;quot;Start Service&amp;quot; permet de faire en sorte d’exécuter l'analyse des appareils en arrière-plan et rend possible la communication autonome avec le réseau blueooth low energy environnant le mobile &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 19'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modification du script Nodejs pour enregistrer directement dans un fichier les informations envoyées&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupération dans le fichier du nom/prenom/mail et du String de l'image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Décodage du String et reproduction de la photo initiale envoyée grâce au site web [http://www.askapache.com/online-tools/base64-image-converter/ Décodage Base64String &amp;lt;-&amp;gt;Image]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;L'envoi d'une image est possible si l'image de la taille est petite (75x75 pixels). Si cette taille est excédée, l'image est mal envoyée&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 20'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation du rapport&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Réalisation de la vidéo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Préparation de la soutenance&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17411</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17411"/>
				<updated>2015-02-21T18:35:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur le choix d'une interface plus facile d'utilisation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur la génération d'uuid unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration de deux boutons Start Service / Stop Service&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nouveau bouton &amp;quot;Sélectionner une photo&amp;quot; dans la vue &amp;quot;Mes informations&amp;quot; qui permet de choisir une photo et de l'enregistrer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur un moyen d'envoyer la photo(donnée de grande taille)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 18'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Encodage de la photo en format Base64String&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découpage du String en paquets de String de 20 octets / Envoi vers la raspberry par boucle ce ces paquets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 19'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modification du script Nodejs pour enregistrer directement dans un fichier les informations envoyées&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Récupération dans le fichier du nom/prenom/mail et du String de l'image&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Décodage du String et reproduction de la photo initiale envoyée grâce au site web [http://http://www.askapache.com/online-tools/base64-image-converter/ Décodage Base64String &amp;lt;-&amp;gt;Image]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17410</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17410"/>
				<updated>2015-02-21T18:30:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur le choix d'une interface plus facile d'utilisation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur la génération d'uuid unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration de deux boutons Start Service / Stop Service&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Nouveau bouton dans la vue &amp;quot;Mes information&amp;quot; qui permet de choisir une photo et de l'enrregistrer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur un moyen d'envoyer la photo(donnée de grande taille)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 18'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Encodage de la photo en format Base64String&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Découpage du String en paquets de String de 20 octets / Envoi vers la raspberry par boucle ce ces paquets&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 19'''&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17409</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17409"/>
				<updated>2015-02-21T18:24:44Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur le choix d'une interface plus facile d'utilisation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur la génération d'uuid unique côté Raspberry&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Intégration de deux boutons Start Service / Stop Service&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17408</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17408"/>
				<updated>2015-02-21T18:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rendez-vous avec nos tuteurs entreprises pour faire le point et discuter de la suite su projet&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
- Recherche sur le choix d'une interface plus facile d'utilisation&lt;br /&gt;
- Recherche sur la génération d'uuid unique côté Raspberry&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Recherche sur les Services Android&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&lt;br /&gt;
- Recherche sur les Services Android&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
-Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&lt;br /&gt;
-Intégration de deux boutons Start Service / Stop Service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17407</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17407"/>
				<updated>2015-02-21T18:18:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;L'outil réalisé se doit d'être facile d'utilisation et également d'être adapté aux personnes non lectrices&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Il doit permettre un rappel de rendez-vous régulier aux résidents&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
- Recherche sur le choix d'une interface plus facile d'utilisation&lt;br /&gt;
- Recherche sur la génération d'uuid unique côté Raspberry&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
- Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&lt;br /&gt;
- Recherche sur les Services Android&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
-Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&lt;br /&gt;
-Intégration de deux boutons Start Service / Stop Service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17406</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17406"/>
				<updated>2015-02-21T18:16:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Prise de rendez-vous avec les tuteurs entreprises puis discussion sur la suite.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple et traiter la cas d'un client&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
- Recherche sur le choix d'une interface plus facile d'utilisation&lt;br /&gt;
- Recherche sur la génération d'uuid unique côté Raspberry&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
- Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&lt;br /&gt;
- Recherche sur les Services Android&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
-Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&lt;br /&gt;
-Intégration de deux boutons Start Service / Stop Service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17405</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17405"/>
				<updated>2015-02-21T18:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Prise de rendez-vous avec les tuteurs entreprises puis discussion sur la suite.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Discussion sur un moyen de gérer la connexion multiple et traiter la cas d'un client&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Envoi d'une photo&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Service Android pour le lancement automatique de l'application&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/u1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
- Recherche sur le choix d'une interface plus facile d'utilisation&lt;br /&gt;
- Recherche sur la génération d'uuid unique côté Raspberry&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
- Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&lt;br /&gt;
- Recherche sur les Services Android&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
-Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&lt;br /&gt;
-Intégration de deux boutons Start Service / Stop Service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17404</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17404"/>
				<updated>2015-02-21T18:09:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
'''Après vacance/15janvier/Semaine12'''&lt;br /&gt;
&lt;br /&gt;
- Prise de rendez-vous avec les tuteurs entreprises puis discussion sur la suite.&lt;br /&gt;
- Discussion sur un moyen de gérer la connexion multiple et traiter la cas d'un client&lt;br /&gt;
- Envoi d'une photo&lt;br /&gt;
- Service Android pour le lancement automatique de l'application&lt;br /&gt;
&lt;br /&gt;
'''Semaine 13'''&lt;br /&gt;
&lt;br /&gt;
- Recherche sur le choix d'une interface plus facile d'utilisation&lt;br /&gt;
- Recherche sur la génération d'uuid unique côté Raspberry&lt;br /&gt;
&lt;br /&gt;
'''Semaine 14'''&lt;br /&gt;
&lt;br /&gt;
- Changement de l'interface avec nouvelle vue où l'utilisateur peut enregistrer ses informations : nom,prénom,mail ( encore présent lors fermeture/réouverture de l'application)&lt;br /&gt;
- Recherche sur les Services Android&lt;br /&gt;
&lt;br /&gt;
'''Semaine 15'''&lt;br /&gt;
&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations automatiquement vers la raspberry lors du clic puis déconnexion automatique&lt;br /&gt;
-Intégration d'un bouton qui envoi les informations manuellement vers la raspberry : sélection manuelle de la raspberry / sélection manuelle du service et de la caractéristique / clic sur bouton &amp;quot;Write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 16'''&lt;br /&gt;
&lt;br /&gt;
-Rechercher sur une manière de choisir une photo et de l'enregistrer même lorsque l'application est fermée.&lt;br /&gt;
-Intégration de deux boutons Start Service / Stop Service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 17'''&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17403</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=17403"/>
				<updated>2015-02-21T17:54:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Notre PFE est une partie importante d'un projet de paiement sans contact. Ce nouveau moyen de paiement utilise la technologie Bluetooth Low Energy et un serveur GATT pour fonctionner. Le principe de ce nouveau moyen de paiement est simple, l'utilisateur aura son mobile sur lui muni de l'application de paiement. Un serveur GATT sera lancé à proximité des caisses et présentera des services de paiements. Le client enverra automatiquement ses données vers le serveur GATT au moment de payer. Une confirmation de paiement sera par la suite envoyé vers le serveur GATT après que les données utilisateurs aient été envoyées. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans un contexte réel de paiement, le système doit pouvoir gérer plusieurs utilisateurs. Ainsi le comportement du système aura un comportement décrit par le diagramme de séquence suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Diagramme_sequence.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
La connexion de plusieurs mobiles sur un seul serveur GATT est impossible, car le mobile est considéré comme un &amp;quot;master&amp;quot; et le serveur GATT est considéré comme un &amp;quot;slave&amp;quot;, or il ne peut y avoir qu'un seul device &amp;quot;master&amp;quot; dans une connexion.&lt;br /&gt;
L'implémentation qui a été choisie pour contourner le problème est la suivante : &lt;br /&gt;
&lt;br /&gt;
Lors de la découverte des services présentées par la raspberry, le mobile se connecte automatiquement au service de la raspberry envoie ses données. Du côté de la raspberry, un UUID aléatoire est généré. Une fois l'UUID reçu la connexion est rompue et le mobile se connecte sur un service d'écriture qui a pour UUID l'UUID aléatoire transmis par la raspberry juste avant d'avoir rompu la connexion et envoie une confirmation de paiement.&lt;br /&gt;
&lt;br /&gt;
====Envoie simple d'une chaîne de caractère====&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
====Ecriture sur un fichier====&lt;br /&gt;
Lorsque les données sont envoyées vers la Raspberry, les données sont affichées sur le terminal mais aussi sauvegardées dans un fichier.&lt;br /&gt;
&lt;br /&gt;
====Generation des UUID aléatoires====&lt;br /&gt;
A chaque écriture sur la raspberry, un nouvel UUID aléatoire est généré. Le changement d'UUID du service d'écriture n'est pour l'instant pas géré&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Plusieurs activités ont été ajouté pour pouvoir remplir les objectifs de la deuxième partie du projet à savoir : &lt;br /&gt;
&lt;br /&gt;
====mode manuel====&lt;br /&gt;
&lt;br /&gt;
L'utilisateur peut choisir lui même sur quelle caractéristique écrire. L'envoie est déclenché par l'utilisateur par l'appui sur le bouton write de la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Écriture_manu.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Les données qui sont alors envoyées sont des données que l'utilisateur aura saisies une fois dans une vue activité prévue à cet effet. Une vue de cette activité est donnée par la figure suivante : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Info.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====mode automatique====&lt;br /&gt;
&lt;br /&gt;
Si l'utilisateur clic sur le mode automatique, le service de la raspberry présentant la propriété &amp;quot;écriture&amp;quot; sera automatiquement sélectionnée et les données de l'utilisateur saisie dans l'activité de saisie des données seront automatiquement envoyées.&lt;br /&gt;
&lt;br /&gt;
====mode test====&lt;br /&gt;
Dans ce mode, on peut effectuer des tests d'écriture sur la raspberry. On peut choisir la taille des paquets de données à envoyer et le nombre de fois que l'on souhaite l'envoyer. Comme le montre la vue de l'activité correspondante.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Envoie_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Test_ecriture_19_caracteres.png|500px]]&lt;br /&gt;
[[Fichier:Test_ecriture_4_caracteres.png|500px]]&lt;br /&gt;
&lt;br /&gt;
On voit que sur les tests effectués, la taille des paquets de données influe grandement sur la vitesse. Cet écart de vitesse est due au fait que lorsque l'on envoie les informations par petits paquets de données, on fait plus souvent appel à la fonction d'écriture. Il vaut donc mieux envoyer les données par segments de 20.&lt;br /&gt;
&lt;br /&gt;
====envoie d'une photo vers le serveur GATT====&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 10'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 11'''&lt;br /&gt;
&lt;br /&gt;
Préparation du rapport/soutenance de mi projet&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=15174</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=15174"/>
				<updated>2014-12-17T10:52:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31 octets (20 octets par défaut )&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Le bluetooth LE utilise la bande de fréquence 2.4 Ghz chaque canal est séparé par 2 Mhz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Frequence.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fréquences en vert sont utilisées pour transmettre les trames d'advertising.&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_trame.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On constate la charge utile dans une trame est de 66% (donnée/longeur_totale = 31/47 = 0.66)&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 15 Ko soit un peu plus de 2 secondes pour traiter un client.&lt;br /&gt;
&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 9'''&lt;br /&gt;
&lt;br /&gt;
Après compréhension de la librairie d'écoute des beacons, nous avons spécifié tout d'abord l'uuid de la beacon Gimbal afin qu'elle réveille&lt;br /&gt;
notre application lorsqu'elle est à portée du portable. Nous avons par la suite trouvé plus convenient de réveiller l'application par le RaspberryPi mais il a fallu modifié le programme Nodejs: StartAdvertisingIBeacon plutôt que StartAdvertising, cette librairie faisant l'écoute d'iBeacon seulement.&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=15104</id>
		<title>Projets IMA5 2014/2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=15104"/>
				<updated>2014-12-16T20:28:06Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P1 Modélisation et commande de l'auto-ignition d'un moteur HCCI]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Moulé Alexandre / Taché Clément &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Anne-Lise Gehin / Jean-Yves Dieulot &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P5 Filtrage des indicateurs numériques de diagnostic]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; ZIOU Ismaïl / HAMZAOUI Oussama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P6 Gestion des flux thermiques du bâtiment Polytech]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Florian Royer / Zohour Assaieb &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P7 Utilisation d'un Robot Nao pour les enfants autistes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rodriguez Loïc/Ismaïl Tahry&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P8 Pilulier]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Mercier / Emile Pinet&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS / Alexandre BOE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P9 Agenda pour personnes non lectrices]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Cédric DESPREZ &amp;amp; Soufiane HADDAOUI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P11 Détecteur d'obstacles pour fauteuils électriques]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Geoffrey ROSE / Marjorie TIXIER &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS / Blaise Conrard &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P12 Automatiser à l'aide d'une interface LabView la procédure de mesure de conductivité électrique d'un alternateur à griffes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Hugo FONDU &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Abdelkader Benabou &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P13 Construction d'un support motorisé pour la réalisation des essais de décharges électrostatique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; JEBBARI Zineb / BEKRAOUI Oumaima &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Nathalie Rolland &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[Fichier:rapportJebbek.pdf]] &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P21 Balise Bluetooth Low Energy]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Kévin CHALONO / Armagan YAMNAZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; [[ Fichier:ProjetBLE 1 pdf.pdf]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P22 Google Glass en logistique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémy Gondry / Vincent Meunier &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P24 Robot de surveillance domestique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Sébastien DELTOMBE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Xavier Redon &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P25 SmartMeter]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas Ederlé / Sylvain Fossaert&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Guillaume Renault / Xavier Redon / Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P26 Vehicule Electrique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Smain Labdouni / Adnane Jaoui &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Arnaud Chielens / Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P27 Controle Direct de Puissance d'un Convertisseur Matriciel ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Quentin Pesqueux / Nicolas Alexandre &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P28 Modélisation d'un robot chirurgical déformable pour la simulation et le contrôle]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Charlotte BRICOUT / Nathan MARTIN &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémie DEQUIDT&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P33 Ligthing contactless / &amp;quot;wireless&amp;quot;]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benjamin Lafit &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P37 Creation d'un composant d'audit des accès cache mémoire sur un microprocesseur LEON3 simulé en FPGA ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérôme Vaessen &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Julien Cartigny / Pierrick Buret &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P44 Création d'un systeme domotique sans fil ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benoit MALIAR / Thomas MAURICE&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierrick BURET / Thomas VANTROYS  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P45 Aide à la navigation d'un véhicule autonome]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierre APPERCÉ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P46 Simulation Temps Réel d'un Environnement de Robots Autonomes Logisticiens]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Valentin VERGEZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P57 CHRU Lille : Smart Picking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu Bossennec / Florian Caron&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Gwénaëlle Maton / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P59 Assistance globale pour aide au parking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu GERIER / Céline LY &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre BOE / Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14793</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14793"/>
				<updated>2014-11-19T15:10:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 8'''&lt;br /&gt;
&lt;br /&gt;
Utilisation d'une librairie iBeacon sur Android Studio afin de lancer l'application automatiquement sans intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela nous utilisons les iBeacons de Gimbal disponible gratuitement ici : [[http://www.gimbal.com/]]&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=14792</id>
		<title>Projets IMA5 2014/2015</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2014/2015&amp;diff=14792"/>
				<updated>2014-11-19T15:05:25Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P1 Modélisation et commande de l'auto-ignition d'un moteur HCCI]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Moulé Alexandre / Taché Clément &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Anne-Lise Gehin / Jean-Yves Dieulot &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P5 Filtrage des indicateurs numériques de diagnostic]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; ZIOU Ismaïl / HAMZAOUI Oussama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[P6 Gestion des flux thermiques du bâtiment Polytech]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Florian Royer / Zohour Assaieb &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Belkacem Ould Bouamama &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P7 Utilisation d'un Robot Nao pour les enfants autistes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rodriguez Loïc/Ismaïl Tahry&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P8 Pilulier]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Mercier / Emile Pinet&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS / Alexandre BOE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P9 Agenda pour personnes non lectrices]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Cédric DESPREZ &amp;amp; Soufiane HADDAOUI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS/Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P11 Détecteur d'obstacles pour fauteuils électriques]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Geoffrey ROSE / Marjorie TIXIER &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; GAPAS / Blaise Conrard &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P12 Automatiser à l'aide d'une interface LabView la procédure de mesure de conductivité électrique d'un alternateur à griffes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Hugo FONDU &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Abdelkader Benabou &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P13 Construction d'un support motorisé pour la réalisation des essais de décharges électrostatique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; JEBBARI Zineb / BEKRAOUI Oumaima &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Nathalie Rolland &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P21 Balise Bluetooth Low Energy]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Kévin CHALONO / Armagan YAMNAZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P22 Google Glass en logistique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémy Gondry / Vincent Meunier &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Laurent Grisoni &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P24 Robot de surveillance domestique]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Sébastien DELTOMBE &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Xavier Redon &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P25 SmartMeter]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Thomas Ederlé / Sylvain Fossaert&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Guillaume Renault / Xavier Redon / Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P26 Vehicule Electrique ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Smain Labdouni / Adnane Jaoui &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Arnaud Chielens / Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P27 Controle Direct de Puissance d'un Convertisseur Matriciel ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Quentin Pesqueux / Nicolas Alexandre &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Philippe Delarue &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P28 Modélisation d'un robot chirurgical déformable pour la simulation et le contrôle]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Charlotte BRICOUT / Nathan MARTIN &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérémie DEQUIDT&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P33 Ligthing contactless / &amp;quot;wireless&amp;quot;]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benjamin Lafit &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre Boé &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P37 Creation d'un composant d'audit des accès cache mémoire sur un microprocesseur LEON3 simulé en FPGA ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Jérôme Vaessen &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Julien Cartigny / Pierrick Buret &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P44 Création d'un systeme domotique sans fil ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Benoit MALIAR / Thomas MAURICE&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierrick BURET / Thomas VANTROYS  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P45 Aide à la navigation d'un véhicule autonome]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Pierre APPERCÉ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P46 Simulation Temps Réel d'un Environnement de Robots Autonomes Logisticiens]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Valentin VERGEZ&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Rochdi MERZOUKI &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P57 CHRU Lille : Smart Picking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu Bossennec / Florian Caron&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Gwénaëlle Maton / Alexandre Boé / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[P59 Assistance globale pour aide au parking]]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Mathieu GERIER / Céline LY &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Alexandre BOE / Thomas VANTROYS &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14790</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14790"/>
				<updated>2014-11-19T15:04:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : a déplacé P21 balise Bluetooth Low Energy vers P21 Balise Bluetooth Low Energy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_balise_Bluetooth_Low_Energy&amp;diff=14791</id>
		<title>P21 balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_balise_Bluetooth_Low_Energy&amp;diff=14791"/>
				<updated>2014-11-19T15:04:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : a déplacé P21 balise Bluetooth Low Energy vers P21 Balise Bluetooth Low Energy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECTION [[P21 Balise Bluetooth Low Energy]]&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14789</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14789"/>
				<updated>2014-11-19T14:59:00Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 7''' &lt;br /&gt;
&lt;br /&gt;
Implémentation de la fonctionnalité &amp;quot;'''Ecrire'''&amp;quot; (Write) dans l'application. Selon les propriétés des caractéristiques proposées , un bouton ''Write'' ou ''Read'' apparaît. Lors de l'appui sur le bouton Write, une fenêtre de dialoge s'ouvre où l'utilisateur peut renseigner son nom et prénom et envoyer ses informations vers la Raspberry. Lors de l'appui sur le bouton Read, la valeur de la caractéristique d'affiche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14788</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14788"/>
				<updated>2014-11-19T14:54:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14787</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14787"/>
				<updated>2014-11-19T14:50:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
    var util = require('util');&lt;br /&gt;
    var bleno = require('bleno');&lt;br /&gt;
    var BlenoPrimaryService = bleno.PrimaryService;&lt;br /&gt;
    var BlenoCharacteristic = bleno.Characteristic;&lt;br /&gt;
    var BlenoDescriptor = bleno.Descriptor;&lt;br /&gt;
    console.log('bleno');&lt;br /&gt;
    var StaticReadOnlyCharacteristic = function() {&lt;br /&gt;
    StaticReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff1',&lt;br /&gt;
    properties: ['read'],&lt;br /&gt;
    value: new Buffer('armagan'),&lt;br /&gt;
    descriptors: [&lt;br /&gt;
    new BlenoDescriptor({&lt;br /&gt;
    uuid: '2901',&lt;br /&gt;
    value: 'user description'&lt;br /&gt;
    })&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var DynamicReadOnlyCharacteristic = function() {&lt;br /&gt;
    DynamicReadOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff2',&lt;br /&gt;
    properties: ['read']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(DynamicReadOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    DynamicReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {&lt;br /&gt;
    var result = this.RESULT_SUCCESS;&lt;br /&gt;
    var data = new Buffer('kevin');&lt;br /&gt;
    if (offset &amp;gt; data.length) {&lt;br /&gt;
    result = this.RESULT_INVALID_OFFSET;&lt;br /&gt;
    data = null;&lt;br /&gt;
    }&lt;br /&gt;
    callback(result, data);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var WriteOnlyCharacteristic = function() {&lt;br /&gt;
    WriteOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff3',&lt;br /&gt;
    properties: ['write', 'writeWithoutResponse']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(WriteOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {&lt;br /&gt;
    console.log('WriteOnlyCharacteristic write request: ' + data.toString() + ' ' + offset + ' ' + withoutResponse);&lt;br /&gt;
    callback(this.RESULT_SUCCESS);&lt;br /&gt;
    };&lt;br /&gt;
    var NotifyOnlyCharacteristic = function() {&lt;br /&gt;
    NotifyOnlyCharacteristic.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff4',&lt;br /&gt;
    properties: ['notify']&lt;br /&gt;
    });&lt;br /&gt;
    };&lt;br /&gt;
    util.inherits(NotifyOnlyCharacteristic, BlenoCharacteristic);&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onSubscribe = function(maxValueSize, updateValueCallback) {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic subscribe');&lt;br /&gt;
    this.counter = 0;&lt;br /&gt;
    this.changeInterval = setInterval(function() {&lt;br /&gt;
    var data = new Buffer(4);&lt;br /&gt;
    data.writeUInt32LE(this.counter, 0);&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic update value: ' + this.counter);&lt;br /&gt;
    updateValueCallback(data);&lt;br /&gt;
    this.counter++;&lt;br /&gt;
    }.bind(this), 5000);&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onUnsubscribe = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic unsubscribe');&lt;br /&gt;
    if (this.changeInterval) {&lt;br /&gt;
    clearInterval(this.changeInterval);&lt;br /&gt;
    this.changeInterval = null;&lt;br /&gt;
    }&lt;br /&gt;
    };&lt;br /&gt;
    NotifyOnlyCharacteristic.prototype.onNotify = function() {&lt;br /&gt;
    console.log('NotifyOnlyCharacteristic on notify');&lt;br /&gt;
    };&lt;br /&gt;
    function SampleService() {&lt;br /&gt;
    SampleService.super_.call(this, {&lt;br /&gt;
    uuid: 'fffffffffffffffffffffffffffffff0',&lt;br /&gt;
    characteristics: [&lt;br /&gt;
    new StaticReadOnlyCharacteristic(),&lt;br /&gt;
    new DynamicReadOnlyCharacteristic(),&lt;br /&gt;
    new WriteOnlyCharacteristic(),&lt;br /&gt;
    new NotifyOnlyCharacteristic&lt;br /&gt;
    ]&lt;br /&gt;
    });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    util.inherits(SampleService, BlenoPrimaryService);&lt;br /&gt;
    bleno.on('stateChange', function(state) {&lt;br /&gt;
    console.log('on -&amp;gt; stateChange: ' + state);&lt;br /&gt;
    if (state === 'poweredOn') {&lt;br /&gt;
    bleno.startAdvertising('RaspberryPi', ['fffffffffffffffffffffffffffffff0']);&lt;br /&gt;
    } else {&lt;br /&gt;
    bleno.stopAdvertising();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    // Linux only events /////////////////&lt;br /&gt;
    bleno.on('accept', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; accept, client: ' + clientAddress);&lt;br /&gt;
    if (bleno.updateRssi) {&lt;br /&gt;
    bleno.updateRssi();&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('disconnect', function(clientAddress) {&lt;br /&gt;
    console.log('on -&amp;gt; disconnect, client: ' + clientAddress);&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('rssiUpdate', function(rssi) {&lt;br /&gt;
    console.log('on -&amp;gt; rssiUpdate: ' + rssi);&lt;br /&gt;
    });&lt;br /&gt;
    //////////////////////////////////////&lt;br /&gt;
    bleno.on('advertisingStart', function(error) {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStart: ' + (error ? 'error ' + error : 'success'));&lt;br /&gt;
    if (!error) {&lt;br /&gt;
    bleno.setServices([&lt;br /&gt;
    new SampleService()&lt;br /&gt;
    ]);&lt;br /&gt;
    }&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('advertisingStop', function() {&lt;br /&gt;
    console.log('on -&amp;gt; advertisingStop');&lt;br /&gt;
    });&lt;br /&gt;
    bleno.on('servicesSet', function() {&lt;br /&gt;
    console.log('on -&amp;gt; servicesSet');&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14786</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14786"/>
				<updated>2014-11-19T14:47:38Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Pour créer des périphériques BLE disposant de services , nous utilisons '''bleno''', un module Nodejs. Voici le programme ''serveur'' utilisé :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14785</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14785"/>
				<updated>2014-11-19T14:00:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile et recherche sur la création d'un serveur GATT côté Raspberry.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici : [[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
Ce projet-ci permet de base de détecter les appareils BLE et de se connecter sur l'un de ces appareils. Après connection, nous avons accès aux services et aux caractéristiques disponible. Seulement la fonctionnalité '''Read''' est implémentée dans l'application. Notre but étant de pouvoir envoyer des informations vers le serveur GATT de la Raspberry, c'est à dire écrire ('''Write''') sur les caractéristiques des services proposées par le serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14784</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14784"/>
				<updated>2014-11-19T13:51:46Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 4'''&lt;br /&gt;
&lt;br /&gt;
Recherche sur le développement de l'application mobile.&lt;br /&gt;
&lt;br /&gt;
'''Semaine 5'''&lt;br /&gt;
&lt;br /&gt;
Après des recherches à propos du Bluetooth Low Energy sur Android, nous nous sommes basés sur le projet opensource disponible ici[[http://developer.android.com/samples/BluetoothLeGatt/project.html]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14783</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14783"/>
				<updated>2014-11-19T13:45:50Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 RaspberryPi&lt;br /&gt;
 * 1 Dongle Bluetooth 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14782</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14782"/>
				<updated>2014-11-19T13:45:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Matériel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 Samsung Galaxy Tab4&lt;br /&gt;
 * 1 Portable Samsung GS3&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14781</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14781"/>
				<updated>2014-11-19T13:43:33Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==Journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;br /&gt;
 * 1 Samsung Glaxy Tab4&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14780</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14780"/>
				<updated>2014-11-19T13:43:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;br /&gt;
 * 1 Samsung Glaxy Tab4&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14779</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14779"/>
				<updated>2014-11-19T13:42:44Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* journal de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais. Dans un premier temps, on se contentera de transmettre des caractères vers la raspberry, puis on essaiera de transmettre de plus gros volume de données comme des photos.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|800px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno. Au démarrage de la raspberry, on active le dongle bluetooth à l'aide de la commande : hciconfig hi0 up&lt;br /&gt;
ensuite, on lance le script du serveur. Ce dernier permet d'envoyer des trames d'advertising tant qu'une connexion n'est pas effectuée avec un périphérique. Lorsque l'on écrit sur le serveur, on récupère directement sur le terminal les données envoyées par le périphérique. (Voir section sur le développement côté mobile)&lt;br /&gt;
[[Fichier:Screenshot_emission.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile permet à l'utilisateur de découvrir les devices bluetooth aux alentours. Ils apparaissent à l'écran sous forme d'une liste déroulante. L'utilisateur peut alors cliquer sur le device de son pour pouvoir s'y connecter. Après la connexion, l'utilisateur a le choix entre plusieurs profile (correspond aux devices bluetooth). Ces profiles implémentent plusieurs services qui eux même implémentent plusieurs caractéristiques comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gatt_structure.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'utilisateur devra choisir une caractéristique pour pouvoir lire ou écrire sur la Raspberry. Une vue &amp;quot;bench&amp;quot; a également été rajouté pour déterminer la vitesse d'écriture comme le montre la figure ci dessous.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:write.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On constate que l'on envoie 7 octets/ms. Pour une image de 200 Ko soit un peu moins de 30 secondes pour traiter un client.&lt;br /&gt;
==journal de bord==&lt;br /&gt;
''' 25 Septembre 2014''' &lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
'''Semaine 1'''&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
'''Semaine 2'''&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Semaine 3'''&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''18 Novembre'''&lt;br /&gt;
&lt;br /&gt;
Impossible de connecter plusieurs appareils en même temps.&lt;br /&gt;
premiers bench de transmission sur la raspberry réalisé.&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;br /&gt;
 * 1 Samsung Glaxy Tab4&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14750</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14750"/>
				<updated>2014-11-18T16:39:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
L'application mobile&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après exécution de ce programme sur le terminal de la Raspberry, on récupère sur la même application :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photoappli22.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Photoappli22.jpg&amp;diff=14749</id>
		<title>Fichier:Photoappli22.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Photoappli22.jpg&amp;diff=14749"/>
				<updated>2014-11-18T16:38:49Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14746</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14746"/>
				<updated>2014-11-18T16:32:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
Fichier adv.js :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14745</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14745"/>
				<updated>2014-11-18T16:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14744</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14744"/>
				<updated>2014-11-18T16:29:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14743</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14743"/>
				<updated>2014-11-18T16:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require('http');&lt;br /&gt;
&lt;br /&gt;
var server = http.createServer(function(request, response){&lt;br /&gt;
    response.writeHead(200, {'Content-Type': 'text/plain'});&lt;br /&gt;
    response.end('Hello World\n');&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
server.listen(3000);&lt;br /&gt;
&lt;br /&gt;
console.log('Adresse du serveur: http://localhost:3000');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14742</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14742"/>
				<updated>2014-11-18T16:25:31Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14741</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14741"/>
				<updated>2014-11-18T16:23:46Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
var major = 0;&lt;br /&gt;
var minor = 0;&lt;br /&gt;
var meaquredPower = -59;&lt;br /&gt;
bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14740</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14740"/>
				<updated>2014-11-18T16:22:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14739</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14739"/>
				<updated>2014-11-18T16:22:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
Comme annoncé, on utilise une Raspberry Pi munie du système d'exploitation Raspbian wheezy et de la stack bluetooth bluez. On rajoute dessus le serveur GATT bleno&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';&lt;br /&gt;
    var major = 0;&lt;br /&gt;
    var minor = 0;&lt;br /&gt;
    var meaquredPower = -59;&lt;br /&gt;
&lt;br /&gt;
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);&lt;br /&gt;
    &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14737</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14737"/>
				<updated>2014-11-18T16:17:06Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var http = require('http');&lt;br /&gt;
&lt;br /&gt;
    var server = http.createServer(function(request, response){&lt;br /&gt;
    response.writeHead(200, {'Content-Type': 'text/plain'});&lt;br /&gt;
    response.end('Hello World\n');&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
    server.listen(3000);&lt;br /&gt;
&lt;br /&gt;
    console.log('Adresse du serveur: http://localhost:3000');&lt;br /&gt;
    &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14736</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14736"/>
				<updated>2014-11-18T16:16:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;taille des données&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20 octets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var http = require('http');&lt;br /&gt;
&lt;br /&gt;
    var server = http.createServer(function(request, response){&lt;br /&gt;
    response.writeHead(200, {'Content-Type': 'text/plain'});&lt;br /&gt;
    response.end('Hello World\n');&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
    server.listen(3000);&lt;br /&gt;
&lt;br /&gt;
    console.log('Adresse du serveur: http://localhost:3000');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14733</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14733"/>
				<updated>2014-11-18T16:06:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide des commandes '''Bluez''' et visualisation sur une application Android &amp;quot;nRF Master Control Panel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon à l'aide d'un programme javascript (Node.js).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var uuid;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14732</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14732"/>
				<updated>2014-11-18T15:59:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Appliphoto3.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Appliphoto3.jpg&amp;diff=14731</id>
		<title>Fichier:Appliphoto3.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Appliphoto3.jpg&amp;diff=14731"/>
				<updated>2014-11-18T15:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : Visualisation de l'iBeacon de la Raspberry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Visualisation de l'iBeacon de la Raspberry&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14730</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14730"/>
				<updated>2014-11-18T15:54:59Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo3.png]]&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14728</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14728"/>
				<updated>2014-11-18T15:54:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
Mise en fonctionnement de la RaspberryPi en tant que iBeacon :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo33.png]]&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14719</id>
		<title>P21 Balise Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P21_Balise_Bluetooth_Low_Energy&amp;diff=14719"/>
				<updated>2014-11-18T15:21:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ayanmaz : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objectifs du projet ==&lt;br /&gt;
Localiser des appareils mobiles grâce à des balises utilisant la technologie Bluetooth Low Energy.&lt;br /&gt;
Un smartphone ou une tablette sera équipé d'une application permettant d'écouter les balises Bluetooth implémentant la technologie BLE.&lt;br /&gt;
L'appareil devra se connecter à la balise et fournir son UUID. La balise se chargera ensuite de transférer les données collectées sur un ordinateur pour faire des études statistiques. On aura alors dans une base de données tous les utilisateurs connectés qui sont passé près de la balise relais.&lt;br /&gt;
[[Fichier:Main_frame2.png]]&lt;br /&gt;
&lt;br /&gt;
== Le matériel et la technologie utilisée ==&lt;br /&gt;
Les beacons sont les dispositifs standards pour la localisation en intérieur. Le problème avec ce matériel est qu'il ne peut qu'émettre des données. Il ne permet pas de recevoir les informations provenant des appareils mobiles(typiquement l'UUID du téléphone). Or la réception des informations mobiles est importante pour pouvoir être collecté par l'ordinateur distant. On utilisera donc des Raspberry Pi munis d'un dongle Bluetooth BLE avec une stack bluez pour pouvoir recevoir des données venant des appareils mobiles appariés et les remonter vers l'ordinateur. Enfin, on va utiliser du Bluetooth low energy pour sa faible consommation électrique et sa légèreté par rapport au Bluetooth classique. Le tableau ci-dessous résume les différences entre le Bluetooth LE et le Bluetooth classique.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt; &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth classique&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Bluetooth LE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Distance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;100 m&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;vitesse de transmission &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.7 / 2.1 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.27 Mbits/s &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;temps de latence (d'un état non connecté à un état connecté)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Nombre d'esclaves &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dépend de l'implémentation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; temps pour envoyer des données &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 100 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 ms &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;pic de courant &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;30 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;15 mA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Puissance consommée &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0.01 W à 0.5 W &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une trame Bluetooth LE a le profile suivant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Bluetooth_stack.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
On se servira du champs contenant la puissance du signal pour estimer la distance à laquelle l'utilisateur se trouve de la balise. Ensuite par triangularisation, on pourra déterminer la position approximative de l'utilisateur dans une salle.&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application côté serveur ==&lt;br /&gt;
&lt;br /&gt;
== Implémentation de la iBeacon sur la Raspberry ==&lt;br /&gt;
&lt;br /&gt;
== Développement de l'application mobile ==&lt;br /&gt;
&lt;br /&gt;
'''Journal de bord'''&lt;br /&gt;
&lt;br /&gt;
== 25 Septembre 2014 ==&lt;br /&gt;
&lt;br /&gt;
Définition des objectifs du projet avec les Encadrants.&lt;br /&gt;
Récupération d'une parti du matériel nécessaire&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
Compréhension de la mise en marche de la RaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Installation du système d'exploitation RASPBIAN sur la carte SD.&lt;br /&gt;
&lt;br /&gt;
Connection en SSH sur la Raspberry grâce au port Ethernet avec le logiciel Putty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo2.png]]&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
Installation de la stack Bluetooth '''Bluez''' sur le système Raspbian.&lt;br /&gt;
&lt;br /&gt;
Prise en main des commandes ''Bluez''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Photo1.png]]&lt;br /&gt;
&lt;br /&gt;
== Bibliographie et liens ==&lt;br /&gt;
&lt;br /&gt;
* Getting Started with Bluetooth Low Energy, Tools and Techniques for Low-Power Networking By Kevin Townsend, Carles Cufí, Akiba, Robert Davidson, Publisher: O'Reilly Media [http://shop.oreilly.com/product/0636920033011.do]&lt;br /&gt;
* Adafruit, pibeacon [https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/overview]&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
 * 1 raspberry&lt;br /&gt;
 * 1 clé USB 4.0&lt;br /&gt;
 * 1 tablet samsung tab 4.0&lt;/div&gt;</summary>
		<author><name>Ayanmaz</name></author>	</entry>

	</feed>