VS2015のソリューションエクスプローラーの「参照」で右クリック→「参照の追加」を選択する。表示される、参照マネージャーから、「Universal Windows」→「拡張」→「Assembly-CSharp運用可能なSDK」メニューで、「Windows IoT Extension for the UWP 10.0.10240.0」にチェックを入れる(図1)。選んだAPIがソリューションエクスプローラーの「参照」内に追加される。
ソリューションエクスプローラーから「CubeRollingScript.cs」ファイルを開く。最初はエラーを示す赤い波線が幾つか表示されるが、気にしなくてもいい。
前述したリスト1のコードを追記修正する(リスト2)。
using UnityEngine;
using Windows.Devices.Gpio;
public class CubeRollingScript : MonoBehaviour
{
private const int LED_PIN = 79;
private GpioPin pin;
private GpioPinValue pinValue;
void OnControllerColliderHit(ControllerColliderHit hit)
{
checkItem(hit.collider.gameObject);
}
void checkItem(GameObject obj)
{
if (obj.tag == "Cube1" || obj.tag == "Cube2" || obj.tag == "Cube3" || obj.tag == "Cube4")
{
pinValue = GpioPinValue.High;
pin.Write(pinValue);
obj.GetComponent<Rigidbody>().AddForce(Vector3.forward * 50, ForceMode.Force);
}
else
{
pinValue = GpioPinValue.Low;
pin.Write(pinValue);
}
}
private void InitGPIO()
{
var gpio = GpioController.GetDefault();
if (gpio == null)
{
pin = null;
return;
}
pin = gpio.OpenPin(LED_PIN);
pinValue = GpioPinValue.Low;
pin.Write(pinValue);
pin.SetDriveMode(GpioPinDriveMode.Output);
}
}
追記修正した「CubeRollingScript.cs」のポイントは以下の通りだ。
ユーザーモードの汎用入出力(GPIO)ピンを使うための型を含むWindows.Devices.Gpio名前空間を読み込む。
赤色のジャンパーワイヤを「SODIMM_79(GPIO)」につないだので、メンバー定数変数LED_PINを宣言し、Toradexでは「79」の値を記入して初期化する。一方、Raspberry Pi 3ではこの値を「25」にする。
GpioPinクラスのメンバー変数pin、汎用入出力(GPIO)ピンの可能な値を表す列挙体メンバー変数である、GpioPiValue型のpinValueを宣言する。
GPIOピンを初期化するInitGPIO()メソッドを実行する。
キャラクターが「立方体に触れた」ときの処理として、GpioPinValue.Highに、高いGPIOピンの値(約5V)をメンバー変数pinValueへ格納し、WriteメソッドでGPIOに電力を出力するよう記述する。
Toradexには、79番ピンとGND(電圧0V)の間に、LEDと抵抗を挟んでいる。電気は電圧の高いところから低いところへ流れる原則から、79番ピンに電圧をかけると、79番ピンからLEDを通ってGNDへ流れることになる。こうすることで、キャラクターが立方体に触れたら、LEDが光る仕掛けになる(※Raspberry Pi 3の場合は「25」に読み替えてほしい)。
一方、キャラクターが立方体に触れていないときは、GpioPinValue.Low(約0V)で、低いGPIOピンの値をメンバー変数pinValueへ格納して、WriteメソッドでGPIOに電力を出力するように記述する。出力したとしても電圧は低(約0V)、つまりLEDを光らせない処理となる。
GPIOControllerクラスを使ってGPIOを取得し、OpenPinメソッドでGPIOを開く。ここでは79ピンだ。低いGPIOピンの値(約0V)をメンバー変数pinValueへ格納し、WriteメソッドでGPIOに電圧をかける。
続いてSetDriveModeで、そのピンを入力に使うか、出力に使うかを指定する。今回は「出力」になるのでGpioPinDriveMode.Outputと指定し、さらにGpioPinValue.Lowと指定することで、「約0V」が出力される。こうすることで、初期状態では「LEDは光らせない」処理になる。
「Raspberry Pi 3」で早速チェック──「IoTハードウェア」を準備する
「Raspberry Pi 3」が登場。Windows 10 IoT Coreは早速サポートを表明
第1回 Windows IoTを始めようCopyright © ITmedia, Inc. All Rights Reserved.