VagabondWorksTitle
  当Blogは個人の趣味等に関するものです。Vagabond Worksは実在の企業、組織ではありません。
  著作権等は放棄していません。文章や写真、動画の無断盗用、転用はお断りします。

 bCore/bCoreNKD関連情報はこちら⇒bCore/bCoreNKDまとめページ

bCore NKD サンプルスクリプト 05: BLE端末でスイッチの状態を確認する その1(BLE Read)

スマホやPCなどのBLE端末から通信して、bCoreNKDに接続されたスイッチの状態を読み取らせる
サンプルスクリプトのプロジェクトファイル
この方法では、Readのリクエストが来てから応答する値をスクリプトで用意し応答させる方法です。
Readを行う方法は、この他にサンプルスクリプト 06 の方法もあります。

BLE通信の仕様については基本的に触れません。
この程度の短いスクリプトで簡単にBLE端末から操作するガジェットを作ることができます!

BLE通信の仕様についての参考書籍としては、
iOS×BLE Core Bluetoothプログラミング
堤 修一 (著), 松村 礼央 (著)
をお勧めします。bCoreの開発時にお世話になりました。

GitHubからまとめでDownLoadできるようになっています。



bCoreNDKSample_05.bgproj

プロジェクトファイルについては説明省略


bCoreNDKSample_05_gatt.xml
GATT設定ファイル
このGATT.xmlでは3つのサービスを定義しています。

4~20行目 Generic Access Profile
 BLE端末(Central)側からデバイス(ペリフェラル=bCoreNKD)を見つけるときに識別する
 為の名前と、デバイスのタイプを設定しています。

 UUID:0x2a01 Apperance については、このように定義されています。
 unknown (つまり0)にしてあります。

 id スクリプトから値(Value)を参照する場合に使用する変数名
 read セントラル(通信相手の端末)からみてこの値がReadできるかどうか
 const 値が固定値であるかどうか
 type  ="hex"とすると16進数、しない場合は文字列としてValueが認識される

24~45行目 Device Information 
 デバイス(ペリフェラル=bCoreNKD)に関する情報を設定します。
 省略可能です。

48~58行目 このサンプルスクリプトで使用する LEDを点灯・消灯させる ためのBLE通信の口(characteristic)を設定します。
 このスクリプトでは、見やすくするために恣意的な文字列をUUIDにしていますが、
 UUIDの生成については こちら を参照して適切に設定して下さい。

 advertise "true"にしないとこのサービスが端末から発見できないため利用できなくなる
 description サービス、キャラクタリスティックを説明する文字列
 id スクリプトから値(Value)を参照する場合に使用する変数名
 properties read/write/write_no_responseのそれぞれの属性の有効無効の設定
         今回のサンプルスクリプトは値を端末から司令するだけなので、write_no_responseのみtrue
 value length やり取りされる 値 の長さ(byte 単位)
 value type  typeが Userの場合はReadに対して 
          スクリプトでイベント(event attributes_user_read_request())が発生する

bCoreNDKSample_05_hardware.xml

ハード的な設定に関するXMLファイル

6行目  <sleep enable="false" /> は、通信相手がいない場合に問答無用で
BLE113がスリ-プしないために必要。
このサンプルのように、最初から通信しない場合は、スクリプトが走るとすぐにスリ-プしてしまいます。

9行目 送信アンテナ強度の設定
15が最大値。小さくすることで消費電力を下げられるが、通信可能距離が短くなる。
bias設定は5から変更しないこと。

12行目 <script enable="true" /> がないと、スクリプトが実行されません。
falseにするとスクリプトが実行されなくなります。

14~16行目 各ポートの 3ステートバッファの有効無効、プルアップ/プルダウンの設定を行います。
設定は、P0x、P1x、P2x単位で行います。個々のポート個別に設定を変更することはできません。
indexで、ポート(0:P0x、1:P1x、2:P2x)を選択。
3ステートバッファを有効にしたいビットを tristatemaskで1にします。(全て有効の場合$FF、Px7の有効の場合 $80)
pullで、プルアップ(up)かプルダウン(down)を選択


bCoreNDKSample_05_script.bgs

スクリプト本体ファイル

