Raspberry Pi の開発環境で LED 点滅 させてみます(C言語)

Raspberry Pi の C言語 開発環境で、
GPIO ピンに接続した LED を点滅させてみます。

Raspberry Pi は、Model B、Zero を使用し、
GUI では開発環境の、Geany を使ってみます。
また、CUI(SSH)での開発・実行を行ってみます。

各環境ともプログラムは同じです。
動作確認のため、LED接続の GPIO 端子のみ変更しています。

GPIO の操作には、
Raspberry Pi 用の GPIOインターフェイスライブラリ(wiringPi)
 http://wiringpi.com/
を使用させて頂きます。
通常インストール済みかと思いますが、
インストールされていない場合は、LXTeminal を起動して、
 sudo apt-get install wiringpi
でインストールします。
また、プログラム内で、GPIO のピン番号を指定する場合、
 ・wiringPi ライブラリの GPIO 番号で設定する場合、
   wiringPiSetup()
 ・ Raspberry Pi の GPIO 番号で設定する場合
   wiringPiSetupGpio()
それぞれの関数を、main() 関数の先頭で発行します。

まずは、GUI 環境での Geany 利用です。

回路は図の通りです。
   この回路図の作図には fritzing を利用させて頂いております。
   https://fritzing.org/home/

回路図1
回路図1

※電源供給(+):物理番号(22) GPIO25
         (wiringPi番号:GPIO6)
 電源供給(-):物理番号(20) GND

では、プログラムします。

1.事前に、プログラムを保存するフォルダを作成しておきます。
 ※私の場合、/home/pi/Documents 内に、
   フォルダ名:"C_Lang1"
  を作成します。
   保管場所:"/home/pi/Documents/C_Lang1"
  となります。

保存フォルダの作成
保存フォルダの作成

2.RaspberryPi メニュー→「プログラム」
   →「Geany」 を選択し、起動します。

Geany の起動
Geany の起動

3.プログラム記述用のファイルを準備します。
 メニュー「ファイル(F)」→「新規(N)」を選択し、
 新規ファイルを準備します。

新規ファイルの準備1
新規ファイルの準備1

 または、アイコンメニューの「新しいファイル作成」
 アイコンを選択します。

新規ファイルの準備2
新規ファイルの準備2

4.開いた untitled タブ ファイルに、
 数行のプログラムを記述します。

// インクルード宣言
#include <stdbool.h>    // boolライブラリ
#include <stdlib.h>     // 標準ライブラリ
#include <signal.h>     // シグナルハンドラライブラリ
#include <wiringPi.h>   // wiringPiライブラリ
プログラムの記述
プログラムの記述

5.プログラムファイルを保存します。
 メニュー「ファイル(F)」→「保存(S)」を選択します。

プログラムファイルの保存1
プログラムファイルの保存1

 または、アイコンメニュー「現在のファイルを保存」
 アイコンを選択します。

プログラムファイルの保存2
プログラムファイルの保存2

 開いた、保存設定画面で、
 事前に作成した保存フォルダを選択し、
  ファイル名:"led_test1.c"
 として保存します。

プログラムファイルの保存3
プログラムファイルの保存3

 保存のあと、ファイル名がタブに表示され、
 記述内容に C言語文法が適用されます。

文法適用されたプログラム記述
文法適用されたプログラム記述

6.残りのプログラムを記述します。

// インクルード宣言
#include <stdbool.h>    // boolライブラリ
#include <stdlib.h>     // 標準ライブラリ
#include <signal.h>     // シグナルハンドラライブラリ
#include <wiringPi.h>   // wiringPiライブラリ

// LED接続ピン番号 define定義
#define LED_PIN 6

// 無限ループ制御用変数宣言
bool loop_flg = TRUE;

// シグナルハンドラ処理関数
void signal_handler(int signal) {
  loop_flg= FALSE;
}

int main(void) {
  // GPIOピン指定用法
  wiringPiSetup();        // wiringpピン番号による指定 
//  wiringPiSetupGpio();    // BPIOピン番号による指定

  // LED出力用GPIOピン設定
  pinMode(LED_PIN, OUTPUT);

  // キーボード割り込み設定
  if (signal(SIGINT, signal_handler) == SIG_ERR) {
    exit(1);
  }

  // LED点滅ループ処理
  while( loop_flg ) {
    digitalWrite(LED_PIN, HIGH);
    delay(500);
    digitalWrite(LED_PIN, LOW);
    delay(500);
  }

  return 0;
}
記述完了の画面
記述完了の画面

