無線(mbed HRM1017)

mbed HRM1017 (3)konashi.jsでナイトライダー

Knight700

前回と同じくLチカですが、今回はkonashi.jsを使ってCentralなアプリを自作したみたいと思います。

konashi.jsについて

mbedのBLEモジュールができて、Peripheral側は気軽に作れるようになりましたが、Central側のアプリを作るのが結局大変ですよね。

mbed HRM1017と同じく、konashiというBLEモジュールがありますが、konashiは、iOSのSDKが公開され、それを使ってプログラムを作れます。さらに、konashiはkonashi.jsとういのが出ていて、JavaScript, CSS, HTMLを駆使してWebアプリとして作ったものが利用できます。

私はWebアプリは苦手なので、思ったようなプログラムを作ることはできないんですが、jsdo.itを使って簡単にプログラムを作れて、公開できるという、お手軽さ感はあります。

今回はkonashi.jsを使ってmbed HRM1017を動かしてみる訳ですが、konashiが使っているサービスおよびキャラクタリスティックに合わせてmbedのプログラムを作れば、konashi.jsから利用できるということになりますね

konashi.jsのプログラム

mbed HRM1017でもナイトライダー!※新しいタイプのコードに書き換えないと動作しません)」という、konashi.jsのプログラムを作ってみました。これは以前「SBBLEでもナイトライダー!」というのを作ったんですが、JavaScriptの本質部分のプログラムは同じで、表示される名称や、ReadMeなどの説明をmbed HRM1017用に書き換えただけのものです。

プログラミングは、パソコンのブラウザなどで、jsdo.itにアクセスして、そこで作ります。今回使用するのは、

になります。

これを編集などしたい場合は、「Fork」のボタンがあるので、それをクリックして、複製を作れば、自分用に「Edit」可能になります。

Safariscreensnapz044

プログラムは、JavaScript, HTML, CSSのタブをクリックして、それぞれにプログラムを書き込めます。説明文などは、Readmeに書きます。

今回のLEDを順に転送させるというプログラムの本質部分は、JavaScriptの中の以下の図のところになります。全部の説明はしてられませんので、そこだけ簡単に書いておきます。

  • setIntervalで0.1秒ごとにLEDを光らせるk.digitalWriteAllを送信
  • PIOのオン・オフは、1バイトのビットで0〜7番ピンを表しています。k.digitalWriteAllで光らせるピン番号のビットを立てて送信します。

Safariscreensnapz042

mbedのプログラム

今回のサンプルは「BLE_Knight_Rider_PIO_Sample※新しいタイプのコードに書き換えないと動作しません)」です。「Import this program」で取り込んで下さい。

A)ピンの設定

Safariscreensnapz047

B)サービスおよびPIOデータのキャラクタリスティック

使うサービスおよびキャラクタリスティックは、konashiのサービスおよびPIOデータのキャラクタリスティックと同じに設定します。

  • KONASHI_SERVICE_UUID = 0xFF00
  • KONASHI_PIO_OUTPUT_UUID = 0x3002

になります。

Safariscreensnapz046

Safariscreensnapz045

C)データ処理

GattServerEventHandlerで送られたデータを受け取ります。
Safariscreensnapz048

受け取ったデータは、以下の「DoPio」で処理するようにしました。

PIOのデータは1バイトで、それぞれのビットでピンに設定したP0_0〜P0_7ピンまでのオン・オフを示すようになっているので、OUTをオン・オフするような処理をします。
Safariscreensnapz043

配線

「 (3)konashi.jsでナイトライダー」と同じです。1から4番ピンを行ったり来たりするようにしてるので、P0_1,P0_2,P0_3,P0_4にLEDを繋げています。
Knight700x

Warning

LEDなどを接続する際には、FETなどでドライブするようにしてください。
nRF51822のポートは0.5mAまでしか流せません。
画像のLEDは抵抗入りのLEDを使ってます。

動作テスト

App Storeからkonashi.jsアプリをダウンロード

動作チェック

  1. konashi.jsを起動
  2. Userからmicutilを検索
  3. mbed HRM1017でもナイトライダー!」をタップ
  4. 「矢印」をタップ
  5. 「Find」をタップして接続

