GPIO 出力1
40Pin T型GPIO拡張ボードを購入しました。

フラットケーブルでラスベリーパイと接続します。今まではラズベリーパイのピンとボードをジャンパーワイヤーで接続していましいた。 ちょっと動かすとジャンパーワイヤーが外れてしまいます。結線の多い回路ではどこが外れた?で結構無駄な時間を使います。 これならその心配はなさそうです。
最初はお約束のLチカ(LEDをチカチカと点滅させるHello worldのようなプログラム)です。 tkinterを使ったGUIプログラムです。

ボタン操作で消灯、点灯、点滅ができます。それではソースです。

# -*- coding: utf-8 -*-
import sys
import tkinter  as tk
import wiringpi as wp

stateOnOff = 0
modeOnOff = 0
root = None
retBlink = None

#ボタンをクリックしたときのイベントハンドラー
def turnOff():
    global modeOnOff, retBlink
    wp.digitalWrite(7,0)
    modeOnOff = 0
    root.after_cancel(retBlink)

def turnOn():
    global modeOnOff, retBlink
    wp.digitalWrite(7,1)
    modeOnOff = 1
    root.after_cancel(retBlink)

def blink():
    global stateOnOff, root, modeOnOff, retBlink
    modeOnOff = 3
    if stateOnOff == 0:
        stateOnOff = 1
    else:
        stateOnOff = 0
    wp.digitalWrite(7,stateOnOff)
    retBlink = root.after(500, blink)

 


def main():
    global root
    root = tk.Tk()
    root.title("LED control")
    root.geometry("250x40")

    wp.wiringPiSetup()
    wp.pinMode(7,1)
    wp.digitalWrite(7,0)
 
    btnOff = tk.Button(
        root,
        text='消灯',
        command=turnOff)
    btnOff.grid(row=0, column=0,padx=5, pady=5)     

    btnOn = tk.Button(
        root,
        text='点灯',
        bg='red',
        command=turnOn)
    btnOn.grid(row=0, column=1, padx=5, pady=5)

    btnBlink = tk.Button(
        root,
        text='点滅',
        bg='pink',
        command=blink)
    btnBlink.grid(row=0, column=2, padx=5, pady=5)


    root.mainloop()

if __name__ == "__main__":
    main()
点灯・消灯の処理ならHello worldなみに簡単です。そこに点滅が加わるとずーーーと難しくなります。 tkinterにはAfterというタイマー機能があります。このタイマーはワンショットです。タイマー処理でまたタイマー のセットします。タイマーのセットと中止はrootにあるのでmain以外で使えるようにグローバル変数 にしました。
消灯のボタンはbtnOff、イベントハンドラーはdef turnOff():
点灯のボタンはbtnOn、イベントハンドラーはdef turnOn():
点滅のボタンはbtnBlink、イベントハンドラーはdef blink():
blinkで
retBlink = root.after(500, blink)
retBlinkはafterの戻り値を控えています。
そしてkの値を使って
btnOfftとbtnOnでr
root.after_cancel(retBlink)
タイマーをキャンセルしています。
これをやらないと点灯・消灯はうまく動きますが、一旦点滅にすると次にし点灯・消灯に変えても点滅が止まりません。