🌐 Project Mesh
My university capstone project was to develop Project Mesh, an android app to create an ad-hoc mesh network in remote areas. My team worked with the Canadian organisation Grey-Box to develop this application.
We worked on this project from March-June 2024, the source code was published to GitHub under the MIT License.
💡 Features
- Connect phones into a mesh network by scanning a QR code
- Update your display name
- Send messages directly other online users
- Broadcast messages to everyone
- Send files
- All of the above, without an Internet connection!
Screenshots
Demo
Showcase
Some grads working at Motorola were quite interested! Unfortunately the rest of my team couldn’t come to present. Shoutout to my mate Steven for keeping me company in the booth next to me!
Testing
A lot of time was spent with these three old phones, but as you can see we have 3 devices connected (this is an older version) and during group meetings we had 5-6 connected at once.
The devices in the photo are a Samsung Galaxy A30 (top left), Samsung Galaxy S5 (bottom) and a Lenovo Tab (top right).
🔧 Behind the scenes
Meshrabiya
We utilised the Meshrabiya library to manage networking, created by Mike Dawson. It uses WiFi Direct to create hotspots, and utilises the legacy connection mode of these hotspots to allow an Android device to simultaneously create and connect to another hotspot. The library then manages data transmission over multiple hops, as well as sharing the SSID and passphrases to all of the nodes in the network, allowing automatic reconnection.
Using it with Project Mesh
Each phone is assigned a random IP address in the 169.254.0.0/16
range when the app initialises. To get around this, I implemented a UUID system.
This UUID is stored on the device, and every 5 seconds it each device broadcasts their name and current IP address. This allows devices to infer the last time seen ‘online’ as well as which IP to send a message to.