でばいすの山小屋

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

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の値を小さくすると、間隔はそのままに、点灯時間が短くなります。

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

Cypress BLE Pioneer Kitを使って、Lチカしてみます。

PSoC 4 BLEをさしたBaseboardをPCにUSBケーブルでつなぎます。
PSoC Creatorを起動します。

1. プロジェクトの作成

メニューから「File」「New」「Project」を選択

f:id:blgkns:20150803004445p:plain:w320
PSoC 4100 BLE / PSoC 4200 BLE Design を選択
・プロジェクト名
・保存場所
ワークスペース
を設定 Project templete を「Empty schematic」にして、「OK」を押す

2. Digital Output Pin を配置する

f:id:blgkns:20150803004446p:plain:w320
右上のComponent Catalogの検索窓に、「pin」と入力
「Digital Output Pin」を、TopDesign.cysch にドラッグ&ドロップする

f:id:blgkns:20150803004447p:plain:w320
Digital Output Pinは、「Pin_1」という名で、生成される。
※写真は、Zoom In で拡大してます。
これをダブルクリックする。

f:id:blgkns:20150803005421p:plain:w320
Nameを「LED」に変更。
「HW connection」のチェックをはずして、OKを押す。

f:id:blgkns:20150803004449p:plain:w320
LED01.cydwrをダブルクリックする。
「LED」を、ドラッグ&ドロップで、P2[6] につなぐ。

f:id:blgkns:20150803004450p:plain:w320
メニューから「Build」「Generate Application」を実行。
(もしくは、Generata Applicationボタンを押す)
これで、現在のハードウェア構成にあわせて、関数群が生成される。

3. コードを書く

左の Workspace Explorer の main.c を、ダブルクリックする。
2行加えて、こんな感じ

#include <project.h>

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

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

    for(;;)
    {
        LED_Write( ~LED_Read() );
        CyDelay(1000);
    }
}

コードの説明(ざっくり)
現在のLEDの値が1であれば0に、0であれば1にする。
1000msec(1秒)待つ。
これをひたすら繰り返す。

f:id:blgkns:20150803004451p:plain:w320
メニューから「Debug」「Program」を実行
(もしくは、Programボタンを押す)
設定やコードに間違えがなければ、書き込みデータ生成され、チップに書き込まれ、実行される。

f:id:blgkns:20150803004453p:plain:w320
問題なく実行されれば、LEDが点滅する。

4. おまけ

このLEDは、3色LEDなので、色を変えられます。
LED01.cydwr を表示して、「LED」を、ドラッグ&ドロップで、P3[6] につなぐ。
f:id:blgkns:20150803004452p:plain:w320

Programボタンを押す。
うまく動けば、LEDが緑色で点滅する。

LED01.cydwrをダブルクリックする。
「LED」を、ドラッグ&ドロップで、P3[7] につなぐ。
Programボタンを押す。
LEDが青色で点滅する。

Cypress Bluetooth Low Energy Pioneer Kit

Bluetooth Low Energy(BLE) を調べている時に出会った Cypress の Bluetooth Low Energy Pioneer Kit なかなかおもしろそうです。1チップの中に、ARM Cortex-M0、BLE、プログラマブルな回路を詰め込んだPSoC 4 BLE / PRoC BLE の開発キットです。技適も通ってます。

f:id:blgkns:20150730113445p:plain:w320
CY8CKIT-042-BLE Bluetooth® Low Energy (BLE) Pioneer Kit
http://japan.cypress.com/documentation/development-kitsboards/cy8ckit-042-ble-bluetooth-low-energy-ble-pioneer-kit

f:id:blgkns:20150730113453p:plain:w320
この小さいのが、モジュール本体で、これにコードを書き込んで、電源だけ供給すれば、これだけで、BLE通信が可能です。左がPSoC 4 BLE Module で、右がPRoC BLE Moduleです。

f:id:blgkns:20150730113501j:plain:w320
開発時は、Baseboardにさして使います。Baseboardには、LEDやスイッチが載っていて、それぞれGPIOにつながっていますので、このキットだけで、すぐに遊べそうです。

さらに、Windows / iOS / Android 用に CySmartというアプリが提供されていて、キットとスマホ間でBLE通信を試してみることも可能です。

ちなみに、国内であれば、
共立エレショップ
http://eleshop.jp/shop/g/gF36121/

マクニカオンラインストア
https://store.macnica.co.jp/products/cypress_cy8ckit-042-ble

海外なら、
Mouser
http://www.mouser.jp/ProductDetail/Cypress-Semiconductor/CY8CKIT-042-BLE/

Cypress Store
http://japan.cypress.com/documentation/development-kitsboards/cy8ckit-042-ble-bluetooth-low-energy-ble-pioneer-kit

などで入手できます。

あと、定期的(2~3ヶ月に1度?)に、東京/大阪でワークショップが開かれていて、これに参加すると、もらえるようです。

ワークショップ(Cypress)
http://japan.cypress.com/workshops

Raspberry Pi 2で、I2C LCDモジュールを使ってみる

Raspberry Pi 2で、I2C LCDモジュールを使ってみました。

使ったもの

  • Raspberry Pi 2 (Raspbian/NOOBS 1.4.1)
  • I2C LCDモジュール
  • キーボード、マウス、MicroSDカード、ブレッドボードなど

1. I2C LCDモジュール

I2C接続の小型LCD搭載ボード(3.3V版)
実験用に買ってみました。 お手頃です。

スイッチサイエンス 商品ページ
https://www.switch-science.com/catalog/1405/

2. I2Cを有効化する

デフォルトでは、I2Cは有効になっていないので、使えるようにしてあげる必要があります。

2-1. sudo raspi-config

$ sudo raspi-config
「8 Advanced Options」「A7 I2C」を選択
[<はい>] を選択します。

2-2. 再起動

$ sudo shutdown -r now

2-3. /boot/config.txt

dtparam=i2c_arm=on があることを確認します
なかったら行追加します

2-4. /etc/modules

i2c-dev があることを確認します
なかったら行追加します

2-5. I2CTools

I2CTools をインストールします
$ sudo apt-get install i2c-tools

2-6. シャットダウン

配線するため、シャットダウン
$ sudo shutdown -h now

3. 配線

以下のように配線します。

Raspberry Pi 2 LCDモジュール
3.3V - VDD
GND - GND
I2C_SDA1 - SDA
I2C_SCL1 - SCL

f:id:blgkns:20150724025316p:plain:w320
LCDモジュールを抜いている状態

f:id:blgkns:20150724025331p:plain:w320
LCDモジュールをさしている状態

4. I2Cデバイスの接続を確認する

$ sudo i2cdetect 1
を実行すると...

pi@raspberrypi ~ $ i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

このLCDモジュールのI2Cアドレスが、0x3eだと確認できます

5. LCDモジュールにコマンドを送る

最初の1発目は、失敗することがありました。その場合は、再度、コマンドを送ってみてください。

コマンド表は、秋月電子通商のページにあります。 http://akizukidenshi.com/download/ds/xiamen/AQM0802.pdf

pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
Error: Write failed
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0x40 0x48 0x65 0x6c 0x6f i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0x40 0x48 0x65 0x6c 0x6c 0x6f i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0x40 0x48 0x65 0x6c 0x6c 0x6f i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0x00 0xc0 i
pi@raspberrypi ~ $ sudo i2cset -y 1 0x3e 0x40 0x52 0x61 0x73 0x70 0x62 0x69 0x61 0x6e i
pi@raspberrypi ~ $ 

実行結果
f:id:blgkns:20150724025754p:plain:w320
ちょっと写真が暗いですね....orz