うしこlog
公開: 2015/09/03

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

ラズパイ2-GPIOピン
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さんの画像をお借りしました。

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

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

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

 また、GPIOのピン配置情報はラズパイ2のターミナル(LXTerminal)から、以下のコマンドより確認することもできます。

gpio readall

WiringPiの使い方

作成回路

作成した回路を下図に示します。GPIOの1ピン(図中の赤線)をブレッドボードの"+側"に、9ピン(図中の茶線)をブレッドボードの"-側"に、11ピン(図中の白線)を直列に繋がった抵抗とLEDに繋ぎます。LEDの足が短い方(カソード)は"-側"に繋いで回路を作成します。
LLEDオフ
作成回路

プログラム

 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秒おきに点滅しましたか。

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