Posts mit dem Label Gadgets werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Gadgets werden angezeigt. Alle Posts anzeigen

2026-10-25

Tretmann X-Bike smart machen: Trittfrequenz mit ESP32 und Bluetooth an die Amazfit Bip 6 übertragen

DIY-Projekt · ESP32 · Bluetooth Low Energy · Arduino · Firmware 1.2.0

Mein Tretmann X-Bike besitzt einen Trainingscomputer, der unter anderem die Trittfrequenz anzeigt. Die Messwerte sollten zusätzlich auf meiner Amazfit Bip 6 erfasst und in der Zepp-App gespeichert werden. Statt einen weiteren Magneten und Sensor zu montieren, verwende ich den bereits eingebauten Drehimpulsgeber und einen ESP32 als Bluetooth-Trittfrequenzsensor.

 


 

Ergebnis: Die Uhr erkennt den ESP32 als externen Trittfrequenzsensor, zeichnet die Werte beim Training „Drinnen Radfahren“ auf und verbindet sich auch nach mehr als zehn Minuten Ruhe bei einem späteren Training erneut.

1. Vorhandenen Sensor untersuchen

Vom Pedalantrieb führt ein zweiadriges Kabel zu einem zweipoligen Klinkenstecker. Bei abgezogenem Stecker habe ich den Widerstand zwischen Spitze und Schaft gemessen. Einmal pro vollständiger Pedalumdrehung schließt der Kontakt mit etwa 2–3 Ω, ansonsten ist er hochohmig. Das spricht für einen einfachen Reed-Kontakt. Die Messung bestätigt außerdem: Ein Impuls entspricht einer Pedalumdrehung.

Die Widerstandsstufe des X-Bikes wird über diesen Kontakt nicht mit übertragen. Für eine spätere Leistungsschätzung müsste sie separat erfasst werden.

2. Benötigte Bauteile

BauteilAufgabe
Tretmann X-BikeHeimtrainer mit integriertem Reed-Kontakt
ESP32 DevKit (ESP32-WROOM-32)Impulsauswertung und BLE-GATT-Server
2-polige KlinkenbuchseAnschluss an das vorhandene Sensorkabel
LED und 330-Ω-WiderstandOptische Impulskontrolle
USB-Netzteil 5 VStromversorgung des ESP32
Amazfit Bip 6Empfang und Aufzeichnung der Trittfrequenz

3. Verdrahtung

AnschlussVerbindung
Klinkenbuchse, äußerer Kontakt 1GPIO27
Klinkenbuchse, äußerer Kontakt 2GND
LED-Anode (+)GPIO26 über 330 Ω
LED-Kathode (−)GND
ESP32-StromversorgungUSB 5 V
X-Bike-Sensor (Reed-Kontakt)
  Klinkenbuchse Kontakt 1 ─── GPIO27 (INPUT_PULLUP)
  Klinkenbuchse Kontakt 2 ─── GND

ESP32 GPIO26 ─── 330 Ω ─── LED Anode (+)
ESP32 GND    ───────────── LED Kathode (−)

ESP32 USB ─── 5-V-USB-Netzteil

Bei meiner Klinkenbuchse waren die beiden äußeren Lötpins die richtigen Sensorkontakte. Das ist keine allgemeingültige Pinbelegung: Bei anderen Buchsen müssen die Anschlüsse durchgemessen werden. Der ursprüngliche Trainingscomputer ist während dieses Aufbaus vom Sensor getrennt. 

4. Bluetooth-Protokoll

Der ESP32 verwendet das standardisierte Bluetooth Cycling Speed and Cadence Profile (CSC). Er muss keinen proprietären Garmin-Sensor imitieren. Der ESP32 arbeitet als BLE-Peripheral mit GATT-Server, die Uhr als Empfänger. Alle 1.000 ms sendet der ESP32 die kumulierten Kurbelumdrehungen und den Zeitpunkt des letzten Impulses als Notification. Aus diesen Daten ermittelt die Uhr die Trittfrequenz.

