ものづくりブログ

ゼロからスタートして何かを作って世に出すまでのことを書くブログです.

Raspberry Piでプログラムを使ってLチカしてみる

 

こんにちは.

 

これまでに,ラズパイのGPIOを使って接続したLEDを制御できるようになりました.

でもこれだと光らせたり消したりを人が指令する必要があります.もちろん遠隔操作と言う意味ではこれでも十分価値があるのですが,今回はもう少し進んで,より複雑な指令をラズパイに実行させたいと思います.

 

少し前の記事でインストールしたWiring Piを使用して,ラズパイに出す命令を作ります.

 

まずは以下のように,前回同様の接続をしてください.念のためラズパイの電源は落としてから配線を行いましょう.

 

f:id:daisukekmr:20150123004638p:plain

 

f:id:daisukekmr:20150123183006j:plain

 

接続が出来ましたら,電源を投入し,MacSSH接続します.

 

ログインが完了したら,以下のコマンドを実行します.

 

gpio -g mode 4 out

gpio -g write 4 1

 

LEDが点灯したら成功です.前回のLチカと同じことが起こりましたが、かなり単純な命令でした.でも上記の命令文からなんとなく同じことをやっていることが想像できるのではないでしょうか.

最初の行でGPIO 4 PINを出力に指定し,2行目でその値を1にしています.

 

もちろん,以下のように入力すればGPIO 4 PINの値が0になり,LEDが消灯します.

 

gpio -g write 4 0

 

ここで,以下のように入力すれば,PINの現在の値を表示することも可能です.

 

gpio -g read 4

 

前回のやりかたはラズパイ純正のGPIOの操作方法ですが,今回の簡単な方法はWiring Piの機能です.こちらの方が少しシンプルですね.

 

 

 

さて,ここまでは準備運動のようなものです.今度は本当にもう少し複雑な命令をラズパイに実行させてみましょう.

 

まず手順を先に書いておきます.

 

1. ラズパイに命令するためのプログラムをC言語で書く

2. コンパイルする

3. 実行する

 

コンパイルって何?と思われるかもしれませんが,それは追々説明していきます.

 

 

 

1. ラズパイに命令するためのプログラムをC言語で書く

 

プログラムを書くには2通りの方法があります.すなわち,コマンドラインテキストエディタ「nano」を使用する,またはGUIを使用してその中のテキストエディタを使用するという2通りです.

 

私は「コマンドラインテキストエディタ「nano」を使用する」方法で書いていますが,好みが分かれると思いますので2通りの方法で書いてみます.

 

a. コマンドラインテキストエディタ「nano」を使用する

 

まずはコマンドラインに下記のように入力し,nanoを起動し,"test.c"というファイルの編集画面を開きます.

 

nano test.c

 

編集画面が開いたら下記の通り入力します.

 

#include <wiringPi.h>

 

#define LED_PORT 4  /* GPIO4 */

 

int main(void){

     int i;

 

     //initialize

     if(wiringPiSetupGpio() ==  1) return 1;

     pinMode(LED_PORT, OUTPUT);

 

 

     for(i=0; i<10; i++){

          //LED ON

          digitalWrite(LED_PORT, 1);

          delay(500);

 

          //LED OFF

          digitalWrite(LED_PORT, 0);

          delay(500);

          }

 

     return 0;

}

 

入力が完了したらcontrol+O(アルファベットのオー)で保存し,control+Xで終了します.

 

b. GUIを使用してその中のテキストエディタを使用する

 

コマンドラインで下記のコマンドを実行し,VNCを有効にします.

 

tigihtvncserver

 

そして,FinderからVNC接続を行います.

GUIが表示されたら,下の画面を参考に,MenuからText Editorを開きます.

f:id:daisukekmr:20150126010524p:plain

 

Text Editorが開いたら,上記でコマンドラインで書く場合に書いた,#include <wiringPi.h>から始まる文字の羅列を入力します.

入力が完了したら,以下の画面を参考に,File => Save Asを選択します.日本語でいうところの名前を付けて保存です.

 

f:id:daisukekmr:20150126010538p:plain

 

すると下記のようなウィンドウが出てきますので,保存先としてPlacesから「Pi」を選択し,Name欄に「test1.c」と入力し,ウィンドウ右下のSaveをクリックします.

 

f:id:daisukekmr:20150126010542p:plain

 

これでプログラムの作成と保存が完了しました.

 

 

 

2. コンパイルする

 

コンパイルとはプログラムをコンピュータが理解できる形式に翻訳する作業です.

プログラムは人間が理解できる文法で書かれていますが,コンピュータは電流が流れているかいないか,すなわち0か1しか理解できません.このため,プログラムをコンピュータが理解できる0と1だけの情報(バイナリ)に変換してやる必要があるのです.

 

コンパイルを行うには,下記のコマンドを実行すればOKです.

ただし,GUIを使って書いたソースはファイル名がtest1.cでしたので,そちらをコンパイルする場合はカッコ内のコマンドを実行してください.

 

cc -o test test.c -lwiringPi (または cc -o test1 test1.c -lwiringPi)

 

 

 

コンパイルという作業は内容自体はものすごく難しく,コンパイラ(コンパイルするためのアプリケーション)だけで数十万円以上したりもするのですが,実行するコマンド自体はとても簡単です.

 

 

 

3. 実行する

 

プログラムの実行もコンパイルと同じく,内容は難しいのですがコマンドは簡単です.

こちらもGUIを使用した方はカッコ内のコマンドです.

 

sudo ./test (またはsudo ./test1)

 

どうですか?LEDがチカチカと10回点滅したら成功です.

 

次回の記事でプログラムの内容について詳しく解説します.もうすでにある程度予想がついているかもしれませんので,色々といじって,点滅の頻度を変えたりと遊んでみてください.

 

参考文献

[1]Raspberry Piで遊ぼう! 改訂第3版 〜 モデルB+完全対応