ラズベリーパイ2のGPIOを使ってLチカ
今回の内容
ラズベリーパイ2にはGPIOというセンサや電子回路を繋ぐことができるポートが40ポート付いてます。今回は、C言語からラズベリーパイのGPIOを使ってLEDを点滅させてみます。C言語からGPIOを制御するためのライブラリとしてWiringPiというものがあります。このWiringPiのインストールや使い方を踏まえてLEDを点滅するプログラムを開発していきます。
前回までの内容は?
前回までで、ラズパイ2を使うための設定(OSのインストール等)をして、SSHでリモート接続ができるようになりました。前回までの内容が気になる方や、ラズベリーパイをもっと活用したい方 は、ぜひ以下の記事をご確認ください。
GPIOとは
ラズパイ2にはGPIO(General Purpose Input/Outut)、つまり入出力端子が40ピン備わっています。このGPIOを使って、ラズベリーパイ2から外部へ信号を出力したり、受信したりすることができます。
GPIOのピン配置については、後で説明をします。
WiringPiのインストールと使い方
ラズパイ2でのwiringPiのインストールと、その使い方を説明します。ここでは、c言語でwiringPiを用いてLEDを点滅させることを最終目標に説明していきます。
wiringPiのインストール
ラズパイ2を起動し、LXTerminalを開きます。以下のコマンドより、wiringPiのソースコードを取得します。
git clone git://git.drogon.net/wiringPi
ソースコード取得後、wiringPiディレクトリに移動してソースコードのビルドを行います。コマンドは以下の通りです。
cd wiringPi ./build
これでラズパイ2にwiringPiをインストールできました。
WiringPiでのGPIOピン配置
ラズパイ2のGPIOピン配置は以下のようになっています。図2の右側はelinux.orgさんの画像をお借りしました。
図3にラズパイ2のGPIOとwiringPiとの対応をまとめました。
例えば、ラズパイ2の11番ピン(GPIO0)を使うには、wiringPi上で0番を指定すればいいことになります。
また、GPIOのピン配置情報はラズパイ2のターミナル(LXTerminal)から、以下のコマンドより確認することもできます。
gpio readall
WiringPiの使い方
作成回路
作成した回路を下図に示します。GPIOの1ピン(図中の赤線)をブレッドボードの"+側"に、9ピン(図中の茶線)をブレッドボードの"-側"に、11ピン(図中の白線)を直列に繋がった抵抗とLEDに繋ぎます。LEDの足が短い方(カソード)は"-側"に繋いで回路を作成します。プログラム
wiringPiを用いてC言語で、LEDを点滅させてみます。wiringPiは、wiringPi.hをインクルードすることでC言語から扱うことができます。
ラズベリーパイ2の11ピン(wiringPiでは番号0)に接続したLEDを1秒間隔で点滅させるプログラムを以下に示します。
/* testLED.c */ #include <wiringPi.h> #include <stdio.h> #define WRITE_PIN 0 int main(void) { if(wiringPiSetup() == -1){ printf("error wiringPi setup\n"); return 1; } pinMode(WRITE_PIN, OUTPUT); while(1){ digitalWrite(WRITE_PIN, 0); //LED off delay(1000); //wait 1000ms digitalWrite(WRITE_PIN, 1); //LED on delay(1000); //wait 1000ms } return 0; }
このプログラムをtestLED.cとして保存し、コンパイル・実行ファイルを作成します。wiringPiを使用するときにはコマンドに"-lwiringPi"を追加します。
sudo gcc testLED.c -o testLED -lwiringPi
作成したtestLEDファイルを実行します。
sudo ./testLED
無事にwiringPiを使って、ラズパイ2のGPIOに繋いだLEDが以下のようにon・offを1秒おきに点滅しましたか。
<< ラズパイをリモート操作するへ | ラズパイでエアコンを動かすへ >> |