6~11行目 スクリプト中で使える変数は dim で定義。4byte 32bitのみ使用できます。
 connected 端末との接続の有無を管理するフラグ
 toggle    LEDを点滅させるためのフラグ
 r_result   Port読み出し用
 r_port    Port読み出し用
 r_portData Port読み出し用

14~35行目 event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
Arudinoで言うところの setup()に相当する、スクリプト実行時に最初に呼ばれる処理
Arudinoで言うところの loop()に相当する部分は無いので、イベントドリブンでスクリプトを書く必要があります。

16、17行目 変数の初期化

19~21行目  call hardware_io_port_config_direction(port, direction)
各ポートの入力/出力を設定します。
port (0:P0x、1:P1x、2:P2x)
direction 1を設定したBitが 出力に、0を設定したBitが 入力 に設定されます。
      全出力の場合 $FF、Px7のみ出力にする場合は $80
      ここでは、P0xを全出力 Pull Up、P1xを全入力 Pull Up、P2xを全出力 Pull Up
      に設定しています。

23、24行目 call hardware_io_port_write(port, mask, data)
各ポートの出力に設定したbitの出力値を更新します。 
port (0:P0x、1:P1x、2:P2x)
mask マスクビット、対応するbitが1のbitのみ反映されます。
data  出力データ、対応するbitの0/1がマスクビット1のbitのみ反映されます。

26行目 call hardware_set_soft_timer(time, handle, single_shot)
ソフトウェアタイマ割り込みを設定します。
time 割り込みが発生するカウントを設定します。1カウント=1/32768秒になるため、
    0.5秒ごとに設定する場合 16384 とします。
hadle 割り込み発生時に引き渡されるhandleを設定します。
    handleを変更しても設定できるソフトウェアタイマ割り込みは一つだけです。
    複数設定した場合、最後に設定したソフトウェアタイマ割り込みが有効になります。
single_shot この引数が0の場合は、割り込み発生後再度カウントを開始し
        繰り返しタイマ割り込みが発生します。
        1の場合、割り込み発生後は新たにタイマ割り込みを設定しない
        かぎり再度の割り込み発生は起こりません。


30行目 call gap_set_mode(discover, connect)
 GAPのモードを設定します。引数詳細は API Reference を参照のこと
 ここで、アドバタイズ(端末から見つけてもらえるように情報発信)を開始します。

33行目 call sm_set_bondable_mode(bondable)
 bondableモードの設定をします。引数詳細は API Reference を参照のこと
 ざっくり言うと、端末(セントラル)とbCoreNKD(ペリフェラル)間の接続のセキュリティ認証関係の設定。

40~45行目 event connection_status(connection, flags, address, address_type, conn_interval, timeout, latency, bonding)
 スクリプトが起動してアドバタイズを開始したあと、端末(セントラル)から接続された時に実行される。
 ここでは connected のフラグを立て、点滅中のLEDを一度消灯状態に。
 接続されると、自動的にアドバタイズは終了する。

50~55行目 event connection_disconnected(handle,result)
 端末(セントラル)から接続された状態で、接続が切れた場合に実行される。
 ここでは connected のフラグを消し、再度端末から発見接続可能なように
 するためアドバタイズを再会させる。

59~79行目 event hardware_soft_timer(handle)
タイマ割り込みが発生すると実行されるイベントハンドラから呼び出される。
引数のhandleは、タイマ割り込みを設定した際のhandleが引き渡されます。
hardware_soft_timer内の処理がタイマ割り込み間隔よりも長い場合、
処理終了後に再度タイマ割り込みが発生します。
ここでは、2つのフラグ connected と toggle を利用して、端末(セントラル)から接続が無い
状態では0.5秒間隔で全てのLEDと 点灯/消灯 させます。

83~93行目 event attributes_user_read_request(connection, handle, offset, maxsize)
接続中の端末から read された場合に GATTの Value type propeties が USERの場合に実行される。
複数のキャラクタリスティックを持っている場合、どのキャラクタリスティックに対して write されても
このイベントが発生するため、識別は handle で行う。
handleには、*_hardware.xml で定義したそのキャラクタリスティックのidが格納されている。

87行目 call hardware_io_port_read(1, $FF)(r_result, r_port, r_portData)
Port1xのデータ読み出し

