Working with multiple WiFi interfaces on a Raspberry Pi

Sometimes I like to connect to multiple WiFi networks on my Pi for... reasons.

Other times I like being able to use a better wireless interface than the built-in WiFi module on the Pi 4 or CM4, but don't want to add dtoverlay=disable-wifi in my /boot/config.txt and reboot.

Since Pi OS uses wpa_supplicant, it's actually easy to do this.

First, see what interfaces you have available, e.g. with ip a:

$ ip a
...
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether e4:5f:01:4e:f0:22 brd ff:ff:ff:ff:ff:ff
4: wlan1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 84:5c:f3:f6:e9:29 brd ff:ff:ff:ff:ff:ff

If you want to specify a network configuration that only applies to wlan1, create a file named /etc/wpa_supplicant/wpa_supplicant-wlan1.conf, and put your network credentials inside:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
    ssid="my-network-name"
    psk="my-network-password"
}

Obviously, substitute your own values where relevant.

It should try connecting on wlan1 automatically (you should be able to follow with dmesg --follow), but sometimes, for some strange reason, it won't, and you'll have to reboot the Pi to pick up the changes.

The logic for the naming of wpa_supplicant.conf files is located inside /usr/share/dhcpcd/hooks/10-wpa_supplicant. And if you need to manually bring down an interface, run sudo ifconfig wlan0 down. You can also try reloading the wpa_supplicant config manually with sudo wpa_cli -i wlan0 reconfigure, but sometimes that doesn't seem to work for me.

Comments

>... reasons.
I like to have a separate, non-WAN-connected wifi network for things like cameras and my local database server and whatnot. Doesn't matter if there is a gaping hole in the device's security, so long as nobody can touch it... I guess.

dmesg --follow is a new one for me, I knew there must have been some way so seeing more wifi connection info from the command line. Thanks for sharing!
(At this point I should probably start a text file for all of the helpful commands I pick up in my Internetz travels.)

Heh, my blog is basically that text file. I've had to do this like 5 times and every time I forget exactly what the syntax is for the supplicant file naming. Decided I should just document it—now I can DDG or Google "geerling wifi raspberry pi" and after a couple days it'll be in the index ;)

Hi Jeff,

FYI, ifconfig is deprecated in favor of the ip (iproute2) command. The equivalent ip command is ip link set dev wlan0 down.

Love what you're doing, keep it up!

Kind regards, Ben