ジャンル不定の日記です。

C言語でGPIO触ってみた

C言語でHello World作ってOrange Piで実行できること確認した後pthread試してみて、あと必要なファイル書き込みやってみた。

#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);
}
こんな感じで試してみた。
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でのスレッド間通信はグローバル変数が共有できるみたい。