GUIで番号とパスワードを入力し、ソレノイドを動作させるプログラムを作成しました。

ソースコード全体

[gui_base.py]


import serial
import time
import tkinter

ser = serial.Serial('COM6',115200,timeout=0.1)
lo_tg = [1,2,4]
tgpslist=[0000]*len(lo_tg)
ser.close()

def btn_lock():
    global tgpslist
    global lo_tg
    global txt_lc
    global txt_lp
    ser.open()
    kazoe=0
    for i in lo_tg:
        if txt_lc.get()==str(i):
            tgn=kazoe
        kazoe+=1
    if len(str(txt_lp.get()))==3:
        tgpslist[tgn]=txt_lp.get()
        print(txt_lp.get())
        #lock
        moji="L00"+str(txt_lc.get())+"\n"
        print(moji)
        ser.write(moji.encode('utf-8'))
        time.sleep(0.1)
    txt_lc.delete(0, tkinter.END)
    txt_lp.delete(0, tkinter.END)
    ser.close()
    
def btn_open():
    global tgpslist
    global lo_tg
    global txt_oc
    global txt_op
    ser.open()
    kazoe=0
    for i in lo_tg:
        if txt_oc.get()==str(i):
            tgn=kazoe
        kazoe+=1
    if txt_op.get()==tgpslist[tgn]:
        tgpslist[tgn]=0000
        print(txt_op.get())
        #open
        moji="U00"+str(txt_oc.get())+"\n"
        print(moji)
        ser.write(moji.encode('utf-8'))
        time.sleep(0.1)
        
    txt_oc.delete(0, tkinter.END)
    txt_op.delete(0, tkinter.END)
    ser.close()
#make
tki = tkinter.Tk()
tki.geometry('500x200')
tki.title('GUIopen,lock')
#lock_label
lol_t = tkinter.Label(text='クリップのロック')
lol_t.place(x=90, y=20)
lol_c = tkinter.Label(text='ロックするクリップ')
lol_c.place(x=30, y=50)
lol_p = tkinter.Label(text='設定するパスワード')
lol_p.place(x=30, y=80)
#open_label
opl_t = tkinter.Label(text='クリップのオープン')
opl_t.place(x=320, y=20)
opl_c = tkinter.Label(text='オープンするクリップ')
opl_c.place(x=260, y=50)
opl_p = tkinter.Label(text='設定したパスワード')
opl_p.place(x=260, y=80)
#lock_txt
txt_lc = tkinter.Entry(width=20)
txt_lc.place(x=125, y=50)
txt_lp = tkinter.Entry(width=20)
txt_lp.place(x=125, y=80)
#open_txt
txt_oc = tkinter.Entry(width=20)
txt_oc.place(x=355, y=50)
txt_op = tkinter.Entry(width=20)
txt_op.place(x=355, y=80)
#lock_buttan
btn_l = tkinter.Button(tki, text='ロック', command=btn_lock)
btn_l.place(x=90, y=110)
#open_buttan
btn_o = tkinter.Button(tki, text='オープン', command=btn_open)
btn_o.place(x=320, y=110)
time.sleep(0.1)
tki.mainloop()

デモ動画はこちらです。↓


以下解説

シリアル通信のため、相手の設定に合わせる
ser = serial.Serial('COM6',115200,timeout=0.1)
今回送るコマンドは改行を挟む必要があるので送る文字列には\nを付ける
moji="L00"+str(txt_lc.get())+"\n" ser.write(moji.encode('utf-8'))
こまめにシリアルをオープン、クローズすることでコマンドが重なっていくのを防ぐ
ser.open() ser.close()
テキストボックスを空白にするのは.delete(開始位置,終了位置)
txt_lc.delete(0, tkinter.END) txt_lp.delete(0, tkinter.END) txt_oc.delete(0, tkinter.END) txt_op.delete(0, tkinter.END)

シリアル通信で参考としたサイト
tkinterで参考としたサイト