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/
※電源供給(+):物理番号(22) GPIO25
(wiringPi番号:GPIO6)
電源供給(-):物理番号(20) GND
では、プログラムします。
1.事前に、プログラムを保存するフォルダを作成しておきます。
※私の場合、/home/pi/Documents 内に、
フォルダ名:"C_Lang1"
を作成します。
保管場所:"/home/pi/Documents/C_Lang1"
となります。
2.RaspberryPi メニュー→「プログラム」
→「Geany」 を選択し、起動します。
3.プログラム記述用のファイルを準備します。
メニュー「ファイル(F)」→「新規(N)」を選択し、
新規ファイルを準備します。
または、アイコンメニューの「新しいファイル作成」
アイコンを選択します。
4.開いた untitled タブ ファイルに、
数行のプログラムを記述します。
// インクルード宣言
#include <stdbool.h> // boolライブラリ
#include <stdlib.h> // 標準ライブラリ
#include <signal.h> // シグナルハンドラライブラリ
#include <wiringPi.h> // wiringPiライブラリ
5.プログラムファイルを保存します。
メニュー「ファイル(F)」→「保存(S)」を選択します。
または、アイコンメニュー「現在のファイルを保存」
アイコンを選択します。
開いた、保存設定画面で、
事前に作成した保存フォルダを選択し、
ファイル名:"led_test1.c"
として保存します。
保存のあと、ファイル名がタブに表示され、
記述内容に 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.記述完了プログラムファイルを保存します。
アイコンメニュー「現在のファイルを保存」
アイコンを選択し再保存します。
または、 メニュー「ファイル(F)」→「保存(S)」を選択します。
8.ビルドコマンド設定の設定内容を確認します。
メニュー「ビルド(B)」→「ビルドコマンドを設定(S)」を選択し、
開いた、"ビルドコマンドを設定" 画面の
"Cコマンド" 項目内の、Build 項目に
gcc -Wall -o "%e" "%f" -lwiringPi
と設定されていることを確認します。
※ライブラリの、"wiringPi" を利用しますので、
コマンドに、"-lwiringPi" の記述追加が必要です。
8.ビルドします。
アイコンメニュー「現在のファイルをビルド」
アイコンを選択しビルドします。
9.実行します。
アイコンメニュー「現在のファイルを実行/表示」
アイコンを選択し実行します。
Raspberry Pi に接続した LEDが点滅すれば完成です。
実行を終了(中断)する場合は、
実行時に開いたターミナル画面から、
"Ctrl" + "c" キー を発行(打鍵)します。
続いて、SSH を使用し、遠隔 CUI で、
プログラム記述と実行をしてみます。
※私の場合、Windows PC からの操作です。
画像では、Tera Term、RLogin (ターミナルソフト)を使用しています。
回路は図の通りです。
※電源供給(+):物理番号(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/
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 ファイル名
とします。
vi の場合、
pi@raspberrypi:~/Documents/C_Lang2 $ vi
・起動時に特定のファイルを開く場合は、
vi ファイル名
とします。
※両エディタとも、コマンドでの操作が主体なります。
それぞれの操作には違いがありますので、操作方法は
ネット等でお調べ下さい。
私は解説できるほど使い熟せておりません。
4.プログラムを記述します。
最初は事前にメモ帳など Windows のエディタで作成して、
マウス操作でコピー&ペーストされるのが良いと思います。
※本来、PC 上でファイルが出来ている場合には、
ファイル転送(FTP)ソフト等で転送するのが一般的です。
※プログラムは 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 の場合は、マウス操作でペーストできます。
・vi の場合は、"i" キーを一度押し、
その後マウス操作でペーストできます。
※そのままでも張り付きますが、
"i" 入力後が良いと思います。
5.記述したファイルを保存します。
・nano の場合は、
"Ctrl"キー + "o"(オー) と打鍵し、
書き込むファイル:に
"led_test2.c"
と入力し "enter" キーを押します。
・vi の場合は、
"esc" キーを打鍵し、":" キーを押します。
最下位の : の後に
"w led_test2.c"
と入力し "Enter" キーを押します。
6.エディタを終了します。
・nano の場合は、"Ctrl" + "x" キーを押します。
・vi の場合は、
"Esc" キーを打鍵し、":" キーを押します。
最下位の : の後に
"q"
と入力し "Enter" キーを押します。
これでプログラムファイルが保存されます。
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が点滅すれば完成です。
実行を終了(中断)する場合は、
SSH のターミナル画面から、
"Ctrl" + "c" キー を打鍵します。
SSHの接続解除(切断)は、
ターミナル画面から
"exit"
と入力します。
pi@raspberrypi:~/Documents/C_Lang2 $ exit