UUIDBedeutung
0x1816Cycling Speed and Cadence Service
0x2A5BCSC Measurement: Kurbelumdrehungen und Ereigniszeit
0x2A5CCSC Feature
0x2A5DSensor Location
0x180ADevice Information Service
0x180FBattery Service (simulierte 100 %)

Zusätzlich meldet die Firmware den Hersteller „XBike DIY“, die Softwareversion „1.2.0“ und einen fest simulierten Akkustand von 100 %. Dieser Akkustand ist keine Messung, weil der ESP32 über USB betrieben wird.

5. Arduino IDE vorbereiten

  1. Ein passendes ESP32-Boardpaket in der Arduino IDE installieren und das ESP32-DevKit auswählen.
  2. Über den Bibliotheksverwalter NimBLE-Arduino 2.x installieren.
  3. Den folgenden Sketch einfügen, kompilieren und auf den ESP32 hochladen.
  4. Den seriellen Monitor auf 115200 Baud einstellen.

6. Vollständiger Arduino-Code – Firmware 1.2.0

Die Firmware zählt die Impulse über einen Interrupt, lässt die Kontroll-LED kurz aufleuchten, überträgt CSC-Daten und startet nach einer Bluetooth-Trennung das Advertising erneut. Zusätzlich prüft sie regelmäßig, ob sie ohne aktive Verbindung wieder auffindbar ist.

#include <Arduino.h>
#include <NimBLEDevice.h>

/* Tretmann X-Bike BLE Cadence Sensor – Firmware 1.2.0
 * ESP32 DevKit / NimBLE-Arduino 2.x
 * Reed-Kontakt: GPIO27 gegen GND
 * Kontroll-LED: GPIO26 über 330 Ohm gegen GND
 */
#define REED_PIN 27
#define LED_PIN 26
#define DEVICE_NAME "XBike Cadence"
#define FIRMWARE_VERSION "1.2.0"
#define DEBOUNCE_US 80000
#define LED_DURATION_MS 100
#define BLE_INTERVAL_MS 1000

volatile uint16_t revolutions = 0;
volatile uint16_t eventTime = 0;
volatile uint32_t lastPulse = 0;
NimBLEServer* bleServer = nullptr;
NimBLECharacteristic* cscMeasurement = nullptr;
uint32_t lastLedPulse = 0;
uint32_t lastSend = 0;
uint32_t lastAdvertisingCheck = 0;
uint16_t lastDisplayedRevs = 0;

void IRAM_ATTR reedInterrupt() {
  uint32_t now = micros();
  if ((uint32_t)(now - lastPulse) < DEBOUNCE_US) return;
  lastPulse = now;
  revolutions++;
  eventTime = (uint16_t)(((uint64_t)now * 1024ULL) / 1000000ULL);
}

class ServerCallbacks : public NimBLEServerCallbacks {
  void onConnect(NimBLEServer* server, NimBLEConnInfo& connInfo) override {
    Serial.println("BLE: Verbunden");
  }
  void onDisconnect(NimBLEServer* server, NimBLEConnInfo& connInfo,
                    int reason) override {
    Serial.printf("BLE: Getrennt (Grund: %d)\n", reason);
    NimBLEDevice::startAdvertising();
    Serial.println("BLE: Advertising neu gestartet");
  }
};

