Small Bluetooth Low Enegergy (BLE) receiver to display the navigation information from the Komoot app (Android or iPhone).
The device is switched on by touching sensor pin 15 (default, can be changed in source code). It will show the battery voltage and then try to connect to the Komoot app (navigation in the app should be started befor turning on this BLE receiver). If it can't connect within 30 seconds, it will return to deep sleep.
If the device has connected to the Kommot app, it will show the directions to the next way point as also shown in the app. At the top it will show the name of the next street. In the middle the direction and the distance to the next junction is shown. The bottom shows the current street name and below the battery voltage bar.
If the device doesn't receive updates from the app for more than 30 seconds (e.g. naviagtion finished or paused), it will turn off (enter deep spleep).
Before using the device as Kommot navigation receiver, it needs to be paired with the Kommot app. This is done in the app "Profile > Settings > Bluetooth Connect" (not via the system Bluetooth pairing).
Then select "Ciclo HAC bike computer" from the "Connect anaother device" section and turn on the ESP32 navigation receiver.
If the device was discovered ("Ciclo HAC Device ✔" shown above the "↺ Waiting for connection..."), you are done and need to manually go back to the settings.
The code was originally developed with Arduino IDE, but then I changed to PlatformIO (on VS Code or Atom editor) due to better integration with Git, faster code complilation and good dependency management for teh libraries.
The display orientation can be rotated by the value of the “rotation” variable in the code.
In PlatformIO the “Expressif 32” platform needs to be installed. The additional libraries “ESP32 BLE Arduino” for the Bluetooth Low Energy support and “U8g2” for the display driver are automatically loaded via the dependencies defined in the platformio.ini file.
The symbols have been converted and edited with Gimp to the required XBM format. For the navigation symbols I used the nav-icons provided in PNG format on the Komoot BLE Github [1]. The down-sizing required some manual corrections for smooth edges. I copied the xmb files in two C-libraries, one for the nav-icons and the second for some extra symbols.
The device was tested with a Wemos Lolin32 and the slightly smaller Wemos Lolin32 lite, both can still be purchased on Ebay or similar. For the display an OLED 128x64 is used with either 0.96" (SSD1306 controller) or 1.3" (SSD1106 controller) size. The unit is powered with a 3.7 V LiPo battery.
A voltage devider with two resistors is used to measure the battery power. The battery level is shown with a bar indicator at the bottom of the display and the device turns off (deep sleep) if the power is too low.
The Fritzing source file: Komoot_BLE
- ESP32 board, e.g. LOLIN32 or Lolin32 lite (clones still available on Ebay)
- OLED display 128x64 with SH1106 or SSD1306 controller
- LiPo battery 3.7 V, 600 mAh
- Komoot BLE specification: komoot/BLEConnect
- PlatformIO ESP32
- Neil Kolban's BLRexample file
- Adreas Spiess Polar receiver video #174
- Similar (newer) project esp32_komoot_ble