Skip to content

vuvvvv/MapSniff

Repository files navigation

MapSniff

Pi Navigation Display

     



A Flutter Android app that intercepts Google Maps turn-by-turn navigation notifications and relays them in real time to a Raspberry Pi Zero W, which displays directional arrows and instruction text on an ST7735 1.8" LCD screen.

No API keys. No internet required. Works entirely on your local Wi-Fi network.

الاستماع
سجل الاحداث
الاعدادات



How It Works

  1. The Android app listens to Google Maps notifications using NotificationListenerService
  2. Each turn instruction is sent via HTTP POST to the Raspberry Pi server
  3. The Pi renders a clean directional arrow + instruction text on the ST7735 display
  4. When navigation ends, the screen automatically returns to the idle waiting state



Hardware Required

Component Model / Spec
Single-board computer Raspberry Pi Zero W (or any Pi with GPIO)
Display ST7735 — 1.8 inch — 160×128 pixels
Android phone Any device running Android 9+
Power supply 5V micro-USB for Pi Zero W
Network Shared Wi-Fi router or phone hotspot

Wiring — ST7735 → Raspberry Pi Zero W

ST7735 Pin Function Pi GPIO (BCM) Physical Pin Notes
VCC Power 3.3V Pin 1 ⚠️ 3.3V only — never 5V
GND Ground GND Pin 6 Common ground
SCL / SCLK SPI Clock GPIO 11 Pin 23 Bitbang SPI
SDA / MOSI SPI Data GPIO 10 Pin 19 Bitbang SPI
CS / CE Chip Select GPIO 8 Pin 24 CE0
DC / RS Data/Command GPIO 24 Pin 18
RES / RST Reset GPIO 25 Pin 22
BL / LED Backlight 3.3V Pin 17 Always on

💡 Notes:

  • The ST7735 must be powered from the 3.3V pin of the Pi — never use 5V!
  • All GND pins must share a common ground with the Pi.
  • This project uses bitbang SPI (software SPI) — no need to enable hardware SPI in raspi-config.
  • Screen orientation is landscape rotate=2 — no physical flip needed.



Raspberry Pi Setup

1. Connect to your network

Connect the Pi Zero W to the same Wi-Fi network as your Android phone. You can use a shared router or the phone's hotspot.

To Get IP from your phone seting

# set up your raspberry pi wifi seting

> sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

network={
    ssid="HomeWiFi or phonewifi"
    psk="**********************"
}

> sudo wpa_cli -i wlan0 reconfigure

> sudo reboot
ip=**.*39.105.40



Android App Setup

1. Build & install the Flutter app

flutter pub get
flutter run

Or install the APK directly on your device.

2. Grant Notification Access

The app needs permission to read notifications. On first launch it will prompt you — tap "فتح الإعدادات" and enable access for MapSniff.

permission

You can also open it manually:

Settings → Apps → Special App Access → Notification Access → MapSniff ✓

3. Configure the Pi IP

In the app, go to الإعدادات tab and set:

IP  : **.39.105.40   ← your raspberry pi IP
Port: 5000

Tap اختبار to verify the connection, then tap حفظ الإعدادات.

4. Start listening

Go to the main tab and tap بدء الإرسال. Open Google Maps, start navigation — the display will mirror every turn instruction in real time.

listening


Supported Directions

Direction Arabic keywords English keywords
↑ Straight استمر، واصل continue, head
→ Right يمين، يميناً، انعطف يمين right, turn right
← Left يسار، يساراً، انعطف يسار left, turn left
↩ U-Turn دوران للخلف، استدر، ارجع u-turn, uturn
⟳ Roundabout دوار، الدوار roundabout, rotary
📍 Arrived وصلت، الوجهة arrived, destination





3D Print Case

You can 3D print a custom case to house the Raspberry Pi Zero W and the ST7735 display together in a clean enclosure.
Leave openings for the screen, micro-USB power port, and ventilation slots.
Use PETG or PLA for the best results.
The case was modeled in Blender.

From the 3DFile folder the project includes:

Case

Cover



Pi Server API

Endpoint Method Description
/ping GET Health check — returns {"status":"ok"}
/nav POST Send navigation instruction {"text":"..."}
/reset POST Force idle screen (navigation ended)





Rive anmi + icon app Rive app



Project Structure

MapSniff/
├── lib/                        # Flutter app
│   ├── main.dart
│   ├── home_screen.dart
│   ├── main_tab.dart
│   ├── log_tab.dart
│   ├── settings_tab.dart
│   ├── providers/
│   │   └── nav_provider.dart
│   ├── services/
│   │   └── pi_service.dart
│   ├── models/
│   │   └── log_entry.dart
│   └── widgets/
│       ├── status_card.dart
│       └── instruction_card.dart
├── android/                    # Android native code
│   └── app/src/main/kotlin/
│       ├── MainActivity.kt
│       └── NavNotificationListenerService.kt
├── pi_server/
│   └── server.py.  # Raspberry Pi Python server هنا ملف الروز بيري باي
└── 3DFile/
    ├── case.stl
    └── cover.stl
     # 3D printable case files هنا ملف الطباعة







@vuvvvv

About

A Flutter Android app that intercepts Google Maps turn-by-turn navigation notifications and relays them in real time to a Raspberry Pi Zero W, which displays directional arrows and instruction text on an ST7735 1.8" LCD screen.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors