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);
}