Avatar for ConorONeill


Member since May 2017 • Last active Jan 2022
  • 10 conversations

Most recent activity

  • in Puck.js, Pixl.js and MDBT42
    Avatar for ConorONeill

    @Gordon Just tried it on a Bangle.js and everything seems to work fine and can connect from that pre-release Web IDE.

    Has it been deployed to the App Loader? Doing "Install Default Apps" seemed a hell of a lot faster than I remember.

  • Avatar for ConorONeill

    This sounds amazing Gordon. Love everything in your list. Agree that Aruduio header should be left off by default but would like the ability to add header pins.

    On the Pi front, one thing to watch out for is the orientation of the connector on the Pi 400. I've ended up using multiple adapters etc to get some screens and other devices pointing the "right" way around.

    Also agree with Jean-Philippe on the IMU. I'm using a Pixl at the moment with an external one to pick up movement. Works fine, just messy.

    On-Off switch for sure. But should totally turn off device even when connected to a charger (badge 2018 doesn't).

    Would an RTC be an over-stretch? I have one soldered to one of my 2018 badges and it's dead handy, particularly if you restart the device a lot.

    Are you thinking full USB on the nRF52840 or just charging?

    Any thoughts on USB-C connector vs micro USB? The latest Blackpill boards and some of the RISC-V boards have moved over.

    Lots of SPI Flash would be great. It's so handy on the Bangle.js

    One simple thing is that any buttons should be chunkier/meatier than the tiny ones of the 2018 badge or the tack switches of the 2017 badge. Just from a user experience perspective. Also games :-)

  • in Puck.js, Pixl.js and MDBT42
    Avatar for ConorONeill

    Thanks, yeah I'll focus on the simpler things first. But the SC Control Point on footpods (and similar bike equipment) enables the watch/phone to adjust the calibration of the device.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for ConorONeill

    @Gordon I think so, if it has caught other people out too. Anything that makes it more compatible with off the shelf products, that are impossible to debug on their end, is a good thing.

    Of course, even tho the Garmin can now see the Pixl, it can't "connect". But the same is true of the ESP32/Arduino. I bet it's related to the SC Control Point which at least I can test on the Pixl side.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for ConorONeill

    Oh you absolute legend @Gordon - That worked!! I'd never have figured it out. Was going around in circles over several weekends 🤦

    Really looking forward to writing this project up over Christmas. Should have wrapped it up months ago.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for ConorONeill

    No joy with temporarily stealing the Milestone's address or playing with connection interval.

    I'm already advertising 0x1814 and NRF Connect sees the Pixl updating the speed and cadence. There just seems to be something in the output that is different between the Pixl.js and the ESP32/Milestone that the Garmin does not like. And there's unfortunately no way to debug built-in features in the Garmin. Whatever it is, Zwift on Android doesn't care about it and sees the Pixl as a footpod with no issue.

    I went down a rabbit hole with the Milestone Pod as it alternates between advertising as a footpod and advertising as an iBeacon. I thought that was the difference. But the ESP32 Arduino code doesn't do that.

    All three in screenshots. FootpodConor is the ESP32/Arduino device. MilestonePod 59 is the real commercial footpod. Pixl.js 8dfc is the only one that the Garmin doesn't see.

    I think the Garmin is connecting to the devices, if not pairing, as it doesn't list them if they are connected in NRF Connect.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for ConorONeill

    Thanks @Gordon - I've been on a process of elimination and Service Changed was the last major obvious difference to me.

    I had been wondering about Connection interval.

    I'll try setting the address to Public.

    Pretty sure it isn't pairing at that point, since the Garmin never even lists the Espruino when I ask it to scan. But it always finds the Arduino device.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for ConorONeill

    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?

  • in News
    Avatar for ConorONeill

    Fantastic news, welcome Christine!