89行目 call attributes_user_read_response(connection, 0, 1, r_portData)
読みだしたPort1xのデータをそのままReadへの応答として返す


テスト回路

sample5_6.png
入力に設定してあるP1xですが、P10、P11が内蔵PullUpだけでは不安定なため10kΩのプルアップを追加してあります。
スクリプトが起動すると、1HzでP07のLEDが点滅します。
この状態で端末から接続を行うとLEDが消灯します。
bCoreNKD_Sample5Service の SW Status をReadすると、
スイッチのOnOff状態が1バイトのデータとして取得できます。

テスト動画


接続のテストには、LightBlue というiOSアプリが便利です。
このアプリを使うと、開発中のBLEデバイスのアドバタイズ情報、各サービスやキャラクタリスティックの値の確認、変更が自在に可能です。
ただし、このアプリは一度接続したデバイスの名前等を変更(bCoreNKDでGATT.xmlを変更)した場合の
変更を受け付けないことがある(一度アプリを落とすとか、接続して切り離すとかする必要がある)ので
注意が必要です。今後改善されるかもしれません。


  1. 2016/06/11(土) 18:35:00|
  2. bCoreNKDとは?
  3. | コメント:0

bCore NKD サンプルスクリプト 04: BLE端末からLEDをコントロールする(BLE Write no Response)

スマホやPCなどのBLE端末から通信して、bCoreNKDに接続されたLEDを点灯・消灯
させるサンプルスクリプトのプロジェクトファイル
BLE通信の仕様については基本的に触れません。
この程度の短いスクリプトで簡単にBLE端末から操作するガジェットを作ることができます!

BLE通信の仕様についての参考書籍としては、
iOS×BLE Core Bluetoothプログラミング
堤 修一 (著), 松村 礼央 (著)
をお勧めします。bCoreの開発時にお世話になりました。

GitHubからまとめでDownLoadできるようになっています。



bCoreNDKSample_04.bgproj

プロジェクトファイルについては説明省略


bCoreNDKSample_04_gatt.xml
GATT設定ファイル
このGATT.xmlでは3つのサービスを定義しています。

4~20行目 Generic Access Profile
 BLE端末(Central)側からデバイス(ペリフェラル=bCoreNKD)を見つけるときに識別する
 為の名前と、デバイスのタイプを設定しています。

 UUID:0x2a01 Apperance については、このように定義されています。
 unknown (つまり0)にしてあります。

 id スクリプトから値(Value)を参照する場合に使用する変数名
 read セントラル(通信相手の端末)からみてこの値がReadできるかどうか
 const 値が固定値であるかどうか
 type  ="hex"とすると16進数、しない場合は文字列としてValueが認識される

24~45行目 Device Information 
 デバイス(ペリフェラル=bCoreNKD)に関する情報を設定します。
 省略可能です。

48~58行目 このサンプルスクリプトで使用する LEDを点灯・消灯させる ためのBLE通信の口(characteristic)を設定します。
 このスクリプトでは、見やすくするために恣意的な文字列をUUIDにしていますが、
 UUIDの生成については こちら を参照して適切に設定して下さい。

 advertise "true"にしないとこのサービスが端末から発見できないため利用できなくなる
 description サービス、キャラクタリスティックを説明する文字列
 id スクリプトから値(Value)を参照する場合に使用する変数名
 properties read/write/write_no_responseのそれぞれの属性の有効無効の設定
         今回のサンプルスクリプトは値を端末から司令するだけなので、write_no_responseのみtrue
 value length やり取りされる 値 の長さ(byte 単位)
 value type  やり取りされる 値 が16進数か文字列かの設定


bCoreNDKSample_04_hardware.xml

ハード的な設定に関するXMLファイル

6行目  <sleep enable="false" /> は、通信相手がいない場合に問答無用で
BLE113がスリ-プしないために必要。
このサンプルのように、最初から通信しない場合は、スクリプトが走るとすぐにスリ-プしてしまいます。

9行目 送信アンテナ強度の設定
15が最大値。小さくすることで消費電力を下げられるが、通信可能距離が短くなる。
bias設定は5から変更しないこと。

