C言語を使ってRaspberry Piを制御しよう!

Raspberry Piの魅力

2012年に登場したRaspberry Piは、Pi 2/3/3B+を経て、昨年6月に「Raspberry Pi 4 Model B」が発表されました。スペックは、CPUのクロック周波数が1.5GHzに引き上げられ、RAMの容量は選択できるようになり、USB、Bluetooth、HDMIのビデオ出力なども向上しました。電源用のUSBコネクタは、より大きな電流を給電できるようにUSB Type-Cに変更されています。

Raspberry Piの魅力は、なんといっても低価格&プログラマブルな環境です。開発元のRaspberry Pi財団はPythonを推奨していますが、C言語でも簡単に制御できます。ここではC言語による実装方法を簡単に説明します。

OSのセットアップ

購入したRaspberry Piの仕様などをひととおり理解したら、まずはOSをセットアップしましょう。Linuxディストリビューションの1つであるRaspbianを利用します。Webサイトからダウンロードして自身でセットアップできます。デスクトップの操作性も良いですが、ターミナル上からLinuxコマンドでも操作できるようになると便利でしょう。

開発環境のセットアップ

テキストエディタにGeany、コンパイラにGCCを使用します。それぞれオープンソースソフトウェアとして提供されています。リスト1を作成して、Geany上でビルドすればターミナルに「Hello, World」と表示されます。

リスト1
#include <stdio.h>
int main(){
    printf("Hello, World\n");
    return 0;
}

また、GPIO制御関数ライブラリのWiringPiはデジタル入出力、シリアル通信、I2C、PWM、時間待ちなどの関数が用意されていて、計測や制御、通信などのプログラムを簡単に作成できます。WiringPiはGNU LGPLv3で公開されているので、リスト2のようにインストールします。

リスト2
$ cd /tmp
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb
$ sudo dpkg -i wiringpi-latest.deb

Lチカさせるプログラム

LEDを点滅させる場合は、図1のように配線したうえで、WiringPiの関数を使ってリスト3のようにプログラミングすれば、0.5秒間隔でLEDを点滅させることができます。それぞれの関数は公式サイトのリファレンスを参照してください。

図1
図1
「Fritzing」で描いたものを使用しています。
リスト3
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define  LED0 23
int main (void){
    wiringPiSetupGpio();
    pinMode(LED0, OUTPUT);

    for(;;){
        digitalWrite(LED0,HIGH);
        delay(500);
        digitalWrite(LED0, LOW);
        delay(500);
    }
    return EXIT_SUCCESS;
}

ここから、LEDを複数個つなげたり、スイッチで点灯や明るさを制御したりと改良してみるのもよいでしょう。また、WirignPiはI2CバスやSPIバスなどの関数もあるのでぜひ活用してみてください。