USB Wifi dongle for raspberry pi zero w

USB wifi adapters are not very user-friendly for Linux devices. Most of the adapters’ drivers are neither preinstalled nor will be automatically installed for your Linux OS. Fortunately, modern Raspberry Pi (such as Pi 3, 4, and zero w) models come with onboard wifi. Yet you may also find it handy to have additional wifi systems for some projects.

Environment

Hardware: Raspberry Pi Zero W, USB wifi dongle Realtek 8812CU and RTL8188FTV

Kernel: 5.10.17+

OS: Raspbian GNU/Linux 10 (buster)

Finding drivers/ firmwares for your USB dongle

I previously bought a wifi dongle running on the chip Realtek 8821CU and wanted to build a wifi repeater for my raspberry pi zero w. However, there is no easy install package for raspberry pi zero. I have tried several installers following the steps on Github.

(https://github.com/brektrou/rtl8821CU),

(https://github.com/uzh-rpg/rpg_dwa171_wifidongle),

(https://github.com/whitebatman2/rtl8821CU) and

(https://github.com/morrownr/8821cu). None of them works and I suspect that the drivers do not support armv6 CPU which the Pi zero is using. If you are planning to install it on an armv7 device, please give them a try.

Then I decided to give up and bought another dongle running on an RTL 8188 FTV chip and it works after installing the firmware.

Configure your wifi adaptor

Most of the following content is extracted from (https://www.raspberrypi.org/forums/viewtopic.php?t=44044). To sum up,


Connect your wifi USB adaptor and check your current network status by ifconfig -a

pi@raspberrypi:~ $ ifconfig -a
 lo: flags=73  mtu 65536
         inet 127.0.0.1  netmask 255.0.0.0
         inet6 ::1  prefixlen 128  scopeid 0x10
         loop  txqueuelen 1000  (Local Loopback)
         RX packets 0  bytes 0 (0.0 B)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 0  bytes 0 (0.0 B)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 wlan0: flags=4163  mtu 1500
         inet 192.168.0.187  netmask 255.255.255.0  broadcast 192.168.0.255
         inet6 1234::1234:1234:1234:1234  prefixlen 64  scopeid 0x20

         ether 12:34:56:12:34:56  txqueuelen 1000  (Ethernet)
         RX packets 566  bytes 76882 (75.0 KiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 363  bytes 56329 (55.0 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

If there are multiple wlan such as wlan0 as well as wlan1. Congratulations!! your Pi could recognize your USB adaptor. Usually, wlan0 is your onboard wifi (if your device has one) and the other wlan are your additional wifi systems. If your device does not include onboard wifi, then wlan0 is your external wifi USB dongle.


If wlan1 does not show on ifconfig -a, like me, then run a lsusb.

pi@raspberrypi:~ $ lsusb                                                        Bus 001 Device 002: ID 0bda:f179 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Device 002 f179 Realtek Semiconductor Corp is the wifi dongle. So at least the wifi dongle is working. Otherwise, there will be nothing about it.


Then run a lsmod to check whether your kernel modules are currently loaded.

pi@raspberrypi:~ $ lsmod
 Module                  Size  Used by
 aes_arm                16384  1
 aes_generic            40960  1 aes_arm
 cmac                   16384  1
 bnep                   20480  2
 hci_uart               40960  1
.
.
.

For me, there is nothing about my USB adaptor. So it could be concluded that the driver is not installed on my Raspberry Pi Zero W.

The firmware-packages for the more common devices are as follows:
firmware-ralink for Ralink devices (RT5370/RT3070/etc.)
firmware-realtek for Realtek devices (RTL8188CUS/etc.)
firmware-atheros for Atheros devices.

Run apt-get install <firmware-package> to install the firmware on Raspbian (renamed to Raspberry Pi OS).

Unfortunately, my Realtek 8812CU and RTL8818FTV drivers are not included in the firmware package. So I have to go for other options. Luckily, MrEngman (https://www.raspberrypi.org/forums/viewtopic.php?t=241185) wrote a script to determine your USB dongle and kernel version and install your suitable driver. Run the following commands:

$ sudo wget http://downloads.fars-robotics.net/wifi-drivers/install-wifi -O /usr/bin/install-wifi
$ sudo chmod +x /usr/bin/install-wifi
$ sudo install-wifi

I have tried my RTL8188FTV and Realteck 8821CU. The 8188 works, but not the 8821. MrEngman’s script cannot recognize my 8821.

Your wifi module is unrecognised.
**** Unable to identify your wifi module ****

If anyone knows how to install the Realtek 8821CU driver on a raspberry pi zero, please leave a comment.

If MrEngMan’s script could recognize your wifi dongle, it should return something like my 8188:

Your wifi module is Bus 001 Device 003: ID 0bda:f179 Realtek Semiconductor Corp.
And it uses the 8188fu driver.

If your driver has been installed correctly, you should now see your firmware’s kernel module listed on lsmod

pi@raspberrypi:~ $ lsmod
 Module                  Size  Used by
 rtl8188fu            1306624  0
 aes_arm                16384  1
 aes_generic            40960  1 aes_arm
 cmac                   16384  1
 bnep                   20480  2
 hci_uart               40960  1
.
.
.

As well as anadditionl wlan1 on ifconfig -a

pi@raspberrypi:~ $ ifconfig -a
 lo: flags=73  mtu 65536
         inet 127.0.0.1  netmask 255.0.0.0
         inet6 ::1  prefixlen 128  scopeid 0x10
         loop  txqueuelen 1000  (Local Loopback)
         RX packets 0  bytes 0 (0.0 B)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 0  bytes 0 (0.0 B)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 wlan0: flags=4163  mtu 1500
         inet 192.168.0.187  netmask 255.255.255.0  broadcast 192.168.0.255
         inet6 1234::1234:1234:1234:1234  prefixlen 64  scopeid 0x20

         ether 12:34:56:12:34:56  txqueuelen 1000  (Ethernet)
         RX packets 2026  bytes 875332 (854.8 KiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 886  bytes 117991 (115.2 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 wlan1: flags=4163  mtu 1500
         inet 192.168.0.179  netmask 255.255.255.0  broadcast 192.168.0.255
         inet6 1234::1234:1234:1234:1234  prefixlen 64  scopeid 0x20

         ether 12:34:56:12:34:56  txqueuelen 1000  (Ethernet)
         RX packets 158  bytes 44279 (43.2 KiB)
         RX errors 0  dropped 5  overruns 0  frame 0
         TX packets 36  bytes 5029 (4.9 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

As well as iw dev:

pi@raspberrypi:~ $ iw dev
 phy#1
         Interface wlan1
                 ifindex 3
                 wdev 0x100000001
                 addr 12:34:56:12:34:56
                 ssid yourwifissid
                 type managed
                 txpower 12.00 dBm
 phy#0
         Unnamed/non-netdev interface
                 wdev 0x2
                 addr 12:34:56:12:34:56
                 type P2P-device
                 txpower 31.00 dBm
         Interface wlan0
                 ifindex 2
                 wdev 0x1
                 addr 12:34:56:12:34:56
                 ssid yourwifissid
                 type managed
                 channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
                 txpower 31.00 dBm

Reminder

I do not recommend editing /etc/network/interfaces. There is no need to edit the file for a Raspberry Pi Zero running Raspberry Pi OS lite. Rather, do your modification on /etc/wpa_supplicant/wpa_supplicant.conf. If you have installed the driver correctly, the network will automatically pop up in ifconfig -a.

Leave a Reply

Your email address will not be published. Required fields are marked *