うしこlog
公開: 2014/06/22

ラズベリーパイの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のピン配置については、後で説明をします。

GPIOピン
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チカの記事をご覧ください。

GPIOのピン配置
GPIOのピン配置

 図3にwiringPiとGPIOの対応をまとめました。このピン配置は、GordonsProjectsさんを参考にしました。
例えば、ラズパイの11番ピン(GPIO0)を使うには、wiringPi上で0番を指定すればいいことになります。

wiringPiとGPIOのピン配置
wiringPiとGPIOのピン配置

 また、ピン配置情報はラズベリーパイの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秒おきに点滅しました。

LLEDオフ
LEDオフ
LLEDオン
LEDオン
<< ラズパイをリモート操作する ラズパイでエアコンを動かすへ >>