Sometimes, open source software doesn’t work. It works great initially for an application or platform, but with dependency module upgrades and new Linux versions, issues occasionally arise. The great news is that since it is open source, we have the opportunity to fix the issues and build on what was released. This happened to me while researching a way to add a WiFi connection update method to Raspberry Pi projects like the Espresso Connect. The goal is to allow an easy update to the WiFi connection of projects when the WiFi connection is changed. This blog described an easy and robust methodology for the Raspberry Pi Zero. At startup, if a WiFi connection is not detected, the Raspberry Pi will become its own WiFi access point and webserver. From a smart phone or labtop, a user can log onto the access point, which brings up a portal webpage that lists all the visible local WiFi networks. The user can pick the appropriate WiFi network and password for the local connection and press connect. The Raspberry Pi will then attempt to log onto the new network and all is well. If it is not successful, then it will become an access point again allowing another iteration attempt. The github repository wifi-connect-headless-rpi shows the code and provides an easy installation script that can also work with a WiFi connected headless Raspberry Pi. Of course it is open source and a step by step guide is given below.
Standing On a Firm Foundation
This WiFi connection methodology is based on open source projects that provide a firm foundation of work. The great work by Balena’s Wifi-Connect shows a project that worked on an earlier version of the the Raspberry Pi OS system and was written in Rust. I used this code in my Easy IoT Fleet Deployment of ETA Nixie Tube Clocks blog with the BalenaOS version of Linux. It still works with BalenaOS and containers, but has issues with the latest Raspberry Pi OS. To fix the OS issues, OpenAgricultureFoundation based its work also on the Balena project, but nicely rewrote the code in python. Since some time has passed and newer versions of the the Network Manager module and Raspberry Pi OS have come out, it also has issues. In this blog, the OpenAgricultureFoundation python-wifi-project project was forked and workarounds to the issues were found. The result is a version that works with the latest Network manager (version 2.2 as of the blog post) and the Raspberry Pi OS (Debian based 11 bullseye). In addition, a new installation method was written that allows installation using a remote ssh connection (i.e. headless). I expect that eventually both Balena and OpenAgricultureFoundation will update their projects giving the reader even more options to choose from.
Easy Installation over WiFi
Most of my Raspberry Pi projects don’t include a keyboard and mouse, so a new installation script was written to also allow installation over a Raspberry Pi Headless WiFi connection. The result is a quick and easy method to install this WiFi connection method to any Raspberry Pi project.
Creating a headless Raspberry Pi SD image
The steps below assume you have a Raspberry Pi project and are remotely connected over ssh. There are several ways to create this, but I found the Raspberry Pi Imager to be the easiest.
Step by Step
Log into the Raspberry Pi from an ssh connection. The command below assumes the raspberry pi name is headlesswifi. Use the name you used during the SD card imaging.
ssh pi@headlesswifi.local
Update the system
sudo apt-get update
Install Git. The default Raspberry Pi OS does not have git installed.
sudo apt-get install git
Clone the github repository
git clone https://github.com/drkmsmithjr/wifi-connect-headless-rpi.git
Change to the scripts directory
cd wifi-connect-headless-rpi/scripts
Run the Rpi Headless Script
sudo ./rpi_headless_wifi_install.sh
Reboot the system
sudo reboot
Find and connect to the Rpi-[hostname] access point from your smart phone or laptop, where hostname is the name of the Raspberry Pi.

If a browser does not open automatically, then open a web browser and go to address http://192.168.42.1. Choose the correct WiFi network and input the correct password then hit the Connect button.

Wait a couple of minutes and re-log into the raspberry pi from an ssh connection
ssh pi@headlesswifi.local
When you log in, then you know the wifi-connect-headless-rpi system is working
References:
- Balena’s Wifi Connect Project
- OpenAgricultureFoundation’s python-wifi-connect project
Please subscribe
Please subscribe and let me know your comments. Better yet, let me know what other projects you need. Have a great day. The surf was great two weeks ago, but I’m missing it this week.