void setup() {
  Serial.begin(115200);
  delay(300);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  pinMode(REED_PIN, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(REED_PIN), reedInterrupt, FALLING);

  NimBLEDevice::init(DEVICE_NAME);
  bleServer = NimBLEDevice::createServer();
  bleServer->setCallbacks(new ServerCallbacks());

  NimBLEService* cscService = bleServer->createService("1816");
  cscMeasurement = cscService->createCharacteristic(
    "2A5B", NIMBLE_PROPERTY::NOTIFY);
  auto* feature = cscService->createCharacteristic(
    "2A5C", NIMBLE_PROPERTY::READ);
  uint8_t featureData[2] = {0x02, 0x00};
  feature->setValue(featureData, 2);
  auto* location = cscService->createCharacteristic(
    "2A5D", NIMBLE_PROPERTY::READ);
  uint8_t sensorLocation = 0x05; // Left Crank
  location->setValue(&sensorLocation, 1);
  cscService->start();

  NimBLEService* deviceInfo = bleServer->createService("180A");
  auto* manufacturer = deviceInfo->createCharacteristic(
    "2A29", NIMBLE_PROPERTY::READ);
  manufacturer->setValue("XBike DIY");
  auto* model = deviceInfo->createCharacteristic(
    "2A24", NIMBLE_PROPERTY::READ);
  model->setValue("ESP32 Cadence");
  auto* firmware = deviceInfo->createCharacteristic(
    "2A26", NIMBLE_PROPERTY::READ);
  firmware->setValue(FIRMWARE_VERSION);
  auto* software = deviceInfo->createCharacteristic(
    "2A28", NIMBLE_PROPERTY::READ);
  software->setValue(FIRMWARE_VERSION);
  deviceInfo->start();

  NimBLEService* battery = bleServer->createService("180F");
  auto* batteryLevel = battery->createCharacteristic(
    "2A19", NIMBLE_PROPERTY::READ);
  uint8_t level = 100; // simuliert, USB-Versorgung
  batteryLevel->setValue(&level, 1);
  battery->start();

  NimBLEAdvertising* advertising = NimBLEDevice::getAdvertising();
  advertising->addServiceUUID("1816");
  advertising->setName(DEVICE_NAME);
  NimBLEDevice::startAdvertising();
  Serial.println("XBike Cadence gestartet – Firmware " FIRMWARE_VERSION);
}

void loop() {
  uint16_t revs, timeValue;
  noInterrupts();
  revs = revolutions;
  timeValue = eventTime;
  interrupts();

  if (revs != lastDisplayedRevs) {
    lastDisplayedRevs = revs;
    lastLedPulse = millis();
    digitalWrite(LED_PIN, HIGH);
    Serial.printf("Pedalumdrehungen: %u\n", revs);
  }
  if (millis() - lastLedPulse >= LED_DURATION_MS)
    digitalWrite(LED_PIN, LOW);

  if (millis() - lastSend >= BLE_INTERVAL_MS) {
    lastSend = millis();
    uint8_t data[5] = {
      0x02,
      (uint8_t)(revs & 0xFF), (uint8_t)(revs >> 8),
      (uint8_t)(timeValue & 0xFF), (uint8_t)(timeValue >> 8)
    };
    cscMeasurement->setValue(data, 5);
    if (bleServer->getConnectedCount() > 0) cscMeasurement->notify();
  }

  if (millis() - lastAdvertisingCheck >= 5000) {
    lastAdvertisingCheck = millis();
    if (bleServer->getConnectedCount() == 0) {
      NimBLEAdvertising* advertising = NimBLEDevice::getAdvertising();
      if (!advertising->isAdvertising()) {
        Serial.println("BLE: Advertising inaktiv - Neustart");
        NimBLEDevice::startAdvertising();
      }
    }
  }
  delay(5);
}

7. Amazfit Bip 6 verbinden und testen

  1. ESP32 über USB einschalten.
  2. Auf der Amazfit Bip 6 die Einstellungen für externe Geräte öffnen.
  3. Nach einem Trittfrequenzsensor suchen und XBike Cadence auswählen.
  4. Ein Training „Drinnen Radfahren“ starten und die Pedale bewegen.
  5. Nach dem Training die Trittfrequenzkurve in der Zepp-App kontrollieren.

Bei meinem Test wurden in 3:26 Minuten eine durchschnittliche Trittfrequenz von 61 U/min und ein Höchstwert von 69 U/min aufgezeichnet. Die Uhr zeigt außerdem Hersteller, Softwareversion und den simulierten Akkustand an.

 

8. Fehlerbehebung und Wiederverbindung

