Root-caused a "GPS not working" report to the SIM868 module chip being fully powered off (the HAT's 5V rail can be live while the chip itself stays off until PWRKEY is triggered) - confirmed by getting zero AT response at any baud rate while the app's GPS thread had the serial port open normally. Discovered this specific HAT revision has the "P4" GPIO power-on mod wire installed (Waveshare FAQ / GSM_PWRKEY.rar script), letting PWRKEY be triggered via physical pin 7 (BCM GPIO4) instead of a manual button press. Verified live: pulsing it low for 4s then high brought the module from zero AT response to responding immediately. modules/app_gps.py: added _module_responds()/_pulse_pwrkey()/ _ensure_module_powered(), wired into _poll_loop() before the existing GNSS power-on check. Checks AT first and only pulses PWRKEY if the module isn't already responding, since PWRKEY is a toggle (pulsing an already-on module would turn it back off). Also fixed a related logging gap found while debugging: print() diagnostics from app_gps.py were invisible in yaris-obd.log for months because Python fully-buffers stdout when it isn't a TTY. deploy/yaris-obd.service now sets PYTHONUNBUFFERED=1. requirements.txt: added RPi.GPIO. PLAN.md: documented both findings and the Pi deploy gotchas (systemd unit file changes need a manual copy + daemon-reload; requirements.txt changes need a manual venv pip install - neither is picked up by a plain git pull + restart). Co-authored-by: Copilot <[email protected]>
yaris-obd 🚗📡
A Raspberry Pi 3-based OBD-II + GPS tracker for my 2013 Toyota Yaris — reads live vehicle data over USB, tracks position with a SIM868 GNSS/GSM HAT, and serves it all from a local web UI you can pull up on your phone by connecting to the car's own WiFi hotspot. Fully usable offline: no internet needed in the car, offline map tiles included. Also handles pulling dashcam footage off a USB dashcam for local/remote backup.
|
|
rené lévesque bangers i have a dream |
Screenshot
Features
- 📊 Live OBD-II data (speed, RPM, DTC codes) over a cheap USB ELM327-compatible adapter
- 🛰️ Real GPS tracking via a Waveshare SIM868 GNSS/GSM/Bluetooth HAT, plotted live on an offline Leaflet map (pre-cached map tiles — no internet needed in the car)
- 📶 Self-hosted WiFi hotspot so you can load the web UI on your phone from inside the car,
with automatic fallback to your home WiFi when in range (
http://yaris.local— no port number) - 🎥 Dashcam file retrieval — detects a USB dashcam automatically (any brand/folder layout, no hardcoded device path), copies its footage locally, verified against real hardware
- ☁️ Remote upload — a self-hosted server (Flask + Postgres,
server/) receives trip/GPS logs and dashcam footage over the internet (via Cloudflare Tunnel or a plain port-forward). Dashcam videos upload in resumable 40MB chunks (works around tunnel body-size limits and keeps the Pi's memory footprint flat regardless of file size); a UI toggle can pause dashcam uploads independently while trip logs keep syncing - 📱 Phone-relay upload — if the Pi's own WiFi is slow/congested, open
/dashon your phone to download pending dashcam files locally and re-upload them straight to the remote server using the phone's own network instead, automatically pausing the Pi's own upload meanwhile - 🗄️ Local SQLite trip logging, retried/synced to the remote server with automatic backoff
- 🔌 Runs fully headless as a
systemdservice, autostarting on boot
Hardware
| Part | Notes |
|---|---|
| Raspberry Pi 3 Model B | Web UI host + hotspot |
| Waveshare SIM868 HAT | GNSS (GPS) + GSM/GPRS, unused Bluetooth |
| USB OBD-II adapter | PL2303-based, ELM327-compatible (originally Bluetooth, switched to USB) |
| USB dashcam | Any brand — detected as generic USB mass storage |
| 2013 Toyota Yaris | The patient |
See PLAN.md for full hardware bring-up notes (SIM868 jumper/UART setup, antenna gotchas, etc.) and the detailed project history.
Getting started
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 app.py
The app serves on http://<host>:5000. On the Pi it also runs as a systemd service
(see deploy/) and is reachable with no port number at http://yaris.local once the
mDNS + port-redirect setup described in PLAN.md is installed.
For the remote server (receives trip logs + dashcam uploads), see server/README.md.
Project status
This project was revived after a couple of years on the shelf. All 11 planned phases are done and the full pipeline — OBD/GPS logging, offline web UI, WiFi hotspot, dashcam retrieval, remote upload, and phone-relay upload — has been verified against real hardware end-to-end, including a full real dashcam import and upload run. Only the SIM868 cellular fallback (for uploading while out of WiFi range) and the phone-relay feature's real-phone/live-network test remain untested. Full phase-by-phase history in PLAN.md.
