ラズベリーパイ zero C言語環境を構築する

ラズベリーパイでプログラム開発をする場合、使用する言語はPython、PHP、C言語などがあります。その中で主流はPythonですが、ウェブプログラミングも兼ねて勉強できるPHPも捨てがたいです。

対して、C言語はビルドして実行形式にする必要があり、言語としても第2世代で扱いづらいです。しかし、コンピューターの内部的な仕組みを知るためには、C言語が適しています。kunimiyasoftにおけるズベリーパイプログラミングはC言語を使用します。プログラマーやシステムエンジニアを目指す、もしくは選んでいる人は、ぜひC言語でプログラミングしてみましょう。

それでは、C言語を使う環境を構築していきましょう。

1.ターミナル環境でプログラムを開発する場合

まずはターミナル環境でビルドする環境を構築します。C言語での開発には「wiringPi」というライブラリが必要です。以下のコマンドでインストールします。

$git clone https://github.com/WiringPi/WiringPi.git
$ git clone git://git.drogon.net/wiringPi ※使えなくなったようです

ライブラリはビルドされていないので、ビルドします。

$ cd WiringPi  ※WiringPiのバージョンによっては「wiringPi」
$ ./build

これでC言語の開発ができます。

試しにLED点滅プログラムを作ってみます。参考としてQiitaの記事を使わせていただきました。少し自分なりにアレンジしてテストをしています。

あくまでもテストなので、ブレッドボードを使いました。LEDは赤色の昔買ってあったもので、そこに510Ωの抵抗を使っています。抵抗の計算はオームの法則を使えば簡単です。ここでは、暗くなるのを承知で510Ωを使いました。そして前後にジャンパーワイヤを付けて、ラズベリーパイのGPIOに挿します。

こんな感じでブレッドボードに配線して、ラズベリーパイ zeroのGPIOに挿します。プラス側をGPIOの26番に挿します。マイナス側はGNDに挿します。困ったことに、ジャンパーワイヤの端子がスカスカで接点が安定しないので、上から重しで押さえました。(※ラズベリーパイ本体に付けたピンが良くなかったせいです)

プログラムは、以下のとおりです。

#include <wiringPi.h>
#define GPIO26 26

int main(void) {
        int i ;
        int ret = 0 ;

        if (wiringPiSetupGpio() != -1) {
                pinMode (GPIO26, OUTPUT);

                for (i=0;i<10;i++) {
                        digitalWrite(GPIO26, 0);
                        delay(900);
                        digitalWrite(GPIO26, 1);
                        delay(100);
                }
                digitalWrite(GPIO26, 0);

        } else {
                ret = -1 ;
        }

        return ret ;
}

ソースを見たら、何をしているか分かると思います。GPIOに0をセットすれば電流が流れず、1をセットすれば3.3Vが流れます。これにより、LEDが点滅します。

ソースができたら、ビルドします。

$ gcc -o test1 test1.c -I/usr/local/include -L/usr/local/lib -lwiringPi

ビルドが成功した後で実行します。

$sudo ./test1

写真は分かりづらいですが、1秒ごとにLEDが点滅しています。このようにプログラム制御の電子工作を簡単にできることがラズベリーパイの特徴です。

また、プログラムにmain関数を使っていて、C言語プログラミングの基礎中の基礎のテクニックを使っています。今のプログラミングはブラックボックスだらけで、自分が作る部分は全体のほんの一部に過ぎなくなってしまいました。ラズベリーパイであれば、まだ自分の意志を反映したプログラムが作成できます。そのため、プログラムを楽しく感じることができるでしょう。

2.フォームアプリケーションの開発環境を構築する

今後に作るGPSロガーはフォームアプリケーションの使用を考えています(※最終的にターミナルで動くようにしました)。開発ツールは「Qt Creator」というアプリケーションを使うことにしました。しかし、ラズベリーパイ zeroの処理能力で動作してくれるでしょうか。

一通りの設定をしてみましたが、ラズベリーパイ zeroでは遅すぎます。通常のラズベリーパイであれば動作できるようです。

遅すぎて実用に耐えないため、フォームアプリケーションに関しては保留にします。どのようにGPSを起動・終了するかは検討中です。ターミナルで動くGPSロガーの作成を行うことにします。