Monitoring Heart Rate with a PineTime Smartwatch
I've been wanting a heart rate monitor I can check while exercising.
I've tried carrying a pulse oximeter, but while they work fine for resting pulse sitting at home, they seem utterly incapable of measuring a raised pulse outdoors on the trail. (Too bad, since it would be nice to have the oxygen reading when hiking up a mountain at 10,000 feet.) I wonder if they have that problem for everybody; it may have to do with my very small fingers.
There's the chest band option, from brands like Polar. But I tried a Polar HRM years ago and found it exceedingly uncomfortable. I don't deal well with a tight band under my breasts, especially while exercising.
I've wondered about smart watches. Some people say they work fine for monitoring pulse rate, others say they're not so good. But Dave tried a couple of smart watches a year or two back, and I saw what he went through trying to get it working. It's probably all painless if you don't mind being part of the Apple or Samsung ecosystem, using devices and software exclusively from one company and having all your data uploaded to that company's cloud (there to be shared or leaked or whatever). But that's not really my thing.
Then I read about the PineTime watch. It's from the Pine64 project that makes open source, configurable devices. It sounded like a perfect solution for me: hackable (in the "I want to fiddle with my own stuff" sense, not the "break into someone else's devices" sense), open source, and it's even inexpensive, so it's not a huge committment to try it and see if it works! What could be better?
You can buy it two ways: as a sealed, waterproof unit, or a development kit where the back isn't glued on, which makes it easier to download code when you're developing. The price is the same either way. I decided to start with the sealed unit, and if I liked it (TL;DR: I do like it!) and wanted to develop for it, it's cheap enough that I don't mind ordering a separate dev kit.
Upgrading
The order process was painless and the PineTime arrived very quickly, especially considering it was coming from out of the country.
It doesn't come with much documentation, so figuring out how to get started wasn't super easy. In the end, it boiled down to:
Install GadgetBridge on my Android phone, and connect it to the PineTime. (This also sets the time.)
Upgrade the PineTime, as very strongly recommended in the paper quickstart instructions. The instructions point to Upgrade_PineTime_to_InfiniTime_1.0.0 which prominently highlights a link to download InfiniTime_1.0.0. Since my PineTime shipped with 1.14.1, downgrading to 1.0.0 seemed like a bad idea. Ignore that link and click on the Releases button, which takes you to the Release list. Each release has quite a few files with no explanation; apparently the one you want is the one with a name like pinetime-mcuboot-app-dfu-VERSION.zip.
The upgrade went smoothly, except that GadgetBridge couldn't reconnect to the watch afterward. GadgetBridge recommended rebooting InfiniTime, but I couldn't find any way to do that from the watch. I had to delete the device from GadgetBridge and then go through discovery again and reset my settings. (I later found reboot instructions that say to press and hold the watch's button for 8 seconds, then release it.)
Navigating the Watch
It took me a while to find the user documentation and to figure out how to navigate the watch's UI, so here are some hints.
To get to settings, swipe right from the clock face, which lets you adjust brightness, 12h/24 format and clock face style. You can also set the time there when you don't want to hassle connecting with GadgetBridge..
To get to various other features, swipe up on the clock face. There are several pages of icons: keep swiping up to go to the next screen. That lets you get to things like the heart rate monitor as well as a couple of games. There doesn't seem to be documentation anywhere on what these various things are, or the rules to the games. (The thing that mysteriously just turns the screen black is apparently a sketching app).
There's a stopwatch, an alarm, and, weirdly, a metronome that vibrates. That last one sounds a bit silly but might actually turn out to be useful when I'm practicing guitar. There's also apparently a way to control music playback on a paired phone, which I haven't tried. I'm not sure it's actually any easier to reach for a watch, hit the button and then use a tiny touchscreen compared to reaching for a phone, hitting the power button and using a bigger screen; but it might be useful if you want to navigate music while keeping your phone in a bag or pocket.
The watch has one physical button that toggles the display on if it's off, or off if it's showing the clock; otherwise it works as a Back button (swiping left doesn't go back). Long-press shows an information screen with software versions, etc.
Step counting happens automatically, which is nice (modulo the problem of how much you trust a step count based on movements of your wrist; for me it seems to undercount).
The wristband seems plasticky but it's actually surprisingly comfortable. In any case, apparently it's a standard 20mm clasp and easily replaceable (about which more later).
The watch lost power once (I didn't notice the charge was getting too low) and when I recharged it, it had forgotten the time and I had to reset it. That was a little annoying, but as long as I make sure it doesn't fully discharge, it's not a problem.
Heart Rate Sensor
When I wore the watch like a watch, on my wrist, the heart rate sensor didn't work terribly well, whether worn on the outside or inside of my wrist. It took two or three minutes to get a reading, and then took just as long to get the next reading, longer if I was moving. I get the impression that's common with wristwatch-based optical pulse sensors, and isn't a ding on the PineTime in particular. In any case, I have a positioning problem with all wrist watches: they won't stay flat on the top or bottom of my wrist, but instead migrate to where they're against the wrist bone pointing outward. I'm sure there wouldn't be a good pulse signal there.
But it turns out pulse sensing works better worn somewhere other than the wrist anyway. Several people recommended the back of the wrist, about two fingers' width above the wrist bone. That got a reasonable signal — but doesn't stay in place when I'm moving. I tried in on the inside of my ankle and that worked okay, but what seems to work best (so far) is on the outside of my upper arm. That requires a longer strap, but those are easily available and cheap (see: standard 20mm clasp). I ordered a longer nylon band with velcro, which works fine. It has to be fairly tight so it doesn't slide down to the elbow during exercise, but it's comfortable enough that I forget it's there, and I can still see it, barely, if I want to push the button to check my heart rate (or something else, like, you know, the time).
Configure the Watch to Send Heart Rate
You can read heart rate by swiping up from the main screen, tapping on the heart icon, and tapping Start. But you probably want to save a continuous record while exercising, which needs an external Bluetooth-reading device (the PineTime doesn't keep its own record of heart rate) and further configuration.
In the watch settings (swipe right on time display, then tap on the
Settings icon), swipe up, then choose Heart rate. You can set the
Backg. interval for how often it will send heart rate.
I set it to 30 seconds. The battery lasts quite a long time on that
setting (with the display off most of the time): a 3-4 hour hike only
brings it down maybe a quarter, so I may switch to a shorter interval.
The next question was more difficult: how to read it remotely.
Heart Rate Software
I had to go through quite a few apps before I found anything that worked. I should note: every single one of these apps require Location to be on. I have no idea why app developers think they need location to monitor heart rate. But most of the time, when I'm logging heart rate it's because I'm on a hike or bike ride, so I have Location on already to record a GPX track. So I guess it's not a big problem for me, just an annoyance while testing.
FitoTrack: Fail
I saw quite a few recommendations for FitoTrack, so I tried that first. It's a general fitness tracker that records GPX tracks. I don't actually need that because I'm very happy with OsmAnd's GPX recording, and FitoTrack, despite the fact that it lets me download an offline map, doesn't actually display that map while recording — it shows the shape of my track on the map, but doesn't show the map behind the track — so it can't take the place of OsmAnd.
But that's all moot because it doesn't record heart rate reliably. It has a "Pair sensor" button: pressing it gives a list of nearby Bluetooth devices, including InfiniTime. But tapping on InfiniTime in the list doesn't necessarily connect to the watch. Worse, it gives no feedback about whether it connected, and it doesn't show the heart rate in any way while it's recording; it doesn't show it until you've finished a workout, at which point, two out of three times I discovered that it hadn't actually recorded any heart rate data. Way too unreliable to be worth using.
I found out later that there's a not very discovable way to view the current heart rate: hile a workout is running, long press one of the four metrics showing, and it will pop up a dialog that lets you replace it with a different metric, one of which is heart rate. So that might give a better way of finding out whether it's actually talking to the watch. I haven't gone back to try it.
GadgetBridge: Fail
It turns out that the standard app used to connect to the watch, GadgetBridge, can also monitor heart rate. If you can get to the activity page (not easy and I can't tell you a deterministic path, but swipe around randomly and eventually, with any luck, you'll get there), sometimes you can swipe up, or sometimes there's a heart rate button to tap. Honestly, I find GadgetBridge's user interface baffling as it seems to change constantly depending on which page I'm coming from. But anyway, it doesn't matter because it turns out it stops listening to heart rate as soon as the phone screen goes off (yes, I enabled the Android pref to let the app run in the background). I couldn't find any way around this.
OpenTracks: Fail
Another open source fitness tracking app is OpenTracks. There are two versions of it on F-Droid: "Non-reproducible" and "Reproducible build". I have no idea what the difference is, but reproducible sounded like a good idea so that's the one I tried.
Like FitoTrack, it has a button to pair with a heart rate sensor, and the menu shows the watch, but after pairing and recording a workout, exported files, either KML or GPX, had no heart rate data. Also like FitoTrack, it gives absolutely no feedback about whether it's actually paired or actually reading heart rate data, so you have to actually go out and record a track, finish it, and download it to find out that it didn't record any pulse data.
SensorLogger: Fail
I also tried SensorLogger, which is supposed to be a straightforward way to log data from a variety of sensors. But I had no luck with it: it seems to have no way to actually pair with a Bluetooth sensor. In the main (Logger) screen, if you scroll down to Bluetooth, there's a "Tap to scan for individual devices", and there's also a "Bluetooth Beacons" line with a "Scan" button; but both of these just say "Scanning" for a few seconds and then stop without showing any devices. On the other hand, the info page for Bluetooth says "Important Notes: Bluetooth data is recorded only when the app is open and the screen is on." So that makes the app useless for recording something like a hike or bike ride.
OsmAnd: Success!
But somewhere along the line I stumbled upon a note that there's an OsmAnd plugin to record data from heart rate and other sensors. OsmAnd is my favorite Android app, the one I already use for tracking all my hikes and bike rides. So that would be perfect.
Slight catch:
the sensors plugin isn't free. You don't pay for the plugin itself, which
is included with OsmAnd; instead, you need to subscribe to OsmAnd Pro to
unlock it. That's currently $9/month or $40/year; admittedly a little
pricey if you're doing it just for one plugin. On the other hand, if you
look at it as a health expense, it's very cheap; and it's supporting my
favorite Android app. So I paid for a month to see if the
plugin worked. And it did! Unlike the dedicated fitness trackers, once I
unlocked the OsmAnd plugin, it paired with my watch, I went for a
little hike around the yard and uploaded the resulting GPX file, and
voilà! there in the <extensions> section of
some of the data points were lines like
<gpxtpx:TrackPointExtension>
<gpxtpx:hr>79</gpxtpx:hr>
</gpxtpx:TrackPointExtension>
On my third test, I had the same problem as with the other tracking apps: the data didn't get recorded into the GPX, and I didn't know that until I uploaded it and tried to look at the data. But just as I was starting to compose a message to the OsmAnd list asking about it, I realized I might not have read the External Sensors documentation thoroughly, so I went back and reread it carefully, from beginning to end. Woohoo! It actually has an on-screen widget you can enable to show real-time data, thereby ensuring that it's connected to the sensor (as well as giving you your data with no need to wait for the later upload). Now, before starting a track, I make sure the two devices are talking by tapping on the HR widget a few times until it shows the same number the watch is showing. After that, it's been very reliable in recording my heart rate data. It doesn't get it every 30 seconds — there are gaps — but I think that will be true of any watch-based heart monitor, and I don't fault either OsmAnd or the PineTime for gaps.
So I'll be maintaining an annual OsmAnd subscription, which I'm happy to do since it's a terrific program and it does a great job at recording heart rate.
nRF Connect: Success
If you don't want to pay for OsmAnd, there's another app that can log sensors: nRF Connect.
nRF Connect is great for debugging Bluetooth connection problems. Tap Connect and connect to a Bluetooth device, and you can see, in real time, everything coming from that device, including all the heart rate updates.
Logging? While it's receiving from the sensor, it writes everything to a log, and if you go to the log screen to view the log, there's a floppy disk icon you can tap on which exports it to your Downloads folder (or whatever folder you select) as a text file. The text format is pretty straightforward and includes lines like
A 12:14:00.688 "Heart Rate Measurement: 50 bpm,
Not the prettiest app, but it works really well and you definitely get feedback about when it's receiving data.
Conclusion: I like it!
I've had the PineTime for about a month now. I don't wear it as a normal watch since I don't really feel a need for that. I just strap it on my arm (or, occasionally, somewhere else) when I'm going out for a hike or ride. It's been working fine as a heart rate monitor (and inspired me to tweak my Linux mapping app, PyTopo, to read and display OsmAnd's heart rate data). I haven't yet looked into developing any additional apps or otherwise tweaking the watch, but I love knowing that's an option if I ever want to. Even more, I love knowing that the watch isn't collecting any of my personal data.
I'm sure it's not as polished as something like an Apple Watch for someone who's already drunk the everything-Apple-all-the-time koolaid. On the other hand, Dave's struggles with his Samsung smartwatch were endless (and he eventually gave up on it); even with difficult-to-locate documentation, the PineTime seemed much easier than most Android watches. It's also open source, less expensive, and comes from a company that respects your privacy and your right to hack your own stuff.
PineTime: thumbs up!
[ 13:42 Sep 28, 2026 More tech | permalink to this entry | ]