C言語でGPIO触ってみた
C言語でHello World作ってOrange Piで実行できること確認した後pthread試してみて、あと必要なファイル書き込みやってみた。
Orange Pi Zero準備するのめんどいんで、ヘッダーピンつけてないけどルーターとして常時起動してるOrange Pi R1で。GPIOはZeroとR1同じだしハード繋がない実験ならR1でやればいいね。
GPIO12を出力用にして実行してみた。
/sys/class/gpio/gpio12/value に'1'を書き込む。
5秒後に'0'を書き込む。
5秒後に'1'を書き込む。
って感じ。
最初は初回'1'を書き込んだところまでのコードで'1'に書き換わることを確認。
次に'0'を書き込んだとこまでのコードで確認したら'0'になってた。
最後のコードだと'1'だった。
ファイルは閉じずに1byteずつ書き込めば即時書き換わるぽい?
C言語のファイルアクセスはfopen使うのが普通みたいだが、バッファとか使われなそうと思ったんでシステムコール使ってみた。
ファイルはcloseするの忘れてたけどプロセス落ちれば勝手に閉じるよね?
#include <unistd.h>
#include <fcntl.h>
int main(void){
char b;
int fd=open("/sys/class/gpio/gpio12/value",O_WRONLY);
b='1';
write(fd,&b,1);
sleep(5);
b='0';
write(fd,&b,1);
sleep(5);
b='1';
write(fd,&b,1);
return(0);
}
こんな感じで試してみた。#include <fcntl.h>
int main(void){
char b;
int fd=open("/sys/class/gpio/gpio12/value",O_WRONLY);
b='1';
write(fd,&b,1);
sleep(5);
b='0';
write(fd,&b,1);
sleep(5);
b='1';
write(fd,&b,1);
return(0);
}
Orange Pi Zero準備するのめんどいんで、ヘッダーピンつけてないけどルーターとして常時起動してるOrange Pi R1で。GPIOはZeroとR1同じだしハード繋がない実験ならR1でやればいいね。
GPIO12を出力用にして実行してみた。
/sys/class/gpio/gpio12/value に'1'を書き込む。
5秒後に'0'を書き込む。
5秒後に'1'を書き込む。
って感じ。
最初は初回'1'を書き込んだところまでのコードで'1'に書き換わることを確認。
次に'0'を書き込んだとこまでのコードで確認したら'0'になってた。
最後のコードだと'1'だった。
ファイルは閉じずに1byteずつ書き込めば即時書き換わるぽい?
C言語のファイルアクセスはfopen使うのが普通みたいだが、バッファとか使われなそうと思ったんでシステムコール使ってみた。
ファイルはcloseするの忘れてたけどプロセス落ちれば勝手に閉じるよね?
あとは1秒未満のsleepと、
UIとGPIO制御が別プロセスになる予定なんでFIFOかなんかでプロセス間通信をと思ってる。
pthreadでのスレッド間通信はグローバル変数が共有できるみたい。
UIとGPIO制御が別プロセスになる予定なんでFIFOかなんかでプロセス間通信をと思ってる。
pthreadでのスレッド間通信はグローバル変数が共有できるみたい。