12行目 <script enable="true" /> がないと、スクリプトが実行されません。
falseにするとスクリプトが実行されなくなります。

14~16行目 各ポートの 3ステートバッファの有効無効、プルアップ/プルダウンの設定を行います。
設定は、P0x、P1x、P2x単位で行います。個々のポート個別に設定を変更することはできません。
indexで、ポート(0:P0x、1:P1x、2:P2x)を選択。
3ステートバッファを有効にしたいビットを tristatemaskで1にします。(全て有効の場合$FF、Px7の有効の場合 $80)
pullで、プルアップ(up)かプルダウン(down)を選択


bCoreNDKSample_04_script.bgs

スクリプト本体ファイル

6,7行目 スクリプト中で使える変数は dim で定義。4byte 32bitのみ使用できます。
 connected 端末との接続の有無を管理するフラグ
 toggle    LEDを点滅させるためのフラグ

11~33行目 event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
Arudinoで言うところの setup()に相当する、スクリプト実行時に最初に呼ばれる処理
Arudinoで言うところの loop()に相当する部分は無いので、イベントドリブンでスクリプトを書く必要があります。

13,14行目 変数の初期化

16~18行目  call hardware_io_port_config_direction(port, direction)
各ポートの入力/出力を設定します。
port (0:P0x、1:P1x、2:P2x)
direction 1を設定したBitが 出力に、0を設定したBitが 入力 に設定されます。
      全出力の場合 $FF、Px7のみ出力にする場合は $80
      ここでは、P0xを全出力 Pull Up、P1xを全入力 Pull Up、P2xを全出力 Pull Up
      に設定しています。

20~22行目 call hardware_io_port_write(port, mask, data)
各ポートの出力に設定したbitの出力値を更新します。 
port (0:P0x、1:P1x、2:P2x)
mask マスクビット、対応するbitが1のbitのみ反映されます。
data  出力データ、対応するbitの0/1がマスクビット1のbitのみ反映されます。

24行目 call hardware_set_soft_timer(time, handle, single_shot)
ソフトウェアタイマ割り込みを設定します。
time 割り込みが発生するカウントを設定します。1カウント=1/32768秒になるため、
    0.5秒ごとに設定する場合 16384 とします。
hadle 割り込み発生時に引き渡されるhandleを設定します。
    handleを変更しても設定できるソフトウェアタイマ割り込みは一つだけです。
    複数設定した場合、最後に設定したソフトウェアタイマ割り込みが有効になります。
single_shot この引数が0の場合は、割り込み発生後再度カウントを開始し
        繰り返しタイマ割り込みが発生します。
        1の場合、割り込み発生後は新たにタイマ割り込みを設定しない
        かぎり再度の割り込み発生は起こりません。


28行目 call gap_set_mode(discover, connect)
 GAPのモードを設定します。引数詳細は API Reference を参照のこと
 ここで、アドバタイズ(端末から見つけてもらえるように情報発信)を開始します。

31行目 call sm_set_bondable_mode(bondable)
 bondableモードの設定をします。引数詳細は API Reference を参照のこと
 ざっくり言うと、端末(セントラル)とbCoreNKD(ペリフェラル)間の接続のセキュリティ認証関係の設定。

38~42行目 event connection_status(connection, flags, address, address_type, conn_interval, timeout, latency, bonding)
 スクリプトが起動してアドバタイズを開始したあと、端末(セントラル)から接続された時に実行される。
 ここでは connected のフラグを立てるのみ。
 接続されると、自動的にアドバタイズは終了する。

47~53行目 event connection_disconnected(handle,result)
 端末(セントラル)から接続された状態で、接続が切れた場合に実行される。
 ここでは connected のフラグを消し、再度端末から発見接続可能なように
 するためアドバタイズを再会させる。

57~77行目 event hardware_soft_timer(handle)
タイマ割り込みが発生すると実行されるイベントハンドラから呼び出される。
引数のhandleは、タイマ割り込みを設定した際のhandleが引き渡されます。
hardware_soft_timer内の処理がタイマ割り込み間隔よりも長い場合、
処理終了後に再度タイマ割り込みが発生します。
ここでは、2つのフラグ connected と toggle を利用して、端末(セントラル)から接続が無い
状態では0.5秒間隔で全てのLEDと 点灯/消灯 させます。

