Collegare 2 Raspberry con un cavetto USB
Come collegare un RaspberryPiZero slave di un altro RaspberryPi, con solo cavo USB/microUSBOgni tanto può servire collegare due Raspberry insieme, in modo che si parlino via TCP, ma non si ha una rete ethernet a disposizione, nè tantomeno si vuole mettere un Wifi solo per questo.
Ad esempio uno dei due RaspberryPi deve potere fare da “server” o “client” per un secondo Raspberry.
Magari uno dei due Raspberry (o tutti e due) sono un raspberryPi Zero, senza wifi (alcuni), ma soprattutto senza prese Ethernet.
Dopo un pò di ricerca, abbiamo capito che si può fare via cavo USB, semplicemente. In pratica uno dei due Raspberry va configurati per avere IP-over-USB (USB OTG), e vanno dotati di due indirizzi IP fissi, e diversi, ma sulla stessa sottorete, per l’interfaccia usb0
.
Ora vediamo nel dettaglio come fare e cosa occorre:
- un RaspberryPi3 e un PiZero (o due Zero). Chiamiamoli
A
(master) eB
(slave) - essere in grado di accedere al raspberryPi3 (via console o SSH via wifi/ethernet)
- un cavo USB / USB micro (per intenderci, quelli che si usano per collegare Android a un PC)
- un lettore di microSD
- un computer “vero” con una connessione internet
Come prima il Raspberry PiZero (se volete anche il Pi3, ma non è necessario) va configurato per avere un ethernet-over-USB (modo OTG) e anche accesso ssh. Ci sono molti tutorial, uno tra tutti questo: Serial Gadget Adafruit.
Per farlo basta un computer con il lettore delle microSD (o un adattatore).
Poi noi consigliamo di impostare sui Raspberry due indirizzi fissi. Probabilmente funziona anche con il nome bonjour (a patto che abbiano un hostname diverso).
Per prima cosa configuriamo per primo il RaspberryPi3 A, Master
.
Per potere accedere al RaspberryPi3 da Computer ci sono vari modi:
1) Cavo USB/seriale TTY. Comodo, ma bisogna averlo
2) via Ethernet, usando la presa Ethernet del RaspberryPi3 (se è un Pi3) ed è già configurato.
3) prendendo la scheda SD e mettendola dentro il raspberryPi Zero. In questo caso va configurato per funzionare come OTG
Vanno bene tutte, noi partiamo dalla 3. Togliete la SD e mettetela nel RaspberryPiZero. Collegatelo al PC/MAC con cavo USB/MicroUSB e aspettiamo che faccia boot. Poi da un terminale (o se siete su Windows, via PuTTY) facciamo ssh dentro il Raspberry:
ssh pi@raspberrypi.local
(la password è raspberry
se non l’avete cambiata)
dopodichè configuriamo il nostro Raspberry per avere indirizzo fisso sull’interfaccia tcp-over-usb.
sudo su -
cd /etc/network
vi interfaces
il file deve avere in coda una sezione relativa a usb0
:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.2.2
netmask 255.255.255.0
network 192.168.2.0
gateway 192.168.2.1
dns-nameservers 8.8.8.8
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
auto usb0
allow-hotplug usb0
iface usb0 inet static
address 192.168.42.43
network 192.168.42.0
netmask 255.255.255.0
broadcast 192.168.42.255
La parte importante è l’ultimo blocco per USB (con allow-hotplug usb0
). Questo è l ‘indirizzo IP fisso per la connessione USB tra i due. Segnamocelo da qualche parte. Basta che sia un indrizzo nella sottorete 10.x.x.x
o 192.168.x.x
(o altre per reti locali, meglio se diverso da quella di en0
o wifi).
Dopodichè salviamo e facciamo reboot
. Se vogliamo controllare che l’IP sia corretto, al reboot colleghiamo il Raspberry PiZero appena configurato alla presa USB del nostro Mac o PC. Con un qualsiasi browser Bonjour Bonjour Browser per Mac OSX ad esempio, si dovrebbe vedere il nuovo IP. Per collegarsi via SSH all’IP configurato si deve, in genere, configurare il driver RNDIS del PC/Mac con un indirizzo fisso sulla stessa sottorete (vedete il nostro altro post).
Se vogliamo vedere che la scheda funzioni nel RaspberryPi3, inseriamola lì, e colleghiamoci via SSH o Console seriale e verifichiamo. Purtroppo senza collegare un dispositivo USB slave non si vedrà molto.
Ora configuriamo il secondo Raspberry, il B
, in modo simile. Siccome il B
sarà per forza un PiZero, non avremo la sezione relativa a eth0
visto che non c’è Ethernet e dunque modificando solo l’indirizzo statico per usb0
.
Nel nostro caso aggiungiamo questa sezione in /etc/network/interfaces
modificando l’IP address
e aggiungendo la sezione gateway
auto usb0
allow-hotplug usb0
iface usb0 inet static
address 192.168.42.42
network 192.168.42.0
netmask 255.255.255.0
gateway 192.168.42.1
broadcast 192.168.42.255
Poi spegnamolo.
A questo punto inseriamo le schede SD nei Rasperry corretti, colleghiamoli con un cavo USB/mini, da una USB qualsiasi del RaspberryPi3 alla presa USB (con label USB
) del Raspberry PiZero.
Poi alimentiamo il Raspberry A
e colleghiamoci via seriale o via SSH da un’altra interfaccia, e facciamo login.
Una volta entrati, lanciamo ifconfig usb0
, dovremo vedere qualcosa di simile
usb0 Link encap:Ethernet HWaddr ba:18:cc:c1:1f:82
inet addr:192.168.42.43 Bcast:192.168.42.255 Mask:255.255.255.0
inet6 addr: fe80::182d:a64b:9b94:9809/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:98 errors:0 dropped:0 overruns:0 frame:0
TX packets:141 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12185 (11.8 KiB) TX bytes:18791 (18.3 KiB)
A questo punto andiamo in SSH sul B
ssh pi@192.168.42.42
e dovremmo entrare dal Raspberry A
nel Raspberry B
, il tutto tramite il cavo USB.
Verifichiamo al contrario,
ping 192.168.42.43
deve funzionare.
A questo punto possiamo fare parlare i due sistemi via IP semplicemente con il cavo USB/USB micro, lungo anche qualche metro.
Referenze: