Pourquoi illustrer cet article avec la lune et un appareil photo me direz vous ? A l’origine c’est une question de David, astrophotographe qui souhaite piloter depuis une tablette le Raspberry Pi en charge de commander son réflex …
En fait ça pourra servir à bien d’autres applications d’où la rédaction de cet article qui explique comment transformer votre framboise en point d’accès WiFi et vous y connecter à distance depuis une tablette, un smartphone…
Pour mettre en place le tout je me suis inspiré d’un article de Phil MARTIN que je vous conseille si vous lisez l’anglais.
Matériel et logiciels utilisés :
- Raspberry Pi 3
- Raspbian PIXEL edition 20160923 mise à jour
- hostapd
- dnsmasq
Prendre la main en WiFi sur le Raspberry Pi 3
Le cahier des charges
David utilise un télescope équipé d’un réflex pour faire des photos du ciel. Il souhaite prendre la main à distance sur le RasPi à partir d’une tablette connectée en WiFi, pour piloter le la prise de vue « comme s’il était sur le Raspberry Pi lui-même ». Il utilise DslrDashboard un logiciel qui commande le réflex via le port USB et affiche à l’écran une prévisualisation de l’image captée par le réflex.
Le RasPi étant isolé au milieu du jardin, il n’y a pas lieu de prévoir une connexion filaire à Internet (sinon tout ça ne servirait à rien ) donc pas de routage non plus pour renvoyer la connexion Internet sur le WiFi…
Par contre il faut être en mode graphique pour afficher les informations fournies par DslrDashboard. Désolé pour les tenants du tout texte
Comment qu’on fait ?
Un Point d’accès WiFi
Le télescope est placé à distance (à l’extérieur) et le réflex est connecté à un Raspberry Pi qui dirige les opérations.
Nous allons dans un premier temps créer un point d’accès WiFi sur le Raspberry Pi. J’ai utilisé un Raspberry Pi 3 avec WiFi intégré mais la solution est valable pour un autre modèle de Raspberry Pi, voire un Raspberry Pi 3 dont le WiFi a été désactivé et qui a été équipé d’une clé WiFi.
Pourquoi ? Parce qu’une clé WiFi avec une « vraie » antenne a une portée bien plus grande qu’un Pi3 avec sa toute chtite antenne
Installer hostapd
hostapd est le paquet qui permet d’utiliser le périphérique WiFi intégré au Raspberry Pi 3 comme un point d’accès. Il fonctionne également avec les clés USB reconnues par Raspbian.
On va commencer par le sempiternel et néanmoins obligatoire
sudo apt-get update sudo apt-get upgrade
Une fois la mise à jour terminée on peut installer hostapd
pi@raspberrypi:/etc $ sudo apt-get install hostapd Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets supplémentaires suivants seront installés : libnl-route-3-200 Les NOUVEAUX paquets suivants seront installés : hostapd libnl-route-3-200 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 559 ko dans les archives. Après cette opération, 1 473 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer ? [O/n] o
Allez soyez gentil(le) dites lui voui et validez.
Nous voilà donc avec hostapd installé. Problème : qui va gérer l’adressage du WiFi… hein ? Dans les versions actuelles de Raspian, la configuration de l’interface est gérée par dhcpcd par défaut. Nous devons lui dire d’ignorer wlan0, car nous allons le configurer avec une adresse IP statique.
Ouvrez le fichier de configuration de dhcpcd avec la commande sudo nano /etc/dhcpcd.conf et ajoutez la ligne suivante à la fin du fichier:
denyinterfaces wlan0
Cette ligne doit être au-dessus des lignes concernant les interfaces que vous avez peut-être ajoutées dans dhcpcd.conf !
Maintenant, nous pouvons configurer wlan0 avec une IP statique. Ouvrez le fichier de configuration d’interface avec la commande
sudo nano /etc/network/interfaces
et modifiez la section wlan0 pour qu’elle ressemble à ceci:
allow-hotplug wlan0 #iface wlan0 inet manual # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf iface wlan0 inet static address 172.16.0.1 netmask 255.255.255.0
Choisissez une adresse IP qui soit dans la plage des adresses privées. C’est le cas pour l’adresse que j’ai choisie : 172.16.0.1 mais vous pouvez choisir celle que vous voulez (pourvu qu’elle soit dans la plage des adresses privées). J’ai volontairement utilisé une adresse IP en 172 pour bien différencier ce réseau du réseau 192.168.x.x de la maison.
Redémarrez dhcpcd avec la commande
sudo service dhcpcd restart
puis rechargez la configuration de wlan0 avec la commande
sudo ifdown wlan0; sudo ifup wlan0
Après ce redémarrage du réseau les nouveaux paramètres sont pris en compte, un ifconfig confirme que wlan0 a bien pris l’adresse prévue.
Bon… On peut continuer et paramétrer hostapd.
Paramétrage de hostapd
Pour utiliser notre Raspberry Pi 3 comme point d’accès, il faut configurer hostapd. Créez un nouveau fichier de configuration pour hostapd :
sudo nano /etc/hostapd/hostapd.conf
et écrivez (ou collez ) les paramètres suivants dans ce fichier :
# Nom de l'interface WiFi que nous avons configurée interface=wlan0 # Utiliser le pilote nl80211 avec le pilote brcmfmac driver=nl80211 # Nom du réseau qui sera diffusé ssid=Pi3-AP # UUtiliser la bande 2,4 GHz hw_mode=g # Utiliser le canal 6 channel=6 # Activer le 802.11n ieee80211n=1 # Activer WMM wmm_enabled=1 # Activer les canaux en 40MHz avec un intervalle de garde 20 ns ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] # Accepter toutes les adresses MAC macaddr_acl=0 # Utiliser WPA pour l'authentication auth_algs=1 # Exiger que les clients connaissent le nom du réseau ignore_broadcast_ssid=0 # Utiliser WPA2 wpa=2 # Utilisez une clé pré-partagée wpa_key_mgmt=WPA-PSK # Mot de passe pour accéder au réseau wpa_passphrase=raspberry # Utiliser le chiffrage AES, au lieu de TKIP rsn_pairwise=CCMP
Je vous sens impatient(e) de vérifier si ça fonctionne A ce stade de l’installation on peut le faire en exécutant la commande
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
Si tout s’est bien passé jusqu’à présent, vous devriez être en mesure de voir le réseau PI3-AP sur un smartphone ou une tablette !
Si vous essayez de vous y connecter vous ne recevrez pas d’adresse IP jusqu’à ce que nous mettions en place dnsmasq dans l’étape suivante. Utilisez Ctrl+C pour arrêter l’exécution de hostapd.
Notre configuration n’est pas encore tout à fait terminée, parce que nous devons aussi dire à hostapd où il doit aller chercher le fichier de configuration lors de son démarrage.
Ouvrez le fichier de configuration par défaut de hostpad avec la commande :
sudo nano /etc/default/hostapd
et trouvez la ligne
# DAEMON_CONF = ""
remplacez la par
DAEMON_CONF = "/etc /hostapd/hostapd.conf"
Installer dnsmasq
dnsmasq est un serveur combiné DHCP et DNS qui est très facile à configurer. Si vous voulez quelque chose d’un peu plus « lourd », vous pouvez utiliser le serveur isc-dhcp-server et le paquet bind9 respectivement pour le DHCP et DNS , mais pour ce que nous avons à faire, dnsmasq fonctionne très bien.
Installez dnsmasq avec la commande habituelle
sudo apt-get install dnsmasq
Le fichier de configuration installé en même temps que dnsmasq contient une foule de renseignements sur la façon de l’utiliser (lisez-le si vous voulez aller plus loin avec dnsmasq), mais la majorité de ces paramètres est inutile pour ce que nous voulons faire. Je vous conseille de le renommer (plutôt que de le supprimer), et de créer un nouveau fichier dnsmasq.conf :
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.org sudo nano /etc/dnsmasq.conf
Puis collez les lignes suivantes dans le fichier que vous aurez ouvert avec nano :
interface=wlan0 # Utiliser l interface wlan0 listen-address=172.16.0.1 # Specifier l adresse à écouter bind-interfaces # Lier à l interface pour etre sur; de ne rien envoyer ailleurs server=8.8.8.8 # Renvoyer les demandes DNS au DNS de Google domain-needed # Ne pas router les noms courts bogus-priv # Ne pas router les adresses privees dhcp-range=172.16.0.50,172.16.0.150,12h # Distribuer des adresses IP entre 172.16.0.50 et 172.16.0.150 avec une duree de bail de 12 heures
Bon… On y est presque !
Il nous reste à démarrer les services :
sudo service hostapd start sudo service dnsmasq start
Voilà… Vous devriez pouvoir vous connecter au Raspberry Pi en utilisant le WiFi intégré.
Premiers tests du point d’accès WiFi
Déconnectez le câble Ethernet du Raspberry Pi pour les tests. Laissez connecté le câble HDMI pour le moment… Vous pouvez redémarrer le Raspberry Pi pour repartir de zéro.
Sur le Raspberry Pi ouvrez le menu de configuration du Raspberry Pi et dans l’onglet Interfaces, activez le serveur VNC :
Vous devriez vois apparaître l’icône VNC dans la barre des tâches du Raspberry Pi, à droite. Cliquez sur cette icône pour ouvrir la fenêtre de gestion du serveur.
Super ! L’adresse IP du serveur VNC est bien celle de notre WiFi
Sortez votre tablette, c’est le moment !
Sur votre tablette ou smartphone, installez l’appli VNC. Dans les paramètres de la tablette/smartphone, accédez au WiFi : vous voyez le point d’accès Pi3-AP (si vous ne le voyez pas c’est que vous avez raté quelque chose dans les épisodes précédent… Reprenez calmement depuis le début)
Connectez vous à l’access-point. Cette fois ça doit aller jusqu’au bout, car dnsmasq distribue une adresse IP à votre smartphone/tablette.
Allez je vous emmène directement là où ça fait mal. Ouvrez Minecraft dans le menu Jeux.
Mais pourquoi tant de haine ? L’écran de Minecraft reste désespérément noir !
Réfléchissez… Bon Dieu ! Mais c’est… bien sûr ! Eh oui… certaines applications écrivent directement dans la mémoire d’image (framebuffer) pour aller plus vite et… les pixels apparaissent sur l’écran du Raspberry Pi mais pas sur l’écran distant !
Heureusement Monsieur VNC a pensé à nous et rajouté une fonction (encore expérimentale avec cette version) qui permet de récupérer le contenu du framebuffer pour l’envoyer à la machine distante. Voyons voir…
Rouvrez la fenêtre de VNC serveur sur le Raspberry Pi, cliquez en bas à gauche sur le bouton Plus… puis dans le menu choisissez Options > Dépannage. Vous obtenez la fenêtre ci-dessus dans laquelle vous cocherez Utiliser le mode de capture direct (expérimental). Je vous l’avais bien dit, que c’était expérimental, non ? Donc pas la peine de m’écrire pour protester si « Ça marche pas » ou « Ça marche mal » ou encore « Ça plante« … Je n’y suis pour rien, je n’y peux rien et je ne peux rien y faire
Rouvrez Minecraft :
Et là devant vos yeux ébahis se produit un de ces miracles de la technologie moderne : L’écran de Minecraft s’affiche… Elle est pas belle la vie ?
Essais de l’access-point avec prise en main à distance
Voici arrivé le grand moment, on va tester le point d’accès pour de vrai ! débranchez tout, emmenez le Raspberry Pi au fond du jardin euh… non pas dans la cabane au fond du jardin
Branchez la batterie sur le Raspberry Pi, à moins que vous ayez le secteur ?
Réveillez la tablette ou le smartphone, connectez vous au Raspberry Pi et… quoi encore ?
Quoi ? Elle ne vous plait pas l’image que vous obtenez ? Quoique… Si on regarde de plus près, l’image de fond mesure normalement 1900×1200 pixels environ et les icônes seraient énormes dans ce cas On va en avoir le cœur net ! Capture d’écran et sortez le double-décimètre
Effectivement c’est un peu court, jeune homme ! 720 par 480 pixels… Ne serait-ce pas la résolution de la télé ? Diable, c’est comme si le Raspberry Pi avait démarré sur la sortie composite (analogique).
Bin oui… comme le Raspberry Pi n’a pas trouvé d’écran HDMI il est passé automatiquement en analogique. Mais il y a une solution :
On va faire croire à la framboise qu’elle est branchée sur un écran HDMI et forcer la résolution à une valeur qui nous sied. Le Raspberry Pi va générer en interne un écran aux bonnes dimensions, qui sera envoyé à la tablette/smartphone.
Ouvrez le fichier /boot/config.txt, repérez et modifiez les lignes suivantes :
# uncomment if hdmi display is not detected and composite is being output hdmi_force_hotplug=1 # uncomment to force a specific HDMI mode (this will force VGA) hdmi_group=2 hdmi_mode=28
hdmi_mode=28 correspond à 1200×800 pixels. Si vous voulez une autre résolution RTFM ou utilisez une de celles-ci
hdmi_mode=9 800×600
hdmi_mode=16 1024×768
hdmi_mode=23 1280×768
hdmi_mode=28 1280×800
hdmi_mode=35 1280×1024
hdmi_mode=51 1600×1200
hdmi_mode=69 1920×1200
Alors qu’est-ce que ça donne après un redémarrage ?
Voilà, vous avez maintenant un Raspberry Pi sur lequel vous pouvez vous connecter en WiFi et utiliser le mode graphique
Vidéo
Conclusion
J’espère qu’avec ces informations ceux d’entre vous qui souhaitez accéder en mode graphique à un Raspberry Pi auront la réponse à leurs questions.
Au départ c’était une question pour de l’astrophoto. Si vous avez d’autres applications n’hésitez pas à les mentionner dans les commentaires ci-dessous et pourquoi pas envoyer quelques copies d’écrans ? je les ajouterai à la suite de cet article
Sources
- https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/
- https://en.wikipedia.org/wiki/IEEE_802.11i-2004
- https://www.realvnc.com/docs/raspberry-pi.html
- https://support.realvnc.com/knowledgebase/article/View/523
- https://www.realvnc.com/docs/raspberry-pi.html
- http://www.connect802.com/80211n_channels.htm