81~89行目 event attributes_value(connection, reason, handle, offset, value_len, value)
接続中の端末から write された場合に実行される。
複数のキャラクタリスティックを持っている場合、そのキャラクタリスティックに対して write されても
このイベントが発生するため、識別は handle で行う。
handleには、*_hardware.xml で定義したそのキャラクタリスティックのidが格納されている。
ここでは、送られてきたデータ1バイトをそのままLED接続された P00~P07 に反映している。


テスト回路

sample1.png
スクリプトが起動すると、1Hzで8個のLEDが点滅します。
この状態で端末から接続を行うとLEDが消灯
消灯させていませんでした、event connection_status()の中で消せば接続時に消えるようになります。
このコードのままだと、connectされた瞬間の状態を保持します。
bCoreNKD_Sample4Service の LED Control に
1バイトのデータを投げると、その値に応じてLEDが点灯/消灯します。


テスト動画


接続のテストには、LightBlue というiOSアプリが便利です。
このアプリを使うと、開発中のBLEデバイスのアドバタイズ情報、各サービスやキャラクタリスティックの値の確認、変更が自在に可能です。
ただし、このアプリは一度接続したデバイスの名前等を変更(bCoreNKDでGATT.xmlを変更)した場合の
変更を受け付けないことがある(一度アプリを落とすとか、接続して切り離すとかする必要がある)ので
注意が必要です。今後改善されるかもしれません。





  1. 2016/06/10(金) 19:13:28|
  2. bCoreNKDとは?
  3. | コメント:0

bCore NKD サンプルスクリプト 03: ソフトウェアタイマタイマ割り込みを使う(software timer)

bCoreNKDの P00 をIOポートの出力に設定して、ソフトウェアタイマ割り込みを使って点滅させる
サンプルスクリプトのプロジェクトファイル

GitHubからまとめでDownLoadできるようになっています。



bCoreNDKSample_03.bgproj

プロジェクトファイルについては説明省略


bCoreNDKSample_03_gatt.xml
GATT設定ファイル
このサンプルアプリでは、GATTは使っていません
(何のためのBLEデバイスだ?というのはさておき)
のでGATTの設定は不要ですが、省略するとbuildに通らないため、
最低限この程度記述されたXMLファイルが必要


bCoreNDKSample_03_hardware.xml

ハード的な設定に関するXMLファイル

6行目  <sleep enable="false" /> は、通信相手がいない場合に問答無用で
BLE113がスリ-プしないために必要。
このサンプルのように、最初から通信しない場合は、スクリプトが走るとすぐにスリ-プしてしまいます。

9行目 <script enable="true" /> がないと、スクリプトが実行されません。
falseにするとスクリプトが実行されなくなります。

12~14行目 各ポートの 3ステートバッファの有効無効、プルアップ/プルダウンの設定を行います。
設定は、P0x、P1x、P2x単位で行います。個々のポート個別に設定を変更することはできません。
indexで、ポート(0:P0x、1:P1x、2:P2x)を選択。
3ステートバッファを有効にしたいビットを tristatemaskで1にします。(全て有効の場合$FF、Px7の有効の場合 $80)
pullで、プルアップ(up)かプルダウン(down)を選択


bCoreNDKSample_03_script.bgs

スクリプト本体ファイル

6行目 スクリプト中で使える変数は dim で定義。4byte 32bitのみ使用できます。

8行目 event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
Arudinoで言うところの setup()に相当する、スクリプト実行時に最初に呼ばれる処理
Arudinoで言うところの loop()に相当する部分は無いので、イベントドリブンでスクリプトを書く必要があります。

12~14行目  call hardware_io_port_config_direction(port, direction)
各ポートの入力/出力を設定します。
port (0:P0x、1:P1x、2:P2x)
direction 1を設定したBitが 出力に、0を設定したBitが 入力 に設定されます。
      全出力の場合 $FF、Px7のみ出力にする場合は $80
      ここでは、P0xを全出力 Pull Up、P1xを全入力 Pull Up、P2xを全出力 Pull Up
      に設定しています。

