2016年10月27日木曜日

Raspberry Pi上での、WringPiの使い方コマンドとC言語

2つのRaspberry Piで同期をとるプログラムを作成する時に、

WiringPiを使うのはとっても便利です。

コマンドやプログラムからgpioを制御できます。

その時に、ちょっとピン指定で、コンガラガッテしまったので、

自分のメモとして書いておきます。

gpioを制御するとき


・基板上のPIN番号

・WringPiのgpio 番号

・CPUのgpio番号

の3つを意識しないとならない。

その対比表が下図。



gpio readall

とコマンドを打ては図のようなgpioの状態の一覧がでてきます。

・基板上の物理的なPIN番号35番

・WringPiの番号 GPIO.24、つまり、wPi欄の番号24

・CPUのGPIO番号は、19になります。

この時に、基本BCMと書かれたCPUのGPIO番号は無視する

例えば、基盤上の35番PINを書き込みモードにして、

値を1にする場合には、

gpio mode 24 output

gpio write 24 0

とすればよい。

WiringPiを使ったC言語のプログラムからも、

pinMode(24, INPUT);

int pV = digitalread(24);

となる。

gpioコマンドには、-g のオプションがつけれるが、

これを付けるとCPUのGPIOになる。

従って、

gpio -g mode 19 output

gpio -g write 19 0

ややっこしくなるので、-g オプションは使わない方がよいね。

Peace!

おまけ、GPIOの値を読み込むプログラム

gcc -o sample sample.c -lwiringPi

で、

違う端末画面から、

gpio write 24 1
gpio write 24 0

とかすると、
画面に、こんな感じで、表示されます。(^^)

--------------------------digitalRead (24) = 1
--------------------------digitalRead (24) = 1
--------------------------digitalRead (24) = 0
--------------------------digitalRead (24) = 0
--------------------------digitalRead (24) = 0
--------------------------digitalRead (24) = 0



/***********************************************************
** Function : Sample program of wiringPi.
** File Name: sample.c
** Library  :
** Author   : Naoki Kabaya
** create   : 10/02/2016 version 1
** modify   :
***********************************************************/
//----------------------------------------------------------
// Includes
//----------------------------------------------------------
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

//Prototype
int main (void);

int main (void)
{
        int pV = 0;

        if (wiringPiSetup () == -1){
                exit(1);
        }

        //GPIO Setup
        pinMode (24, INPUT);
        printf("----------------------GPIO Setup\n");

        //Loop
        for (;;) {
                pV = 0;
                pV = digitalRead (24);
                printf("--------------------------digitalRead (24) = %d\n", pV);
                delay(500);
        }
        return 0 ;
}

0 件のコメント:

コメントを投稿