はじめに
iPhoneやiPadは、
そういった
本連載では、
konashiについて
記念すべき第1回は、
![konashi konashi](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH300_001.png)
konashiとは
konashi(こなし)は、
iPhone/ iPadのための、 フィジカル・ コンピューティングツールキットです。iOSから簡単にハードウェアにアクセスする開発環境を提供し、 マイコン側のファームウェア開発をすることなくソフトウェアエンジニア・ デザイナ・ アーティストが手軽にプロトタイピングを行うツールとしてお使いいただけます。
ユカイ工学のkonashi紹介ページより
本連載向けにざっくりいうと、
フィジカルコンピューティング向けのデバイスとしてよく使われているArduino
- Bluetooth Low Energyを搭載しており、
拡張なしでiPhoneやiPadと無線接続できる - JavaScriptやObjective-Cで開発できるようライブラリが整備されている
といった点です。つまり、
konashiを使うことで、
![iPhoneを持った人物が近づくと作動する電球や扇風機 iPhoneを持った人物が近づくと作動する電球や扇風機](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_002.jpg)
購入方法
konashiは、
![ユカイ工学 ユカイ工学](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_005.jpg)
販売価格は9,980円
基本的な使い方
iOS SDKの取得、
なお、
1.konashi-ios-sdkを取得する
下記のGitHubリポジトリから cloneするか、
CocoaPodsからの取得&導入にも対応しています。Podfileに以下のように書き、
platform :ios, "6.1"
pod "konashi-ios-sdk"
ターミナルからpod installします。
$ pod install
2.SDKをプロジェクトに追加する
konashi-ios-sdk/
3.コードを書く
- konashiを探して接続する
- LEDを光らせる
というコードを書きます。
ViewController.
#import "Konashi.h"
viewDidLoadで、
- (void)viewDidLoad
{
[super viewDidLoad];
// Konashiオブジェクトを初期化
[Konashi initialize];
// konashiとの接続完了時に発行されるイベントを監視する
[Konashi addObserver:self
selector:@selector(flashLED)
name:KONASHI_EVENT_READY];
}
接続完了イベント
- (void)flashLED {
[Konashi pinMode:LED2
mode:OUTPUT];
[Konashi digitalWrite:LED2
value:HIGH];
}
上記のflashLEDメソッドではLEDを点灯させる処理を行っています。
konashiとの接続を開始するアクションメソッドを用意し、
- (IBAction)pressFind {
[Konashi find];
}
Interface BuilderでUIButtonオブジェクトと接続します。
![ボタンの作成 ボタンの作成](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_006.jpg)
ここではボタンのタイトルを
動かしてみる
konashiに付属のボタン電池をセットするか、
![設定 設定](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH280_007.jpg)
作成したアプリの
近くにkonashiがあれば次のようにピッカーが出てきます。
![ピッカーの表示 ピッカーの表示](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH280_008.jpg)
ここでDoneボタンを押すと、
![LEDの点灯 LEDの点灯](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_009.jpg)
スイッチをトリガにiOSアプリで処理を行う
konashiはフィジカルコンピューティング用途のデバイスなので、
![konashiのスイッチ konashiのスイッチ](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_010.jpg)
konashiスイッチ押下をiOSアプリ側で検知する
まず、
[Konashi addObserver:self
selector:@selector(pioInputUpdated)
name:KONASHI_EVENT_UPDATE_PIO_INPUT];
KONASHI_
![レイアウトスイッチの図 レイアウトスイッチの図](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_011.jpg)
スイッチの状態が変わると、
KONASHI_
- (void)pioInputUpdated {
if ([Konashi digitalRead:S1] == HIGH) {
NSString *title = @"スイッチが押されました";
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:nil
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
上記では、
![アラートの表示 アラートの表示](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH280_012.jpg)
konashiのスイッチ+LEDでアプリのメニュー選択操作を行う
konashiにはPIOに4つのLEDが搭載されているので、
konashiのスイッチを押すたびに4つのLEDが順番に切り替わり、
![メニュー メニュー](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_013.jpg)
まず、
@interface ViewController ()
{
int currentLED;
NSTimeInterval startTime;
}
@end
LEDを点灯させるメソッドを次のように実装します。
- (void)flashLED:(int)led {
[Konashi pinMode:led
mode:OUTPUT];
[Konashi digitalWrite:led
value:HIGH];
}
上記メソッドでは、
すべてのLEDを消灯させるメソッドを次のように実装します。
- (void)turnOffAll {
for (int i=LED2; i
viewDidLoadでイベント監視の開始を次のように行い、
[Konashi addObserver:self
selector:@selector(ready)
name:KONASHI_EVENT_READY];
[Konashi addObserver:self
selector:@selector(pioInputUpdated)
name:KONASHI_EVENT_UPDATE_PIO_INPUT];
各イベントハンドラを次のように実装します。
- (void)ready {
// 接続完了したらまずLED2をオン
currentLED = LED2;
[self flashLED:currentLED];
}
- (void)pioInputUpdated {
[Konashi pinMode:S1
mode:INPUT];
// スイッチが押された
if ([Konashi digitalRead:S1] == HIGH) {
startTime = [[NSDate date] timeIntervalSince1970];
}
// スイッチが離された
else {
NSTimeInterval current = [[NSDate date] timeIntervalSince1970];
NSTimeInterval interval = current - startTime;
// 長押し
if (interval > 1.0) {
NSString *title = [NSString stringWithFormat:@"メニュー %d が選択されました", currentLED];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:nil
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
// クリック
else {
// 全てのLEDをオフ
[self turnOffAll];
// 次のLEDへ
currentLED++;
// LED5の次はLED2
if (currentLED > LED5) {
currentLED = LED2;
}
// 次のLEDをオン
[self flashLED:currentLED];
}
}
}
上記の、
- 短く押された場合はメニューの切り替え
(点灯するLEDを切り替える) - 長押しされた場合はメニューの決定
(選択されたメニューをアラート表示する)
という処理を行っています。
以上の実装で、
![メニューが切り替わる メニューが切り替わる](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH280_014.jpg)
さまざまなセンサやアクチュエータを簡単に使う
konashi単体ですぐに試せるよう、
ただ、
そこで、
![拡張ボード 拡張ボード](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_015.jpg)
ユカイ工学のプレスリリースには、
弊社製品konashiに対し、
Seeed Studio社のモジュールキット GROVEの接続を可能にする拡張ボードです。これにより、 電子工作初心者でもブロックを組み立てるような感覚で、 ブレッドボードよりも簡単に回路を作成することができます。
とあります。
konashi本体同様、
GROVE拡張ボードの使い方
ボードの準備としては、
![GROVE拡張ボードの使い方 GROVE拡張ボードの使い方](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_016.jpg)
ちょうどkonashiの上下10本ずつ端子に拡張ボードのピンが挿さるようになっています。注意点としては、
あとは、
![コネクタを挿す(上から見たところ) コネクタを挿す(上から見たところ)](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_0017b.png)
たとえばデジタル端子に挿せるモジュールとしては、
![タッチセンサ タッチセンサ](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_018.jpg)
このモジュールはタッチしている間、
またアナログ端子に挿して使うモジュールとしては、
![光センサ 光センサ](/assets/images/dev/serial/01/futuredevice/0001/thumb/TH800_019.jpg)
アナログ端子の値はそれぞれ端子ごとにイベント名が定義されており、
[Konashi addObserver:self
selector:@selector(analogInputUpdated)
name:KONASHI_EVENT_UPDATE_ANALOG_VALUE_AIO0];
analogReadRequest:を呼んで読み取りをリクエストすると、
- (IBAction)requestReadAio0 {
[Konashi analogReadRequest:AIO0];
}
KONASHI_
- (void)analogInputUpdated {
NSLog(@"READ_AIO0: %d", [Konashi analogRead:AIO0]);
}
GROVEモジュールの種類
上で触れたタッチセンサや光センサ以外にも、
ほんの一例を挙げると、
またGROVE拡張ボードにはPIO6、
スイッチサイエンスのショップのSeeed Studioカテゴリや、 iPhone/ なお、今回の記事執筆にあたり、 次回はまた別のまとめ