Hack 4 Humanity 2026 project — a React Native / Expo app that streams video from a Seeed Studio XIAO ESP32-S3 Sense camera over a phone hotspot and feeds frames into a TFLite navigation-assistance pipeline with audio output.
The premise is a very cheap, easily manufacturable yet advanced navigation asist for people with moderate to severe blindness. Can assist with:
- Locating objects in surroundings and telling the user where they are
- Passive object / dangerous objects detection and avoidance
- Text reader geared towards street signs, other important pedestrian signs, with (future incoming) the capability to identify all sorts of text in an environment that would be helpful to see (user can tailor how much they want read, from pedetrian signs to restaurant signs)
- Mobile app (
mobile/): React Native + Expo Development Build. Connects to the ESP32 via WiFi, displays the live feed, runs on-device object detection (TFLite), and speaks navigation alerts. - ESP32 firmware (
esp32/): Arduino sketch for the XIAO ESP32-S3 Sense. Streams MJPEG and JPEG snapshots over HTTP.
- Enable the mobile hotspot on your phone.
- Note the SSID and password.
- Android hotspots typically use subnet
192.168.43.x. iOS Personal Hotspot may use172.20.10.x.
- Open
esp32/esp32_streaming_server/esp32_streaming_server.inoin the Arduino IDE. - Set
WIFI_SSIDandWIFI_PASSto your hotspot credentials. - Install the esp32cam library (Arduino Library Manager → search "esp32cam").
- Select board XIAO_ESP32S3 and upload.
- Open the Serial Monitor (115200 baud) and note the printed IP (e.g.
192.168.43.184).
See esp32/README.md for details.
cd mobile
npm install --legacy-peer-deps
npx expo run:android # or: npx expo run:ios- Connect your phone to the same hotspot (or use the hotspot on the same device if supported).
- Open the H4H Vision app → Settings.
- Enter the ESP32 IP address (from the Serial Monitor).
- Tap Test Connection to verify.
- Return to the Live view to see the camera feed and hear navigation alerts.
| Setting | Description | Default |
|---|---|---|
| ESP32 IP | Static IP of the ESP32 on the hotspot subnet | 192.168.43.184 |
| Port | HTTP port the ESP32 listens on | 80 |
| Streaming mode | MJPEG stream or JPEG snapshot polling | Snapshot |
| Snapshot interval | Polling interval (ms) in snapshot mode | 100 |
- Expo dev build required (native modules: react-native-fast-tflite). Do not use Expo Go. Use
npx expo run:androidornpx expo run:iosto build and run; the app will not work withexpo start+ Expo Go for object detection. - If you see "Tflite could not be found": you are running without the native TFLite binary. Build and run with
npx expo run:androidornpx expo run:ios(and, if needed, runnpx expo prebuildfirst). The app will still run and show the camera stream without detection until then. - TFLite model: The app uses
mobile/assets/models/ssd_mobilenet.tfliteif present; otherwise it may load from a remote URL. See mobile/assets/models/README.md.
See LICENSE.