16~18行目 call hardware_io_port_write(port, mask, data)
各ポートの出力に設定したbitの出力値を更新します。 
port (0:P0x、1:P1x、2:P2x)
mask マスクビット、対応するbitが1のbitのみ反映されます。
data  出力データ、対応するbitの0/1がマスクビット1のbitのみ反映されます。

21行目 call hardware_set_soft_timer(time, handle, single_shot)
ソフトウェアタイマ割り込みを設定します。
time 割り込みが発生するカウントを設定します。1カウント=1/32768秒になるため、
    0.1秒ごとに設定する場合 3277 とします。
hadle 割り込み発生時に引き渡されるhandleを設定します。
    handleを変更しても設定できるソフトウェアタイマ割り込みは一つだけです。
    複数設定した場合、最後に設定したソフトウェアタイマ割り込みが有効になります。
single_shot この引数が0の場合は、割り込み発生後再度カウントを開始し
        繰り返しタイマ割り込みが発生します。
        1の場合、割り込み発生後は新たにタイマ割り込みを設定しない
        かぎり再度の割り込み発生は起こりません。


28行目 event hardware_soft_timer(handle)
タイマ割り込みが発生すると実行されるイベントハンドラから呼び出される関数です。
引数のhandleは、タイマ割り込みを設定した際のhandleが引き渡されます。
hardware_soft_timer内の処理がタイマ割り込み間隔よりも長い場合、
処理終了後に再度タイマ割り込みが発生します。

31~37行目
P10を割込みの度にトグルさせます。
出力に設定してあるポートの状態をreadすることはできないため、
トグル操作にはフラグとなる変数が必要になります。


テスト回路


sample3.png
LEDが5Hzで点滅します。ソフトウェアタイマ割り込み設定のtime引数を変更すると
点滅を速度を変えることができます。
  1. 2016/06/10(金) 14:06:17|
  2. bCoreNKDとは?
  3. | コメント:0

bCore NKD サンプルスクリプト 02: スイッチ操作でLEDを点灯・消灯させる(IO Port In/Out)

bCoreNKDの P00-07 をIOポートの出力、P10-17 をIOポートの入力に設定し、
入力ポート側のスイッチが押されている場合に対応するLEDを点灯させる
サンプルスクリプトのプロジェクトファイル

GitHubからまとめでDownLoadできるようになっています。



bCoreNDKSample_02.bgproj

プロジェクトファイルについては説明省略


bCoreNDKSample_02_gatt.xml
GATT設定ファイル
このサンプルアプリでは、GATTは使っていません
(何のためのBLEデバイスだ?というのはさておき)
のでGATTの設定は不要ですが、省略するとbuildに通らないため、
最低限この程度記述されたXMLファイルが必要


bCoreNDKSample_02_hardware.xml

ハード的な設定に関するXMLファイル

6行目  <sleep enable="false" /> は、通信相手がいない場合に問答無用で
BLE113がスリ-プしないために必要。
このサンプルのように、最初から通信しない場合は、スクリプトが走るとすぐにスリ-プしてしまいます。

9行目 <script enable="true" /> がないと、スクリプトが実行されません。
falseにするとスクリプトが実行されなくなります。

12~14行目 各ポートの 3ステートバッファの有効無効、プルアップ/プルダウンの設定を行います。
設定は、P0x、P1x、P2x単位で行います。個々のポート個別に設定を変更することはできません。
indexで、ポート(0:P0x、1:P1x、2:P2x)を選択。
3ステートバッファを有効にしたいビットを tristatemaskで1にします。(全て有効の場合$FF、Px7の有効の場合 $80)
pullで、プルアップ(up)かプルダウン(down)を選択


bCoreNDKSample_02_script.bgs

スクリプト本体ファイル

6~8行目 スクリプト中で使える変数は dim で定義。4byte 32bitのみ使用できます。

12行目 event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
Arudinoで言うところの setup()に相当する、スクリプト実行時に最初に呼ばれる処理
Arudinoで言うところの loop()に相当する部分は無いので、イベントドリブンでスクリプトを書く必要があります。