Img_5498_2 Img_5538

Img_5537 Img_5539

どうでしたか?うまくLEDが点灯したでしょうか?私はJavaScriptとかWebアプリ系のことは苦手なんですが、とりあえず手っ取り早く作れて、テストできて、公開できるというメリットがkonashi.jsにはありますかね

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ

Photo  

| | コメント (0) | トラックバック (0)

mbed HRM1017 (7)techBASICでナイトライダー

Knight700t
「 (3)konashi.jsでナイトライダー」で使った「BLE_Knight_Rider_PIO_Sample※新しいタイプのコードに書き換えないと動作しません)」のmbed HRM1017のPIOのサンプルで、techBASICで動かすサンプルを作ってみたいと思います。

mbedプログラム少し復習

BLE_Knight_Rider_PIO_Sample」のmain.cppで、サービスおよびPIOデータのキャラクタリスティックは、それぞれ

  • KONASHI_SERVICE_UUID = 0xFF00
  • KONASHI_PIO_OUTPUT_UUID = 0x3002

としてあります。
PIOのデータは1バイトで、それぞれのビットでP0_0ピン〜P0_7ピンまでのオン・オフを示すようになっています。
Safariscreensnapz043

techBASICのプログラム

techBASICのプログラムは、「 (3)konashi.jsでナイトライダー」のプログラムに似せて組んでみました。

BLE用techBASIC空コード」を元に、まず、サービスおよびPIOデータのキャラクタリスティックをそれぞれ、FF00と0x3002にします。

Tbeditorscreensnapz004

次にPIOの送信データ処理です。nullEventループ関数の中にkonashi.jsと同じ0.1秒間隔でPIOのピンの番号を変えながらsendByteで送信しています。ざっと簡単に説明すると、

  • targetledは、光らせるLEDのピン番号です。
  • shiftdirは、次にピン番号を増すか減らすかの方向をしめしていて、1から4番ピンを行ったり来たりするようにしています。
  • lastTickは最後に送信した時間です。0.1秒間隔で処理するようにしています。
  • isReadyは接続して各種データを取得できたら"1"に、そうでないなら"0"です。
  • sendCharは、送信用のキャラクタリスティックです。3002のPIOデータのキャラクタリスティックが取得できていれば処理するようにしてます。

Tbeditorscreensnapz003

配線

「 (3)konashi.jsでナイトライダー」と同じです。1から4番ピンを行ったり来たりするようにしてるので、P0_1,P0_2,P0_3,P0_4にLEDを繋げています。
Knight700x

Warning

LEDなどを接続する際には、FETなどでドライブするようにしてください。
nRF51822のポートは0.5mAまでしか流せません。
画像のLEDは抵抗入りのLEDを使ってます。

動作確認

  1. techBASIC起動
  2. 新規にファイルを作って「KnightRider.txt」をペーストします。
  3. 「Console」をタップ:図①
  4. 「Run」をタップ:図②
  5. mbed HRM1017を選択して、接続が完了するとLEDが点灯し始めます。

Img_5502

さて、動きましたでしょうか?
今回は、techBASICを使って、データを送信するプログラムを作ってみました。前回と合わせて、とりあえず受送信のプログラムをtechBASICでやってみました。簡単なプログラムなら、techBASICもそれなりに便利かと思いますので、是非利用してみて下さい

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ

Photo
 

| | コメント (0) | トラックバック (0)

mbed HRM1017 (5)温度を計測(konashi.js編)

Adt7410_2

前回、TMP102やADT7410のI2Cで温度を計るプログラムを作りました。前回はCentralのアプリは既存のnRF Toolboxアプリを使って表示しましたが、今回はkonashi.jsで表示してみたいと思います。プログラムや配線は前回と同じものを使います。

mbedのコード

konashiと同じサービスとキャラクタリスティックを使うことで、既存のkonashiのアプリを少し返る程度で利用することができます。前回、サンプルで使った「BLE_ADT7410_TMP102_Sample※新しいタイプのコードに書き換えないと動作しません)」では、#define KONASHI 1で条件コンパイルで使い分けられるようにしてあります。

