Le petit Raspberry Pi Zero est un nano-ordinateur bien sympathique. Il dispose des capacités équivalentes au Raspberry Pi modèle 1 B+, pour un encombrement à peine supérieur à celui d’un ticket de métro.
Victime de son succès le Pi Zero s’écoule au compte-gouttes, mais il devient possible d’en obtenir un assez facilement pour 4$ (plus environ 4$ de port !).
Il existe de nombreux tutoriels de prise en main, à commencer par ceux – excellents – d’Adafruit. L’article ci-dessous permet une prise de contrôle uniquement par l’interface USB-net, sans souder de connecteur série, sans brancher de clavier (ce qui nécessiterait un adaptateur USB-A femelle micro USB-B mâle) ni même d’écran (ce qui nécessiterait un adaptateur HDMI femelle micro-HDMI mâle). Nous allons utiliser le Raspberry Pi Zero nu, et un simple câble USB micro-USB comme on en emploie pour connecter un téléphone portable et un PC.
Préparation de la carte micro-SD
Récupérons une version récente de la distribution Raspbian.
$ wget https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-01-10/2017-01-11-raspbian-jessie.zip $ unzip 2017-01-11-raspbian-jessie.zip $ ls -l 2017-01-11-raspbian-jessie.img -rw-r--r-- 1 cpb cpb 4371513344 janv. 10 17:59 2017-01-11-raspbian-jessie.img
Insérons une carte SD de capacité suffisante (au moins 8Go) dans le PC. Sur mon PC elle est reconnue comme un périphérique bloc /dev/sdc1
et automatiquement montée.
$ umount /media/${USER}/* $ sudo dd if=2017-01-11-raspbian-jessie.img of=/dev/sdc bs=1M
Une fois la copie terminée, j’extraie la carte et la réinsère dans le PC. Elle est alors automatiquement montée sur /media/$USER/boot
et /media/$USER/<numéro de partition>
.
Nous ajoutons une ligne à la fin du fichier
/media/$USER/boot/config.txt: [...] dtoverlay=dwc2
Et nous insérons une option modules-load
sur la ligne d’arguments du kernel. Attention, à ne pas insérer de retour-chariot, le fichier doit contenir une unique ligne.
/media/$USER/boot/cmdline.txt: modules-load=dwc2,g_ether dwc_otg.lpm_enable=0 console=[...]
Avec cette configuration, le Pi Zero présentera une interface USB-net, un réseau IP point-à-point avec le PC auquel il sera connecté. Pour initialiser l’adresse IP de cette interface, ajoutons le paragraphe suivant dans le fichier de configuration du réseau.
/media/$USER/<numero de partition>/etc/network/interfaces: [...] allow-hotplug usb0 iface usb0 inet static address 192.168.7.2 netmask 255.255.255.0 network 192.168.7.0 broadcast 192.168.7.255 gateway 192.168.7.1 dns-nameservers 80.67.169.12 # French Data Network DNS.
Le sous-réseau point-à-point sera donc en 192.168.7.x. Le Pi Zero prendra l’adresse 192.168.7.2. On suppose que le PC prendra l’adresse 192.168.7.1 et servira de passerelle vers Internet.
J’ai utilisé ici l’adresse IP d’un DNS ouvert de l’association FDN. Vous pouvez bien entendu utiliser tout autre résolveur. |
Une dernière modification va nous permettre d’activer automatiquement le démon SSH afin de pouvoir se connecter facilement au Pi Zero.
Nous ajoutons deux lignes avant la commande exit 0
dans le fichier rc.d
.
/media/$USER/<numero de partition>/etc/rc.d: [...] update-rc.d ssh enable invoke-rc.d ssh start exit 0
Nous pouvons démonter, extraire la carte micro-SD, l’insérer dans le Raspberry Pi Zero, et brancher ce dernier au PC en employant sa prise « USB » (et non pas « PWR IN »).
$ umount /media/$USER/*
Boot du Raspberry Pi Zero
Avant de brancher le Pi Zero, nous examinons la liste des interfaces réseau proposées par le PC.
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether b0:48:7a:83:3f:86 brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:1d:09:23:b5:8e brd ff:ff:ff:ff:ff:ff [...]
Le premier boot est un peu plus long que les suivants (environ une minute) car il étend automatiquement la taille du système de fichiers pour utiliser toute la carte SD. Avec une ligne comme « watch -n 1 ip link show
» sur votre PC, vous verrez apparaître l’interface USB-net.
$ watch -n 1 ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether b0:48:7a:83:3f:86 brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:1d:09:23:b5:8e brd ff:ff:ff:ff:ff:ff [...] 9: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 8a:f4:12:06:cd:84 brd ff:ff:ff:ff:ff:ff
Si votre PC présente directement les noms d’interface réseau du kernel, vous verrez apparaître l’interface usb0
. Si votre système affiche les noms « prédictibles » de systemd, vous verrez une interface du type enp0s29u1u3
dont les numéros dépendront du port USB sur lequel vous branchez votre Pi Zero.
Pour pouvoir communiquer avec le Raspberry Pi, nous devrons commencer par forcer une adresse IP côté PC. Pour cela nous pouvons utiliser le Network Manager :
Sélectionnez votre interface et passez à l’onglet « Paramètres IPv4 ».
Saisissez les adresses réseau, et cliquez sur « Routes ».
Cochez la case « Utiliser cette connexion uniquement pour les ressources de son réseau », puis cliquez sur « Ok ».
Vous pouvez maintenant tenter un « ping » vers le Raspberry Pi Zero :
$ ping 192.168.7.2 PING 192.168.7.2 (192.168.7.2) 56(84) bytes of data. 64 bytes from 192.168.7.2: icmp_seq=1 ttl=64 time=0.445 ms 64 bytes from 192.168.7.2: icmp_seq=2 ttl=64 time=0.293 ms 64 bytes from 192.168.7.2: icmp_seq=3 ttl=64 time=0.380 ms ^C --- 192.168.7.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.293/0.372/0.445/0.066 ms
Et à présent, nous allons nous connecter en utilisant SSH sur le Raspberry Pi Zero.
$ ssh pi@192.168.7.2 The authenticity of host '192.168.7.2 (192.168.7.2)' can't be established. ECDSA key fingerprint is SHA256:Ua2GcT+NJsw4VRdqHEs95IrGCWkwhI+SFFB+yfT4TMU. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.7.2' (ECDSA) to the list of known hosts. pi@192.168.7.2's password: raspberry The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Nov 25 23:28:21 2016 SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.4.34+ #930 Wed Nov 23 15:12:30 GMT 2016 armv6l GNU/Linux pi@raspberrypi:~ $ lscpu Architecture: armv6l Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 1 Model name: ARMv6-compatible processor rev 7 (v6l) CPU max MHz: 1000.0000 CPU min MHz: 700.0000
L’initialisation de la connexion par SSH est un peu longue, nous résoudrons cela ultérieurement.
Conclusion
Nous avons réussi à nous connecter sur le Raspberry Pi Zero depuis un PC sous Linux (l’équivalent depuis Windows serait tout à fait possible en utilisant PuTTY) sans autre accessoire qu’un câble USB de téléphone.
Pour le moment notre Pi Zero est un peu coupé du monde, car il ne dispose pas d’accès Internet. Nous allons configurer ceci dans le prochain article…
Bonjour, chouette article, merci!
Pour le ssh qui traîne, c’est probablement dû à l’impossibilité de résolution DNS.
Solution: ajouter manuellement l’adresse IP dans le fichier hosts.
/media/$USER//etc/hosts:
[…]
192.168.7.1 monpc
Bonne continuation.
Bonjour,
encore un superbe article, dommage que je n’ai pas de RPI-Zero pour jouer avec…
Pour les « lenteurs » de connexion ssh, je pense qu’il suffit de désactiver la résolution dns inverse du serveur ssh.
Dans /etc/ssh/ssh_config, il suffit d’ajouter:
UseDNS no
Oups, un commentaire un peu rapide… Bien entendu je parle du fichier ssh_config de la RPI-Zero, pas du poste de travail.
En effet, c’est la solution que j’avais adoptée initialement. Toutefois celle de Stéphane Peters ci-dessus est assez élégante également.
Bonjour,
Je viens de suivre vos instructions côté RPI et tout a bien fonctionné du premier coup. Même avec un pilote USB Gagdet côté Windows!
Toutefois, ça désactive le WiFi du RPI (j’ai un RPi Zero W). Je pense que c’est à cause de la configuration dans /etc/network/interfaces, qui devrait être mise à un autre endroit.
Qu’en pensez-vous? Des suggestions?
Merci