RaspberryPIは中身はLinuxなので、
いろんな方法でLチカが可能な模様。
とりあえず、4種試してみました。
回路図は省略しますがGOIPの21番をLEDに接続しています。
《《《解説》》》
Linuxはデバイスをファイルとして抽象化していますので
それにデータを書き込めば出力ピンを制御することが出来ます。
具体的にはGOIPの21番にLEDを接続してデバイスに値を書き込みます。
デバイス/sys/class/gpio/exportにGPIOの番号を書き込む
デバイス/sys/class/gpio/gpio21/directionのoutと書き込む
デバイス/sys/class/gpio/gpio21/valueに1を書き込む
→これでLEDが点灯します。
デバイス/sys/class/gpio/gpio21/valueに0を書き込む
→これでLEDが消灯します。
■デバイス直接制御シェル版プログラム
#!/bin/bash
echo 21 > /sys/class/gpio/unexport
sleep 1
echo 21 > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio21/direction
sleep 1
while [ true ]
do
echo 1 > /sys/class/gpio/gpio21/value
sleep 1
echo 0 > /sys/class/gpio/gpio21/value
sleep 1
done
echo 21 > /sys/class/gpio/unexport
■デバイス直接制御C言語版プログラム
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int fd = 0;
fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd < 0) {
printf("GPIO export open error.¥n");
exit(1);
}
write(fd,"21",3);
close(fd);
//usleep(100 * 1000);
fd = open("/sys/class/gpio/gpio21/direction", O_WRONLY);
if (fd < 0) {
printf("GPIO direction open error.¥n");
exit(1);
}
write(fd,"out",4);
close(fd);
fd = open("/sys/class/gpio/gpio21/value", O_WRONLY);
if (fd < 0) {
printf("GPIO value open error.¥n");
exit(1);
}
while(1){
write(fd,"1",2);
usleep( 100 * 1000 );
write(fd,"0",2);
usleep( 900 * 1000);
}
close(fd);
fd = open("/sys/class/gpio/unexport", O_WRONLY);
if (fd < 0) {
printf("GPIO unexport open error.¥n");
exit(1);
}
write(fd,"21",3);
close(fd);
return 0;
}
《《《ライブラリ版 writingPi 解説》》》
writingPiを使用するとarduinoライクなプログラムが可能になります。
(私がarduinoから入ったのでそう感じるのですか実際どっちが本家かはわかりません)
ライブラリの導入
コマンドラインで以下実行してgitからwritingPiをインストールします。
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build
コマンドでバージョンが表示されればインストールが成功しています。
$ gpio -v
このライブラリを導入することで「gpio」コマンドが使用可能になります
ex...
LED点灯
$ gpio -g write 21 1
LED点灯
$ gpio -g write 21 0
■ライブラリ writingPi を使用したシェル版プログラム
#!/bin/bash
while [ true ]
do
gpio -g write 21 1
sleep 1
gpio -g write 21 0
sleep 1
done
■ライブラリ writingPi を使用したC言語版プログラム
#include <wiringPi.h>
#define LED_OUT 21
int main(void) {
int i;
if(wiringPiSetupGpio() == -1){
return 1;
}
pinMode(LED_OUT, OUTPUT);
while( 1 ){
digitalWrite(LED_OUT, HIGH);
delay(100);
digitalWrite(LED_OUT, LOW);
delay(900);
}
return 0;
}
プログラムのコンパイルにはwritingPiのライブラリをリンクする必要があるので以下の例のようにしてコンパイルしてください。
cc -o lchika-C2 lchika-C2.c -I/usr/local/include -L/usr/local/lib -lwiringPi
この例では実行ファイルが「lchika-C2」でソースが「lchika-C2.c」です。
writingPiをリンクしたプログラムはroot権限が無いと動かないようです。
以下のようにして動かすか
「sudo ./lchika-C2」
または
root実行権限をファイルに与えてください。
「sudo chown root ./lchika-C2」
「sudo chmod +s ./lchika-C2」