ユーザ用ツール

サイト用ツール


サイドバー

サイドバー

TOP ページ




外部リンク

kb:mbed-ble:memo

日付別メモ

6/14メモ

  • 下調べ。
  • 開発チームはココ。mbed BLE API homepage
  • 使っているハードウェアは、nRF51822 Evaluation Kit。
  • GAPとGATTに対応。
  • GATTのサンプルコードは、BLE_HeartRate
  • BLEDevice,GattService,GattCharacteristicクラス。
  • 静的変数を用意しておき、Characteristicクラスに紐づけておくことで、BLEのCharacteristicと同期される模様。

6/15メモ

  • ハードウェアが手元に届いた。mbed HRM1017
  • mbedオンラインコンパイラのPlatformは、Nordic nRF51822を選択する。
  • 内蔵オシレーター32KHzなので注意。(nRF51822-mKITは、外部32KHz。)
  • コンパイル結果のHEXファイルをmbedドライブへコピーすれば書き込める。ブラウザから直書きはダメ。一旦、ローカル保存を経由する。
  • SurfacePro2のペアリングには何も表示されない。

6/16メモ

  • mbed HRM1017(BLE_Health_Thermometer_IRC) + iPhone(Nordic Toolbox)は、認識できた。
  • mbed HRM1017(BLE_Health_Thermometer_IRC) + Nexus7(Nordic Toolbox)は、認識できず。というか、手元のNexus7はBLE未対応みたい。
  • BLE喋れるデバイスが、SurfacePro2とTOSHIBA DynabookTabしかない。両方、Win8.1。
  • なんとかしてWin8.1でBLE喋らせるしか道が無さそう。
  • Win8.1から、WinストアアプリでBLEできる模様。
  • BluetoothSIG提供の、ApplicationAcceleratorが使えそう。
  • GATT違いでダメでした。BLE_Health_Thermometer_IRCは「UUID_HEALTH_THERMOMETER_SERVICE = 0x1809,」で、ApplicationAcceleratorは「HeartRateMeasurement 0x2A37」。
  • 明日、ApplicationAcceleratorのコードを書き換えてみることにしよう。

6/17メモ(Win8.1StoreApp)

  • GattServiceUuids.HeartRate = “{0000180d-0000-1000-8000-00805f9b34fb}”
  • Uuidを“180d-0000-0000-…“に変更。→Guidで例外。
  • GattDeviceService.GetDeviceSelectorFromUuid()をGattDeviceService.GetDeviceSelectorFromShortId(0x180d)に変更。→Not found
  • 恐ろしい記述を発見。「Windows 8.1 supports only GATT client mode.」

6/17メモ

  • mbed HRM1017(BLE_Health_Thermometer_IRC改) + SurfacePro2(BluetoothSmartDeviceGATTProfileChecker)で、接続に成功。

6/18メモ

  • SHORTENED_LOCAL_NAMEのpayloadが正しいか不安だったので、Bluetooth specificationを確認したところ、長さ情報が無かった。したがって、終端の'\0'が必要と思われる。strlen()に+1が必要。
  • 文字コードがUTF-8だということが分かったので、日本語が表示できるか試してみた。(必要なのか?疑問ではあるが。)

