Rassberry PiでC++とpigpioを使ってLチカをする

 ラズパイでC++とpigpioを使ってLチカを行います。調べてもあまり情報が出てこなかったので、自分で書いて備忘録みたいな感じで残そうかなと思って書きました。使ったラズパイは3ModelB+です。ラズパイでのC++実行環境構築とpigpioのインストールは済んでることが前提です。

 まず、pigpioのライブラリを見ます。

pigpio library

 いろいろな関数が載っていますがLチカするときに使う関数は以下の通りです。
 ・gpioInitialise():初めに実行する関数
 ・gpioSetMode( gpiopin, mode ):ピンの設定を行う
 ・gpioWrite( gpiopin, 0 or 1 ):ピンに信号を送る

 各関数の細かい使い方は公式のライブラリを見て下さい。とりあえずgpioが動作するのかをチェックします。

// init.cpp
// コンパイル: g++ -Wall -pthread init.cpp -lpigpio -lrt -o init
// 実行: sudo ./init
#include <iostream>
#include <pigpio.h>
using namespace std;

int main(){

  if( gpioInitialise() < 0 )
    cout << "pigpio initialise failed\n";
  else
    cout << "pigpio initialise ok\n";

  return 0;
}

 コンパイル方法と実行方法はソースコードに記載している通りです。実行するときにsudoコマンドをつけるのを忘れないように。もし、"pigpio initialise failed"となる場合は、

sudo killall pigpiod

を実行してみてください。これでもダメならわかりません。

 正常に動作出来たら次はLチカをします。配線などは割愛。自分は14番ピンにLEDをつなぎました。

#include <iostream>
#include <pigpio.h>
#include <chrono>
#include <thread>
#include <stdlib.h>
using namespace std;

// つないだピン番号を設定
#define PIN 14

int main(){
  int i;

  // 1) 最初にgpioInitialise()を実行する
  if( gpioInitialise() < 0 ){
    cout << "ERROR: gpio initialise failed\n";
    exit(1);
  }

  // 2) ピンの設定をする。出力したい場合は PI_OUTPUT
  gpioSetMode( PIN, PI_OUTPUT );

  // 3) Lチカする。
  for( i=0; i<5; i++ ){

    // LEDを光らせる
    gpioWrite( PIN, 1 );

    // 1秒待機
    std::this_thread::sleep_for( std::chrono::seconds(1) );

    // LEDを暗くする
    gpioWrite( PIN, 0 );

    std::this_thread::sleep_for( std::chrono::seconds(1) );

  }

  return 0;
}

 上記のソースコードをコピペすれば動くはずです。コンパイル方法と実行方法は最初のプログラムと同じです。プログラムは実行できるのにLEDが点滅しないときは配線が間違っている可能性が高いです。