以前、ワイヤレスモジュールについてご紹介させて頂きました。
今回はマクニカBluetooth SMART モジュール Koshianを使って
2つのLEDを操作するということをしてみました。
以前にも紹介させて頂いたBroadcomのWICED SMARTでこちらのブログを参考に
プログラムをちょっと変えて2つのLEDを操作します。
下記にちょっと変える部分を参考程度にご紹介。
あまりWICED SMARTの情報が少ない中での試行錯誤なので
無駄な部分もあるかもですが笑
platform.hに
#define GPIO_PIN_A 0
#define GPIO_SETTINGS_A (GPIO_OUTPUT | GPIO_INIT_LOW | GPIO_A)
#define GPIO_PIN_B 2
#define GPIO_SETTINGS_B (GPIO_OUTPUT | GPIO_INIT_LOW | GPIO_B)
#define GPIO_SETTINGS_A (GPIO_OUTPUT | GPIO_INIT_LOW | GPIO_A)
#define GPIO_PIN_B 2
#define GPIO_SETTINGS_B (GPIO_OUTPUT | GPIO_INIT_LOW | GPIO_B)
//GPIO_INIT_LOWで初期値0、HIGHで初期値1
を追記。
bleprofile.hに
#define GPIO_A 0x4000
#define GPIO_B 0x8000
#define GPIO_B 0x8000
を追記。
**.cのLチカの部分をコメントアウトして、
書込み値に応じてP0とP2の出力(KoshianのRXとTXポート)を変える。
if ((len == 1) && (handle == HDLC_PROJECTIONBALL_PROJECTIONBALL_VALUE)) {
led2_hostinfo.generated.projectionball_projectionball_client_configuration = attrPtr[0];
//if (led2_hostinfo.generated.projectionball_projectionball_client_configuration != 0)
// {
//bleprofile_LEDBlink(250, 250, led2_hostinfo.generated.projectionball_projectionball_client_configuration);
//}
if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==3){
gpio_setPinOutput(0,0,1);
gpio_setPinOutput(0,2,1);
}else if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==2){
gpio_setPinOutput(0,0,0);
gpio_setPinOutput(0,2,1);
}else if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==1){
gpio_setPinOutput(0,0,1);
gpio_setPinOutput(0,2,0);
}else if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==0){
gpio_setPinOutput(0,0,0);
gpio_setPinOutput(0,2,0);
}
led2_hostinfo.generated.projectionball_projectionball_client_configuration = attrPtr[0];
//if (led2_hostinfo.generated.projectionball_projectionball_client_configuration != 0)
// {
//bleprofile_LEDBlink(250, 250, led2_hostinfo.generated.projectionball_projectionball_client_configuration);
//}
if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==3){
gpio_setPinOutput(0,0,1);
gpio_setPinOutput(0,2,1);
}else if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==2){
gpio_setPinOutput(0,0,0);
gpio_setPinOutput(0,2,1);
}else if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==1){
gpio_setPinOutput(0,0,1);
gpio_setPinOutput(0,2,0);
}else if(led2_hostinfo.generated.projectionball_projectionball_client_configuration==0){
gpio_setPinOutput(0,0,0);
gpio_setPinOutput(0,2,0);
}
を追記。
**_db.c 内の
const BLE_PROFILE_GPIO_CFG led2_gpio_cfg =
{
{
GPIO_PIN_WP, // This need to be used to enable/disable NVRAM write protect
GPIO_PIN_A , GPIO_PIN_B, -1 , -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // Other GPIOs are not used
},
/*.gpio_flag =*/
{
GPIO_SETTINGS_WP,
GPIO_SETTINGS_A,GPIO_SETTINGS_B ,0 , 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}
};
{
{
GPIO_PIN_WP, // This need to be used to enable/disable NVRAM write protect
GPIO_PIN_A , GPIO_PIN_B, -1 , -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // Other GPIOs are not used
},
/*.gpio_flag =*/
{
GPIO_SETTINGS_WP,
GPIO_SETTINGS_A,GPIO_SETTINGS_B ,0 , 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}
};
に修正。
**_db.c 内のconst UINT8 gatt_database[]の'○','○'の部分と
文字数に合わせてその前の数字を変えるとiPhoneから認識される
モジュール名が変更できます。
上記の例のPROJECTIONBALLやled2、projectionball部分は
プロジェクト名等によって変更してください。
途中まで入れると予測変換で自動で文字列が出てきます。
こんか感じで書き換えて、コンパイルして書込み。
iPhoneから書き込む値を
0で2つのLED消灯、
1で片方点灯、
2でもう片方点灯、
3で両方点灯
というようにiPhoneから2つのLEDを操れます。
ということでこのプログラムしたKoshianをプロジェクションボールに搭載。
LEDの代わりにプロジェクションボールの切替スイッチにKoshianを直結。
星や顔、メールマークなどの描画モード切替がiPhoneからできるようにしました。
Koshianで安くIoTデバイス化!
早速、先日のイベントでデモしましたが、
iPhoneから操作できるというのはなかなか評判が良かったです。