2020年11月23日月曜日

raspberry pi : C言語で LED ON/OFF

 目的:

C言語で LED ON/OFF (GPIO アクセス) を 行う。

環境/構成:

本体 : raspberry pi 3B
OS : Raspberry Pi OS Lite
ライブラリ : wiringpi
インストールは、こちら を参照

LED 接続回路 : 下図の通り

LED に接続する抵抗は、
GPIO の最大電流は 16mA 。
LEDでの電圧降下分として 2V 程度とすると
R = V/I = (3.3-2)/(16^-3) = 81.25Ω
精度,誤差 等を考慮すると、
100 Ω 以上 が必用と思われる。

ここでは余裕を見て 1KΩ を使用。
(LED の仕様 (電圧降下や明るさ具合)の
 考慮が必用。
 仕様したLEDは470Ωでも結構明るかった)


プログラム:

C言語で LED の ON (GPIO 12 へ '1' ライト), OFF (GPIO 12 へ '0' ライト) を行う。
プログラムでは、

  •  include ファイル として、<wiringPi.h> が必用。
  •  初期設定として、wiringPiSetupGpio() を実行。
  •  GPIO ピンのモード設定として pinMode (GPIO番号, OUTPUT) ; を実行。
  •  GPIOへのライトは、 digitalWrite (GPIO番号, レベル (0/1) ) ; を実行。

を行う。

wiringPiSetupGpio() は、 Broadcom の GPIOピン番号で アクセスを行う場合に使用する。
代わりに wiringPiSetup() を使用すると、wiringpi 番号 (wiringpi の ピン番号)でアクセスを行う。ここでは、GPIOピン番号でアクセスするようにする。

LED ON と LED OFF の サンプルプログラムは、以下の通り。

#include <wiringPi.h>
#define led_pin 12

int main (void)
{
  wiringPiSetupGpio() ;
  pinMode (led_pin, OUTPUT) ;

  digitalWrite (led_pin, HIGH) ;

  return 0 ;
}
#include <wiringPi.h>
#define led_pin 12

int main (void)
{
  wiringPiSetupGpio() ;
  pinMode (led_pin, OUTPUT) ;

  digitalWrite (led_pin, LOW) ;

  return 0 ;
}

コンパイル:

コンパイル時、lオプションで wiringPiを指定する。

gcc -o led_on led_on.c -lwiringPi
gcc -o led_off led_off.c -lwiringPi

これで、led_on と led_off の実行ファイルができる。

実行:

wiringPiSetupGpio() は、root 権限が必用な為、コンパイルした実行ファイルを実行する場合は、sudo を付ける必用がある。
但し、gpio グループに所属していれば、sudo を付けなくても実行可能。この為、GPIOアクセスを行うユーザは gpio グループに所属していた方が便利。
尚、pi ユーザは、gpio グループに所属している。

./led_on
で LED が 点灯
./led_off
で LED が消灯
する。



0 件のコメント:

コメントを投稿