強火で進め

このブログではプログラム関連の記事を中心に書いてます。

konashi (元の名称は monaka )が届いたので試してみた


1/31に注文していた konashi が本日、ユカイ工学から届きました。

konashi - A physical computing toolkit for iPhone, iPod touch and iPad
http://konashi.ux-xu.com/

これは元は monaka という名称でしたがフィジカル・コンピューティング用プラットフォームの名称として同一のものが存在する為、名称が konashi に変更されたみたいです。自分はパッケージに同梱されていた書類で名称の変更を知りました。

フィジカル・コンピューティング・ツールキット monaka  “ konashi (こなし)”への名称変更のお知らせ - ValuePress! [ プレスリリース 配信サイト ]
http://www.value-press.com/pressrelease/107457

この konashi というボードは iPhone/iPad アプリから Bluetooth 経由でデータのやり取りを可能なものです。

ボード上に有る LED を光らせたり、ボード上のボタンの入力を iPhone/iPad 側で受信し、それに対して処理を行ったりする事が出来ます。

その他にもデジタル、アナログのI/Oも Bluetooth 経由で可能です。

つまり、 iPhone/iPad のプログラムを書くだけで様々な電子パーツとのデータのやり取りを無線で可能にしてくれるボードなのです。

これを使えば iPhone でコントロールするラジコンや iPad のゲーム向けの無線のゲームパッドなども簡単に作れそうです。

外観

こちらが konashi のパッケージ。旧名称の monaka の文字が記述されています。

中には konashi のボード、ボタン電池、説明書が一枚入っていました。

ボタン電池が付属していますが有線状態ので運用で問題無ければUSB(マイクロUSB)経由で電源を供給して動作させる事も可能でした。

試してみる

早速、プログラムをしてみる事にしました。

まずは公式サイトの「Getting Started」という記事を参考に作ってみました。

そしておもむろに実機(iPhone 5)に転送して実行。起動時にこの様なアラートが表示。

日頃、 Bluetooth を使って無いのでここでオンにしました。

ここでデバイスが1つ表示されていたのでこれが konashi かな?と思って繋がるのをずっと待っていたのですがいつまで経っても繋がりませんでした。

後に konashi はここには表示されないという事を後に知りました(※ここで表示されたデバイスはたまたま近くの人の Bluetooth を捕捉していたみたいです)。

取り敢えず、「繋がらないけど Bluetooth はオンにしたので大丈夫だろう」と判断してアプリを再起動してみましたが無反応。ボード上の LED が点灯するプログラムの様ですがボード上の LED は電源のオンを示す LED 以外には点灯無し。

もしかして、初期不良?と不安になりながらも konashi の SDK に付属していた HardwareSample というサンプルを実行してみた所、こちらはちゃんと動作しました。

「Getting Started」のサンプルを動く様にする

(追記)
「Getting Started」のサンプル記事が修正されました。現在のサンプルでは「修正1」の作業は必要有りません。
(追記ここまで)
ハードウェアの初期不良では無いという確認が取れたのでこの HardwareSample というサンプルと「Getting Started」を参考に作成したプログラムを比較。すると HardwareSample では [Konashi find] がユーザがボタンを押したタイミングで実行されていましたが「Getting Started」では konashi の初期化処理に続いて呼ばれているという差異を見つけました。

HardwareSample では「Find」ボタンを押したタイミングで以下の様に「konashi#」で始まるデバイス名(ID?)が表示されそれを選択して、「Done」ボタンを押すと konashi へ接続が完了する様です。

「Getting Started」のサンプルではこの表示が行われていなかったのでまずはこの表示がされるように修正しする事にしました。

修正1

2つのプログラムを比較し場合、 konashi の初期化処理の後に時間を置いてから find が呼ばれているという差異が有ったので以下の様に performSelector:withObject:afterDelay: を使ってちょっと時間置いてから find が呼ばれる様に変更してみました。

    [Konashi initialize];
    
    [Konashi addObserver:self selector:@selector(ready) name:KONASHI_EVENT_READY];
    
    [Konashi find];
}

   ↓

    [Konashi initialize];
    
    [Konashi addObserver:self selector:@selector(ready) name:KONASHI_EVENT_READY];
    
    [self performSelector:@selector(delayFind) withObject:nil afterDelay:0.1f];
}

(中略)

- (void)delayFind
{
    [Konashi find];
}
修正2

この変更をした所、今度は例外でエラーになってしました。しかし、こちらは自分が作成したプロジェクトが ARC(Automatic Reference Counting) を無効にして作成していたのが原因でした。 ARC を有効にした所この問題は解決しました。

これで全ての問題が解消され、ちゃんと「接続する対象を選択→LEDが点灯」という動作をする様になりました。

今回のサンプルプロジェクト

これらの修正を行ったプロジェクトをこちらにアップしました。

現在ここには3つのサンプルを置いており、それぞれ以下の様な内容のプロジェクトに成っています。3つ目のサンプルでは LED を点滅させてみました。

  • KonashiExample01 : 公式の「Getting Started」のページに記載されているコード( http://monaka.ux-xu.com/getting_started/ )現在の konashi ではちゃんと動作しない。
  • KonashiExample02 : KonashiExample01 をちゃんと動作する様に修正したもの。
  • KonashiExample03 : LED (LED2)を点滅させるサンプル。