やっとこさ、Lチカにたどり着いたのでチカチカしてみましょう。手元の Raspberry Pi 3 であれこれやろうと思っていたのですが、キュレーションメディアっぽくひと様のふんどしで相撲をとります。
World Map of Makers - Hackster.io
これは世界地図を表示してLチカする例なのですが、最初のところは入門編なので、良い教材になります。
配線例
慣れてくると回路図を使うのですが、こんな風に実体の配線図を使うと便利です。ジャンプワイヤーの色は、赤と青を使っていますが、何の色を使っても構いません。通例としては、マイナス極(GND)のほうを寒色(黒とか青とか緑とか)を使って、プラス極のほうを暖色(赤とかオレンジとか)を使うことが多いです。
ここでは、
- 赤色のLED
- 560Ωの抵抗
を付けています。実は、この抵抗値もおおざっぱでよくて(輝度を調節するためには正確に計算する必要がありますが)、100Ωから1kΩ程度のものを挟んでおけば、ひとまずLチカだけはできます。場合によっては、抵抗なしで直結でもokです。抵抗がない場合は、長く点灯するとLEDが壊れてしまうので注意してください。
コードを見る
このサンプルは https://github.com/ms-iot/adafruitsample/tree/master/Lesson_201 にあります。 adafruitsample/Lesson_201/FullSolution/MainPage.xaml.cs を見ていく...のが筋なのですが、結構ややこしいので前回のサンプルを元に解説をします。
参照設定で「Windows IoT Extension SDK」を追加します。
先頭で、Windows.Devices.Gpio を追加します。GpioController クラスが使えるようになります。
using Windows.Devices.Gpio;
初期値です。LED のピン(LED_PIN)は5番になっています。
private const int LED_PIN = 5;
private GpioPin pin;
private GpioPinValue pinValue;
private DispatcherTimer timer;
起動時に GPIO の初期設定をします。
private void InitGPIO()
{
var gpio = GpioController.GetDefault();
// Show an error if there is no GPIO controller
if (gpio == null)
{
pin = null;
GpioStatus.Text = "There is no GPIO controller on this device.";
return;
}
pin = gpio.OpenPin(LED_PIN);
pinValue = GpioPinValue.High;
pin.Write(pinValue);
pin.SetDriveMode(GpioPinDriveMode.Output);
GpioStatus.Text = "GPIO pin initialized correctly.";
}
- GpioController.GetDefault で gpio を取得
- gpio.OpenPin で指定のピン LED_PIN(5) をオープンします。
- pin.Write で High に初期化
- pin.SetDriveMode で出力モードへ
Low で電流が流れて、High で止まります。Low で LED の明かりがついて、High で消えるということですね。
タイマーループで呼び出されるのが、Timer_Tick メソッドで、チカチカさせる部分です。
private void Timer_Tick(object sender, object e)
{
if (pinValue == GpioPinValue.High)
{
pinValue = GpioPinValue.Low;
pin.Write(pinValue);
LED.Fill = redBrush;
}
else
{
pinValue = GpioPinValue.High;
pin.Write(pinValue);
LED.Fill = grayBrush;
}
}
ピンの状態を pinValue で保持しているので、これを見て Low と High を切り替えます。
こんな仕組みで Windows IoT Core の Lチカができるようになります。