Hint: The code is deprecated and only kept for reference. Only tested with iOS. It won't work if you don't use the mentioned library versions. The official ESP32 Android libraries now include BLE.
The goal of this project is to create an inexpensive turn-by-turn navigation device based on ESP32 and Komoot's BLE Connect API.
This repository includes all the necessary files to build your own turn-by-turn navigation device including the files for the 3D printable case.
- The battery can easily be charged by connecting the ESP32 to an USB charger if a controller with battery management is used (e.g. Adafruit Huzzah ESP32).
- To wake up the device from deep sleep press the button. The welcome screen is shown and ESP32 starts searching for the Komoot BLE service.
- Open the Komoot app on your phone and make sure Bluetooth on your phone is turned on. Start your navigation. There is no need to manually connect the ESP32 in the settings. After some seconds, the devices are paired.
- The device now shows the navigation instructions from the Komoot app.
- If connection is lost or navigation stopped, ESP32 tries to keep connection to the device for first 100 seconds. After this, it starts searching for new devices. If no new device is found for the next 100 seconds, it returns to deep sleep.
- Device can manually be turned off by pushing the button. This takes approximately 2 seconds.
This is a first prototype which is fully working and tested. New functionality and hardware may be added. The ESP32 is quite new and the Arduino implementation still undergoing many changes. It is recommended to use the same release as stated here because there were many issues with BLE when updating versions.
Next steps:
- improve case/ make smaller
- use larger display
- smoothen images
- add more functionality
- add battery indication
- continuously update used libraries
- Device can not be completely turned off without disconnecting battery, but we can enter deep sleep by pushing button and waking up again by pushing same button
- Device can be loaded over USB port (LiPo control on-board)
- Rename main file in .ino to work with Arduino IDE
- Adafruit Huzzah ESP32 (or any other with included battery management)
- 128x64 OLED, SSD1306 Controller
- Push button, some wires and 3D printed case, screws
- 3.7V 400mAh LiPo
Display:
Display | ESP32 |
---|---|
SDA | Pin 27 |
SCL | Pin 33 |
VCC | VCC |
GND | GND |
Button:
Button | ESP32 |
---|---|
In | Pin 32 pulled down with 10kOhm resistor connected to GND |
Out | VCC |
- ESP8266 and ESP32 Oled Driver for SSD1306 display 4.0.0 by Daniel Eichhorn, Fabrice Weinberg
- Arduino core for ESP32 WiFi chip v1.0.1-rc1 (development release)
- Replace BLE source code in /opt/eclipse/arduinoPlugin/packages/esp32/hardware/esp32/1.0.1-rc1/libraries/BLE/src by commit 11a0aa6 of ESP32_BLE_Arduino
- Developped in Eclipse with Sloeber
- @danielgard for clarifying some things about the Komoot API
- @chegewara for continuously debugging Arduino ESP32 BLE
- Axel Poidevin for carrying the bike and phone in the video