でばいすの山小屋

デバイスとかクラウドを実験中。IoTのふもとあたりをうろうろ。

EZ-BLE で、Lチカしてみる

EZ-BLE 小さくていいですね。1cm角のモジュールに、CPU / BLEモジュール / チップアンテナが載ってます。 今回は、EZ-BLE PRoC Evaluation Board が入手出来たので、これでLチカしてみます。

1. Baseboardの準備

f:id:blgkns:20150909120743p:plain:w320
Bluetooth Low Energy Pioneer Kit の Baseboard に、EZ-BLE PRoC Evaluation Board をセットします。

2. プロジェクトの準備

メニューから「File」「New」「Project」を選択
PSoC 4100 BLE / PSoC 4200 BLE Design を選択
プロジェクト「EZ-BLE_LED01」とし、
Project templete を「Empty schematic」にして、「OK」を押す

3. プロジェクトの対象デバイスの変更

参照:
yamagoya.hatenablog.jp

  1. Components タブを選択します。
  2. Project を選択、右クリックから、Device Selector を呼び出します。
  3. Family のフィルタで、PSoC 4 BLE のチェックをはずし、PRoC BLE のチェックをつけます。
  4. CYBLE-022001-00 を選択し、OK を押します。
    f:id:blgkns:20150909120739p:plain:w320

4. コンポーネントを配置する

4-1. コンポーネントの配置

TopDesign.cysch を開き、 Component Catalog から、Digital Output Pin を3つ配置する。

4-2. Digital Output Pinコンポーネントの設定

f:id:blgkns:20150909120740p:plain:w320
写真のように、LED_R を設定する。
同様に、LED_G、LED_B を設定する。

4-3. 配置・設定完了 ####

f:id:blgkns:20150909120741p:plain:w320


5. 配線する

f:id:blgkns:20150909120742p:plain:w320
EZ-BLE_LED01.cydwr を開き、
LED_R を P3[4] に
LED_G を P3[6] に
LED_B を P3[7] につなぐ。
「Generate Application」ボタンを押す

6. コードを書く

Workspace Explorer から main.c を、開いて下記のようにコードを書きます。

#include <project.h>

int main()
{
    int count = 0;
    
    CyGlobalIntEnable;

    for(;;)
    {
        LED_R_Write( count & 0x01 ? 0:1 );
        LED_G_Write( count & 0x02 ? 0:1 );
        LED_B_Write( count & 0x04 ? 0:1 );
        CyDelay(500);
        
        count++;
        if(count > 7)
            count = 0;
    }
}


7. 実行

Programボタンを押して、実行。
うまく動けば、LED が0.5秒ごとに、色を変えていきます。

8. 参考

Bluetooth Low Energy Pioneer Kit に挿した時、LED と User Switch は、下記のようになっています。

  PSoC 4 BLE / PRoC BLE EZ-BLE
LED (R) P2[6] P3[4]
LED (G) P3[6] P3[6]
LED (B) P3[7] P3[7]
User Switch P2[7] P3[5]

PSoC 4 BLE を、BLE Broadcaster にしてみる

PSoC 4 BLE を、BLE Broadcaster にして、値を変えつつ発信させて、それを PC で受信します。
PC は、Windows10 になって、BLE のアドバタイズパケットを、アプリ側で見ることが出来るようになったので、それも一緒に試します。
なので、機材的にちょっとハードルが高いです。

用意するもの

・Cypress Bluetooth Low Energy Pioneer Kit
・PC (Windows10 / Bluetooth 4.0 LE対応)
PSoC Creator
Visual Studio 2015 (無償のCommunity版でも可)

1. UWP アプリケーションサンプルを準備する

1-1. サンプルのダウンロード

Windows10 の新しいアプリケーションプラットフォーム Universal Windows Platform (UWP)のサンプル集が Github にあります。
https://github.com/Microsoft/Windows-universal-samples から
Windows-universal-samples-master.zip をダウンロード。

1-2. サンプルのビルド