konashiを使う場合は、サービス:0xFF00、i2c読み込みのキャラクタリスティック:0x300Fに設定します。以下の辺りを確認してみて下さい。

Safariscreensnapz039

konashiの場合は、取得した温度の値は、整数値を1バイト目に、小数点以下1桁を10倍した値として2バイト目としたデータを送信するようにしました。

Safariscreensnapz041

 

konashi.jsのコード

以前作ったADT7410で温度表示ができる「I2Cテスト (温度計:ADT7410)」をmbedの方で送信するデータに合わせて少しだけ改変したのを作りました。

です。

konashi.jsでアクセスして使います。なお、konashiの使い方に関しては、こちらを観て下さい

i2cReadでvalueに取得した2バイトの値は、で書いたように「整数値を1バイト目に、小数点以下1桁を10倍した値」なので、78行目の式で温度の値にしてます。

Safariscreensnapz040

動作テスト

App Storeからkonashi.jsアプリをダウンロード

動作チェック

  1. konashi.jsを起動
  2. Userからmicutilを検索
  3. 温度計ADT7410 or TMP102 with mbed HRM1017」をタップ
  4. 「矢印」をタップ
  5. 「Connect」をタップして接続

Img_5498_2 Img_5499_2

Img_5500 Img_5501

上手く取得できたでしょうか?

konashi.jsを使うには、JavaScript, CSS, HTMLを使いこなせないとなかなか思ったプログラムが作れませんよね。私は非常に苦手です。私は次回紹介するtechBASICを使ったプログラムの方が気軽で好きかなぁ

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ

Photo  

| | コメント (0) | トラックバック (0)

mbed HRM1017 (6)温度を計測(techBASIC編)

Techbasic_ble_mbed_hrm1017

前回、前々回とアプリを変えて温度表示をやってきましたが、今回はtechBASICを使ってBLEをする方法の説明をかねて、簡単なプログラムを作ってみました。

techBASICについて

techBASICは iOSのアプリで、iPad, iPhoneでBASICでプログラムを作って動かすことが可能なアプリです。techBASICはBLEのアプリも比較的簡単に作れるので、 iPad/iPhoneは持ってるけどマックを持ってないのでプログラムを作れないと言う方にはいいかもしれませんね。
techBASIC App
カテゴリ:
 ユーティリティ
価格: ¥1,300  (かな?)

さらに、別売りで AppBuilderもあり、techBASICのプログラムをXcodeでビルドしてアプリを作れるので、App Storeで公開することも可能です。v3.0で日本語にも対応してます。

BLEプログラムの全体像

techBASICによるBLEプログラムの全体像を図にしてみましたこれに沿って作ってある空のプログラムをダウンロードできるようにしましたので参考にして下さい。

全体の流れは

  1. 各種設定
  2. スタート
  3. BLE処理(を参照)
  4. (イベント・タッチ処理ループ)

といった感じで、空のコードをもとに、自分のプログラムに合わせて、以下の事柄を追加・変更して下さい。

  • Service / Characteristic UUIDを設定
  • Constant, Variableの値を設定
  • BLECharacteristicを設定
  • ボタンなどGUIを設定
  • Events and touches drivenでイベント処理
  • BLEServiceInfo関数内でキャラクタリスティックの設定
  • BLECharacteristicInfo関数内で受信データの処理

Techbasic_ble_flow_2

BLE接続確立と通信の流れ

techBASICのBLEの接続確立の流れと、通信時の流れを図にしてみました。空プログラムの関数名と対応させてみてみて下さい。

接続時は、図の中の1〜8の流れで接続されます。

  • BLE利用開始
  • BLE機器発見
  • BLE機器の情報
  • サービスの発見
  • キャラクタの発見

という感じです。

Techbasic_ble_mbed_hrm1017_2

温度表示プログラム

konashi用に作ったものとそうでないもの、および、TMP102用またはADT4710用どれも使えるようにしてあります。

このプログラムのBLE用techBASIC空コードから変更もしくは追加した部分は、以下の2カ所になります。

●サービス・キャラクタリスティックの設定

プログラム最初の方にある、KONASHI=1またはKONASHI=0で、konashi用のサービスで作ったプログラムがmbed HRM1017に入れてあるか、そうでないかを変えます。

