はじめに
iPhoneやiPadは、あたりまえですが画面があって音も出て、インターネットにもつながり、さらにはGPSや加速度センサも付いていて、スマートフォンアプリに必要な機能を実現するにはかなり「揃っている」デバイスです。ただ、それでもiPhoneからにおいは出せませんし、脳波はとれませんし、時計のように腕に巻くことはできませんし、直接電子回路をつなげることはできません。
そういった「iOSデバイスにない機能」を使うには、外部デバイスに頼る必要があります。嬉しいことに、昨今のスマホアプリ開発人気のおかげで、iOSアプリと連携させて使えるデバイス、すなわちiOSアプリと連携させるためのSDKや、Web APIが用意されているデバイスが色々と市販され始めています。
本連載では、そういった「iOSアプリの可能性を広げるデバイス」を毎回1つずつ取り上げ、その特長や、連携させるためのアプリ側の実装方法などを紹介していきます。
konashiについて
記念すべき第1回は、国産フィジカルコンピューティングデバイス「konashi」を紹介したいと思います。
konashiとは
konashi(こなし)は、iPhone/iPadのための、フィジカル・コンピューティングツールキットです。iOSから簡単にハードウェアにアクセスする開発環境を提供し、マイコン側のファームウェア開発をすることなくソフトウェアエンジニア・デザイナ・アーティストが手軽にプロトタイピングを行うツールとしてお使いいただけます。
ユカイ工学のkonashi紹介ページより
本連載向けにざっくりいうと、konashiを使うことで、自分で電子回路を組んで、それをiPhone/iPadアプリと連携させることができます。
フィジカルコンピューティング向けのデバイスとしてよく使われているArduino(とくに最もメジャーなUno)との主な違いとしては、
- Bluetooth Low Energyを搭載しており、拡張なしでiPhoneやiPadと無線接続できる
- JavaScriptやObjective-Cで開発できるようライブラリが整備されている
といった点です。つまり、スマホアプリとの連携に重点を置いたプロダクトになっています。
konashiを使うことで、たとえば、次のようなものを実現できるようになります。
購入方法
konashiは、ユカイ工学のショップで購入することができます。
販売価格は9,980円(2013年11月現在)です。
基本的な使い方
iOS SDKの取得、導入から、Lチカ(LEDを光らせる)までの手順です。ここはほぼ公式サイトのGetting Started通り。
なお、本記事のすべてのサンプルコードは、こちらよりダウンロードしていただけます。
1.konashi-ios-sdkを取得する
下記のGitHubリポジトリから cloneするか、zipでdownloadします。
CocoaPodsからの取得&導入にも対応しています。Podfileに以下のように書き、
ターミナルからpod installします。
2.SDKをプロジェクトに追加する
konashi-ios-sdk/Konashiフォルダごとプロジェクトに追加し、依存フレームワークであるCoreBluetooth.framework をプロジェクトにリンクします。
3.コードを書く
というコードを書きます。
ViewController.m で、ヘッダをインポートしておきます。
viewDidLoadで、Konashiオブジェクトを初期化し、 konashiとの接続完了イベントの監視を開始します。
接続完了イベント(KONASHI_EVENT_READY)発行時に実行するメソッドを実装します。
上記のflashLEDメソッドではLEDを点灯させる処理を行っています。
konashiとの接続を開始するアクションメソッドを用意し、
Interface BuilderでUIButtonオブジェクトと接続します。
ここではボタンのタイトルを「konashiを探す」としました。
動かしてみる
konashiに付属のボタン電池をセットするか、USBケーブルをつないで電源を供給します。iOSデバイス(iPhoneかiPad)側ではiOSの「設定」からBluetoothをOnにしておき、
作成したアプリの「konashiを探す」ボタンを押します。
近くにkonashiがあれば次のようにピッカーが出てきます。
ここでDoneボタンを押すと、konashiとの接続が開始され、接続完了するとLEDが点灯します。
スイッチをトリガにiOSアプリで処理を行う
konashiはフィジカルコンピューティング用途のデバイスなので、自分で組んだ電子回路や市販の拡張ボードとつなげて使うことを前提としたものですが、本体だけでもすぐに試せるよう、ここでは標準搭載されているスイッチとLEDを使ってiOSアプリと連携する方法をいくつか紹介します。
konashiスイッチ押下をiOSアプリ側で検知する
まず、konashiのスイッチが押されたことをiOSアプリ側で検知する方法を紹介します。先ほど実装したサンプルのviewDidLoadで、次のようにKONASHI_EVENT_UPDATE_PIO_INPUTイベントの監視を開始します。
KONASHI_EVENT_UPDATE_PIO_INPUTは、 PIO(Digital I/O)の入力の状態が変化した時に発行されるイベントで、次の図からわかるように、konashiのスイッチはPIO 0に接続されているので、
スイッチの状態が変わると、KONASHI_EVENT_UPDATE_PIO_INPUTイベントが発行される、というわけです。
KONASHI_EVENT_UPDATE_PIO_INPUT発行時に実行するメソッドを、次のように実装します。
上記では、digitalRead:` メソッドでスイッチの入力状態を取得し、HIGH、つまり押された状態であれば、アラートを表示するようにしています。これで、konashiとiOSアプリを接続した状態でスイッチを押すと、アラートが表示されるようになります。
konashiのスイッチ+LEDでアプリのメニュー選択操作を行う
konashiにはPIOに4つのLEDが搭載されているので、それらを利用して、konashiのスイッチからメニュー選択を行うサンプルを紹介します。
konashiのスイッチを押すたびに4つのLEDが順番に切り替わり、スイッチを長押しすることでメニュー決定、となります。
まず、選択されているメニュー(LEDのピン番号)を保持するためのint型のメンバ変数と、スイッチ長押しを判別するためのNSTimeInterval型のメンバ変数を宣言しておきます。
LEDを点灯させるメソッドを次のように実装します。
上記メソッドでは、引数に指定したピン番号のLEDを点灯させる処理をおこなっています。
すべてのLEDを消灯させるメソッドを次のように実装します。
viewDidLoadでイベント監視の開始を次のように行い、
各イベントハンドラを次のように実装します。
上記の、スイッチが押された/離されたときに呼ばれるイベントハンドラpioInputUpdatedでは、スイッチが押されている時間を計測し、
- 短く押された場合はメニューの切り替え(点灯するLEDを切り替える)
- 長押しされた場合はメニューの決定(選択されたメニューをアラート表示する)
という処理を行っています。
以上の実装で、スイッチを短く押すごとにメニューが切り替わっていることをLEDで確認でき、長押しするとアプリ側にアラートが出て選択されたメニューが表示されるようになります。
さまざまなセンサやアクチュエータを簡単に使う
konashi単体ですぐに試せるよう、前項ではkonashiに標準搭載されているLEDとスイッチを使ってiOSアプリを制御する方法を取り上げましたが、konashiは自分でセンサやアクチュエータを使用した回路を組んで接続することでよりその可能性を発揮するものです。
ただ、はんだづけは作業としてのハードルが高いし、ブレッドボード上に回線を組むにしても、相応の電気/電子の知識が必要になります。
そこで、ここではより簡単に、コネクタを挿すだけでセンサやアクチュエータを使用した回路を作成できるようになる拡張ボード「konashi GROVE拡張ボード」を紹介します。
ユカイ工学のプレスリリースには、
弊社製品konashiに対し、Seeed Studio社のモジュールキット GROVEの接続を可能にする拡張ボードです。これにより、電子工作初心者でもブロックを組み立てるような感覚で、ブレッドボードよりも簡単に回路を作成することができます。
とあります。
konashi本体同様、ユカイ工学のショップで購入することができます。税込2,980円です。
GROVE拡張ボードの使い方
ボードの準備としては、konashiの上に拡張ボードをかぶせるだけです。
ちょうどkonashiの上下10本ずつ端子に拡張ボードのピンが挿さるようになっています。注意点としては、ボード背面の『ユカイ』というロゴの向きを合わせること。
あとは、GROVEモジュールのコネクタをそれぞれデジタル/アナログの端子に挿すだけです。
たとえばデジタル端子に挿せるモジュールとしては、タッチセンサがあります。
このモジュールはタッチしている間、出力がHIGHになります。プログラムからの扱いとしては、前述したスイッチと同様、KONASHI_EVENT_UPDATE_PIO_INPUTイベントを監視し、タッチセンサを挿しているピン(拡張ボードのCN1はピンS1に相当)の値を読み取ればOKです。
またアナログ端子に挿して使うモジュールとしては、光センサがあります。
アナログ端子の値はそれぞれ端子ごとにイベント名が定義されており、AIO0の値の変化を読み取る場合は、KONASHI_EVENT_UPDATE_ANALOG_VALUE_AIO0を監視します。
analogReadRequest:を呼んで読み取りをリクエストすると、
KONASHI_EVENT_UPDATE_ANALOG_VALUE_AIO0が発行されイベントハンドラで値を取得することができます。
GROVEモジュールの種類
上で触れたタッチセンサや光センサ以外にも、GROVEモジュールには、非常に多くの種類があります。
ほんの一例を挙げると、次のようなものがあります。
またGROVE拡張ボードにはPIO6、7がI2C通信用の端子として設けられています(図の赤い部分)。I2C方式の通信を利用することで、より高機能なセンサにつなぐことができます。I2Cで接続するセンサモジュールには次のようなものがあります。
スイッチサイエンスのショップのSeeed Studioカテゴリや、海外サイトになってしまいますが、販売元のSeeed Studio社のGROVEページでもっと多くのモジュールを見つけることができるので、色々と探してみてください。
まとめ
iPhone/iPadと簡単に連携できるフィジカルコンピューティングデバイス「konashi」を紹介しました。ぜひ、konashiを使用して、iOSアプリの可能性を広げるアプリおよびデバイス作りに挑戦してみてください。
なお、今回の記事執筆にあたり、ユカイ工学主任研究員であり、konashiを企画/開発された松村礼央氏に内容のチェックと、ご助言をいただきました。この場を借りてお礼申し上げます。
次回はまた別の「iOSアプリと連携して使えるデバイス」を取り上げます。お楽しみに!