Forum: Mikrocontroller und Digitale Elektronik Bluetooth LE - custom advertising kompatibel zu nRF temp?


von Christian (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Thermometer auf Basis des MCP9844 und einem Bluegiga BLE113
entworfen. Das funktioniert auch sehr gut, ich kann über das health
thermometer profile über diverse Apps auf Android die Temperatur lesen.

Jetzt würde ich das gerne kompatibel zu der App "nRF Temp" von Nordic
Semiconductor machen. Zur Info, dabei wird die Temperatur in die 
Advertising
Pakete gepackt, so dass keine gepairte BT-Verbindung nötig ist.

Custom Advertising ist für mich kein Problem, dafür gibt es von Bluegiga
auch Beispiele. Nur wie genau macht Nordic das für diese App? Leider 
kann
man die Nordic-Sourcen nur herunterladen, wenn man eines ihrer Produkte
gekauft und somit einen Key bekommen hat.

Kann mir einer von euch helfen? Ich bräuchte die UUIDs und den Aufbau 
des
Advertising-Pakets, kompatibel zur nRF Temp-App.

Soweit ich weiß, ist dies noch nicht genormt. Nach einiger Recherche 
packt
Nordic wohl dieselbe Info für Batt-Status und Temperatur identisch zum
GATT-Profil in das Advertisement-Paket. Leider bekomme ich die Längen 
und
Positionen nicht ohne die Nordic-Sourcen heraus! :(

Viele Grüße,
Christian

von Antti L. (trioflex)


Lesenswert?

man kriegt alles aus, auch ohne sources, kann aber aufwendig sein.

ich habe vor paar Jahren das nordic kit gekauft und noch 5000 usd für 
den aNT alliance bezahlt.. alles rostet jetzt irgendwo in einer Kiste.

aber Vorsicht mit BT, ab Januar 2014 muss jeder der ein gerat baut wo 
bluetooth drinne ist 8000 usd gebühren bezahlen, Auch du wenn du den 
bleugiga einbaust.

bis jan 2014 war es noch nicht notendign diesen 8000 usd zu bezahlen.

von Fritz (Gast)


Lesenswert?

Den Produkt Key braucht man nur noch für die Softdevices. Das SDK ist 
seit einiger Zeit auch ohne erhältlich 
(http://developer.nordicsemi.com/).

von Christian (Gast)


Lesenswert?

Hallo Fritz,

danke für den Hinweis! Die Sourcen haben weitergeholfen. Trotzdem
musste ich ewig suchen und woher die den ble_gatt_full_name nehmen,
habe ich bisher nicht gefunden. Die schicken was an den Stack intern
und was da herauskommt, kann ich leider nicht wissen.

Es geht aber auch so! Ich bekomme jetzt sowohl über die Nordic Toolbox
und das GATT-Profil Kontakt als auch über die Nordic nRF Temp 2. :)

Eine Besonderheit, die man nur durch den Code herausbekommt ist, dass
Nordic die Flags im HT-Profil nicht setzt! Laut BT.org müssen es 5 Bytes
sein, 1*flags, 3*wert, 1*exponent. Nordic lässt die Flags weg.

So gehts mit dem BLE113 von Bluegiga und dem MCP8944 von Microchip.
Das GATT-Profil, Project und hw-beschreibung sind identisch zum Bluegiga
htm example.

Viele Grüße,
Christian


  # Set register 0x05 (ambient temperature) for reading
  call hardware_i2c_write( DW, NOSTOP, $01, $05 )

  # Read Temp Registers
  call hardware_i2c_read( DR, STOP, $02 ) (result, data_len, 
i2c_rx_buffer(0:data_len))

  # get MSB, clear bit 5-7, shift right 3 bits
  celsius_msb = i2c_rx_buffer(0:1)
  celsius_msb = celsius_msb & $0f
  celsius_msb = celsius_msb * 1600

  # get LSB
  celsius_lsb = i2c_rx_buffer(1:1)
  celsius_lsb = celsius_lsb * 100
  celsius_lsb = celsius_lsb / 16

  celsius = celsius_msb + celsius_lsb

  #set flags (bit0 0=celsius, 1=fahrenheit)
  tmp(0:1)=0

  #set as float
  tmp(1:4)=float(celsius, -2)

  #write the temperature information to the GATT database
  call attributes_write(xgatt_htm_2a1c,0,5,tmp(0:5))

  # Initialize ADV data
  # Flags = LE General Discovery, single mode device (02 01 06)
  advdata(0:1) = $02    # length
  advdata(1:1) = $01    # field type = flags
  advdata(2:1) = $04    # undirected connectable

  # Battery service
  advdata(3:1) = $04    # length
  advdata(4:1) = $16    # file type = 16 bit uuid
  advdata(5:1) = $0f    #
  advdata(6:1) = $18    # Battery service
  advdata(7:1) = $50    # 80 %

  # Thermometer service
  advdata(8:1) = $07    # length
  advdata(9:1) = $16    # field type = 16 bit uuid
  advdata(10:1) = $09    # health thermometer service
  advdata(11:1) = $18    #
  advdata(12:4) = float(celsius, -2)  # temperature data

  # Set advertisement data
  call gap_set_adv_data(0, 16, advdata(0:16))

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.