Publié le 10 octobre 2016 - par

Prendre la main à distance sur le Raspberry Pi 3 avec VNC sur une tablette

ap_pi3_250pxPourquoi 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
NIVEAU_avancé

Cliquez pour avoir une définition de ces niveaux

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.

live_view_600px

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…

connection_screen_600pxPar 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

telescope

Télescope – Image prise de jour… Bin oui de nuit vous n’auriez rien vu 🙂 Image http://www.webastro.net

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 😀

ap_pi3_02

A gauche l’antenne WiFi du Raspberry Pi, c’est ce tout petit parallélépipède… La portée est forcément plus courte qu’avec une vraie 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.

 

Attention !
Si vous êtes connecté(e) au Raspberry Pi via WiFi, pensez d’abord à vous connecter via Ethernet, via le port série ou branchez un clavier. Sinon lorsque vous allez configurer le WiFi vous allez être déconnecté(e) sauvagement 🙂

raspberry_pi_ap

Access-point réalisé avec un Raspberry Pi de première génération

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.

ifconfig_wlan0

Bon… On peut continuer et paramétrer hostapd.

Paramétrage de hostapd

ap_pi3_01

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

 

ap_pi3_07

Capture d’écran sur smartphone en fin de configuration : ici le smartphone s’est bien connecté à PI3-AP car dnsmasq est en fonction…

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 :

ap_pi3_08

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.

ap_pi3_09

Super ! L’adresse IP du serveur VNC est bien celle de notre WiFi 🙂

Sortez votre tablette, c’est le moment !

tablette

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.

minecraft_0Mais 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…

vnc_optionsRouvrez 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 :

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 ?

ap_pi3_06Quoi ? 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

720x480Effectivement 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 :

communication_600px

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 ?

1280x800

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.

lune_600px

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

 

 

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

19 réflexions au sujet de « Prendre la main à distance sur le Raspberry Pi 3 avec VNC sur une tablette »

  1. icare

    Bonjour,
    Comme d’hab, fort intéressant. Bravo François.
    Dans le chapitre « Installer dnsmasq », il y a les méchants   qui poluent le code.
    @+

    Répondre
      1. François MOCQ Auteur de l’article

        Bonsoir Icare
        merci pfff j avais relu mais ceux là je ne les avais pas vus 🙁
        c’est le backoffice de WordPress qui fait des siennes quand il y a plusieurs espaces… des fois in en rajoute, en supprime, des fois il traduit en codes html (  c’est un espace 😀 )
        normalement c’est corrigé mais bon, si les leprechaun se mettent de la partie 🙂
        cordialement
        François

        Répondre
  2. Mathias

    Bonjour,

    article très intéressant.
    Je suis en train de réalise un projet de ce type.
    le seul bémol que je rencontre serait d’ouvrir une application java au démarrage du PI et le voir dans VNC

    Auriez vous une solution à mon problème
    Merci

    Répondre
  3. Stéphane

    Super intéressant, merci.
    Bon, pour l’instant ça ne marche pas encore chez moi mais je vais reprendre ça calmement ; l’un des problèmes que j’ai rencontrés, c’est que ma connexion Internet passait par le wifi ; du coup, l’installation du dnsmasq ne se fait pas parce que je n’ai plus le wifi (aurais-je fait une erreur sur l’emplacement dans le fichier lors de l’écriture de la ligne « denyinterfaces wlan0 » ?)
    Une question en passant : l’espace entre « /etc » et « /hostapd/hostapd.conf » dans l’écriture de la ligne DAEMON_CONF lors de la modification de hostapd.conf, c’est voulu ou pas trop ?

    Répondre
    1. Stéphane

      Bon, je poursuis.

      J’ai remis en route ma connexion wifi et j’ai pu poursuivre l’installation ; ensuite, je suis retourné remettre la ligne « denyinterfaces wlan0 » et remettre en service les bonnes lignes dans le /etc/network/interfaces.

      Mon souci, c’est que quand j’entre la commande « sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf », après m’avoir dit qu’il savait que le fichier de configuration était hostapd.conf et où il devait le chercher, il me dit qu’il n’est pas parvenu à créer l’interface mon.wlan0: -95 au motif que l’opération n’est pas supportée et que, du coup, wlan0 n’a pas pu déconnecter au kernel driver.

      Vous sauriez ce que j’ai raté ?

      D’avance merci.

      Répondre
      1. François MOCQ Auteur de l’article

        comme ça non
        est ce qu’après ces lignes :
        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.

        lorsque vous faites ifconfig wlan0 a bien pris l’adresse que vous avez paramétrée dans le fichier interfaces ?
        sinon pas la peine de continuer il faut déjà que ça fonctionne
        or vous n’en parlez pas dans votre message ? je ne peux pas deviner, n’étant pas voyante 🙂 http://bit.ly/2dNOCai
        cordialement
        François

        Répondre
          1. François MOCQ Auteur de l’article

            alors je ne sais pas trop… vous avez bien un pi 3 ? Pi3+ dernière version de Raspbian avec mise à jour ?
            cette manip a été testé et réalisée plusieurs fois… essayez de repartir de zero sur un système « propre »…
            je n’ai plus la manip montée mais je pourrai la refaire si nécessaire
            cordialement
            François

          2. Stéphane

            Oui ; Pi3 avec Pixel (ré-installé hier après formatage de la carte SD au moyen de SDformatter4) et les sudo qui vont bien avant de commencer la manip. La seule chose installée depuis c’est la caméra raspi V2 et Motion, qui tourne en fond et sauvegarde en local sur la carte.
            Au cas où, je vais stopper Motion pour voir si ça change quelque chose et je reviendrai ici vous dire si ça a marché.
            Merci pour cet échange en tout cas.

    1. Stéphane

      Bonne nouvelle, ça fonctionne désormais très bien.

      Mauvaise nouvelle François, je vous ai dérangé pour rien ; j’avais deux fautes de frappe dans mon dnsmasq.conf et je n’avais pas consulté le systemctl status, malgré la recommandation en ce sens dans la console ; toutes mes excuses pour le « bruit » puisque ce sont bien ces deux fautes qui empêchaient (assez naturellement) le bon fonctionnement.

      En revanche, ce n’étaient pas elles qui provoquaient le message d’erreur relatif à l’impossibilité de créer l’interface « mon.wlan0 » relatée dans un de mes précédents messages ; en effet, j’ai toujours ce message d’erreur mais ça n’empêche visiblement pas le fonctionnement et le contrôle par un IPad.

      (et le fonctionnement de Motion en arrière plan, dont la responsabilité a été un temps envisagée par moi, est sans incidence)

      Encore toutes mes excuses pour le bruit et mes remerciements pour les tutos et l’accueil.

      Répondre
      1. François MOCQ Auteur de l’article

        Bonjour Stéphane
        bin non bonne nouvelle si vous avez résolu votre souci 🙂
        Linux est assez sensible à ces « petites » erreurs qui bloquent une install
        Celui qui n’en a jamais fait… le fera demain 😀
        bonne continuation
        cordialement
        François

        Répondre
  4. Karl

    Merci pour ce tuto qui m’a permis de prendre le contrôle de mon RaspBerry 3, qui lui-même prend le contrôle de mon Canon 350D avec le logiciel Entangle 🙂

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.