Construction d'un boîtier pour permettre une connexion WiFi aux videoprojecteurs : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Pages liées)
Ligne 1 : Ligne 1 :
[[Catégorie:Projets de spécialité]]
+
[[Catégorie:Construction d'un boîtier pour permettre une connexion WiFi aux videoprojecteurs]][[Catégorie:Projets de spécialité]]
 
{| class="toccolours" style="float: right; margin: 0 0 1em 1em; width: 27em; font-size: 90%;" cellspacing="5"
 
{| class="toccolours" style="float: right; margin: 0 0 1em 1em; width: 27em; font-size: 90%;" cellspacing="5"
 
|-
 
|-

Version du 2 mai 2016 à 12:03

Logo Construction d'un boîtier pour permettre une connexion WiFi aux vidéoprojecteurs
Projet Projet de spécialité 2A 2012
Thème FabLab
Étudiants Martin CHAPSAL (SLE)
Thomas DELAHODDE (ISI)
Thomas MORESCHI (SLE)
Laurent OUGIER-SIMONIN (SLE)
Date 21 Mai - 15 Juin 2012
Tuteur Franck ROUSSEAU


Description du projet

Introduction

Le but de ce projet est de fabriquer une mini machine que l'on peut connecter à chaque vidéoprojecteur de l'école et à laquelle on se connecte en WiFi pour projeter sans fil. Ce projet se basera sur des cartes du type Raspberry Pi ou BeagleBoard. Le Raspberry Pi étant indisponible en ce début de projet, le projet sera réalisé sur la carte BeagleBoard-xM. Le but final étant d'implémenter cette solution dans l'école avec des Raspberry Pi (beaucoup moins cher que le BeagleBoard-xM), nous essaierons, au maximum, de développer une solution adaptable facilement sur ce type de carte.

Le schéma ci-dessous illustre le fonctionnement de notre projet :

Schéma de fonctionnement

Objectifs

Les fonctionnalités recherchées sont les suivantes :

  • auto-détection de l'allumage du vidéoprojecteur pour réveiller la carte puis projection des informations de connexion WiFi à la carte (la carte se comporte comme un point d'accès)
  • la carte attend alors une connexion d'un client avec ces informations (et en accepte une seule)
  • projection de la totalité de l'écran à l'aide du logiciel VNC
  • projection d'une vidéo à l'aide du logiciel VLC (dans ce cas là, le son est aussi transmis au vidéoprojecteur)
  • transmission de contenus multimédia à l'aide du protocole AirPlay
  • le client reste connecté à Internet, avec 2 solutions envisageables :
    • la carte est reliée en filaire au réseau de l'école et le client étant connecté en WiFi à la carte, celle-ci servira de passerelle pour connecter le client à Internet
    • la connexion WiFi du client se divise en 2 : une connectée à la carte pour transmettre les données à projeter et l'autre connectée au réseau WiFi de l'école
  • lancer la diffusion de vidéos stockées sur un serveur (par exemple Le Kiosk), directement depuis un client connecté au boîtier
  • le client choisit le mode de diffusion qu'il veut utiliser sur une interface Web

Nous essaierons, dans les 4 semaines du projet, de réaliser le plus nombre des objectifs ci-dessus, avec comme priorité d'avoir une solution complètement fonctionnelle avec le logiciel VNC en fin de projet.

Matériel nécessaire

On fournit ci-dessous la liste du matériel nécessaire à la réalisation du boitier WiFi :

  • Une carte programmable

nous utilisons un BeagleBoard-xM. La démarche devrait être très semblable avec un Rasperry Pi.

  • Un dongle WiFi-USB

nous avons opté pour un mini-dongle du constructeur Belkin : le N150 Surf. En réalité, nous avons rencontré des soucis de compatibilité des drivers de ce produit sous Linux. N'importe quel dongle WiFi-USB devrait convenir.

  • Un câble vidéo numérique

on utilise un câble HDMI-HDMI (le port vidéo du BeagleBoard-xM étant un port HDMI, et celui du vidéoprojecteur également). Adapter le câble en fonction de la connectique de votre carte programmable et de votre sortie vidéo (vidéoprojecteur, écran,...).

  • Un adaptateur port série (mâle) / USB  

on l'utilise pour communiquer avec le boitier et l'administrer en début de mise en place. Un quelconque câble de ce genre fera l'affaire.

  • Un câble audio Jack/Jack (mâle-mâle)  

ce câble relie la sortie audio du boitier à l'entrée audio du vidéoprojecteur (si cette dernière existe...).

Configuration de la carte

Nous rappelons que nous avons à notre disposition le BeagleBoard-xM, mais que les différentes étapes de la configuration sont tout à fait adaptables sur un Rasberry Pi.

Connexion au port série

Le BeagleBoard-xM possède un port série et la première étape a été de savoir comment se connecter à la carte via ce port. Nous avons, pour cela, écrit cette page ensiwiki qui détaille la démarche à suivre pour chaque OS.

Cette connexion au port série est primordiale en début de mise au point du boitier, tant qu'il n'est pas relié au réseau (et donc administrable à distance).

Installation d'Ubuntu

Le BeagleBoard-xM est livré avec la distribution linux Ångström installée sur la carte micro-SD de 4Go fournie. Afin de bénéficier d'une distribution plus complète en terme de fonctionnalités, nous avons décidé de changer de système d'exploitation. Après quelques recherches sur les différentes distributions proposées pour l'architecture ARM du BeagleBoard, nous avons choisi d'utiliser la distribution Ubuntu, disposant de versions OMAP (adaptées au processeur du BeagleBoard-xM). Cette distribution a l'avantage d'avoir une grande communauté et donc un support très large pour le matériel. De plus, cette distribution peut aussi être installée facilement sur un Raspberry Pi.

Pour installer Ubuntu sur le BeagleBoard-xM, nous avons suivi les instructions de cette page. Nous avons découvert (cf cette page) que les drivers graphiques n'étaient pas disponibles pour la dernière version (12.04, Precise). L'image et la vidéo étant au coeur de ce projet, nous avons donc choisi d'installer la version précédente (11.10, Oneiric). Nous avons donc suivi les instructions de la section 4.2.2, que nous reprenons ici en Français (instructions pour une installation depuis un système Linux) :

  • télécharger la dernière image de la distribution sur cette page. Pour notre projet, la dernière version est la -r8, nous allons détailler les différentes étapes avec cette version :
 $ wget http://rcn-ee.net/deb/rootfs/oneiric/ubuntu-11.10-r8-minimal-armel.tar.xz
  • vérifier le md5 de l'image :
 $ md5sum ubuntu-11.10-r8-minimal-armel.tar.xz
 979b3c6f68df6c51673200bcca511c0c  ubuntu-11.10-r8-minimal-armel.tar.xz
  • extraire l'archive :
 $ tar xJf ubuntu-11.10-r8-minimal-armel.tar.xz
 $ cd ubuntu-11.10-r8-minimal-armel
  • nous allons installer Ubuntu sur la carte micro-SD du BeagleBoard, donc si ce n'est pas déjà fait, branchez-la sur votre ordinateur. Si vous ne connaissez pas l'emplacement de la carte micro-SD, lancer la commande :
$ sudo ./setup_sdcard.sh --probe-mmc
Mot de passe :

Are you sure? I Don't see [/dev/idontknow], here is what I do see...

fdisk -l:
Disk /dev/sda: 500.1 GB, 500107862016 bytes <- x86 Root Drive
Disk /dev/mmcblk0: 3957 MB, 3957325824 bytes <- MMC/SD card

mount:
/dev/sda1 on / type ext4 (rw,errors=remount-ro,commit=0) <- x86 Root Partition
  • lancer enfin l'installation sur la carte micro-SD, ici située en /dev/mmcblk0 (cette étape peut nécessiter l'installation de quelques paquets, les instructions seront expliquées dans la sortie de la commande) :
$ sudo ./setup_sdcard.sh --mmc /dev/mmcblk0 --uboot beagle_xm

Vous pouvez maintenant démonter la carte micro-SD de votre ordinateur, la remettre dans le BeagleBoard et le démarrer, il va démarrer sur le système Ubuntu que l'on vient d'installer. Vous pouvez donc vous connecter via le port série, les identifiants par défaut sont :

 login : ubuntu
 mot de passe : temppwd

Il faut maintenant installer les différents paquets dont nous allons avoir besoin pour notre projet.

Configuration du réseau filaire

Pour se connecter au réseau de l'école en ethernet, nous allons tout d'abord devoir configurer Ubuntu pour que la carte ethernet conserve son adresse MAC à chaque reboot. Pour cela, en étant connecté via le port série, éditer la ligne hwaddress dans le fichier /etc/network/interfaces, qui au final sera de cette forme (en remplaçant avec votre adresse MAC) :

 auto lo
 iface lo inet loopback
 
 # The primary network interface
 auto eth0
 iface eth0 inet dhcp
 # Example to keep MAC address between reboots
 hwaddress ether XX:XX:XX:XX:XX:XX 
 ...

Redémarrer le BeagleBoard, et il sera directement connecté en ethernet au réseau de l'école (DHCP est démarré automatiquement au boot). Nous pouvons donc finir la configuration de la carte en s'y connectant en SSH.

Configuration de la date et du clavier

Comme le BeagleBoard sera constamment connecté à Internet, nous allons installer openntpd afin de configurer la date et l'heure automatiquement à chaque boot en utilisant NTP.

On commence par mettre à jour les dépôts :

 $ sudo apt-get update

Puis on installe openntpd :

 $ sudo apt-get install openntpd

Remarque : l'ENSIMAG possède ses propres serveurs NTP. Pour bien configurer la date et heure, il convient d'éditer le fichier /etc/openntpd/ntpd.conf de la manière suivante :

 $ sudo nano /etc/openntpd/ntpd.conf
   ...
   #server 0.debian.pool.ntp.org
   #server 1.debian.pool.ntp.org
   #server 2.debian.pool.ntp.org
   #server 3.debian.pool.ntp.org
   server ntp.imag.fr
   server ntp1.imag.fr
   server ntp2.imag.fr

Il faut maintenant configurer notre zone horaire, via l'utilitaire :

 $ sudo dpkg-reconfigure tzdata

Le BeagleBoard est maintenant paramétré avec la bonne date.

Si vous utilisez un clavier USB directement sur le BeagleBoard, et que vous voulez le configurer en clavier Français (AZERTY), lancez l'utilitaire suivant :

 $ sudo dpkg-reconfigure keyboard-configuration

Installation d'une interface graphique

Nous allons maintenant installer un environnement graphique qui nous permettra d'afficher les différents flux vidéo transmis. Nous devons trouver un environnement de bureau très léger et simple car nous n'aurons pas besoin de beaucoup de fonctionnalités. Nous avons donc choisi LXDE qui nous a semblé parfaitement adapté et surtout beaucoup plus léger que les environnements de bureau classiques (GNOME, KDE...).

Installer LXDE (installation assez longue, 30-45min) :

 $ sudo apt-get install lxde

Il faut ensuite installer un gestionnaire de sessions (pour se logguer en graphique au démarrage du BeagleBoard).

Nous avons choisi d'utiliser SLiM qui est très léger.

 $ sudo apt-get install slim

De plus, on peut le configurer afin de se connecter automatiquement sans avoir à passer par l'étape d'authentification. Il faut pour cela éditer le ficher /etc/slim.conf :

  • décommenter la ligne suivante et remplacer simone par le login (ubuntu pour nous) :
 # default_user        simone
  • décommenter la ligne suivante et remplacer no par yes :
 # auto_login          no

Vous pouvez maintenant redémarrer le BeagleBoard et LXDE sera lancé automatiquement !

Installation des pilotes vidéo

Afin de pouvoir lire des vidéos de manière fluide, il faut installer le pilote vidéo pour les puces OMAP :

 $ sudo apt-get install xserver-xorg-video-omap3

Redémarrer afin d'utiliser ces nouveaux pilotes graphiques.

Configuration du son

Pour faire fonctionner le son (lorsque l'on transmets via VLC vidéo + audio), il faut installer les paquets suivants :

 $ sudo apt-get install alsa pulseaudio

Il faut alors configurer le son avec alsamixer :

 $ alsamixer

Sur le BeagleBoard, il n'y a pas de canal Master comme sur la plupart des cartes son, mais il y a beaucoup d'item dans alsamixer. Après avoir cherché sur le Web et testé de nombreuses configurations, voici celle avec laquelle nous avons obtenu le meilleur résultat (les items qui n'apparaissent pas sur cette capture sont désactivés ou à 0) :

Configuration alsamixer

  • DAC1 Analog : 51
  • DAC1 Digital Fine : 63
  • DAC2 Analog : 51
  • DAC2 Digital Fine : 63
  • Headset : 79

Enfin, désactiver l'état muet de tous les canaux du type HeadsetL ou HeadsetR en pressant la touche "m" du clavier (00 doit apparaitre au lieu de MM).

Cette configuration permet d'avoir un son tout à fait correct avec la plupart des vidéos. Cependant, il y a parfois des grésillements, sans doute lorsque la puissance de la carte devient insuffisante. Pour enregistrer la configuration, lancer la commande suivante :

 $ sudo alsactl store

Installation des logiciels utilisés par le projet

Pour notre projet, nous avons besoin de plusieurs logiciels que nous allons installer. Nous avons choisi des logiciels légers afin d'utiliser au mieux le BeagleBoard.

  • Pour VNC, installer ssvncviewer :
 $ sudo apt-get install ssvnc
  • Pour VLC :
 $ sudo apt-get install vlc
  • Pour SM (Short Message) :
 $ sudo apt-get install sm
  • Pour la désactivation du pointeur de souris :
 $ sudo apt-get install unclutter

Modification du nom de machine

Afin d'être plus facilement identifiable et administrable par la suite, il convient de changer le nom de la machine BeagleBoard (omap par défaut).

Il est à noter que ce changement de nom se répercutera par la suite sur l'affichage proposé sur le vidéo-projecteur.

Pour modifier ce nom, éditer le fichier /etc/hostname et remplacer omap par le nom souhaité :

 $ sudo nano /etc/hostname
   Nom_Du_Boitier

Ensuite, faire de même dans le fichier /etc/hosts :

 $ sudo nano /etc/hosts
   127.0.0.1 localhost
   192.168.1.1 Nom_Du_Boitier

Ici on modifie l'adresse IP du boitier (qui vaut initialement 127.0.1.1). On fait ce changement en prévision de l'installation du serveur Web et du réseau WiFi.

Pour que les changements soient effectifs, un redémarrage est nécessaire :

 $ sudo reboot

Si la modification a été correctement effectuée, le prompt du terminal devrait avoir changé (de la forme <user>@Nom_Du_Boitier )

Mise en place du point d'accès WiFi

Dans cette partie, nous allons détailler les étapes pour configurer la carte WiFi en point d'accès, afin que l'utilisateur puisse s'y connecter.

La carte WiFi utilisée dans notre projet est la Belkin Surf N150, qui embarque une puce Realtek RTL8192CU. Cette carte est bien reconnue et fonctionne directement avec les drivers du kernel Linux. Cependant, après de nombreux essais, nous n'avons pas réussi à faire fonctionner cette carte en mode AP (Access Point). Cette page nous a finalement convaincu que nous n'étions pas les seuls à rencontrer ce problème et qu'en fait, les drivers du kernel Linux ne permettaient pas de faire fonctionner cette carte en mode AP. Après quelques recherches, nous avons vu (ici) qu'il était conseillé d'utiliser les drivers propriétaires développés par Realtek (en téléchargement ici). Cependant, ces drivers ne pouvaient pas être directement compilés sur le BeagleBoard, nous les avons donc compilés sur une autre machine (principe de la cross-compilation).

Nous allons donc mettre à votre disposition ces drivers compilés pour le BeagleBoard, ainsi que tout le nécessaire pour mettre en place le point d'accès WiFi. Nous avons compilé les drivers Realtek pour le BeagleBoard avec la version d'Ubuntu présentée ci-dessus et avec le dernier kernel Linux disponible (3.2.18-x12).

La première étape est donc d'installer cette même version du kernel sur votre BeagleBoard. Pour cela, téléchargez le script qui va installer ce kernel sur le BeagleBoard puis exécutez-le :

 $ wget http://rcn-ee.net/deb/oneiric-armel/v3.2.18-x12/install-me.sh
 $ sudo bash ./install-me.sh

Vous pouvez maintenant supprimer ce script :

 $ rm install-me.sh

Redémarrez le BeagleBoard et il utilisera maintenant cette version du kernel Linux.

Puis commencez par récupérer l'archive contenant tous les outils nécessaires en lançant la commande suivante depuis le BeagleBoard :

 $ wget --no-check-certificate https://ensiwiki.ensimag.fr/images/e/e9/Wifi_AP.tar.gz

Cette archive contient des sources et un script d'installation. Une fois l'installation terminée, les éléments suivants seront démarrés automatiquement au boot :

  • un point d'accès WiFi sécurisé en WPA2 dont le nom est le hostname de la carte
  • ce point d'accès accepte uniquement un seul hôte connecté
  • un partage de connexion entre la connexion filaire et le point d'accès WiFi (l'hôte connecté en WiFi conserve l'accès Internet via la connexion filaire de la carte)

Décompressez maintenant l'archive et allez dans le dossier nouvellement créé :

 $ tar xzvf Wifi_AP.tar.gz
 $ cd Wifi_AP

Enfin exécutez le script d'installation en root :

 $ sudo ./install.sh

À la terminaison du script, vous pouvez supprimer l'archive, le dossier nouvellement créé et redémarrer le BeagleBoard :

 $ rm -f Wifi_AP.tar.gz
 $ rm -Rf Wifi_AP
 $ sudo reboot

Au redémarrage, le point d'accès WiFi est démarré automatiquement. Si vous scannez le réseau WiFi, vous devriez voir un réseau dont le nom est le hostname du BeagleBoard (configuré plus tôt).

AttentionTout changement ultérieur de nom de machine n'aura aucune influence sur le nom du réseau WiFi !


Installation du serveur Web de configuration

Dans le but d'accéder aux différents services proposés, l'utilisateur interagit avec le boîtier via une interface Web.

Pour installer ce serveur Web local, commencer par récupérer l'archive hébergée sur EnsiWiki en lançant la commande suivante depuis le BeagleBoard :

 $ wget --no-check-certificate https://ensiwiki.ensimag.fr/images/7/73/Installation_v4.tgz

Décompresser ensuite l'archive et aller dans le dossier nouvellement créé :

 $ tar xzvf Installation_v4.tgz
 $ cd installation_v4

Donner les droits d’exécution au script setup_serveur.sh et lancer le (en root) :

 $ sudo chmod u+x setup_serveur.sh
 $ sudo ./setup_serveur.sh

Une confirmation vous sera demandée en début d’exécution du script : taper simplement "Y".

A la terminaison du script, supprimer l'archive, le dossier nouvellement créé et redémarrer le BeagleBoard :

 $ rm -f Installation_v4.tgz
 $ rm -Rf installation_v4
 $ sudo reboot

Au redémarrage, le serveur Web est opérationnel : il est accessible en tapant l'adresse IP du boîtier (ou son nom DNS le cas échéant...) dans un quelconque navigateur Web. Seule l'unique machine connectée en WiFi au boîtier a accès à ce serveur de configuration (tout autre utilisateur arrive sur une page figée lui indiquant qu'il ne dispose pas des droits pour accéder au serveur).

AttentionDès lors, on observe l'affichage en plein écran du nom de la machine. Tout changement ultérieur de nom de machine n'aura aucune influence : pour cela, il est important de changer le nom de la machine avant de lancer l'installation du serveur Web.


Améliorations

En fin de projet, nous avons accordé le reste de notre temps à étudier deux améliorations du boitier :

  • La prise en compte du "Dual Screen"
  • L'amélioration de l'utilisatibilité via le portail Web

La plupart des informations qui suivent sont des pistes à suivre mais n'ont pas été pleinement implémentées ou testées !

Dual Screen

Afin de permettre d'utiliser le mode présentateur d'un PowerPoint, il serait intéressant de simuler un autre écran, pour que la carte le récupère via VNC et le transmette au vidéprojecteur.

Pour cela, le client doit installer des logiciels en plus, nous avons documenté cela sur la page Dual screen avec VNC. Pour gérer le dual screen sous MAC, on doit ajouter les options suivantes à la commande ssvncviewer :

 -depth 32 -truecolor

Utilisabilité via le portail Web

Cette amélioration consiste à changer le portail de configuration Web afin de rendre l'utilisation du boitier encore plus simple. Concrètement, on souhaite lancer depuis le portail Web le serveur VNC du client, ou lancer automatiquement la diffusion via VLC !!

Pour cela, il est impératif d'utiliser un applet de Java signé : c'est l'unique moyen d'accéder aux données d'un client depuis un serveur Web pour des raisons de sécurité et de confidentialité (typiquement cela est impossible en JavaScript...).

Pour développer en Java sur le BeagleBoard il faut installer le paquet JDK. Lancer la commande suivante :

 $ sudo apt-get install openjdk-6-jdk

Vous pourrez ainsi développer votre code Java de l'applet et le compiler avec javac.

Il est nécessaire de créer une signature à votre applet : cette dernière sera acceptée par l'utilisateur pour donner la permission au programme Java d'accéder à ses données, à lancer des applications sur son ordinateur... Ainsi, créer votre signature avec la commande :

 $ keytool -genkey -alias "$(hostname)"

Supposons que l'applet Java développé est Test.java. Compiler le puis créer une archive JAR :

 $ javac Test.java
 $ jar cvf Test.jar *.class

Ajoutez la signature :

 $ jarsigner Test.jar "$(hostname)"

Copier ensuite l'archive Test.jar dans le dossier Web du boitier (/var/www/). Pour ajouter votre applet Java modifier le fichier index.php du dossier en ajoutant le code suivant à l'endroit voulu :

 <applet codebase="." code="Test.class" archive="Test.jar"  width="100" height="50">
    Message si applet non géré...
 </applet>


Dans le cas du lancement de la diffusion sur VLC, on souhaiterait choisir le fichier via l'interface Web. Nous avons penser à utiliser un input de type file en HTML qui parait très approprié. Seulement, cette balise est relativement mal gérée et il est impossible de récupérer sa valeur en JavaScript pour des raisons de sécurité...

Une fois de plus, il faut utiliser le Java pour cela, et plus particulièrement JFileChooser devrait convenir. Le temps nous a manqué pour explorer cette piste...

Enfin, selon l'OS du client, la commande à lancer pour le serveur VNC ou pour VLC ne sera pas la même. On identifie le type d'OS en Java grâce à System.getProperty("os.name").

On fournit un exemple de fichier Java qui implémente un applet permettant d'ouvrir VLC en diffusion sur un client possédant Windows : Fichier:Test.java. Ce fichier n'est qu'un squelette à revoir, et n'est en aucun cas fonctionnel !

Pages liées