raspberrypi pigpioで割り込み callback

pigpioを使って割り込み操作を実施する

pigpioの本家のサンプルは下記の通り
def cbf(gpio, level, tick):
   print(gpio, level, tick)
cb1 = pi.callback(22, pigpio.EITHER_EDGE, cbf)

簡単に説明すると
 pi.callback(22, pigpio.EITHER_EDGE, cbf)
22番ピンを監視して変化があればcbfを実行

def cbf(gpio, level, tick):
tickはアプリ起動後のマイクロセコンド 72分で0に戻る

で実際のアプリは
pullupは実抵抗の10Kをセット
3.3v – 10Kオーム – |sw| — GND
           |- ——————- GPIO18 

チャタリング対策を入れているのでtickで比較している

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pigpio
import time
PIN=18

pi = pigpio.pi()


old_tick = 0

def setup():
    pi.set_mode(PIN, pigpio.INPUT)

def cb_interrupt(gpio, level, tick):
    global old_tick
    if tick > old_tick:
        sa = tick - old_tick
    else:
        sa = old_tick - tick
    if sa > 200000:
        print (gpio, level, tick)
        old_tick = tick
def main():
    cb = pi.callback(PIN, pigpio.FALLING_EDGE, cb_interrupt)
    while True:
        time.sleep(1)

def destroy():
    pi.stop()
    
if __name__ == '__main__':
    setup()
    try:
        main()
    except KeyboardInterrupt:
        destroy()

カテゴリー iot