15、18、21行目  call hardware_io_port_config_direction(port, direction)
各ポートの入力/出力を設定します。
port (0:P0x、1:P1x、2:P2x)
direction 1を設定したBitが 出力に、0を設定したBitが 入力 に設定されます。
      全出力の場合 $FF、Px7のみ出力にする場合は $80
      ここでは、P0xを全出力 Pull Up、P1xを全入力 Pull Up、P2xを全出力 Pull Up
      に設定しています。

23, 24行目 call hardware_io_port_write(port, mask, data)
各ポートの出力に設定したbitの出力値を更新します。 
port (0:P0x、1:P1x、2:P2x)
mask マスクビット、対応するbitが1のbitのみ反映されます。
data  出力データ、対応するbitの0/1がマスクビット1のbitのみ反映されます。

27行目 call hardware_set_soft_timer(3277,0,0)
0.1秒ごとに繰り返しタイマ割り込みを発生させる設定です。
詳細はタイマ割り込みのサンプルで解説するのでここでは省略します。
Arudinoの用に、loop()に相当する部分はBGスクリプトには無いため
タイマ割り込みでloop()に相当する処理を実装します。

33行目 event hardware_soft_timer(handle)
タイマ割り込みが発生すると実行されるイベントハンドラから呼び出される関数です。
詳細はタイマ割り込みのサンプルで解説するのでここでは省略します。

37行目 hardware_io_port_read(port, mask)(result, port, data)
各ポートの入力に設定したbitの値を取得します。 
最初の()内が引数、後ろの()内が戻り値に相当します。
port (0:P0x、1:P1x、2:P2x)
mask マスクビット、対応するbitが1のbitのみ反映されます。
result エラーコード、成功時は0
data  所得されたポートの入力データ
なお、出力に設定してあるポートの状態(出力値)を読み取ることはできなません。

39行目
P1xから取得したポートの状態をそのままP0xに反映させます。


テスト回路


sample2.png
場所の都合で取り付けてあるスイッチは2個だけです。
スイッチを押すとGNDに接続ポートが落ちるようになっています。
内蔵Pull Upを有効にしてあるため、スイッチが押されていない場合ポートはHレベルになります。
タイマ割り込みが0.1秒周期と非常に遅いため、スイッチ操作のタイミングで点灯しない場合があります。
秋月電子の 抵抗内蔵LEDを使うと、電流制限抵抗ナシで
電源ラインとIOポート間にLEDを入れるだけで済むのでとても便利です。3.3Vでも問題なく全色点灯します。
5V仕様のもの(内蔵抵抗250Ωと推定)の場合、赤LEDが最も消費電流が大きく3.3Vで6.9mAと
BLE113の仕様値を大きく超えてしまうため、12V仕様のもの(内蔵抵抗1kΩと推定)を利用して下さい。

  1. 2016/06/10(金) 10:52:26|
  2. bCoreNKDとは?
  3. | コメント:0

bCore NKD サンプルスクリプト 01: LEDを点滅させる(IO Port Output)

bCoreNKDの P00-07, P10-17, P20-22 19本ある全てのIOポートを出力に設定して
いわゆるLチカ(LEDを光らせる)サンプルスクリプトのプロジェクトファイル

GitHubからまとめでDownLoadできるようになっています。



bCoreNDKSample_01.bgproj

プロジェクトファイルについては説明省略


bCoreNDKSample_01_gatt.xml
GATT設定ファイル
このサンプルアプリでは、GATTは使っていません
(何のためのBLEデバイスだ?というのはさておき)
のでGATTの設定は不要ですが、省略するとbuildに通らないため、
最低限この程度記述されたXMLファイルが必要


bCoreNDKSample_01_hardware.xml

ハード的な設定に関するXMLファイル

6行目  <sleep enable="false" /> は、通信相手がいない場合に問答無用で
BLE113がスリ-プしないために必要。
このサンプルのように、最初から通信しない場合は、スクリプトが走るとすぐにスリ-プしてしまいます。

9行目 <script enable="true" /> がないと、スクリプトが実行されません。
falseにするとスクリプトが実行されなくなります。

12~14行目 各ポートの 3ステートバッファの有効無効、プルアップ/プルダウンの設定を行います。
設定は、P0x、P1x、P2x単位で行います。個々のポート個別に設定を変更することはできません。
indexで、ポート(0:P0x、1:P1x、2:P2x)を選択。
3ステートバッファを有効にしたいビットを tristatemaskで1にします。(全て有効の場合$FF、Px7の有効の場合 $80)
pullで、プルアップ(up)かプルダウン(down)を選択


