Forum: Mikrocontroller und Digitale Elektronik POLAR Wearlink Bluetooth Protokoll?


von GPS'ler (Gast)


Lesenswert?

Hallo

über das Herzfrequenz messen gibts ja einige Beiträge. Ich möchte 
eventuell einen POLAR Wearlink Bluetooth Brustgurt an einen Atmega mit 
GPS-Modul anschließen. Ich habe da das BCA8-BTM-328 Modul.
In einigen Foren wurde aber auch diskutiert, dass das Protokoll von dem 
Gurt nicht verfügbar wäre. Ein Beitrag behauptet aber, dass das 
Protokoll "simpel" wäre.
Von einigen PDA Tools wird der Gurt unterstützt (nur mit 
Lizenzgebühren?).
Meine Frage ist nun, hat jemand diesen Gurt schon mal an einen Atmega 
mit Bluetooth angeschlossen und kann was über das Protokoll sagen?

Leider habe ich nicht wirklich was darüber gefunden. Auf verdacht den 
Gurt zu kaufen, dafür ist der zu teuer.

MfG
Achim

Ps.: Ich weiß, es gibt auch den Zephyr. Der ist aber noch teuerer aber 
das Protokoll ist wohl verfügbar. Hat aber ne andere Ladetechnik.

von GPS'ler (Gast)


Lesenswert?

Hallo

aiweia, mit einer solchen Resonaz hätte ich nicht gerechnet. Hat das 
wirlich noch niemand der Atmelgemeinde angewand?

von Christoph (Gast)


Lesenswert?

Hallo,
ich glaube nicht, dass das WearLink Protokoll irgendwo verfügbar ist.
Ich würde einen Brustgurt mit ANT+ einsetzen.
Da gibt es z.Bsp. von Sparkfun ein fertiges Modul dazu.
http://www.sparkfun.com/products/8565

von GPS'ler (Gast)


Lesenswert?

Hallo

@Christoph das ANT+ Protokoll mag gut sein, aber die Standard 
Brustgürtel können das nicht. Auch ist der Anschluss an 
Standardprogramme nicht vorhanden. Was nützt mir da der erwähnte Modul 
um einen solchen Gurt anzusprechen? Oder habe ich da was nicht 
verstanden.

Es gibt schon ein Java Source Programm für den Polargurt ==> 
http://www.neuroupdate.com/polarbt/  aber ob das funzt weiß ich nicht.

Ich schwanke eben zwischen dem Polar und dem Zephyr.

Außer den Standard-Tools möchte ich da einen "eigenen" Empfangsmodul 
(software) stricken deshalb die Frage.

von Christoph (Gast)


Lesenswert?

Hallo,
In dem von dir angegebenen Programm 
(http://www.neuroupdate.com/polarbt/), das übrigens nicht mit Java 
sondern C# programmiert wurde, werden die Daten über eine serielle 
Schnittstelle gelesen. Entweder geschieht dies direkt über Bluetooth SPP 
oder es hängt noch irgendein Adapter am PC der über die serielle 
Schnittstelle gesteuert wird.
Wenn das direkt über Bluetooth geht, dann ist das auch mit einem ATmega 
und einem Bluetooth Modul mit SPP leicht möglich.

MfG Christoph

von GPS'ler (Gast)


Lesenswert?

Hallo

>>Wenn das direkt über Bluetooth geht, dann ist das auch mit einem ATmega
>>und einem Bluetooth Modul mit SPP leicht möglich.


..das ist schon klar, deshalb die Eingangsfrage nach dem Protokoll. Das 
mit dem Java hatte ich mit einem entsprechenden Zephyr (HxM) Projekt 
verwechselt.
Ich habe ja das Programm übersetzt, kann das aber nicht testen mangels 
Gurt.

von ECG (Gast)


Lesenswert?

Hallo,
gibt es neue Erkenntnisse bezüglich des Protokolls ??

Noch eine schönen 3. Advent

gruß
oscar

von nomenquis (Gast)


Lesenswert?

Hi,

das ist jetzt frei aus dem Gedaechtnis, aber im Prinzip ist es wirklich 
ganz einfach. Einfach eine RFCOMM Verbindung aufbauen zum Gurt.
Man kriegs dann folgende Pakete (jede Zeile ein Byte):

0x254
Packet Laenge
255-Laenge
Packetnummer (von 0 - 15)
irgend ein status
Puls
rri_h
rri_l
rri2_h
rri2_l


Bei mir sind immer entweder 1 oder 2 rri mitgeschickt, das ist einfach 
die Zeit in ms zwischen den Herzschlaegen.

Ab und zu bekomme ich auch Pakete bei denen die ersten 2 Byte fehlen, 
keine Ahnung warum. Aber da die Laenge ja zum Glueck eh 2 mal 
reincodiert ist klappts trotzdem :)

