Link Up Box: a Local WiFi Chat & Game Hub for Off-Grid Travel
by SUKUNA in Circuits > Wireless
684 Views, 9 Favorites, 0 Comments
Link Up Box: a Local WiFi Chat & Game Hub for Off-Grid Travel
The Story Behind the Link Up Box:
The signal bars on my phone disappeared somewhere on a mountain road, and I didn't notice until I actually needed them. I was hours past the last town with a working tower, on a trip I'd half taken to escape my inbox and half taken just to see somewhere quiet. The screen still lit up when I touched it. It just had nothing to say to me anymore — no messages coming in, no way to send one out, no maps, no way to tell anyone where I was. My phone had become, for all practical purposes, a small glass brick in my pocket.
I want to be honest about how that felt, because it's the whole reason this project exists. It wasn't peaceful. It was lonely in a very specific, modern way — the loneliness of being cut off from a world you're used to always being able to reach.
And the strange part was, I wasn't actually alone. There was a small roadside dhaba a little further down, and a couple of other travelers were sitting there, clearly stopped for the same reason I was — chai, rest, a break from riding through nowhere in particular. One of them was refilling a water bottle at the same tap. Another had a trekking bag with tags from places I hadn't been. I wanted to talk to them. Not for a lifelong friendship, not to exchange numbers and follow-ups — just to ask where they were headed, how the road ahead looked, maybe even challenge someone to a quick game to kill twenty minutes. That's such a normal, human thing to want.
But there was a second, quieter problem sitting right behind the first one. To actually talk to a stranger like that these days feels like it requires handing over a piece of yourself first — your number, your Instagram, your WhatsApp, something that outlives the conversation and follows you home. I didn't want that. I just wanted the twenty minutes. I wanted a connection that was allowed to be temporary, without it costing either of us our privacy.
That's the exact moment this idea showed up: what if the people standing near me right now, with no network of their own, could build one together — just for us, just for now?
I've spent a lot of time working with ESP32 boards on other projects, and I knew they were capable of one small, often-overlooked trick: an ESP32 can create its own WiFi network out of thin air, no internet connection required. It doesn't need a SIM card. It doesn't talk to a cell tower. It doesn't send anything to a server sitting in some data center somewhere. It just switches on and starts broadcasting its own tiny signal, and any phone nearby can see it and join, the same way you'd join any WiFi network. I started thinking of it less like a piece of electronics and more like a tiny local communication tower — not a real cellular tower, nothing that grand, just a small digital meeting point that only works because a few people happen to be standing close enough to reach it.
That idea became the Link Up Box. It's a compact ESP32 unit built into a simple white 3D-printed case, small enough to sit in one palm. On top there's a small OLED window into what the box is doing — it shows the network it's broadcasting, "ESP32-CHAT," how many phones are currently connected, how many people are active, and whatever game is running at that moment. Switch it on, and it lights up with a soft blue glow through the case, the counts on the screen sitting at zero, waiting for someone to show up.
Here's what actually happens next, in that same roadside scenario I keep coming back to. I set the box on the table between us. I tell the stranger with the trekking bag, "connect to ESP32-CHAT." No app to download, no account to create, no sign-up screen asking for an email address. Their phone finds it the way it finds any WiFi network. They open a browser, and suddenly we're both inside a small, temporary space that exists only because our two phones are close enough to the box to hear it. There's a public chat, if there are a few of us and someone wants to throw a message to the whole group — does anyone know if the pass ahead is open. There's private chat, if it's just the two of us and the conversation gets more specific. And there are games — a quick duo match if it's just us, or a team game if a whole group of stranded travelers decides to make an afternoon of it. Nobody asked for a phone number. Nobody added anybody anywhere. When we leave the dhaba, the connection leaves with us, exactly as it should.
I got to test that properly a few weeks later, on a long train ride through a stretch of hills where the signal just gives up for hours at a time. Everyone in the compartment was doing the same quiet nothing — checking a phone, finding no bars, putting it away again. I switched the box on and set it on the little pull-down table between the berths. Within a few minutes, the student across from me had joined "ESP32-CHAT" out of pure curiosity, and once the two of us had played a round of a duo game, an aunty two seats down connected too, mostly to ask what the strange blue light was. Four hours of dead signal turned into four hours where a compartment full of strangers actually talked to each other — no numbers exchanged, nothing that had to mean anything once we all got off at our own stations.
That's really the whole idea, and it isn't limited to mountain roads or train compartments. It works the same way at a campsite with no signal, on a trek between villages, at an outdoor event where a few thousand phones are fighting over one weak tower, or just in a basement room where WiFi never quite reaches. Anywhere people are physically close but digitally cut off, the box gives them a place to be close in both ways at once.
I didn't build the Link Up Box to get people back onto the internet. I built it because I realized, sitting at that roadside dhaba with no signal at all, that the internet was never really what I was missing. I was missing the people three feet away from me. The goal was never to connect people to the whole world — it's to connect people to the people already standing right next to them, even when there is no network left at all.
Supplies
Here are the components and materials I used to build the Link Up Box:
- ESP32 Development Board – The main controller that creates the local Wi-Fi network and runs the chat and gaming system.
- 0.96" OLED Display – Used to show the hotspot name, IP address, connected users, and other system information.
- Slider Switch – Used as the main power switch for turning the Link Up Box ON and OFF.
- 400 mAh Lithium-Ion Battery – Provides portable power to the device.
- TP4056 Type-C Charging Module – Used to recharge the lithium-ion battery through USB Type-C.
- Blue LEDs – Used as status indicators for the device.
- Bambu Lab A1 Mini 3D Printer – Used to print the custom enclosure.
- Natural White PLA Filament – Used to 3D print the enclosure.
Tools & Other Materials
- Jumper/connecting wires
- Soldering iron and solder
- Small screws for enclosure assembly
I chose these components to keep the Link Up Box compact, portable, rechargeable, and easy to build, while still providing everything needed for an independent local communication network.
UNDERSTANDING THE CODE
Core stack
- WiFi.h + DNSServer.h → creates open Wi-Fi hotspot ("LET'S CONNECT") + captive portal (all DNS → ESP32 IP)
- WebServer.h → HTTP server on port 80
- Adafruit_SSD1306 + GFX → 128x64 OLED status display over I2C (pins 21/22)
- No filesystem/DB — everything lives in fixed-size RAM arrays, wiped on power loss
Data structures
- User — username, session token (7-digit random), admin flag, last-seen heartbeat
- Group — id, name, join code, comma-separated member list
- Message — sender, type (public/private/group/game/system), target, text, timestamp
- ImposterGame — state machine (0 Lobby→1 Playing→2 Voting→3 Finished), players, imposter, votes
- TicTacToe — up to 5 concurrent games, board as char[10], turn tracking
Limits: 20 users, 5 groups, 50 messages (circular buffer), 5 TTT games
Key helper functions
- generateSessionToken() — random 7-digit login cookie
- getUserByToken()/getSessionCookie() — auth on every request
- isUserInList() — comma-delimited membership check (avoids substring collisions)
- deleteUser() — cascades cleanup (admin reassignment, group removal, game cleanup)
Web UI
- HTML/CSS/JS stored in Flash via PROGMEM
- Login page → Main chat page (tabs: Public/Private/Groups/Game)
- loadData() polls /api/data every 2s → also acts as heartbeat (15s timeout = auto-kick)
Imposter game logic
- Lobby (3+ players) → Admin starts → 60s Playing phase → 30s Voting phase → Finished
- Tie or wrong vote = Imposter wins; correct vote = Crewmates win
loop() design
- Never uses delay() — purely millis()-based timing
- Each cycle: handle 1 DNS query, handle 1 HTTP request, check for timed-out users, advance game state machine, refresh OLED every 2s
Captive portal flow: connect to Wi-Fi → DNS redirected to ESP32 → login page loads automatically → register → poll every 2s for chat/game updates.
Uploading the Code to the ESP32
Follow these steps to program your ESP32 and start the Link Up Box:
- Install Arduino IDE
- Download and install the Arduino IDE on your computer.
- Install ESP32 Board Support
- Open Arduino IDE and go to Tools → Board → Boards Manager. Search for ESP32 and install the ESP32 board package.
- Install the Required Libraries
- Open Sketch → Include Library → Manage Libraries and install:
- Adafruit GFX Library
- Adafruit SSD1306
- Open the Project Code
- Open the provided espchat.ino file in Arduino IDE. This is the firmware that runs the Wi-Fi network, chat, groups, and games.
- Connect the ESP32
- Connect the ESP32 to your computer using a USB data cable.
- Select the ESP32 Board
- Go to Tools → Board and select the ESP32 board that matches your hardware. For a common ESP32 development board, you can select an appropriate ESP32 Dev Module option.
- Select the COM Port
- Go to Tools → Port and select the COM port assigned to your ESP32.
- Compile and Upload
- Click the Upload button in Arduino IDE. The code will first compile and then be transferred to the ESP32.
- Wait for the Upload to Finish
- When Arduino IDE shows “Done uploading”, the firmware has been successfully installed. If the IDE asks you to press the BOOT button during uploading, hold the BOOT button on the ESP32 until the upload begins.
- Restart the ESP32
- Press the EN/RESET button or disconnect and reconnect the USB cable. The ESP32 will start the Link Up Box firmware.
- Check the Wi-Fi Network
- Open Wi-Fi settings on your phone or laptop. You should see the network:
- LET'S CONNECT
- The ESP32 creates this network itself, so no internet connection is required.
- Connect to the Link Up Box
- Connect your phone or laptop to LET'S CONNECT.
- Open the Local Interface
- Open a web browser and enter the ESP32's local address. The device hosts the interface directly from the ESP32, so you are communicating with the local server rather than an internet website.
- Create a Username
- The first page asks you to enter a username. Enter a nickname and select Join Server. The system creates a temporary session for you.
- Start Connecting
- After joining, you can use the Link Up Box interface to access:
- Public Chat – communicate with everyone connected.
- Private Chat – chat directly with another user.
- Groups – create or join local groups.
- Imposter Game – play a multiplayer game with other connected users.
- Tic Tac Toe – challenge another user to a one-to-one game.
- Connect More People
- Other nearby users can repeat the same process: connect to LET'S CONNECT, open the local interface, choose a username, and join the network. The ESP32 keeps track of active users and removes inactive sessions automatically.
Downloads
Understanding the Connections
Follow these connections to assemble the electronics of the Link Up Box:
- OLED Display → ESP32OLED VCC → ESP32 3.3V
- OLED GND → ESP32 GND
- OLED SDA → ESP32 GPIO 21
- OLED SCL → ESP32 GPIO 22
- Li-ion Battery → TP4056Battery positive (+) → TP4056 B+
- Battery negative (−) → TP4056 B−
- TP4056 → Slider SwitchTP4056 OUT+ → one terminal of the slider switch
- The other terminal of the slider switch → ESP32 VIN/5V
- TP4056 OUT− → ESP32 GND
- Blue LED Power IndicatorLED anode (+) → switched positive power line
- LED cathode (−) → GND
- Use a series resistor with the LED to limit current.
- Power Flow
- Battery
- ↓
- TP4056
- ↓
- Slider Switch
- ↓
- ESP32
- ├── OLED
- └── Blue LED
Important
- Do not connect the TP4056 OUT+ directly to the ESP32 3.3V pin.
- The ESP32 should receive the battery supply through the board's appropriate VIN/5V input or through a suitable voltage regulator.
Designing the Enclosure in Autodesk Fusion 360
The heart of the Link Up Box is its custom 3D-printed enclosure, which holds the electronics together in a compact and portable body.
I designed the enclosure in Autodesk Fusion 360 as two separate parts:
- ESPCHAT — The main body of the enclosure, designed to hold the ESP32, battery, TP4056 charging module, wiring, and other components.
- ESPCHAT LID — The top cover that closes the enclosure and protects the electronics while providing the required openings for the display, switch, LEDs, and charging port.
The design was created with three main goals:
- Compact and portable — Keep the complete system small enough to carry easily.
- Easy access — Provide openings for the OLED display, slider switch, LED indicator, and USB Type-C charging connection.
- Support-free printing — Both parts are designed to be printed without support structures, making the printing process simpler and cleaner.
3D Printing the Enclosure
After finishing the ESPCHAT enclosure and ESPCHAT LID in Fusion 360, I 3D printed both parts using my Bambu Lab A1 Mini and Natural White PLA.
Print Settings
- 3D Printer: Bambu Lab A1 Mini
- Filament: Natural White PLA
- Nozzle: 0.4 mm
- Layer Height: 0.20 mm
- Wall Loops: 3
- Infill: 15%
- Infill Pattern: Gyroid
- Top Shell Layers: 5
- Bottom Shell Layers: 5
- Supports: Not required
- Build Plate: Textured PEI Plate
- Print Orientation: Flat side placed on the build plate
- Bed Adhesion: Brim not required
- Print Speed: Standard PLA profile
- Nozzle Temperature: As set by the Bambu PLA profile
- Bed Temperature: As set by the Bambu PLA profile
The enclosure was designed specifically so that both ESPCHAT and ESPCHAT LID can be printed without support material. This keeps the print clean and reduces both material usage and post-processing.
Assembling the Link Up Box
After printing the ESPCHAT enclosure and ESPCHAT LID, it is time to assemble the electronics and secure everything inside the enclosure.
- Install the TP4056 Charging Module
- Place the TP4056 inside the enclosure and align the USB Type-C port with the charging opening.
- Install the Slider Switch
- Fit the slider switch into its dedicated opening and solder the power connections securely.
- Connect the Battery
- Solder the 400 mAh Li-ion battery to the TP4056:
- Battery + → B+
- Battery − → B−
- Connect the Power Line
- Connect the TP4056 power output through the slider switch and then to the ESP32 power input.
- Install the ESP32
- Place the ESP32 inside the enclosure and solder the required power and ground connections.
- Install the Blue LED
- Place the blue LED in its opening and solder it with a suitable resistor. This LED works as the power/ON indicator.
- Install the OLED Display
- Mount the 0.96-inch OLED into the opening on the ESPCHAT LID and connect:
- VCC → 3.3V
- GND → GND
- SDA → GPIO 21
- SCL → GPIO 22
- Solder All Connections
- Carefully solder the component connections and check each joint for good electrical contact. Avoid leaving loose wires or exposed connections that could cause a short circuit.
- Secure the Components with Hot Glue
- Once the connections are tested, use a hot glue gun to secure the TP4056, ESP32, LED, and other components inside the enclosure. This helps prevent the components and wires from moving during use.
- Arrange the Wires
- Carefully route the wires so that they remain clear of the lid and do not interfere with the enclosure closing.
- Close the Enclosure
- Place the ESPCHAT LID on the main body and secure it using screws.
- Power On and Test
- Turn on the slider switch. The blue LED should light up, the OLED should start displaying information, and the ESP32 should create the LET'S CONNECT Wi-Fi network.
- Tip: Test the complete circuit before applying hot glue and closing the enclosure. This makes it much easier to fix any wiring issue during assembly.
How to Use the Link Up Box & Experience the UI
->Power ON the Link Up Box
Turn on the slider switch. The blue LED indicates that the device is powered on.
->Connect to the Wi-Fi
Open Wi-Fi settings on your phone, tablet, or laptop and connect to “LET'S CONNECT”.
->Automatic Web Interface
Once connected, the device automatically redirects you to the Link Up Box web interface through the ESP32's local web server.
->Open Manually if Needed
If the automatic redirect does not appear, open a browser and enter:
192.168.4.1
This is the ESP32's local address. The built-in DNS server redirects requests to the ESP32 web interface.
->Join the Network
Enter a username to join the Link Up Box. You can use a nickname without sharing personal contact information.
->Explore the UI
The main interface provides Public Chat, Private Chat, Groups, and Games for interacting with other connected users.
->Start Chatting and Playing
Send messages, start private conversations, join groups, or challenge another user to Tic Tac Toe. You can also join the Imposter multiplayer game with other connected users.
->Enjoy Local Communication
Everything takes place within the Wi-Fi network created by the ESP32—no internet or cellular network is needed.
Charging and Battery Backup
- The Link Up Box is powered by a 3.7V 400 mAh rechargeable Li-ion battery, making it portable and suitable for off-grid use.
- The battery is connected to the TP4056 Type-C charging module, which allows the device to be recharged through the USB Type-C port.
- To charge the battery, connect a 5V USB power source to the Type-C port on the TP4056.
- Once fully charged, the battery provides approximately 5 hours of backup during normal use.
- The slider switch allows you to turn the Link Up Box ON or OFF when it is not being used, helping conserve battery power.
- The rechargeable battery means the Link Up Box can operate independently without a computer, wall outlet, or power bank.
- This makes the device especially useful for travel, camping, trekking, and remote areas where electricity and network connectivity may not be available.
Note: Actual battery backup may vary depending on the number of connected users, Wi-Fi activity, display usage, and other operating conditions.
Conclusion: Why This Matters
Conclusion: Why This Matters
The Link Up Box started with a simple idea: what if people could connect with each other even when there is no internet or mobile network?
By combining an ESP32, a rechargeable battery, and a custom 3D-printed enclosure, I created a small local network where nearby people can chat, have private conversations, create groups, and play games without depending on the outside network infrastructure.
But for me, this project is about more than technology. It is about creating temporary connections between people. You might be traveling alone, exploring a remote place, camping with friends, or simply surrounded by strangers. The Link Up Box gives you a way to interact without needing to exchange phone numbers or personal social media accounts.
Now I want to hear from you!
Build your own Link Up Box, connect with the people around you, and tell me how you feel about the experience in the comments. 💬
Also, tell me where you would use it — during a long journey, while camping, trekking in a remote area, at an event, or somewhere completely off the grid.
Let's connect — even when there is no network. 🌐❌