Armadilloフォーラム

X1 pythonでGPIO制御が1回しかできない

bashi18

2021年5月19日 19時16分

X1 をDebian10で動かしております。
https://armadillo.atmark-techno.com/blog/615/4300
こちらを参考にpythonでGPIOを制御しようとしています。
ただ、他の処理とタイミングを合わせてGPIOをLow/Highしたいので、
上記の例からwithを使わないように変更し、open後に自前でcloseするようにしています。

なのですが、1回のopenにつき1回の制御(print)しかできません。
2回目を以降は処理されず、最後のcloseは"Invalid argument”になってしまいます。
printを1回だけだとエラーにならずちゃんとLow/Highが指定した通りに変化します。

都度都度openはやりたくないのですが、複数回制御するにはどうすればよいでしょうか?
printを実行すると勝手にcloseされる?
printを使用せずにwriteで制御する?

よろしくお願いいたします。

コメント

at_akihito.irie

2021年5月20日 11時35分

入江です。

通常、openするとcloseしたタイミングでファイルに値が書き込まれます。

open後に任意のタイミングで書き込むためにはflushするのが良いと思います。

f = open("/sys/class/gpio/export", "w")
print("87", file=f)
f.flush() # このタイミングで書き込まれる
:
(略)
:
f.close()

bashi18

2021年5月20日 17時48分

入江様、ありがとうございます。

説明下手ですみません。
言いたかったのは以下の内容です。
export、directionの処理はやっている前提で

f = open("/sys/class/gpio/gpio87/value", "w")
print('0', file=f)
f.close()

はエラーもなく、ちゃんとLowに落ちるのですが、

f = open("/sys/class/gpio/gpio87/value", "w")
print('0', file=f)
print('1', file=f)
f.close()

とすると、f.close()のところで"Invalid argument"のエラーを吐きます。
そしてHighになりません。

ちなみにwriteで自己解決しました。