Tbeditorscreensnapz001

●送られてきたデータの処理

データを受け取ると、didReceiveに送られるように作ってあります。

konashiの設定の場合は、小数点以上が1バイト目、小数点以下が2バイト目に入れて送信しているので、

  • tmp=Str(d(1)) & "." & Str(d(2))

となります。そうでない設定の場合は、10倍にされた温度が、2バイト目がLow、3バイト目がHighで入っています。そのままStrで文字列に変換してもいいんですが、小数点以下1桁にして表示させるプログラムを加え、

  • x=(d(2)+d(3)*256)*0.1
  • PRINT $ tmp USING "###.#"; x

としてます。さらに3桁目がスペースになるのを嫌うなら、LTRIMを使ってスペースを除去することもできます。

データの表示は、ログメッセージ用に用意してある関数を呼んで表示させてます。

Tbeditorscreensnapz002

動作確認

温度表示プログラム の動作テストをしてみましょう

  1. techBASIC起動
  2. 新規にファイルを作ってのプログラムをコピー
  3. 「Console」をタップ:図①
  4. 「Run」をタップ:図②

Img_5502

接続が確立したら上部に温度が表示されます

Img_5503_2
このプログラムを終了させる時は、「Disconnect」をタップ後に、右上のレンチのアイコンをタップして”ストップ”を選択して止めることができます。

プログラム編集について

実際、iPhoneでプログラムを書くのは大変だと思います。tBeditorというtechBASICのプログラムに適したエディタを作りました。私は大まかにtBeditorで作った後、

  1. メモにコピー
  2. iCloudによってシンクロ後
  3. iPad/iPhoneのメモからコピー
  4. techBASICにペースト

という手順でiPadで動作テストしながらtBeditorで修正して完成させる感じで作ってます。

さらに、もしAppBuilderを持ってれば、Xcodeで書く、または、tBeditorで書いて、そのままシミュレータや実機でテストできるので便利です

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ

Photo  

| | コメント (0) | トラックバック (0)

mbed HRM1017 (4)温度を計測(nRF Toolbox編)

Nrftool

mbed HRM1017をはじめよう」の中で「BLE_Health_Thermometer_IRC」というサンプルプログラムがあります。このサンプルはTMP102というI2Cの温度計を使ったサンプルなんですが、(私が持ってないということで)ADT7410というI2Cの温度計でも動くような、mbed HRM1017で使ってみたいと思います。

ADT7410について

ADT7410は秋月で購入できます。
主な仕様および外観は以下です。

Firefoxscreensnapz001

Screensnapz016

Firefoxscreensnapz002

プログラムをインポートする

今回使用するプログラムは、TMP102用のプログラム(BLE_Health_Thermometer_IRC)をアレンジして作ったADT7410用のプログラムです。こちらのページ(BLE_ADT7410_TMP102_Sample) から「Import this program」で取り込んで下さい。

  • ※プラットフォームは(mbed HRM1017がまだ未登録の場合は)、Nordic nRF51822を選択して下さい。
  • ※ADT7410のライブラリーは、ライブラリーの検索で見つけたものを使っています。

このようなファイルになります。

Safariscreensnapz035

 配線する

Adt410

mbed HRM1017の

  • P0_20 = SCL
  • P0_22 = SDA

と、ADT7410のSCLとSDAを接続します。秋月のADT741のページにあるマニュアルを参考にして下さい。

ADT7410のコード

ADT7410クラスの

コンストラクタ

  • ADT7410(PinName sda, PinName scl, char addr, int hz)

となってます。

アドレスは、0x48x2=0x90で、BUSスピードは400kHzとして、それから、ADT7410とTMP102は、使い分けられるように以下のようにしました。

Safariscreensnapz036

温度取得

  • float getTemp()

で、温度が得られます。updateServiceValuesが周期的に呼ばれるのでそこで温度を取得します。
Safariscreensnapz037

nRF Toolboxで動作テスト

Nordic社のテスト用アプリ「nRF Toolbox」で動作チェックしてみましょう。以下からダウンロードできます。

動作チェック

  1. nRF Toolboxを起動
  2. 「HTM」をタップ
  3. 「Connect」をタップ
  4. 「nRF5x」をタップ

