2018年3月30日金曜日

天体写真用装置の工作その2(GPIO)

その2だけどまだRaspberry PiというかLinuxの使い方

実際に天体写真用装置を操るにはI/Oを叩く必要があるけどその使い方についてのメモ

I/Oを叩くには
  1. 各種ライブラリを使う
  2. 直接レジスタを読み書きする
  3. sysfsを使う
というのがあるようだが、

1については、お手軽だけどネット上にあるものは急に消えたりすることもあるし(実際にここまでの規模だとそうそう消えるものはないけど)、GitHubから落とすというのも面倒なのでパス。あと、極力外部のものは使わず元々入ってるものを使うというのを良しとする性格にもよる。aptだのyumだのでインストールできるのでもう何を以て元々入っていると言うのかなんてどうでもいいけど、SunOSとかいじってた時代からの感覚なので仕方がない。

2についてはこれで行こうと思ってたところsysfsというものを使うことでもできるということで、お手軽さから3のsysfsを使うことに決定。あと sudo しなくてもできるというのも◎。

コマンドラインからこんな感じでLチカができるということが確認できた。

pi@raspberrypi:/d $ echo 23 >/sys/class/gpio/export
pi@raspberrypi:/d $ echo out >/sys/class/gpio/gpio23/direction
pi@raspberrypi:/d $ echo 1 >/sys/class/gpio/gpio23/value
pi@raspberrypi:/d $ echo 0 >/sys/class/gpio/gpio23/value
pi@raspberrypi:/d $ echo 23 >/sys/class/gpio/unexport


一旦スクリプトにしてみようと思ってコマンドを並べて

#!/bin/sh

echo 23 >/sys/class/gpio/export
echo out >/sys/class/gpio/gpio23/direction
echo 1 >/sys/class/gpio/gpio23/value
sleep 5
echo 0 >/sys/class/gpio/gpio23/value
echo 23 >/sys/class/gpio/unexport


として実行してみると

pi@raspberrypi:/d $ ./a.sh
./a.sh: 8: ./a.sh: cannot create /sys/class/gpio/gpio23/direction: Permission denied
./a.sh: 9: ./a.sh: cannot create /sys/class/gpio/gpio23/value: Permission denied
^C
pi@raspberrypi:/d $


???。同じことやってるのに???。Cで書いても同じ。???

一生懸命考えて、/sys/class/gpio/export にポート番号を書き込んでから /sys/class/gpio/gpio23 ができるまでに時間がかかるのだろうと思って、sleepしてやってみるとうまくいった。Cでも数msec待つとうまくいったのでこれが原因だろうと。

Cで書く時には、statで存在確認できるまで数msec待ち続けるということにする。

0 件のコメント:

コメントを投稿