<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Colas.Nahaboo.net - bluetooth</title>
    <subtitle>Colas Nahaboo personal site, with discussions about programming code, web and computing topics, surfing and SUPing, and various musings.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://colas.nahaboo.net/tags/bluetooth/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://colas.nahaboo.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-17T00:00:00+00:00</updated>
    <id>https://colas.nahaboo.net/tags/bluetooth/atom.xml</id>
    <entry xml:lang="en">
        <title>walkpadspeed v1: the walkpad app for geeks</title>
        <published>2026-08-17T00:00:00+00:00</published>
        <updated>2026-08-17T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/walkpadspeed-v1/"/>
        <id>https://colas.nahaboo.net/code/walkpadspeed-v1/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/walkpadspeed-v1/">&lt;p&gt;&lt;img src=&#39;walkpadspeed.svg&#39; align=right width=300&gt;At last, I decided to declare version 1 of &lt;strong&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/walkpadspeed&quot;&gt;walkpadspeed&lt;/a&gt;&lt;/strong&gt;, my app to drive my Bluetooth walking pad. Two months after the first working version, it is now mature and feature-complete enough to be released as &quot;version one&quot;.&lt;/p&gt;
&lt;p&gt;The pitch: a single web page that connects to a &quot;smart&quot; walking pad or treadmill over Bluetooth and drives it through a workout you design yourself. No app store, no install, no account, no ads. Open it in Google Chrome on your phone, connect, walk. &lt;strong&gt;The walkpad app for geeks!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://colas.nahaboo.net/code/walkpadspeed-v1/legends-v1.png&quot; alt=&quot;legend&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;what&quot;&gt;What?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what&quot; aria-label=&quot;Anchor link for: what&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A walking pad is a bare treadmill: a belt, a motor, and a speed. The &quot;smart&quot; ones (the kind sold with a companion phone app, without a console full of buttons) speak the standard &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.bluetooth.com/specifications/specs/fitness-machine-service-1-0/&quot;&gt;FTMS Bluetooth protocol&lt;/a&gt;, which is all you need to control them. So walkpadspeed lives entirely in your browser, uses the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/WebBluetoothCG/web-bluetooth&quot;&gt;Web Bluetooth API&lt;/a&gt;, and needs nothing else.&lt;/p&gt;
&lt;p&gt;You design your routines as simple text files — each line a step of speed, optional incline, and duration:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HIIT Sprints&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3 60 Warmup&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6 30 sprint #1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3 30&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6 30 sprint #2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3 2m Cooldown&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Load the file, pick a routine, start walking. The app handles the timer and the speed changes for you, beeping one second before every change so you are never caught off guard.&lt;/p&gt;
&lt;h2 id=&quot;why&quot;&gt;Why?&lt;a class=&quot;zola-anchor&quot; href=&quot;#why&quot; aria-label=&quot;Anchor link for: why&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I bought a simple, entry level walking pad (&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.youtube.com/watch?v=PrnlVPZXXoY&quot;&gt;a Fousae ZX-390&lt;/a&gt;, many brands sell similar ones: Urevo, Sperax, DeerRun, Costway...), favoring mechanical qualities over sophisticated features. I wanted an app where it was easy to program various routines, as I wanted to experiment a lot.&lt;/p&gt;
&lt;p&gt;The existing apps either required expensive subscriptions, or were super complex to program, or had bugs because they tried to cater to very complex treadmills or full health tracking plans. &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://myhomefit.de/&quot;&gt;MyHomeFit&lt;/a&gt; was the closest to satisfying my needs, but writing programs in their XML format or built-in editor was horrible — you cannot even duplicate a routine or a step — and speeds drifted because it relied on device data and accumulated rounding errors.&lt;/p&gt;
&lt;p&gt;So I designed walkpadspeed to &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://dev.to/lirena00/scratch-your-own-itch-how-to-build-and-ship-50a9&quot;&gt;&quot;scratch my own itch&quot;&lt;/a&gt;. And I think all the people like me, wanting freedom to control simply their simple walking pads, will like it too.&lt;/p&gt;
&lt;h2 id=&quot;what-is-distinctive&quot;&gt;What is distinctive&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-distinctive&quot; aria-label=&quot;Anchor link for: what-is-distinctive&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Routines as text files.&lt;/strong&gt; An open format, terse and editable in any editor — not an XML abomination. Comments, blanks between routines, speeds in km/h or mph, durations in seconds or minutes, optional incline percentages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driven by your heart rate.&lt;/strong&gt; Wear any device using the standard BLE Heart Rate Service (Coros, Coospo, Garmin, Polar, Wahoo...) and the pad speed is auto-adjusted to keep your heart in a chosen zone. There are the usual Z1–Z5 zones, plus a &quot;digestive&quot; Z0 for the optimal effort to reduce glycemic peaks after meals.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speed that adapts to the day.&lt;/strong&gt; Nudge the whole routine faster or slower on the fly (&lt;code&gt;+&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;+++&lt;/code&gt;...) without losing your place. Feeling great? Tap up. Tired? Tap down.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modular routines&lt;/strong&gt; Each routine is composed of steps (a line in the file), and during your workout you can go back and forth steps, and even start at any step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test mode.&lt;/strong&gt; No walkpad on hand? The whole app runs simulated, so you can design and rehearse routines anywhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logs of your sessions.&lt;/strong&gt; Kept as simple text files, in the same format as the routines, tracking speed, zone, incline and heart rate step by step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routines that are shareable.&lt;/strong&gt; Store your routine anywhere on the web and import it by URL.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-a-single-html-file&quot;&gt;Why a single HTML file?&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-a-single-html-file&quot; aria-label=&quot;Anchor link for: why-a-single-html-file&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Because I am a fan of the single self-contained artifact — I &lt;a href=&quot;/blog/go-single-binary-fanatic/&quot;&gt;ranted about it for Go binaries&lt;/a&gt;, and this is the same idea for the web. The whole app is one &lt;code&gt;walkpadspeed.html&lt;/code&gt; file embedding modern vanilla JavaScript: no build step, no dependencies, no server. Host it anywhere, open it in a browser on a Bluetooth-enabled device, done. I even host a copy at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://walkpad.fr&quot;&gt;walkpad.fr&lt;/a&gt; so you do not have to type a long URL on your phone.&lt;/p&gt;
&lt;p&gt;Everything happens inside your browser. Your routines, your Bluetooth connection, your history never leave your device — no server, no account, no tracking.&lt;/p&gt;
&lt;h2 id=&quot;installation-usage-and-more-info&quot;&gt;Installation, Usage, and more info&lt;a class=&quot;zola-anchor&quot; href=&quot;#installation-usage-and-more-info&quot; aria-label=&quot;Anchor link for: installation-usage-and-more-info&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/walkpadspeed&quot;&gt;github.com/ColasNahaboo/walkpadspeed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;AI co-written: don&#39;t like, don&#39;t use.&lt;/p&gt;
</content>
        
    </entry>
</feed>