Img_5495 Img_5496

Img_5497 Img_5494

さて、上手く取得できたでしょうか?今回は、以上です。次回は、既存のアプリを使うのではなく、konashi.jsで自作したアプリで温度表示してみたいと思います。

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ

Photo  

| | コメント (3) | トラックバック (0)

mbed HRM1017 (1)mbedなBLE開発ボード

Mbed_hrm1017

mbed HRM1017はNordic社のnRF51822チップを搭載したBLE(Bluetooth Low Energy)開発ボードです。

BLEモジュールもいろいろ出ていますが、私が買ったのは、SBDBT(SBBLE), konashi, RFDuino, BLESerial, FemtoduinoBLE, LightBlue Bean, REBL600FR, そしてmbed HRM1017と8種類になりました
20140712_225348x

BLEのチップは、総務省の工事設計認証(いわゆる技適)を得たものかどうかが気になるところですが、mbed HRM1017は、名前となっているHRM1017という技適を得たものを使用しているので安心して使えますね

プログラムは、書き換え不可(konashi, BLESerial)のものから、c/c++(SBDBT)やSmallBASIC(REBL600FR)で書けるもの、さらに、Arduinoで書けるもの(RFDuino, FemotoduinoBLE, LightBlue Bean)とありましたが、mbed HRM1017の登場で、とうとう、mbedでプログラムができるようになった訳ですね

スペック

  • SoC:Nordic nRF51822(低消費電力のARM Cortex-M0コア、かつ、2.4GHz帯域のBluetooth v4.1準拠) ※nRF51822-mKITと異なり、32.768kHzのクリスタルが非搭載です。
  • GPIO:29本(2.54mmピッチ、最大許容電流ピンあたり0.5mA)
  • 電源:micro-USBもしくはピンヘッダ(1.8-3.6V Typ. 3.0V)
  • USB経由でドラッグアンドドロップ書き込み可
  • シリアルターミナル用USBバーチャルCOMポート搭載
  • オフラインでも使えるCMSIS-DAPデバッグアダプタ搭載
  • ブレッドボードに挿しやすい細いピンヘッダを採用
  • ピン列の間隔(基板の幅)は600mil

といった感じです。

表と裏の写真を撮ってみました

Mbed_hrm1017_front

Mbed_hrm1017_back

ピンアサインはこうなってます
Hrm1017_pinout20140611

今のところ、Arduinoで組めるもので技適の通ったものがまだない中、mbedで組めるものが出たのは大きいですね。mbed HRM1017の価格はmbed NXP LPC1768と同じ5,400円同じ値段でmbedもできて、BLE通信もできるんで、一石二鳥ですね

mbedを始める方も、順当にmbed NXP LPC1768から始めるのもいいですが、両方できちゃうmbed HRM1017を買っちゃうのも手かもしれませんね

これらを始めるにあたっては、mbedのページ

といったページが用意されてます。

で、通信相手が必要ですが、通信相手としてスマフォなどBLE対応機器を使うわけですが、他のモジュール用のアプリケーションやプログラムでも、そのまま使えたり、少し書き換えるだけで使えるようになったりします。mbed HRM1017用として特別なものはまだ殆どありませんが、これから少しずつ増えていくと思います。

●mbed HRM1017に関してのメモ

  • オンラインコンパイラへの登録を依頼中です。登録は7月23日前後
  • オンラインコンパイラでは、Nordic nRF51822を選択
  • タクトスイッチはHRM1017(nRF51822)のリセット用ですが、今のところ機能しない
  • ソルダジャンパ2つは、BLEモジュールのTX,RXとmbedインターフェースを接続。UARTで接続したいときはハンダを除く
  • LEDなどを接続する際には、FETなどでドライブするように
  • nRF51822のポートは0.5mAまでしか流せない

さて、ということで、今回はこんなところにしておきます。今回の内容は、スイッチサイエンスさんのページと、mbed HRM1017をはじめようのページからのコピペばかりで、特別な情報が殆どなくて申し訳ありません。今後、いろいろ情報が増えてきたら、それに合わせてここも充実させて行ければと思います

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ

Photo 

| | コメント (0) | トラックバック (0)