7.記述完了プログラムファイルを保存します。
 アイコンメニュー「現在のファイルを保存」
 アイコンを選択し再保存します。

記述完了ファイルの再保存1
記述完了ファイルの再保存1

 または、 メニュー「ファイル(F)」→「保存(S)」を選択します。

記述完了ファイルの再保存2
記述完了ファイルの再保存2

8.ビルドコマンド設定の設定内容を確認します。
 メニュー「ビルド(B)」→「ビルドコマンドを設定(S)」を選択し、
 開いた、"ビルドコマンドを設定" 画面の
 "Cコマンド" 項目内の、Build 項目に
  gcc -Wall -o "%e" "%f" -lwiringPi
 と設定されていることを確認します。
 ※ライブラリの、"wiringPi" を利用しますので、
  コマンドに、"-lwiringPi" の記述追加が必要です。 

ビルドコマンドの設定1
ビルドコマンドの設定1
ビルドコマンドの設定2
ビルドコマンドの設定2

8.ビルドします。
 アイコンメニュー「現在のファイルをビルド」
 アイコンを選択しビルドします。

ビルド選択
ビルド選択

9.実行します。
 アイコンメニュー「現在のファイルを実行/表示」
 アイコンを選択し実行します。

実行選択
実行選択

Raspberry Pi に接続した LEDが点滅すれば完成です。

実際の回路1
実際の回路1

実行を終了(中断)する場合は、
実行時に開いたターミナル画面から、
 "Ctrl" + "c" キー を発行(打鍵)します。

実行の終了(中断)
実行の終了(中断)

続いて、SSH を使用し、遠隔 CUI で、
プログラム記述と実行をしてみます。
※私の場合、Windows PC からの操作です。
 画像では、Tera Term、RLogin (ターミナルソフト)を使用しています。

回路は図の通りです。

回路図2
回路図2

※電源供給(+):物理番号(18) GPIO24
         (wiringPi番号:GPIO5)
 電源供給(-):物理番号(20) GND
※回路は GPIO の指定以外は、
 Geany のものと同様です。
 ( GIPO25[6] → GPIO24[5] )

1.Tera Term等のターミナルソフトを起動します。
 SSH 設定をして Raspberry Pi に接続します。
 ※接続方法は、"Raspberry Pi の OS用SDカードの作成と初期設定(その2)"で記載しています。
   https://shinog.jp/computer/raspberry-pi/raspberry-pi-%e3%81%ae-os%e7%94%a8sd%e3%82%ab%e3%83%bc%e3%83%89%e3%81%ae%e4%bd%9c%e6%88%90%e3%81%a8%e5%88%9d%e6%9c%9f%e8%a8%ad%e5%ae%9a%ef%bc%88%e3%81%9d%e3%81%ae%ef%bc%92%ef%bc%89/

ターミナルソフトの起動1
ターミナルソフトの起動1
ターミナルソフトの起動2
ターミナルソフトの起動2
ターミナルソフトの起動3
ターミナルソフトの起動3

2.プログラムを保存するディレクトリ(フォルダ)を
 作成します。
 ※私に場合、/home/pi/Documents 内に、
   フォルダ名:"C_Lang2"
  を作成します。
   保管場所:"/home/pi/Documents/C_Lang2"
  となります。

 ターミナルから打鍵します。
  ・ディレクトリの移動
    pi@raspberrypi:~ $ cd Documents/
  ・ディレクトリの作成と確認
    pi@raspberrypi:~/Documents $ mkdir C_Lang2
    pi@raspberrypi:~/Documents $ ls
  ・ディレクトリの移動と確認
   pi@raspberrypi:~/Documents $ cd C_Lang2
   pi@raspberrypi:~/Documents $ pwd
 これで、現在のカレントディレクトリが
  "/home/pi/Documents/C_Lang2"
 となります。

保存ディレクトリの作成
保存ディレクトリの作成

3.プログラムを記述するため、エディタを起動します。
 vi エディタや、nano エディタを使用することになります。
 vi エディタの方が操作は複雑かと思います。
 nano の場合、
  pi@raspberrypi:~/Documents/C_Lang2 $ nano
  ・起動時に特定のファイルを開く場合は、
    nano ファイル名
  とします。

nano の初期画面
nano の初期画面

 vi の場合、
  pi@raspberrypi:~/Documents/C_Lang2 $ vi
  ・起動時に特定のファイルを開く場合は、
    vi ファイル名
  とします。