c:\Projects\ に解凍
※この時、すべての sample を解凍してください。BluetoothAdvertisement のみ解凍しても動作しません。
C:\Projects\Windows-universal-samples-master\Samples\BluetoothAdvertisement\cs\BluetoothAdvertisement.sln
Visual Studio 2015 で開く
※UWP 開発に必要なパッケージがインストールされていない場合は、インストールするように言ってくれます。
ソリューションを開く時に、「セキュリティ警告」が表示されますが、「OK」を押します。

f:id:blgkns:20150818111859p:plain:w320
ソリューションプラットフォームを「x64」もしくは「x86」にします。
ソリューションエクスプローラーから、Scenario1_Watcher.xaml.cs を開く
f:id:blgkns:20150818111903p:plain:w320
※ここで、やたら赤線だらけになってしまう場合は、Visual Studio を再起動するとなぜかなおる....

下記のようにコンストラクタの真ん中あたりの6行をコメントアウトします。

public Scenario1_Watcher()
{
    // <snip>

    //var manufacturerData = new BluetoothLEManufacturerData();

    //manufacturerData.CompanyId = 0xFFFE;

    //var writer = new DataWriter();
    //writer.WriteUInt16(0x1234);

    //manufacturerData.Data = writer.DetachBuffer();

    //watcher.AdvertisementFilter.Advertisement.ManufacturerData.Add(manufacturerData);

    // <snip>
}

該当部分は、BLE デバイスのフィルタ指定です。これを切らないと、PSoC 4 BLE が見えません。
※見やすいようにコメント行を削っています。

「ビルド」メニューから「bluetoothadvertisement のリビルド」を実行します。

2. PSoC 4 BLE のサンプルを準備する

2-1. サンプルのダウンロード

https://github.com/cypresssemiconductorco/PSoC-4-BLE から
PSoC-4-BLE-master.zip をダウンロード

2-2. サンプルのビルド/実行

c:\Projects\ に解凍
C:\Projects\PSoC-4-BLE-master\100_Projects_in_100_Days\Day009_Dynamic_Broadcaster\Dynamic Broadcaster\Dynamic Broadcaster.cywrk
PSoC Creatorで開く

f:id:blgkns:20150818111858p:plain:w320
PSoC Creator のメニューから、「Build」「Clean and Build Dynamic Broadcaster」を実行し、Build します。
Program ボタンで、実行します。
無事に実行されると、定期的に、アドバタイズパケットを発信している状態(ブロードキャスト)で動き始めます。

3. スマホで確認(任意)

CySmart で、PSoC 4 BLE が、発信しているか確認します。

f:id:blgkns:20150818111904p:plain:w240

発信していれば、このように表示されます。発信しかしていないためタッチしても、接続は出来ません。

4. UWP アプリケーションサンプルを実行する

Visual Studio に戻り、「 ローカル コンピューター」を押して、アプリケーションを実行します。
f:id:blgkns:20150818111901p:plain:w320
アプリケーションが起動したら、「Run」を押します。
f:id:blgkns:20150818111900p:plain:w320
アドバタイズパケットが観測でき、デバイス名や受信したデータ(Manufacturer Specific Data)が表示されています。

5. 動作の説明(ざっくり)

PSoC 4 BLE は、定期的に、ひたすらアドバタイズパケットを発信します。PC側では、アドバタイズパケットを受信するだけです。1対多 の一方向通信です。BLE的には、発信する側を Broadcaster、受信する側を Observer といいます。
PSoC 4 BLE側(Broadcaster)のこのサンプルでは、送信する値を定期的に変更しています。(main.c:219あたりから)
f:id:blgkns:20150818111902p:plain:w320
また、送信しているアドバタイズパケットは、BLE コンポーネントの「GAP Settings」「Advertisement packet」に、定義されています。
Manufacturer Specific Data の Data を、「00 00 00」にするとどうなるか、PC側でどうなるかやってみてください。
ちなみに、このアドバタイズパケットの Local Name を削って、Manufacturer Specific Data を最大にとったものが、iBeacon です(ざっくり)。