In einer früheren Firmware konnte die Uhr den Sensor nach dem Beenden eines Trainings zeitweise nicht erneut finden. Ein Aus- und Einschalten des ESP32 stellte die Erkennung wieder her. Version 1.2.0 ergänzt deshalb einen onDisconnect()-Callback und eine regelmäßige Advertising-Kontrolle. Bei einem späteren Test konnte die Uhr den Sensor nach über zehn Minuten Ruhe wieder verbinden, ohne dass der ESP32 neu gestartet werden musste.

Falls der Sensor nicht auftaucht: USB-Stromversorgung kurz trennen, den ESP32 erneut starten und die Suche wiederholen. Für eine weitergehende Diagnose im seriellen Monitor auf Meldungen wie „BLE: Verbunden“ und „BLE: Getrennt“ achten. Ein fehlender Suchtreffer kann auch bedeuten, dass der Sensor noch verbunden ist.

9. Fazit und mögliche Erweiterungen

Mit dem vorhandenen Reed-Kontakt, einem ESP32 und wenigen Bauteilen lässt sich das Tretmann X-Bike um eine standardisierte Bluetooth-Trittfrequenzmessung erweitern. Die Übertragung und Aufzeichnung mit der Amazfit Bip 6 wurden praktisch bestätigt.

Als spätere Erweiterung ist die Erfassung der festen Widerstandsstufen denkbar. Daraus könnte zusammen mit der Trittfrequenz eine geschätzte Leistung in Watt berechnet werden. Ohne Kalibrierung wäre dies allerdings kein verlässlicher Leistungsmesswert.

Den Einbau in ein entsprechendes Gehäuse überlasse ich jetzt jedem selbst. Alternativ tut es auch etwas Klebeband ;-) 

Hinweis: Der Aufbau wurde mit dem beschriebenen Tretmann X-Bike und einer Amazfit Bip 6 getestet. Die Funktion anderer Geräte, Sensorbeschaltungen und Firmwarestände ist nicht automatisch gewährleistet.

2010-09-03

Nokia C6 Erfahrungsbericht Teil 6




Augmented Reality extreme



Wie wäre es, wenn ich mit der Kamera meines Smartphones ein Bild meiner Umgebung an eine Website sende oder eine App habe, die dieses Bild an eine Website sendet, GPS-Daten inklusive. Daraufhin werden mir ausgewählte Informationen virtuell in mein Kamerabild eingblendet.
Themen:
  • Stadtinformationen
  • Übernachtung
  • Essen und Trinken
  • Öffentliche Verkehrsmittel
  • Werbung - Werbung?
Informationen sind ja in Ordnung, aber Werbung - wer will das?

Wir werden täglich auf allen Kanälen damit überschüttet, bin gespannt, wann dieser Kanal entdeckt wird.


2010-08-12

Meine Social Media Toolbox

toolbox

Wer mir erzählen möchte, dass man Social Media Aktivitäten in 10 Minuten am Tag “abvespern” kann, dem kann ich nur sagen: das geht nicht!

Social Media benötigt Zeit. Zeit, die auch eine gute Konversation benötigt. Alles andere ist nur Smalltalk oder ein kurzes “Hallo” wie wenn man sich auf dem Flur begegnet.

