ラズパイのGPIOを制御するためのC言語ライブラリの導入

はじめに

”WiringPi”は、ラズパイのGPIOを制御するためのC言語ライブラリである。
このGPIOは、仮想ファイルへ割り当てられているため、シェルを使えば

$sudo echo 1 > /sys/class/gpio/gpio18/value

と、上記のようにechoコマンドを使って設定することができる。

Lチカや製作した回路の動作確認程度であれば、これだけで済むが、GPIOをフルに使用するとなると、それなりのAPIを使用したプログラムが必要となる。

そこで、本章では、ラズパイのGPIOを制御するためのC言語ライブラリ”WiringPi”をインストールする手順を示す。

ただし、本章は本サイトに別途記載のDebianパソコンとラズパイのクロスプラットフォーム開発を想定しているため、下記手順はDebianパソコンでの操作である。

ライブラリの準備
I2Cライブラリのインストール

これから開発するプログラムにてI2C通信を行いたい場合は、下記コマンドを実行して、I2Cライブラリをインストールすること。

$>   sudo aptitude install libi2c-dev

WiringPiのインストール

「Wiring Pi」は、GitHubにて提供されていることから、gitコマンドが使えるよう、下記コマンドを実行する。

$> apt-get -y install git

すると、gitコマンドが使えるようになるので、下記の内容にて実行する。(事前に、”apt-get update”しておくこと)

$> git clone git://git.drogon.net/wiringPi

Cloning into 'wiringPi'...
remote: Counting objects: 1177, done.
remote: Compressing objects: 100% (980/980), done.
remote: Total 1177 (delta 822), reused 212 (delta 142)
Receiving objects: 100% (1177/1177), 369.45 KiB | 251.00 KiB/s, done.
Resolving deltas: 100% (822/822), done.
Checking connectivity... done.
$>

実行が完了すると、カレントディレクトリに、”wiringPi”ディレクトリが生成され、ソースコードが取得されているので、下記手順にてビルド及びインストールする。

$cd wiringPi/
 $./build
.....
All Done.
NOTE: To compile programs with wiringPi, you need to add:
 -lwiringPi
 to your compile line(s) To use the Gertboard, MaxDetect, etc.
 code (the devLib), you need to also add:
 -lwiringPiDev
 to your compile line(s).

インストールが成功したかを確認するため、下記コマンドを実行してバージョンを確認する。

$gpio -v
gpio version: 2.46
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Oops: Unable to determine board revision from /proc/cpuinfo
 -> No "Hardware" line
 -> You'd best google the error to find out why.

補足)gpioコマンドを使ってGPIO入出力制御

バージョン確認で使用した”gpio”コマンドは、”echo”コマンド同様、シェルでGPIOを制御することができる。

GPIO制御プログラムを作成する前に、制御対象のハードウェアをGPIOに接続して、動作確認に使用するという使い道もあり、便利です。(ポート指定などで、こちらのほうがわかりやすいと思われます)

実行例)
$gpio -g mode 25 out ・・・GPIO25番ポートを出力に設定
 $gpio -g write 25 1 ・・・同ポートに”High”を出力
 $gpio -g write 25 0 ・・・同ポートに”Low”を出力

C言語プログラムでのWiringPiの利用

C言語からWiringPi APIを利用するならば、ソースコードにWiringPiのヘッダファイルを指定し、WiringPiAPIを使用したプログラムを記述後、コンパイル時に、リンカオプションで”-lwiringPi”を追加する。

実行例)
$gcc -o test test.c -lwiringPi
$sudo ./test
参考)test.c
#include <wiringPi.h>
#define PORTNUM 25

int main(void) {
      if(wiringPiSetupGpio() == -1) {
         return 1;
      }
     pinMode(PORTNUM, OUTPUT);
    digitalWrite(PORTNUM, 1);
    delay(1000);
    digitalWrite(PORTNUM, 0);
 }

なお、ビルドおよび実行はラズパイ内で実施してください。

あとは、いろんなプログラムを書いて、”WiringPi”APIを使いこなしてください。