6. 参考:CyBle_GapUpdateAdvData()

PSoC 4 BLE でアドバタイズパケットを CyBle_GapUpdateAdvData() で、更新していますが、サンプルを使わずに、書くとなぜか動きませんでした。
調べてみると、BLE コンポーネントのバージョンに依存しているようで、新しいコンポーネントでは、CyBle_GapUpdateAdvData() は、CyBle_GetBleSsState() が、CYBLE_BLESS_STATE_ACTIVE の時は、使えないようです。
※たしかに STATE_ACTIVE の時にアップデートしたら、問題が起こりそうですよね....

if( CyBle_GetBleSsState() == CYBLE_BLESS_STATE_ACTIVE )
{
    ....
}
else if(( CyBle_GetBleSsState() == CYBLE_BLESS_STATE_EVENT_CLOSE )&&(updated == 1))
{
    CyBle_GapUpdateAdvData(...);
    updated = 0;
}

こんな感じの対応が必要でした。

PSoC 4 BLE で、BLE 通信してみる

Cypress BLE Pioneer Kit で、すぐにBluetooth Low Energy (BLE) の実験ができます。
今回は、サンプルプロジェクトを使って、スマホと BLE 通信をしてみます。

1. スマホに「CySmart」アプリをダウンロード

BLE に対応した iOS / Android スマホに、「CySmart」アプリをダウンロードします。
App StoreGoogle Play で見つかります)
PC でも、BLE Pioneer Kitに、同梱されているドングルを使って、BLE 通信できますが、今回は使用しません。
(この記事の CySmart のスクリーンショットは、iPhone のものです。)

2. プロジェクトファイルのダウンロード

Cypressさんが、github上に、PSoC 4 BLE のサンプルプロジェクトを置いてくれています。
f:id:blgkns:20150810152321p:plain:w480
https://github.com/cypresssemiconductorco/PSoC-4-BLE

たくさんのサンプルがあり、かなり参考になります。
このページ右下の Download ZIP を押し、PSoC-4-BLE-master.zip をダウンロードします。

3. サンプルプロジェクトを開く

ダウンロードした zip ファイルを、日本語を含まないフォルダに展開します。
例: c:\projects
C:\projects\PSoC-4-BLE-master\100_Projects_in_100_Days\Day003_Custom_Profile_CapSense_RGB_LED\Custom Profile\Custom Profile.cywrk
上記のファイルをダブルクリックで、ワークスペース(プロジェクト)を開きます。
f:id:blgkns:20150810152322p:plain:w320
PSoC Creator のメニューから、「Build」「Clean and Build Custom Profile」を実行し、Build します。
Program ボタンで、実行します。
無事に実行されると、BLE 通信ができる状態になります。

4. スマホで、BLE 通信する

スマホ側で、CySmartを起動します。
すると、CapSense Slider LED がみつかります。

f:id:blgkns:20150810152323p:plain:w240

※見つからない場合は、Baseboard の Reset ボタンを押してみてください。

4-1. 接続する

CapSense Slider LED をタッチすると、接続され、通信が確立します。

4-2. RGB LED

f:id:blgkns:20150810152324p:plain:w240

メニューを左右にスライドさせて、RGB LED を正面にもってきてタッチします。

f:id:blgkns:20150810152325p:plain:w240

カラーチャート上のマーカーをスライドさせると、そこの色情報が、PSoC 4 BLE に送られ、LED の色が変わります。

4-3. CapSense Slider

f:id:blgkns:20150810152326p:plain:w240

メニューに戻り、次は、CapSense Slider を選択します。

f:id:blgkns:20150810152328p:plain:w320
Baseboard の CapSense Slider 部分をタッチして、指をスライドさせると、スマホ側に、タッチ位置情報が伝わります。

f:id:blgkns:20150810152327p:plain:w240


5. ひとこと

PSoC-4-BLE-master.zip には、50本のサンプルがあって(8/10現在)、BLE Pioneer Kit だけでも、いろんな実験ができそうです。