bCoreNDKSample_01_script.bgs

スクリプト本体ファイル

5~7行目 スクリプト中で使える変数は dim で定義。4byte 32bitのみ使用できます。

11行目 event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
Arudinoで言うところの setup()に相当する、スクリプト実行時に最初に呼ばれる処理
Arudinoで言うところの loop()に相当する部分は無いので、イベントドリブンでスクリプトを書く必要があります。

13~15行目 変数の初期化

18、21、24行目  call hardware_io_port_config_direction(port, direction)
各ポートの入力/出力を設定します。
port (0:P0x、1:P1x、2:P2x)
direction 1を設定したBitが 出力に、0を設定したBitが 入力 に設定されます。
      全出力の場合 $FF、Px7のみ出力にする場合は $80

26~28行目 call hardware_io_port_write(port, mask, data)
各ポートの出力に設定したbitの出力値を更新します。 
port (0:P0x、1:P1x、2:P2x)
mask マスクビット、対応するbitが1のbitのみ反映されます。
data  出力データ、対応するbitの0/1がマスクビット1のbitのみ反映されます。

30行目 call hardware_set_soft_timer(3277,0,0)
0.1秒ごとに繰り返しタイマ割り込みを発生させる設定です。
詳細はタイマ割り込みのサンプルで解説するのでここでは省略します。
Arudinoの用に、loop()に相当する部分はBGスクリプトには無いため
タイマ割り込みでloop()に相当する処理を実装します。

38行目 event hardware_soft_timer(handle)
タイマ割り込みが発生すると実行されるイベントハンドラから呼び出される関数です。
詳細はタイマ割り込みのサンプルで解説するのでここでは省略します。

45~48行目
全て出力ポートに設定してあるP0x、P1x、P2xを1bitずつ0.1秒周期でカウントアップ
しながら点滅させています。
Px0が5Hz、Px1が2.5Hz、Px2が1.25Hz・・・と、上位ビットが下位ビットの半分の周期で
点滅を繰り返します。
引数に入れてある portxData は、4byteデータですが、有効なのは下位の1byteのみになります。


テスト回路


IMG_5255.jpg
sample1.png
全てのIOポートにLEDを刺すのは場所が無いため。P0xにのみLEDをつけて試しています。
秋月電子の 抵抗内蔵LEDを使うと、電流制限抵抗ナシで
電源ラインとIOポート間にLEDを入れるだけで済むのでとても便利です。3.3Vでも問題なく全色点灯します。
5V仕様のもの(内蔵抵抗250Ωと推定)の場合、赤LEDが最も消費電流が大きく3.3Vで6.9mAと
BLE113の仕様値を大きく超えてしまうため、12V仕様のもの(内蔵抵抗1kΩと推定)を利用して下さい。

  1. 2016/06/09(木) 16:46:17|
  2. bCoreNKDとは?
  3. | コメント:0
前のページ 次のページ

検索フォーム

カテゴリ

Project: bCore (47)
bCoreとは? (4)
bDriverとは? (4)
bCore製作事例集 (5)
bCoreNKDとは? (13)
bCoreMX & bDriverMX (2)
Project: B5 (1)
Project: Fab mini 4WD (1)
mini.Rock (1)
Project S-4WDS Racing (7)
S-4WDS Racingとは? (1)
S-4WDS Racing進捗 (6)
Project: uLCX2 (2)
uLCX2BLEとは? (1)
uLCX2とは? (1)
Project: LCXX (20)
LCXXとは? (1)
LCXX進捗 (19)
Project: uLCX (12)
uLCXとは? (1)
uLCX進捗 (11)
Project: Land Crawler (39)
Land Crawlerとは? (1)
Land Crawler 進捗 (19)
LC eXtreme 進捗 (19)
AAF 回顧録 (3)
イベント/TV/雑誌など (40)
販売情報 (4)
その他 (9)
Vagabond Works (2)
プロフィール (0)
ICD/HCM (0)

最新コメント

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

カレンダー

05 | 2016/06 | 07
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -