第3回 Windows IoTと押しボタンスイッチでLEDを点滅させる:Windows 10 IoT Coreで始めるIoT入門(1/2 ページ)
これまでに準備したボードコンピューターとIoTアプリ開発環境を使って、いよいよ実際にハードウエアを制御してみる。まずは押しボタンスイッチでLEDを点滅させる簡単な仕組みから実践しよう。
前回は、Windows 10 IoT Core向けの開発環境準備について解説した。今回はRaspberry Pi 2 Model BにLED(発光ダイオード。電圧を掛けると光を発するデバイス)とスイッチを接続して、それを制御してみよう。
LEDとスイッチをつないでみる
Raspberry Pi 2 Model Bには機能拡張用のポートがあり、ここにLEDやスイッチ、各種センサーデバイスなど、さまざまな回路を接続して制御できる。今回は一番簡単な例として、LED(発光ダイオード)とスイッチを接続し、それらをプログラムから制御してみる。まずは簡単な例として、前回作成したサンプルプログラムに合わせて、LEDを3つと、スイッチを2つ接続してみる。
回路はブレッドボード(実験用の回路基板)上に実装し、ジャンパーワイヤーでRaspberry Pi 2 Model Bと接続する。実際のボードは次のようになる。
ブレッドボード上に作成した実験用回路
LEDとスイッチ、抵抗をブレッドボード上に配置してジャンパーワイヤー(簡単に抜き差しできるようになっている接続用の配線)で接続して回路を組み立て、これをRaspberry Pi 2 Model Bに接続する。ブレッドボードやジャンパーワイヤー、実験用の部品などは、Raspberry Pi 2 Model Bを販売しているショップなら取り扱っているはずだ。
ブレッドボードの基本的な使い方については、以下の記事などを参照していただきたい。これはArduinoという、Raspberry Piとはまた別のボードコンピューターの解説記事であるが、ブレッドボードの使い方やLEDの制御方法などは同じである。
今回使った部品は次の通りだが、LEDとスイッチ1つずつでもよい。その場合はプログラムを少し書き換えればよいだけだ。
- ブレッドボード
- ブレッドボード用のジャンパーワイヤー(両端がオスのピンのものの他に、片方がメスになっているワイヤーがあると接続に便利。Raspberry Pi側の接続用端子はオスのピンになっているため)
- LED(色やサイズなどは任意。抵抗が内蔵されていないタイプを選んだ。今回は赤、緑、青を1つずつ使用)
- 抵抗330オーム×3本(LEDの電流制限用抵抗)
- タクトスイッチ(ブレッドボードに取り付け可能な押しボタン式のスイッチ)×2個
これらの部品を組み合わせ、次のように配線してRaspberry Pi 2 Model Bに接続する。といっても、「GPIO(General Purpose Input/Output)」と呼ばれる汎用の入出力ポート(電気信号を送受信できる端子)にLEDやスイッチなどをつないでいるだけだ。
実験用回路配線図
回路的には、単にLEDとスイッチをRaspberry Pi 2 Model Bの拡張端子にあるGPIOポートへ接続しているだけで、難しいことは何もしていない。なお、ブレッドボードの一番上のライン(図中のブレッドボードにおける、一番上の青線のところのライン)はRaspberry Pi 2 Model BのいずれかのGNDピンに接続しておくこと。回路図描画ツール「Fritzing」で製図。
LEDを直接ポートに接続すると電流が流れすぎるので、制限するために330Ωの抵抗(電流制限抵抗)を直列に挿入してある。接続は、「GPIOポート → 330オームの抵抗 → LED → GND(接地)」となるように配線する。なおLEDには向きがあり、足の長い方がGPIOポート側となるようにすること。間違っていると点灯しないので、その場合は逆向きに指し直す。
スイッチの方は「GPIO → スイッチ → GND」と配線する。スイッチを押したときにGPIOポートとGNDが接続されるように配線すること。一般的な電子回路では、スイッチ部分には抵抗を入れて(VCCかGNDに)プルアップやプルダウンすることが多いが、Raspberry Pi 2 Model Bの内部にはプルアップ抵抗(およびプルダウン抵抗)が内蔵されているため、抵抗を付ける必要はない。ちなみにこのスイッチ回路は負論理になっているため、プログラムから見た場合、スイッチ端子からデータを読み込むと、普段はHighレベルで、スイッチを押した時だけLowレベルになる。
実験回路図
LEDを3つとスイッチを2つ接続しているだけ。LEDには330オームの電流制限抵抗を入れている。GPIO端子がHighレベルになると電流が流れ出してLEDが点灯する。スイッチ(常時開いていて、押すと閉じる)はそのまま直接GPIOポートとGND間に接続している(内部プルアップを使用)。スイッチを押す前はHighレベルだが、スイッチを押すとGNDとつながり、Lowレベルになる。
Raspberry Pi 2 Model Bの拡張端子のピン割り当てを次に示しておく。GPIO端子はどれを使ってもよいが、今回は端の方から割り当てている。
Raspberry Pi 2 Model Bの拡張端子とそのピン配置
40pinのピンヘッダからなる拡張端子から、メスのジャンパーワイヤーなどを使ってGPIOや電源/接地(GND)を引き出してブレッドボードへ接続する。灰色で書いてある数字は実際のピン番号だが、これはGPIOのポート番号とは異なるので注意。IoTコアのサンプルページより引用。
Windows 10 IoTでRaspberry PiのGPIO端子を制御する
前回はVisual Studio 2015 Communityエディションを使って、Windows IoT向けのユニバーサルWindowsアプリ(UWP)を作成してみたが、実際にはLEDなどは何も制御しておらず、単にUWPアプリをビルドして起動してみただけであった。GPIO経由でLEDやスイッチ、センサーなどのデバイスを利用するためには、GPIO用の特別なクラスライブラリなどを利用する必要がある。
とはいえ、いきなりWindows IoT向けのプログラムを0から作成するのは大変である。まずは以下の場所にあるサンプルプログラムを入手して、Windows IoT向けのプログラムの概要を知るとよいだろう。
- Windows IoTサンプルプログラム集(GitHubレポジトリ)
このページへアクセス後、ページの右カラムにある「Download ZIP」のリンクをクリックすると全アーカイブがダウンロードできるので、ローカルへダウンロード後展開する。Gitの使い方に慣れているなら、ローカルにGitのレポジトリのクローンを作ってもよい。
ZIPファイルを展開するとフォルダーの中にVisual Studioのソリューションファイル(.sln)があるので、ダブルクリックして開いて中を見てみよう。サンプルプログラムの解説は以下のページを参照のこと。
- Windows IoT Docs and Samples[英語](マイクロソフト)
今回は、このサンプル集の中にある「Blinky」と「Push Button Sample」などをベースにしてプログラムを作成している。
今回作成したサンプルプログラムは次の通りである。これを開いて、以下の解説を参照していただきたい。
プログラムを起動すると、画面には赤・緑・青の円(LED)が表示され、スイッチを押すと、LEDが点灯すると共に、画面上にも濃い色で円が描画される。ただし赤のLEDはスイッチを押している間だけ光り(モーメンタリ動作)、緑のLEDはスイッチを押すたびに点灯と消灯を繰り返し(オルタネート動作)、青のLEDは単に高速点滅を繰り返すだけ、というふうにしている。
Copyright© Digital Advantage Corp. All Rights Reserved.