mfg

von ECG (Gast)


Lesenswert?

Na,das klingt ja gut.
Vielen Dank.
Da werde ich mir doch den Gurt zulegen müssen.
Noch einen schönen Abend.
Gruß
oscar

von nomenquis (Gast)


Lesenswert?

Hi,

ich wuerde mir, wenn ich wieder einen braeuchte, aber den Zephyr 
zulegen. Der Polar Gurt hat naemlich keinen Akku. Da wirds schnell 
nervig wenn dir mitten im Laufen die Batterie ausgeht :\


mfg

von Florian G. (floppes)


Lesenswert?

Ich versuche gerade, das Polar WearLink Protokoll zu simulieren. Mein 
Ziel ist es, eine Schaltung für meinen analogen Brustgurt zu basteln, 
die dessen Signal per WearLink Protokoll und Bluetooth an mein Handy 
weiter gibt. Das sollte nicht allzu schwer sein. Für den analogen 
Empfänger gibt es hier gute Beispiele und zum Weiterreichen reicht mir 
ein günstiges Seriell-zu-Bluetooth Modul.

Mit Hilfe des Codes von http://www.neuroupdate.com/polarbt/ habe ich ein 
C# Tool geschrieben, um das Protokoll zu simulieren:
1
SerialPort port = new SerialPort("COM6");
2
port.BaudRate = 115200;
3
port.Parity = Parity.None;
4
port.StopBits = StopBits.One;
5
port.DataBits = 8;
6
port.Handshake = Handshake.None;
7
port.Open();
8
9
byte[] data = new byte[8];
10
11
data[0] = 254; // header
12
data[1] = 8; // length
13
data[2] = 247; // 255 - length
14
data[3] = 1; // index
15
data[4] = 209; //0xF1; // status
16
data[5] = 90; // pulse
17
data[6] = 0x03; // rri_h
18
data[7] = 0xE8; // rri_l
19
20
while (true)
21
{
22
  // increment index
23
  data[3] = (byte)(data[3] + 1);
24
25
  if (data[3] == 15)
26
  {
27
    data[3] = 0;
28
  }
29
30
  port.Write(data, 0, data.Length);
31
32
  Thread.Sleep(1000);
33
}

Das sollte einen konstanten Puls von 90 ausgeben. Mit BlueTerm auf 
meinem Android-Handy sehe ich die Daten, sie kommen also schon mal an. 
Doch leider erkennt keine der Apps (MoveTracker, Runtastic, 
WalkMater...) die simulierten Daten.

Weiß jemand was da falsch läuft?

von Minimalist (Gast)


Lesenswert?

Ich weiß, der Thread ist uralt, aber vielleicht hilt es ja jemand 
weiter, denn ich habe den Thread beim Suchen über Google gefunden, und 
es ist einer der ganz wenigen zum Thema.

Die Lösung, die auch dem TO geholfen hätte ist:
Das Bluetooth gerät muss "Polar iWL" heißen, nur dann wird es als 
Wearlink-Gurt erkannt. So klappt es bei mir mit OruxMaps und Run.GPS!

Anbei mein kleines Python-Testprogramm (linux, daher /dev/rfcomm0):
1
import serial
2
from time import sleep
3
4
ser = serial.Serial(port='/dev/rfcomm0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)  # open serial port
5
6
print(ser.name)         # check which port was really used
7
8
psep = 0xfe
9
plen = 10
10
pchk = 0xFF - plen
11
pid = 0x00
12
pstatus = 209  #maybe Battery
13
phr = 86
14
psignal = 0x03
15
16
#send init:
17
ser.write(bytearray([0x0a, 0xf5, 0x0c, 0xd1, 0x4c, 0x03, 0x06, 0x02, 0xfc]))
18
ser.write(bytearray([0x0a, 0xf5, 0x0a, 0xd1, 0x49, 0x03, 0x5e, 0x03, 0x44]))
19
20
while (1):    
21
    sleep(1)
22
    
23
    t_ms = int((60.0/phr)*1000)
24
    int_h = t_ms/256
25
    int_l = t_ms%256    
26
    bytestring = bytearray([psep, plen, pchk, pid, pstatus, phr, int_h, int_l, int_h, int_l])
27
    print repr(bytestring)
28
    try:
29
        ser.write(bytestring)
30
    except:
31
        print "write error..."
32
        # 
33
    pid += 1
34
    if pid == 0x10: pid = 0x00
35
ser.close()

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.