Connect two RaspberryPI via USB
Need to connect one RaspberryPi to a PiZero, without wifi or ethernet? Use the USB!Sometimes it’s useful to have one Raspberry talk via IP to a second RaspberryPiZero. Maybe one it’s acting as a slave to the second, or they need to synchronize some data or operations.. anyway, we would like for them to be able to communicate, but we don’t want to mess with another wifi or an ethernet dongle.
It’s really easy, basically it boils down to enable the so-called USB OTG mode on both Raspberries, even the non Zero, and configure the usb0 interface with a static, comaptible IP address, on both machines. Then it’s possible for them to talk via IP over the USB cable.
Here is a detailed description. To proceed you need:
- one RaspberryPi3 and a PiZero (or two Zero). Let’s call ‘em A (master) and B (slave)
- be able to access
Aeither via serial console or wifi/ethernet with ssh - an USB / USB micro (the one usually used to connect Android to a PC). The cable must be able to carry data, not only power.
- a micro SD reader
- a “real” working computer, best if connected to the internet
First of all, configure the two Raspberries to have a working ethernet-over-USB. There are many tutorials on line on the USB OTG configuration, one is: Serial Gadget Adafruit.
You will need just a PC/MAC and a microSD card reader. Please note that you have to configure also the RaspberryPi3 that way,
Once done, we suggest to set up a fixed IP address on both. Maybe it will also work with the Bonjour (Avahi) name, if thei both have a different one, but we haven’t tried.
So, first we configure the A Raspberry. If it’s a Pi3 it could be even more complicated to congiure it :)
To access it you have various ways:
1) a USB/serial TTY cable. Handy, but not everybody has one.
2) using Ethernet on a Pi3 or Wifi, if either is configured
3) taking the SD card and inserting it into the RaspberryPi Zero.
We choose number 3). Stick the SD card in the Zero, and connect it to the PC/MAC with the USB/MicroUSB cable. Use the micro port labeled “USB” on the Zero. Then do ssh to enter it.
ssh pi@raspberrypi.local (password is raspberry if you haven’t changed it)
then we configure the raspberry to have a fixed IP over USB.
sudo su -
cd /etc/network
vi interfaces
this file must have, at the end, a section for the interface 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
The important part is the last USB block (with allow-hotplug usb0). This is the static IP address used to link the wto Raspberries. Write it down somewhere, we just need any address in the 10.x.x.x or 192.168.x.x subnetworks (or the like, just be careful they not overlap with the one for eth0 or wlan0).
Save and reboot. To check the address is correct, connect the PiZero to your PC/Mac after having configured its RNDIS interface to have a static IP on the same subnetwork.
Or use a Bonjour Browser that will display the IP addresses also, for example Bonjour Browser per Mac OSX.
To connect via SSH to the above IP, first configure the PC/MAC with a static address, then try:
ssh pi@192.168.42.42
Now we can configure the second Raspberry, the B one. It’s very similar. Since it’s a Zero, it won’t have a eth0 section. Just copy the usb0 section and edit the address and gateway in /etc/network/interfaces like that:
auto usb0
allow-hotplug usb0
iface usb0 inet static
address 192.168.42.42
netmask 255.255.255.0
network 192.168.42.0
broadcast 192.168.42.255
gateway 192.168.42.1
Now we can finally connect the two Raspberry. Get the OTG USB cable, connect the big USB plug into one USB socket on the A Raspberry, and plug the small end into the PiZero, in the port labeled ‘USB’.
Then power up the A via TTY, or USB power, and log into it via SSH or console.
Once inside, type ifconfig usb0, we should see something similar
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)
Then we can
ssh pi@192.168.42.42 and we should log onto Raspberry B from A, just using the USB cable .
Once in A we can do a fouble check:
ping 192.168.42.43 should work.

From now on the two systems can talk to each other via an off-the shelf USB OTG cable.
External links: