PSoCボードでBLE実験

株式会社スイッチサイエンス
坪井 義浩
1

スイッチサイエンスとは電子工作に使う部品や基板を輸入・開発・製造販売• 2008年創業、2010年法人化• 従業員 14名
役員2名
•2

自己紹介
坪井義浩 (つぼいよしひろ) @ytsuboi
スイッチサイエンス取締役

20092012-2013

2010-3

I ♥ Cortex-M!!

Cypressの他己紹介

5No. 1 in SRAMs
No. 1 in NOR Flash memories
No. 3 provider of automotive MCUs and memories
No. 1 in CapSense capacitive-sensing controllers
6他己紹介ならではの紹介- Initiale.g. Akira Tanaka→AKIT
akit@cypress.com
7Cypressのマイコン

8ふーん←→うっひょー！

※個人の感想ですPSoCの基礎知識
PSoC
PSoCは、MCUコアやプログラマブルアナログブロック、プログラマブルデジタルブロックに加え、プログラマブルな相互接続および配線、CapSenseをワンチップに統合したプログラマブル組み込みシステムオンチップ
PSoC 4
ARM Cortex-M0 MCU内蔵のPSoC
PSoC 4 BLE
BLE無線ブロック1個と、ロイヤリティーフリーのBLEプロトコルスタック1個を内蔵したPSoC 4
PRoC BLE (プログラマブルラジオオンチップ)
BLE無線ブロック1個とCapSense1個、ロイヤリティーフリーのBLEプロトコルスタック1個を内蔵したARM Cortex-M0 MCU

EZ-BLE PRoCモジュール
CYBLE-022001-00
PSoC 4 BLEモジュール

PRoC BLEモジュール

EZ-BLE PRoC評価ボード

10

CypressのBLEソリューション

11

Bluetoothの基礎知識
Bluetooth Classic
携帯電話ヘッドセットへのオーディオストリーミングで一般的になったパーソナルエリア
ネットワーク用の規格
GFSK変調方式で2.4GHz ISM帯域で動作し、最大3Mbpsデータレートに対応
Bluetooth Low Energy (BLE)
ステートや制御情報を通信するための短距離向け低消費電力無線アプリケーションの規格GFSK変調方式で2.4GHz ISM帯域で作動し、1Mbpsデータレートに対応
Bluetooth Classicと下位互換なし
Bluetooth 4.0
BLEを追加したBluetooth Classic仕様のアップグレード版
Bluetooth Smart
BLEのみに対応したBluetooth 4.0／4.1製品の商標
Bluetooth Smart Ready
Bluetooth ClassicとBLEの両方に対応したBluetooth 4.0／4.1製品の商標

12

SmartとSmart Ready

オーディオ

Bluetooth Classic

センサー
データ

Bluetooth Smart Ready

Bluetooth Smart

13

BLEの基礎知識
GAP
役割、アドバタイズ、接続

ProfileService
Health Thermometer“00001809-0000-1000-800000805F9B34FB”
0x1809Characteristic
Temperature Measurement

Characteristic
Temperature Type

ServiceCharacteristic

Battery Service

UUID（Universally Unique Identifier）
https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx

14

BLEの基礎知識(2)１２３15

BLEの基礎知識(3)①プロファイルは「サービス」の集合体
例えば、血圧プロファイルは「Generic Access」、「Generic Attribute｣、「Blood Pressure」、および「Device Information」の4つのサービスで構成②サービスは「キャラクタリスティック」の集合体
例えば、Blood Pressureサービスは「Blood Pressure
Measurement」、「Intermediate Cuﬀ Pressure」、および「Blood Pressure Feature」の3つのキャラクタリスティックで構成

１
３
２
４

③キャラクタリスティックは「ディスクリプタ」の集合体
例えば、Blood Pressure Measurement
特性は、図で示す通り、Bluetooth仕様の「フィールド」のセットとして参照される属性で構成④ディスクリプタは最小の情報単位
例えば、実際のBlood Pressure値は、右図で示す通り「Measurement Compound Value」フィールドのいずれかに格納
16

おすすめ書籍

例がnRF51822

17ソフトウェアのセットアップとインストール必要なソフトウェアと初期ステップ提供されたUSBドライブの内容をノートPCにコピーして、下表に示すソフトウェアをインストールしてください。
画面上の指示に従って、所要時間15分程度のインストール作業を行ってください。

ソフトウェアバージョン ファイル名

PSoC Creator

3.3 CP3

PSoCCreatorSetup.exe

使用するハードウェア

CYBLE-022001-00 ブレークアウト
ssci.to/2503¥3,240LM75B温度センサ
ssci.to/1813¥378

Cro̲Prog2キット
ssci.to/2490¥3,700CY8CKIT-002 PSoC
MiniProg3 プログラム
およびデバッグ キット$89=¥11,500

18

Beaconを試してみる

19

Eddystone• https://github.com/google/eddystone• Googleが2015年7月に発表• オープン（Apache License 2.0)
• Eddystone-UID…16ByteのユニークID• Eddystone-URL…短縮URL (Physical Web)
• Eddystone-TLM…Beaconのバッテリ電圧など
20Projectの作成（１）
まず、PSoC Creatorを起動します。起動を終えたら、[File]-[New]-[Project]を選択して、新しいプロジェクトを作ります。

プロジェクトをつくるときには、使用するテンプレートを選択します。ここでは、「Target hardware」として「Module: CYBLE-022001-00)」を選択します。

21

Projectの作成（２）

次に、Project templateは、「Pre-populatedschematic」にしておきましょう。

最後に、プロジェクトに名前を付けます。
ここでは、「PRoC̲Eddystone」としておきました。

22

cysch23

BLE-General

ProﬁleをCustomにします。

24

Custom Service「Custom Service」のパラメータを変更します。UUIDを16-bitにして、UUIDをEddystoneの「feaa」にします。
※bit長のドロップダウンリストボックスが見当たらない場合、ウィンドウを大きくすると表示されます。
25TipsUUIDのbit長のボタンが見当たらない！

Windowのサイズを変更
26

GAP Settings「General」の項に有る、「Silicon generated "Company assigned" part of device address」にチェックを入れます。これにチェックを入れないと、ビルドしたバイナリを書き込んだBLEモジュールのデバイスアドレスが全て同じ値になってしまいます。
「Device name」にはお好みのものを入れてください。AppearanceはUnknownにしておきます。
27

Advertisement「Advertisement settings」の項に有る、「Advertising type」を「Scannable undirectedadvertising」にします。 また、「Fast advertising interval」の「Timeout」のチェックを外します。
28

Advertisement packet「Service UUID」-「Custom Service」にチェックを入れます。また、「Service Data」「Custom Service」にもチェックを入れます。
すると、Dataの項に入力出来るようになりますので、Eddystoneのフレームを記入します。
ここでは、「10:00:01:73:77:69:74:63:68:2D:73:63:69:65:6E:63:65:00」と入力しました。
29

Eddystone-URLについて

https://www.
10:00:01:73:77:69:74:63:68:2D:73:63:69:65:6E:63:65:00

s w i t c h - s c i e n c e .com/
先頭1バイト目の0x10は、Eddystoneのものであることを意味します。2バイト目の0x00は送信している電波の強度、GAP SettingsのGeneralでTX power levelを0dBmにしたので、0dBmにしました。3バイト目はURLスキーム、0x03は「https」を意味します。その後はアスキーコードでURLの文字列を記述し、最後の0x00は、「.com/」を意味します。

https://github.com/google/eddystone/tree/master/eddystone-url

30

ASCIIコード表010SH
SX
EX
ET
EQ
AK
BL
BS
HT
LF
HM
CL
CRSO
SI

DE
D1
D2
D3D4NK
SN
EB
CN
EM
SB
EC
→←↑
↓

0123456789A
B
C
D
E
F20！
”
＃＄％
＆（）
＊＋，−．
／

30

40

50

0
1
23
4
56
789：；
＜＝＞
？

＠Ａ
Ｂ
Ｃ
Ｄ
Ｅ
Ｆ
Ｇ
Ｈ
Ｉ
Ｊ
Ｋ
Ｌ
Ｍ
Ｎ
Ｏ