Jedoch kann man Tools einsetzen, die einem das Leben etwas erleichtern und Zeit einsparen können.

  • Social Media Dashboard
    Zwar bieten die Webseiten der Social Media Tools wie Twitter oder Facebook die Möglichkeit, diese direkt ohne weitere Software zu bedienen, jedoch hat es sich für mich gezeigt, dass ich mehrere Dienste gerne unter einer Haube zusammenfasse. Hootsuite bietet hier die schöne Möglichkeit, Tweets zeitgesteuert zu senden und auch mehrere Twitter-Accounts zu bedienen. Tweetdeck ist ein übersichtlicher Client für Twitter und Facebook für die Adobe Air Plattform.
  • Content Management System
    Hier nutze ich Wordpress. Wordpress entstand eigentlich als Blogging-System. Diesen Wurzeln ist es entwachsen und bietet besonders mit der Version 3.0 Funktionen an, die es zu einem kompletten CMS machen. Wordpress ist kostenfrei, lässt sich schnell und einfach installieren und es gibt Tausende von Erweiterungen und Themen, so dass man sich “sein” Wordpress mit ein paar Klicks zusammenstellen kann.
  • Smartphone
    Kommunikation ist alles. Ein Smartphone ist heutzutage nicht nur ein Mobiltelefon. Ein Smartphone ist ein Kommunikationsgerät auf allen möglichen Kanälen. Außerdem kann es zum mobilen Büro werden. Kontakte, Emails, Internet, Navigation, Textverarbeitung – alles an Bord.
  • Notizbuch
    Die Elektronik unterstützt uns heute in vielen Lebenslagen, und ein Arbeiten ohne Computer ist zwar vorstellbar, jedoch in manchen Punkten tatsächlich umständlich. In solchen Fällen geht dann nichts über einen Stift und ein Stück Papier. Kein Booten, kein Systemabsturz, kein Strom, sofort einsatzbereit.
  • Google
    Google ist auf der einen Seite sicher ein immenser Datensammler. Trotzdem bietet Google interessante Tools, die man nicht verachten sollte. Ich nutze am meisten den Google Reader, der mir übersichtlich, Plattform- und maschinenübergreifend meine “Tageszeitung” auf den Computer zaubert. Google Maps dient mir dazu, sich mal schnell zu orientieren und Google Places nutze ich, um mein eigenes Unternehmen darzustellen.
  • Bookmarking
    Am Tag sammeln sich haufenweise Fundstücke im Netz an, die man (vielleicht) irgendwann mal lesen möchte. Hierzu habe ich meinen eigenen Webdienst entwickelt: http://MySiteBar.de . Kostenfrei, einfach zu bedienen und Smartphone-fähig.
  • Cloud Storage
    Eine schicke Sache, wenn man mit mehreren Maschinen und dem Smartphone arbeitet. So kann ich von mehreren Arbeitsplätzen aus auf dieselben Dateien zugreifen, ohne jedes Mal einen USB-Stick anzustecken. Empfehlen kann ich DropBox. DropBox gibt es für Windows, Mac OS, Linux und viele Smartphone-Betriebssysteme. So kann ich meine aktuellen Daten auf alle meinen Systemen ohne aufwändige Synchronisation sofort und schnell einsehen und bearbeiten.

Einen Instant Messenger zähle ich nicht zu meiner Toolbox. Denn für ein ausführliches Gespräch bevorzuge ich immer noch das Telefon, alternativ die Email. Wenn es sich nur um eine Kurzmitteilung handelt, dann tut es auch auch mal Twitter.

2010-08-11

Macht uns SocialMedia kommunikativer?

kommunikation 

Wie sieht das heutige Verhalten mit elektronischer Kommunikation eigentlich aus?

Ständig kommunizieren wir. Wir haben unseren Notebook an und sind mit tausenden von Freunden connected. Wir stieren auf unser Smartphone, kapseln uns in die virtuelle Realität und sind nur noch aufnahmefähig für Tweets, Status Updates und Feeds.

Wie werden wir von unserer Umwelt wahrgenommen?

Eigentlich gar nicht kommunikativ. Denn unsere elektronische Kommunikationseinrichtung kapselt uns nach außen hin. Ein Kanal in die direkte, reale Umgebung ist da meistens nicht mehr offen. Wir schaffen es gerade noch, einen affe dabei zu trinken.

Wie können wir trotz SocialMedia noch kommunikativ sein?

Mein Tip: mal die Finger weg lassen von der Elektronik und zurückkehren zu den alten Gesten mit den Händen. Allein durch diese kleine Handlung öffnen wir uns wieder für unsere direkte Umgebung. Auch reales Gesten mit der Hand bringen uns zurück in die Realität. Dankesschreiben, ein Händeschütteln oder auch ein Zuwinken hilft uns, die unmittelbare, direkte Kommunikation wieder zu intensivieren.

Eine kleine beginnende Geste ist übrigens die, das Smartphone auszuschalten (nicht Stand-by – ausschalten!) und tief in die Tasche zu stecken. Das zeigt meinem Gegenüber die Bereitschaft: jetzt kommunizieren wir miteinander.

