• I've been working on a little project to emulate a BLE footpod on a Pixl.js and I've been using a Milestone Pod (now Zwift) to compare against. The Pixl.js works fine as a Running Speed and Cadence device (0x1814) with the Zwift App on Android but my Garmin watch refuses to recognise it as a footpod.

    I had been trying to clone the Milestone's output just to see which characteristic/setting/value I'm missing but with no success. Yesterday however I found some dead-simple Arduino code for ESP32 doing the same thing as me. It worked instantly with the Garmin and it has none of the extra complexity of the Milestone's output.

    The only major difference I can see between my Espruino output and the Arduino output (in NRF Connect) is that on Espruino the 0x1801 Generic Attribute Service shows as empty, whereas it has 0x2A05 Service Changed Characteristic and 0x2902 Client Characteristic Configuration on ESP32 Arduino.

    I've tried doing:

    0x1801: { // generic attribute service
                0x2a05: {
                    indicate: true,

    in setServices but it has no effect and the Service still shows as empty.

    Is there any way to enable this directly in Espruino or is it one of those things that the underlying stack turns on in certain situations?

    2 Attachments

    • arduino.png
    • espruino.png

Avatar for ConorONeill @ConorONeill started