6/20メモ

  • ペアリング後のデバイス名を指定する方法を模索。
  • Bluetooth LE的には、Generic Access Service)(0x1800)のDevice Name Characteristic(0x2A00)を表示している。
  • mbed HRM1017のconstに、Generic Access Serviceが定義されていない。orz
  • 無理にSerivceを登録したものの、思うように動かず。(名前変わらず。Advertisingまでおかしくなった。Winアプリによって、Generic Access Serviceが表示されたりされなかったり。)
  • Generic Access Serviceを登録しなくても、Winアプリに表示されていた。値はnRF5x。
  • nRFのライブラリ内で設定しているのか???
  • 行き止まり。Generic Access ServiceはSoftDeviceで提供されているため、変更不可らしい。(元ネタ
  • Device Information ServiceのManufacturer Nameでもダメ。ダメになると、何故かAdvertisingの名前もダメになる。

6/24メモ

  • mbedコンパイラでの検索操作が間違ってた。orz
  • CFG_GAP_LOCAL_NAMEに”nRF5x”が定義されていた。
  • 深堀りすると、nRF51822n::init()→btle_init()→btle_gap_init()→sd_ble_gap_device_name_set()で設定していることが分かった。
  • こちらに類似情報あり。How to discover a custom Bluetooth LE device
  • 偶然、mbed+HRM1017の情報を発見。「なお mbed版 nRF51822ではライブラリ側に“Generic Access”と“Generic Attribute”が組み込まれているため」という記述がある。←0x1800,0x1801

7/5メモ

  • 6/18メモの「Bluetooth specificationを確認したところ、長さ情報が無かった。」は間違いっぽい。掘り下げ中。vol3,PartB,3 Data Representationあたり。
  • data element = header field + data field
  • header field = type descripter + size descripter
  • type descripterは5bits
  • size descripterは3bits
  • The size index is contained in the least significant (loworder) 3 bits of the first byte of the data element header.
  • というわけで、6/18メモの「Bluetooth specificationを確認したところ、長さ情報が無かった。」は間違い。
  • 以前によくわからなかったUUID。ここに載っていた。vol3,Part F,3,3.2 Basic Concepts。

7/7メモ

  • WindowsのBluetoothLEアクセス方法を再考。
  • Bluetooth LEの対応は、Windows8以降。
  • Windows8以降は、APIがある。SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiGetDeviceInterfaceDetailでサービスを探して、CreateFileでオープン。BluetoothGATTGetServicesやBleGetGattCharacteristicでアクセス。
  • Windows8.1は、WinRTにクラスが追加されている。Windows.Devices.Bluetooth.GenericAttributeProfile名前空間。
  • DesktopAppでも、(csprojを編集して)TargetPlatformVersionを8.1にして、Windowsコア参照すれば、WinRTのクラスが使える。

7/8メモ

  • WinRTクラスを確認。いろいろ難あり。
  • 1.deviceだけの一覧を取得できない。(deviceとserviceの直積が得られる。)
  • 2.serviceからcharacteristicの一覧を取得できない。(Windows Phoneだけは可能?)
  • 特に、2.ができないのは開発時にツラい。

7/10メモ

  • DeviceInformationを掘り下げた結果、deviceやserviceの一覧取得に成功。
  • ライブラリ化した。mjwinble

7/15メモ

  • WindowsでUUIDを生成したいときは、uuidgen。

7/16メモ

  • {BLE_API_Native_IRC}が、128bit UUID Characteristicに対応していないことが判明。{BLE_API+nRF51822}で対応している。
  • がっ! {BLE_API+nRF51822}だと、Windowsとのペアリング時にドライバエラーが発生して接続できず。orz
  • nRF51822のRev.31→33で、ペアリングできなくなっている。
  • BOND_MANAGERとPSTORAGEが無効になったことが影響している。両方とも有効にしてみたところ、ペアリングできた!

7/18メモ

  • PSTORAGEだけ有効ではダメ。
  • BOND_MANAGERを有効にするには、PSTORAGEも有効にする必要がある。(コンパイルエラー)
  • したがって、両方を有効にすることで、Windows 8.1とペアリング可能に。
  • NEED_BOND_MANAGERならびにNEED_PSTORAGEをdefineすると有効化できるようにコーディングしてあるように見受けられるが、定義するファイルが不明…。
  • mbed.orgに、カタコト英語で質問をポスト!

7/22メモ

  • NEED_BOND_MANAGERとNEED_PSTORAGEの件、回答あり。当面はライブラリ書き換えで対応する。
  • キャッシュ無しreadが4秒周期。vol3, Part C, 12.3 Peripheral Preferred Connection Paramterが作用している模様。
  • GAPから取得した値はこちら。“9001200300009001” → 500msec, 1000msec, 0, 4000msec.
  • btle_gap.cppのbtle_gap_init()で初期設定している。値はprojectconfig.hから。
  • Connection Supervision timeout multiplier(CFG_GAP_CONNECTION_SUPERVISION_TIMEOUT_MS)が4秒。
  • projectconfig.hを書き換えても、connection parameter変わらない!?Characteristicを読み出して確認。
kb/mbed-ble/memo.txt · 最終更新: 2014/07/22 21:28 by t-matsuoka