PRoC BLE で、Lチカしてみる

新しいプロジェクトから、PRoC BLE プロジェクトを作ってもいいのですが、なぜか、PRoC BLE 用に Empty schematic テンプレートが 用意されていない(8/10現在)ので、PSoC 4 BLE 用のプロジェクトを、PRoC BLE 用に変更する方法で、プロジェクトを作成してみます。

1. プロジェクトの準備

yamagoya.hatenablog.jp
上記記事を参考に、プロジェクト「LED01」を作成します。
その後、プロジェクト「LED01」をフォルダごと、バックアップするか複製などします。

2. Baseboardの準備

f:id:blgkns:20150810152320p:plain:w320
Baseboard から、PSoC 4 BLE モジュールをはずし、PRoC BLE モジュールをセットします。

3. プロジェクトの対象デバイスの変更

f:id:blgkns:20150810152316p:plain:w320
Components タブを選択します。

f:id:blgkns:20150810152317p:plain:w320
Project を選択、右クリックから、Device Selector を呼び出します。

f:id:blgkns:20150810152318p:plain:w320
Family のフィルタで、PSoC 4 BLE のチェックをはずし、PRoC BLE のチェックをつけます。

f:id:blgkns:20150810152319p:plain:w320
BLE Pioneer Kit についてる PRoC BLE のモジュールには、CYBL10563-56LQXI (同梱されているモジュールを確認してください)と書いてあるので、それを選択し、OK を押します。

4. 実行

「Build」「Clean and Build LED01」で、リビルドします。
Programボタンで、実行

5. 参考

PRoC BLE

PSoC 4 BLEから、アナログ系のコンポーネントなどをカットした廉価版のチップです。
ちなみに、Baseboard にさしたとき、LED や SWITCH が同じピン配置になっています。
PRoC BLE
http://japan.cypress.com/products/proc-ble-bluetooth-smart

EZ-BLE

PRoC BLE を積んだ小型のモジュールです。指先にのるサイズ。なんかプラモデルかなにかに組み込んで、スマホで操作するには最適(?)です。
ただ、ほんとに小さいので、IO を引き出して、配線するのは、ちょっと技術がいるかも。
EZ-BLE
http://japan.cypress.com/products/ez-ble-proc-module-bluetooth-smart

PSoC 4 BLE で、Lチカしてみる(4)

PSoC 4 BLE で、Lチカしてみる」の4本目。
LEDの明るさを制御してみます。
今回は、PWMを使います。PWMは、PRoC BLE / EZ-BLE でも使えます。特に EZ-BLEは小さいので、プラモデルなんかに組み込んで、BLE で LEDをコントールとかも出来そうです!

1. プロジェクトの作成

プロジェクト「LED04」を作成します。

2. コンポーネントを配置する

2-1. コンポーネントの配置

Component Catalog から、
・Clock
・PWM
・Digital Output Pin
・Logic Low '0'
を持ってきて、TopDesign.cysch に配置する。

2-2. Clockコンポーネントの設定

f:id:blgkns:20150809235011p:plain:w320

2-3. PWMコンポーネントの設定

f:id:blgkns:20150809235009p:plain:w320

2-4. Digital Output Pinコンポーネントの設定

f:id:blgkns:20150809235010p:plain:w320

2-5. コンポーネントの接続

f:id:blgkns:20150809235012p:plain:w320
コンポーネントの設定後、このように接続します。

2-6. 配線

f:id:blgkns:20150809235013p:plain:w320
LED04.cydwr を開き、LEDを P2[6] につなぐ。
「Generate Application」ボタンを押す

3. コードを書く

Workspace Explorer から main.c を、開く。
コードはこんな感じ。

#include <project.h>

int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */
    int led_output = 0;

    PWM_Start();

    for(;;)
    {
        PWM_WriteCompare(led_output);
        led_output++;
        
        if(led_output > 255)
            led_output = 0;
        
        CyDelay(5);
    }
}


4. 動作の説明(ざっくり)

