A tiny desk gadget that shows real-time ISS waste-tank levels on a round LCD. Built with a Wemos D1 Mini (ESP8266) and a GC9A01 240×240 TFT, housed in a 3D-printed enclosure.
The data comes straight from NASA's public ISS Live telemetry feed via the Lightstreamer protocol.
- Live telemetry — polls NASA's Lightstreamer server for urine tank, waste water, and clean water percentages
- Page-cycling display — each tank gets its own screen, rotating every 5 seconds
- Multi-SSID WiFi — configure multiple networks in
secrets.h; the device cycles through them automatically - 3D-printable case — top and bottom STL files included
| Part | Notes |
|---|---|
| Wemos D1 Mini | ESP8266-based, any clone works |
| GC9A01 240×240 round TFT | SPI, 1.28″ |
| GC9A01 Pin | D1 Mini Pin | GPIO |
|---|---|---|
| CS | D8 | GPIO15 |
| DC | D3 | GPIO0 |
| MOSI | D7 | GPIO13 |
| SCLK | D5 | GPIO14 |
| RST | NC | Software reset |
| BL | VCC | Always on |
The models/ folder contains the 3D-printable enclosure:
| File | Description |
|---|---|
PPISS.skp |
Master SketchUp source file |
PPISS_top.stl |
Top half of the case |
PPISS_bottom.stl |
Bottom half of the case |
├── platformio.ini PlatformIO config (ESP8266 RTOS SDK)
├── models/ 3D-printable enclosure files
│ ├── PPISS.skp
│ ├── PPISS_top.stl
│ └── PPISS_bottom.stl
└── app/
├── main.cpp Entry point — creates all FreeRTOS tasks
└── src/
├── secrets.h WiFi credentials (git-ignored)
├── secrets.h.example Template for secrets.h
├── blink/ Heartbeat LED task
├── wifi/ WiFi station management (multi-SSID)
├── iss/ Lightstreamer client + telemetry data
└── display/
├── ui.c Page-cycling UI task
├── gfx.h Drawing primitives
├── font.h Bitmap font
├── driver/ GC9A01 SPI driver (bit-banged)
└── icons/ Tank and WiFi status icons
- PlatformIO (VS Code extension or CLI)
-
Clone the repo
git clone https://github.com/Matp101/PPISS.git cd PPISS -
Configure WiFi — copy the example and fill in your credentials:
cp app/src/secrets.h.example app/src/secrets.hEdit
secrets.hand add one or more SSIDs:static const wifi_cred_t WIFI_CREDS[] = { { "MyNetwork", "MyPassword" }, { "BackupNetwork", "BackupPassword" }, };
-
Build & upload
pio run -t upload -t monitor
If you're on NixOS or have Nix with flakes enabled, you can build and develop without installing PlatformIO globally.
Build the firmware:
nix run .The firmware is output to .pio/build/d1_mini/firmware.bin.
Upload to board:
nix run .#uploadSerial monitor:
nix run .#monitorInteractive dev shell
nix developThen use PlatformIO commands directly:
pio run
pio run -t upload
pio device monitorThe device tracks these ISS parameters (defined in app/src/iss/iss.c):
| Item ID | Label | Description |
|---|---|---|
NODE3000005 |
Urine Tank | Urine tank fill percentage |
NODE3000008 |
Waste Water Tank | Waste water tank fill percentage |
NODE3000009 |
Clean Water Tank | Clean water tank fill percentage |
To add more items, append to the g_telem[] array in iss.c.
This project is licensed under the MIT License.
- Inspired by pISSStream
- NASA ISS Live for the public telemetry data
- Lightstreamer for the streaming protocol