ラズベリーパイのGPIOを使ってLチカ
今回の内容
ラズベリーパイにはGPIOというセンサや電子回路を繋ぐことができるポートがあります。今回は、C言語からラズベリーパイのGPIOを使ってLEDを点滅させてみます。C言語からGPIOを制御するためのライブラリとしてWiringPiというものがあります。このWiringPiのインストールや使い方を踏まえてLEDを点滅するプログラムを開発していきます。
ラズベリーパイ2をご利用の方
ラズベリーパイ2を使用している方は、お手数ですが以下のページで、ラズパイ2でのwiringPiの使い方について説明しておりますのでご覧ください。
前回までの内容は?
前回までで、ラズベリーパイを使うための設定(OSのインストール等)をして、SSHでリモート接続ができるようになりました。前回までの内容が気になる方や、ラズベリーパイをもっと活用したい方 は、ぜひ以下の記事をご確認ください。
GPIOとは
ラズベリーパイにはGPIO(General Purpose Input/Outut)、つまり入出力端子が備わっています。このGPIOを使って、ラズベリーパイから外部へ信号を出力したり、受信したりすることができます。今回使用するラズパイ(モデルB)のGPIOピンには26ピンが付いています。
GPIOのピン配置については、後で説明をします。
WiringPiのインストールと使い方
wiringPiのインストールと、その使い方を説明します。ここでは、c言語でwiringPiを用いてLEDを点滅させることを最終目標に説明していきます。
wiringPiのインストール
ラズベリーパイを起動し、LXTerminalを開きます。
以下のコマンドを打ち込み、wiringPiのソースコードを取得します。
git clone git://git.drogon.net/wiringPi
ソースコード取得後、wiringPiディレクトリに移動し、ソースコードのビルドを行います。コマンドは以下の通りです。
cd wiringPi ./build
これでwiringPiのインストールは完了です。
WiringPiでのGPIOピン配置
GPIOのピン配置は以下のようになっています。図2の右側はこちらの画像をお借りしました。
※ラズパイ2やラズパイ(モデルB+)を使用の方は、GPIOのピン数が増えているためラズベリーパイ2のGPIOを使ってLチカの記事をご覧ください。
図3にwiringPiとGPIOの対応をまとめました。このピン配置は、GordonsProjectsさんを参考にしました。
例えば、ラズパイの11番ピン(GPIO0)を使うには、wiringPi上で0番を指定すればいいことになります。
また、ピン配置情報はラズベリーパイのLXTerminalから、以下のコマンドより確認することもできます。
gpio readall
WiringPiの使い方
wiringPiを用いてC言語で、LEDを点滅させてみます。wiringPiは、wiringPi.hをインクルードすることでC言語から扱うことができます。
ラズベリーパイの11pin(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として保存し、コンパイル・実行ファイルを作成します。
sudo gcc testLED.c -o testLED -lwiringPi
実行します。
sudo ./testLED
無事にwiringPiを使って、LEDが以下のようにon・offを1秒おきに点滅しました。
<< ラズパイをリモート操作するへ | ラズパイでエアコンを動かすへ >> |