vi の初期画面
vi の初期画面

 ※両エディタとも、コマンドでの操作が主体なります。
  それぞれの操作には違いがありますので、操作方法は
  ネット等でお調べ下さい。
  私は解説できるほど使い熟せておりません。

4.プログラムを記述します。
 最初は事前にメモ帳など Windows のエディタで作成して、
 マウス操作でコピー&ペーストされるのが良いと思います。
 ※本来、PC 上でファイルが出来ている場合には、
  ファイル転送(FTP)ソフト等で転送するのが一般的です。

WinSCP ソフトによるファイ津転送例
WinSCP ソフトによるファイ津転送例

 ※プログラムは GPIO の指定以外は、
   Geany のものと同様です。
   ( GIPO25[6] → GPIO24[5] )

// インクルード宣言
#include <stdbool.h>    // boolライブラリ
#include <stdlib.h>     // 標準ライブラリ
#include <signal.h>     // シグナルハンドラライブラリ
#include <wiringPi.h>   // wiringPiライブラリ

// LED接続ピン番号 define定義
#define LED_PIN 5

// 無限ループ制御用変数宣言
bool loop_flg = TRUE;

// シグナルハンドラ処理関数
void signal_handler(int signal) {
  loop_flg= FALSE;
}

int main(void) {
  // GPIOピン指定用法
  wiringPiSetup();        // wiringpピン番号による指定 
//  wiringPiSetupGpio();    // BPIOピン番号による指定

  // LED出力用GPIOピン設定
  pinMode(LED_PIN, OUTPUT);

  // キーボード割り込み設定
  if (signal(SIGINT, signal_handler) == SIG_ERR) {
    exit(1);
  }

  // LED点滅ループ処理
  while( loop_flg ) {
    digitalWrite(LED_PIN, HIGH);
    delay(500);
    digitalWrite(LED_PIN, LOW);
    delay(500);
  }

  return 0;
}

 マウスによるコピー&ペーストのみ可能で、
 キーのショートカットによる操作はできません。

貼り付け時のメッセージ
貼り付け時のメッセージ

 ・ nano の場合は、マウス操作でペーストできます。

nano での記述(貼り付け)
nano での記述(貼り付け)

 ・vi の場合は、"i" キーを一度押し、
   その後マウス操作でペーストできます。
  ※そのままでも張り付きますが、
   "i" 入力後が良いと思います。

vi での記述(貼り付け)
vi での記述(貼り付け)

5.記述したファイルを保存します。
 ・nano の場合は、
  "Ctrl"キー + "o"(オー) と打鍵し、
  書き込むファイル:に
   "led_test2.c"
  と入力し "enter" キーを押します。

nano での記述完了ファイルの保存
nano での記述完了ファイルの保存

 ・vi の場合は、
  "esc" キーを打鍵し、":" キーを押します。
  最下位の : の後に
   "w led_test2.c"
  と入力し "Enter" キーを押します。

vi での記述完了ファイルの保存
vi での記述完了ファイルの保存

6.エディタを終了します。
 ・nano の場合は、"Ctrl" + "x" キーを押します。
 ・vi の場合は、
  "Esc" キーを打鍵し、":" キーを押します。
  最下位の : の後に
   "q"
  と入力し "Enter" キーを押します。

vi での vi エディタの終了
vi での vi エディタの終了

 これでプログラムファイルが保存されます。 

7.ビルドします。
 SSH のターミナル画面から、
  "gcc -Wall -o led_test2 led_test2.c -lwiringPi"
 と入力します。
  pi@raspberrypi:~/Documents/C_Lang2 $ gcc -Wall -o led_test2 led_test2.c -lwiringPi

ビルドコマンドの発行
ビルドコマンドの発行

8.実行します。
 SSH のターミナル画面から、
  "./led_test2"
 と入力します。
  pi@raspberrypi:~/Documents/C_Lang2 $ ./led_test2

実行コマンドの発行
実行コマンドの発行

Raspberry Pi に接続した LEDが点滅すれば完成です。

実際の回路2
実際の回路2

実行を終了(中断)する場合は、
SSH のターミナル画面から、
 "Ctrl" + "c" キー を打鍵します。

実行の終了(中断)
実行の終了(中断)

SSHの接続解除(切断)は、
 ターミナル画面から
  "exit"
 と入力します。
  pi@raspberrypi:~/Documents/C_Lang2 $ exit

ターミナルソフトの終了
ターミナルソフトの終了