GPIOはRaspiPiの特徴の一つで、シングルボードコンピュータの中では多くのデジタル入出力pinを持ち、SPIやi2cなどのインターフェースを持っていますのでIOTや機器制御など幅広い対応力を持っているといえます。
今回は、デジタル出力について、検証してみました。
フルカラーLEDをGPIOに接続します。
LEDの電流制限抵抗は、GPIOのHIの電圧が3.3Vなので、赤に220Ω、緑と青に100Ωとしました。
およそ9mA前後の電流が流れます。
GPIOの操作はroot権限が必要ですが、GPIOグループに所属しているとsudoしなくても実行できます。
ユーザーをグループGPIOに入れます。
$sudo gpasswd -a piadmin gpio
一旦ログオフして再ログイン
グループの確認
$groups
$piadmin audio bluetooth gpio
GPIOのピン番号は、wireringPiでの呼び方とプロセッサーSOC(BCM28××)での呼び方、ピン配置での呼び方の三種類があります。
BCMピン番号のほうが、一般的なようですが、pythonではpinmodeで指定できます。
1.wireringPi(wPi) GPIOコマンドでは、デフォルト
2.BCMGPIOコマンドでは -g をつける
3.物理番号 (pysical)
GPIOの一覧確認
$gpio readall
コマンドでGPIOを操作。
LED(赤)GPIO6 をOUTに設定
$gpio mode 6 out
$gpio write 6 1
$gpio write 6 0
LED(赤)BCM GPIO25 をOUTに設定
$gpio -g mode 25 out
$gpio -g write 25 1
$gpio -g write 25 0
特に指定しなければBCMの番号になる。
#include <wiringPi.h>
#define LED_Blue 24
int main(void) {
if(wiringPiSetupGpio() == -1) return 1;
// Set GPIO24 pin to output mode
pinMode(LED_Blue, OUTPUT);
//
for(int i=0; i<10; i++){
digitalWrite(LED_Blue, 1);
delay(500);
digitalWrite(LED_Blue, 0);
delay(500);
}
return 0;
}
コンパイルと実行
$cc -o ledtest ledtest.c -lwiringPi
$./ledtest
ラズパイのパイはpythonのパイらしいので、pythonを使ってみます。
赤LEDを1秒間隔で5回点滅
$nano l_chika.py
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(25,GPIO.OUT) i=0 while(i<5): GPIO.output(25,True) time.sleep(1) GPIO.output(25,False) time.sleep(1) i=i+1 GPIO.cleanup
フルカラーLEDなので8色Lチカ
$ nano col_led.py
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) R = 25 G = 23 B = 24 GPIO.setup(R,GPIO.OUT) GPIO.setup(G,GPIO.OUT) GPIO.setup(B,GPIO.OUT) col =[[R,G,B],[0,G,B],[0,G,0],[0,0,B],[R,G,0],[R,0,B],[R,0,0]] i=0 while(i<7): X1=col[i][0] X2=col[i][1] X3=col[i][2] if X1 != 0: GPIO.output(X1,True) if X2 != 0: GPIO.output(X2,True) if X3 !=0: GPIO.output(X3,True) time.sleep(1) if X1 != 0: GPIO.output(X1,False) if X2 != 0: GPIO.output(X2,False) if X3 != 0: GPIO.output(X3,False) print(X1,X2,X3) time.sleep(1) i=i+1 GPIO.cleanup
node.jsnoのGPIOモジュールは、node-rpioを使ってみました。
$ npm install rpio
rpioのピン番号は、物理番号を使うようです。ややこしい・・・
緑LEDはBCMで23番、物理番号(コネクタのピン呼び)は16番になります。
緑LEDの点滅テスト。
var rpio = require('rpio');
rpio.open(16, rpio.OUTPUT,rpio.LOW);
for (var i = 0; i < 5; i++) {
5>rpio.write(16, rpio.HIGH);//GPIO23 BCM
rpio.msleep(500);
rpio.write(16, rpio.LOW);//GPIO23 BCM
rpio.msleep(500);
}