PWM_WriteCompare( led_output ) で、LED の点灯時間を設定します。点灯時間は、led_output / 255 となります。led_output が255の時は、ずっとついていて、0なら消灯します。
このプログラムでは、led_output を1ずつ大きくしていって、255 になったら、0 に戻しています。
これで、LEDは、だんだんと明るくなり、明るくなったら、消灯に戻り、また明るくなるというのを繰り返します。

5. 実行

Programボタンを押して、実行。

PSoC 4 BLE で、Lチカしてみる(3)

PSoC 4 BLE で、Lチカしてみる」の3本目、今回は、ベースボード上のスイッチを使って、LEDをON/OFFします。
だんだんとざっくりになってきました。1本目、2本目は、多少丁寧に書いているので参考にしてください。
yamagoya.hatenablog.jp
yamagoya.hatenablog.jp

1. プロジェクトの作成

プロジェクトを作成します。

2. コンポーネントを配置する

2-1. コンポーネントの配置

f:id:blgkns:20150807013054p:plain:w320
Component Catalog から、
・Digital Input Pin
・Digital Output Pin
を持ってきて、TopDesign.cysch に配置する。

2-2. Digital Input Pinコンポーネントの設定

f:id:blgkns:20150807013059p:plain:w320

2-3. Digital Output Pinコンポーネントの設定

f:id:blgkns:20150807013105p:plain:w320

2-4. 配線

f:id:blgkns:20150807013116p:plain:w320
LED03.cydwr を開き、LEDを P2[6] につなぎ、SW1をP2[7]につなぐ。
「Generate Application」ボタンを押す

3. コードを書く

Workspace Explorer から main.c を、開く。
LED_Write( SW1_Read() ); を1行足して....

#include <project.h>

int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        LED_Write( SW1_Read() );
    }
}


4. 実行

Programボタンを押して、実行。
f:id:blgkns:20150807014329p:plain:w320
User Switchを押すと、LEDが点灯、スイッチを離すと、LEDが消灯します。動作としては、非常に普通な感じですね....

PSoC 4 BLE で、Lチカしてみる(2)

yamagoya.hatenablog.jp
前回は、コードによって点滅させましたが、せっかくのPSoCですので、回路を使って点滅させます。

1. プロジェクトの作成

プロジェクトを作成します。
f:id:blgkns:20150804010820p:plain:w320

2. コンポーネントを配置する

2-1. コンポーネントの配置

f:id:blgkns:20150804010821p:plain:w320
Component Catalog から、
・Clock
・PWM(TCPWM mode)
・Digital Output Pin
を持ってきて、配置する。
コンポーネントがつながるように気をつけてください。

2-2. Clockコンポーネントの設定

f:id:blgkns:20150804010822p:plain:w320

2-3. PWM(TCPWM mode)コンポーネントの設定

f:id:blgkns:20150804010823p:plain:w320

2-4. Digital Output Pinコンポーネントの設定

f:id:blgkns:20150804010824p:plain:w320

2-5. 配線

f:id:blgkns:20150804010825p:plain:w320
LED02.cydwr を開き、LEDを P2[6] につなぐ
「Generate Application」ボタンを押す

3. コードを書く

Workspace Explorer から main.c を、開く。
PWM_Start(); を1行足して....

#include <project.h>

int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    PWM_Start();

    for(;;)
    {
        /* Place your application code here. */
    }
}


4. 動作の説明(ざっくり)

コードは、PWMを開始だけして、あとはなにもしていません。
点滅は、回路側で行っています。
PWMは1000カウント周期で動作します(Priodの値)。Clockが1KHzなので、1秒周期で繰り返し動作します。クロックがCompare値より小さい時は、LEDは、Lowになり、大きいときは、Highになります。

Programボタンを押して、実行
設定やコードに間違えがなければ、LEDが点滅を始めます。

5. おまけ

PWMの設定を変えてみます。
f:id:blgkns:20150804010826p:plain:w320
Compareの値を小さくすると、間隔はそのままに、点灯時間が短くなります。