Ｐ
Ｑ
Ｒ
Ｓ
Ｔ
Ｕ
Ｖ
Ｗ
Ｘ
Ｙ
Ｚ
［￥］
＾＿60ａｂｃｄｅｆｇｈｉ
ｊｋｌｍｎｏ70ｐｑｒｓｔｕｖ
ｗ
ｘｙｚ
｛｜｝
‾

31

main.c#include <project.h>void StackEventHandler(uint32 event, void *eventParam) {switch (event) {// Mandatory events to be handledcase CYBLE_EVT_STACK_ON:
CyBle_GappStartAdvertisement(CYBLE_ADVERTISING_FAST);
LED_1_Write(0); // LED on
break;
case CYBLE_EVT_TIMEOUT:
LED_1_Write(1); // LED off
break;
default:break;}}int main(){
CYBLE_API_RESULT_T apiResult;// Enable global interrupts
CyGlobalIntEnable;// Initialize the BLE device.
apiResult = CyBle_Start(StackEventHandler);// Validate BLE stack initialization succeeded
CYASSERT(apiResult == CYBLE_ERROR_OK);
for(;;){// Service all the BLE stack events.
// Must be called at least once in a BLE connection interval
CyBle_ProcessEvents();}}

https://gist.github.com/ytsuboi/1674941119f6bf2a055f

32

Build33

ライタの接続方向

34

接続の確認と書き込み

35

センサを繋いでみる

36

配線

37

cysch38

Datasheet

39ComponentsのName

I2CM_Start();

I2CM_I2CMasterSendStart( LM75B_SLAVE_ADDR,1 );data[0] = I2CM_I2CMasterReadByte(0);data[1] = I2CM_I2CMasterReadByte(0);I2CM_I2CMasterSendStop();40

cydwr41

source code
├main.c├htc.c… 温度を測るコード├bas.c… バッテリの残量を処理するコード└debug.c … Semihosting用コード

セミホスティングとはセミホスティングとは、ARM ターゲット上のアプリケーションコードから発行される入出力要求を、デバッガが実行されているホストコンピュータに伝達するメカニズムです。これを使用すると、例えば、printf() や scanf() などの C ライブラリ関数で、ターゲットシステム上の画面とキーボードではなく、ホストの画面とキーボードを使用することができます。
出典: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205gj/Bgbjjgij.html#if defined(__ARMCC_VERSION)#elif defined (__ICCARM__)#else /* (__GNUC__) GCC *//* IAR */42

PSoC Creatorのファイル<project_name>├<project_name>.cywrk└<project_name>.cydsn├TopDesign│└TopDesign.cysch├<project_name>.cydwr├<project_name>.cyprj└*.c, *.h

… 回路図
… "Design Wide Resource”… 使用しているコンポーネントなど… 皆さんが書いたソースコード

http://www.cypress.com/knowledge-base-article/revision-control-psoc-creator-projects-kba86358

43

ARM向けコンパイラ

44

ExportPSoC CreatorのProject→Export to IDEでExport可能

MDK(uVision)

Exportといっても、既存のフォルダにMDKのプロジェクトファイルが追加されるだけ。

MDKでコードを編集benchmark
40

30

20

37.362925

34.206746

ARM Compiler 5.05 update 1 (build 106)

GCC4.8.4 20140526 (release)100

共に-O3でビルド。armccはgccの9.2%高速なバイナリを出力※時間の計り方に難がありますので、スコアそれ自体は参照しないでください。
48

binary size
30000

22500

16,952

20,048

15000

7500

0

ARM Compiler 5.05 update 1 (build 106)

GCC4.8.4 20140526 (release)

共に-O3でビルド。armccはgccの84.56%のバイナリを出力
49

ISO/IEEE 11073
ISO/IEEE 11073 Personal Health Data (PHD) Standards/* Convert float to the IEEE-11073 FLOAT-Type. */int8_t exponent = 0xFE; //exponent is -2
uint32_t mantissa = (uint32_t)(temperatureCelsius*100);
temperatureValue = ( ((uint32_t)exponent) << 24) | mantissa;

50

開発の情報源51

開発の情報源

http://www.cypress.com/blog/100-projects-100-days
52

ユニバーシティプログラム

53

ワークショップ

http://www.cypress.com/workshops
54