IDLabs-IoT Le site dédié aux objets connectés

Un site des laboratoires pédagogiques de l'école CampusID

Présentation de l’USB OTG et mise en place de l’IP over USB entre un Raspberry pi 3 et un Raspberry pi 0

Posted on 11 mars 2018  in Non classé

Tutoriel - Présentation de l’USB OTG et mise en place de l’IP over USB entre un Raspberry pi 3 et un Raspberry pi 0

Sommaire :

  • Présentation de l’USB OTG
  • Présentation de l’IP-over-USB
  • Mise en place de l’IP-over-USB

Présentation de l’USB OTG

USB OTG, également connu sous le nom USB On-The-Go, est une extension de la norme USB 2.0 qui permet aux périphériques USB d'avoir davantage de flexibilité dans la gestion des connexions USB. En effet, grâce à l'OTG, deux périphériques peuvent échanger des données directement, sans avoir besoin de passer par un ordinateur hôte.

La norme OTG, initialement publiée fin 2001, est devenue un standard de facto.

Les smartphones récents sont donc quasiment toujours équipés de cette technologie (sauf exceptions). On peut donc par exemple transférer des fichiers d’une clé USB ou d’un disque dur externe directement sur son smartphone ou encore transformer son smartphone en station d’accueil pour d’autres appareils.

D’autres utilisations sont également envisageable tel que :

    • L’utilisation d’une manette de console USB (Xbox, Playstation, etc) pour les jeux smartphone
    • L’utilisation d’un micro plus puissants dans le cadre d’une interview pour un journaliste

Enfin l’USB OTG permet aussi la mise en place de l’IP-over-USB, mais qu’est ce que c’est ?


Présentation de l’IP-over-USB

L’IP-over-USB permet d’obtenir une connexion réseau sur une machine équipée de l’USB OTG simplement par branchement USB avec une autre machine, elle, connectée au réseau.

Les raspberry pi (la version 3 et la version 0) étant équipés d’USB OTG nous allons pouvoir mettre en oeuvre cette technologie qu’est l’IP-over-USB.


Mise en place de l’IP-over-USB

Matériel nécessaire :

  • Raspberry pi 3
  • Raspberry pi 0 W
  • Cable USB vers mini-USB
  • Deux cartes SD

Une fois en possession du matériel nécessaire il va falloir récupérer l’image de raspbian à installer sur nos raspberry.

Sous Linux:

$ 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.

$ 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 Raspberry Pi 3 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 Raspberry Pi 3 en employant sa prise “USB” (et non pas “PWR IN”).

$ umount /media/$USER/*

*Photographie d'un RPI0 branché à un RPI3* (voir fichier word envoyé car fichiers trop volumineux pour WordPress même après compression).

 

Avant de brancher le Pi Zero, nous examinons la liste des interfaces réseau proposées par le RPI3.

$ 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 RPI3, 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 RPI3 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é RPI3.

Se rendre dans le terminal et taper :

1

sudo nano /etc/network/interfaces

Une fois le fichier ouvert, recherchez la ligne

iface eth0 inet dhcp

et la remplacer par:

1

2

3

4

5

6

7

8

9

10

11

iface eth0 inet static

address 192.168.1.x

 netmask 255.255.255.0

 network 192.168.1.0

 gateway 192.168.1.1

*informations à modifier en fonction de votre réseau

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


Sources :

0 thoughts on “Présentation de l’USB OTG et mise en place de l’IP over USB entre un Raspberry pi 3 et un Raspberry pi 0”

Laisser un commentaire

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