EZ-BLE で、Lチカしてみる
EZ-BLE 小さくていいですね。1cm角のモジュールに、CPU / BLEモジュール / チップアンテナが載ってます。 今回は、EZ-BLE PRoC Evaluation Board が入手出来たので、これでLチカしてみます。
1. Baseboardの準備
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. プロジェクトの対象デバイスの変更
- Components タブを選択します。
- Project を選択、右クリックから、Device Selector を呼び出します。
- Family のフィルタで、PSoC 4 BLE のチェックをはずし、PRoC BLE のチェックをつけます。
- CYBLE-022001-00 を選択し、OK を押します。
4. コンポーネントを配置する
4-1. コンポーネントの配置
TopDesign.cysch を開き、 Component Catalog から、Digital Output Pin を3つ配置する。
4-2. Digital Output Pinコンポーネントの設定
写真のように、LED_R を設定する。
同様に、LED_G、LED_B を設定する。
4-3. 配置・設定完了 ####
5. 配線する
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」を押します。
ソリューションプラットフォームを「x64」もしくは「x86」にします。
ソリューションエクスプローラーから、Scenario1_Watcher.xaml.cs を開く
※ここで、やたら赤線だらけになってしまう場合は、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で開く
PSoC Creator のメニューから、「Build」「Clean and Build Dynamic Broadcaster」を実行し、Build します。
Program ボタンで、実行します。
無事に実行されると、定期的に、アドバタイズパケットを発信している状態(ブロードキャスト)で動き始めます。
3. スマホで確認(任意)
CySmart で、PSoC 4 BLE が、発信しているか確認します。
発信していれば、このように表示されます。発信しかしていないためタッチしても、接続は出来ません。
4. UWP アプリケーションサンプルを実行する
Visual Studio に戻り、「 ▶ ローカル コンピューター」を押して、アプリケーションを実行します。
アプリケーションが起動したら、「Run」を押します。
アドバタイズパケットが観測でき、デバイス名や受信したデータ(Manufacturer Specific Data)が表示されています。
5. 動作の説明(ざっくり)
PSoC 4 BLE は、定期的に、ひたすらアドバタイズパケットを発信します。PC側では、アドバタイズパケットを受信するだけです。1対多 の一方向通信です。BLE的には、発信する側を Broadcaster、受信する側を Observer といいます。
PSoC 4 BLE側(Broadcaster)のこのサンプルでは、送信する値を定期的に変更しています。(main.c:219あたりから)
また、送信しているアドバタイズパケットは、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 Store や Google Play で見つかります)
PC でも、BLE Pioneer Kitに、同梱されているドングルを使って、BLE 通信できますが、今回は使用しません。
(この記事の CySmart のスクリーンショットは、iPhone のものです。)
2. プロジェクトファイルのダウンロード
Cypressさんが、github上に、PSoC 4 BLE のサンプルプロジェクトを置いてくれています。
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
上記のファイルをダブルクリックで、ワークスペース(プロジェクト)を開きます。
PSoC Creator のメニューから、「Build」「Clean and Build Custom Profile」を実行し、Build します。
Program ボタンで、実行します。
無事に実行されると、BLE 通信ができる状態になります。
4. スマホで、BLE 通信する
スマホ側で、CySmartを起動します。
すると、CapSense Slider LED がみつかります。
※見つからない場合は、Baseboard の Reset ボタンを押してみてください。
4-1. 接続する
CapSense Slider LED をタッチすると、接続され、通信が確立します。
4-2. RGB LED
メニューを左右にスライドさせて、RGB LED を正面にもってきてタッチします。
カラーチャート上のマーカーをスライドさせると、そこの色情報が、PSoC 4 BLE に送られ、LED の色が変わります。
4-3. CapSense Slider
メニューに戻り、次は、CapSense Slider を選択します。
Baseboard の CapSense Slider 部分をタッチして、指をスライドさせると、スマホ側に、タッチ位置情報が伝わります。
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の準備
Baseboard から、PSoC 4 BLE モジュールをはずし、PRoC BLE モジュールをセットします。
3. プロジェクトの対象デバイスの変更
Components タブを選択します。
Project を選択、右クリックから、Device Selector を呼び出します。
Family のフィルタで、PSoC 4 BLE のチェックをはずし、PRoC BLE のチェックをつけます。
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コンポーネントの設定
2-3. PWMコンポーネントの設定
2-4. Digital Output Pinコンポーネントの設定
2-5. コンポーネントの接続
各コンポーネントの設定後、このように接続します。
2-6. 配線
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. コンポーネントの配置
Component Catalog から、
・Digital Input Pin
・Digital Output Pin
を持ってきて、TopDesign.cysch に配置する。
2-2. Digital Input Pinコンポーネントの設定
2-3. Digital Output Pinコンポーネントの設定
2-4. 配線
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ボタンを押して、実行。
User Switchを押すと、LEDが点灯、スイッチを離すと、LEDが消灯します。動作としては、非常に普通な感じですね....
PSoC 4 BLE で、Lチカしてみる(2)
yamagoya.hatenablog.jp
前回は、コードによって点滅させましたが、せっかくのPSoCですので、回路を使って点滅させます。
1. プロジェクトの作成
プロジェクトを作成します。
2. コンポーネントを配置する
2-1. コンポーネントの配置
Component Catalog から、
・Clock
・PWM(TCPWM mode)
・Digital Output Pin
を持ってきて、配置する。
各コンポーネントがつながるように気をつけてください。
2-2. Clockコンポーネントの設定
2-3. PWM(TCPWM mode)コンポーネントの設定
2-4. Digital Output Pinコンポーネントの設定
2-5. 配線
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の設定を変えてみます。
Compareの値を小さくすると、間隔はそのままに、点灯時間が短くなります。