2010-08-08

Jetzt weiß ich es – socialn!

socialn

Ich habe mich schon oft gefragt, wie man es nennt, wenn man gerade in den sozialen Netzen unterwegs ist und twittert, facebookt oder ähnliches macht.

Es kam jetzt auf einer Werbung: man nennt es socialn.

Eigentlich ganz einfach.

2010-07-02

ToDo-Liste digital?



Digitale ToDo-Listen gibt es wie Sand am Meer. Kostenpflichtige und kostenfreie Lösungen. Mit GTD-Unterstützung, online, offline, mit Synchronisation zwischen verschiedenen Plattformen. Für den Einzeluser, für Teams, mit Projektmanagement. Alle Farben und Formen frei wählbar.
Doch sollten wir an dieser Stelle nicht vergessen: es geht darum, sich Dinge zu merken, die man tun möchte/soll/muss und dabei eine Reihenfolge festzulegen.

Oft entstehen dabei literarische Gesamtkunstwerke, die lange Zeit einmal erstellt dann unveränderlich im digitalen Nirwana gespeichert werden. Bis sie dann nach einem langen Dornröschenschlaf beim Aufräumen der Festplatte wieder an die Oberfläche gelangen. Nicht, um abgearbeitet zu werden, sondern eher zur Vergangenheitsbewältigung und zur allgemeinen Belustigung.

Aus diesem Grund stellt sich die Frage: macht eine digitale ToDo-Liste wirklich Sinn?

Eine ToDo-Liste ist nicht eine Liste von geplanten Projekten, sondern eine Aufzählung von Arbeitsschritten, einzelnen Aufgaben (zur Definition eines Projektes empfehle ich einen früheren Artikel von mir).
Eine ToDo-Liste muss sofort und immer im Zugriff sein. Von daher kann ich von Programmen und Online-Tools nur abraten.
Papier und Stift "booten" definitiv schneller und benötigen keinen Internet-Zugang. Gewöhnt man sich an, immer "sein Notizbuch" dabeizuhaben - in welcher Form auch immer -, dann hat man auch immer seine ToDo-Liste dabei.
Auf die Möglichkeit, ein Smartphone zu nutzen, könnte ich mich vielleicht noch einlassen, aber nur vielleicht...


2010-06-02

Was für ein Spielzeug




Eigentlich war mir Apple immer etwas zu 'snobbish' - ich habe mich eines Besseren belehren lassen.
Der iPod Touch hat es in sich. Bereits das Auspacken ist ein Erlebnis. Hier wird nicht nur eine Blisterverpackung aufgeschnitten, nein, hier wird eine designte Acrylglashülle andächtig geöffnet. Man kommt sich als Mann fast so vor wie eine Frau beim Öffnen einer kleinen Schatulle eines Diamantrings.
Das Gerät erklärt sich von selbst. Einziges Manko, iTunes muss installiert werden. Ohne diese Apple-eigene Software geht gar nichts. Der Vorteil bei iTunes wiederum ist, dass wirklich alles einfach funktioniert. Ich kann meine MP3-Sammlung übernehmen, Videos aufspielen und auch die Apps verwalten. Schöne runde Sache.
Auch diesen Blog-Beitrag verfasse ich über eine App die eine direkte Schnitttelle (API) zu meinem Blogsystem hat.
Ich bin begeistert.
Ich muss zugeben, dass ich Befürworter eines iPod Touch oder auch iPhones jetzt etwas besser verstehen kann. Fehlt mir bei diesem Gerät noch das Handy und die 3G Datenverbindung, so hat es sich bereits gezeigt, dass ich, WLAN-Verbindung vorausgesetzt, meinen Computer nur noch selten anschalte. Die komplette Kommunikation kann ich nun über dieses Gerät abwickeln.

Damit ist der eigentliche MP3-Player für mich zum Allrounder in Bezug auf Publizierung und Kommunikation geworden.
Ach ja, ab und zu genieße ich auch mal wieder eine Lieblings-CD mit diesem Gerät.