🚥
ラズパイのGPIOでエッジ検出してファイルにダンプする
Raspberry Pi(ラズパイ)のGPIOポートに入力される電圧がHIGH/LOW状態に変化したことをファイルに記録する。
pigpio pigpioを使えばコマンドラインでGPIOポートのエッジ検出ログをファイルに書き出せる。pigpioのツール
pig2vcd
が出力するファイル形式のVCDフォーマットは、GTKWaveなど波形を表示できる多くのGUIツールで読み込むことができる。
キャプチャのやりかた
### サンプル間隔とバッファサイズを指定してdaemonを起動する
$ sudo pigpiod -s 1 -b 1000
### 通知ハンドルを取得する
$ pigs no
*-----
0 # ハンドルは0以上の整数として与えられる
*-----
### バックグラウンドでpipeからの出力をファイルに書き出す
$ pig2vcd </dev/pigpio0 >gpio.vcd &
# /dev/pigpioN: Nの部分が通知ハンドル
# pig2vcdはpigpio付属のコマンド
### 通知を開始する
$ pigs nb 0 0x10000
# 第2引数 bitsで対象のGPIOポートを指定する
# ここでは例として 0x10000 = GPIO 16(0x10000) + GPIO 12(0x1000)
-> 通知を終了するまでpipeにHIGH/LOWの変化が出力される
### 通知を終了する
$ pigs nc 0
参考: http://abyz.me.uk/rpi/pigpio/ex_LDR.html
シェルスクリプト書いた
通知を開始するpigs nb
コマンドの第2引数bits
は、ビット位置がポート番号に対応したビットマスクとして渡す必要がある。ポート番号の数字をスペース区切りで指定できるようにシェルスクリプトを書いた。
使用例
$ sudo pigpiod -s 1 -b 1000
$ ./read_pin.sh 16 12
Hit Enter key to stop
libgpiod
LinuxにはGPIOを管理する新しいインターフェース(Linux kernel GPIO Interface)がある。そのAPIを使用するlibgpiodを使えばpigpioのようにsudo
しなくてもGPIOポートにアクセスできる。ツールコマンドのgpiomon
を使えば入力のエッジ検出ダンプもできる。
今回pigpioを使用したのは、これまでlibgpiodだけではポートのプル状態の設定ができなかったから。
linux kenrnel v5.5 以降かつ libgpiod v 1.5 以降ならbias
設定としてプルアップ、プルダウンの設定ができるようになったらしい。
参考:https://microhobby.com.br/blog/2020/02/02/new-linux-kernel-5-5-new-interfaces-in-gpiolib
Discussion