ラズベリーパイでpython tkinterで下記のプログラムを作成していました。問題なくrootウインドウが出て、プログラムは実行されていました。
ところが急にGPIOのエラーが出るようになって困っています。
GPIO.clean()を最初においたり、最後においたりしましたが、改善されません。
また、ラズベリーパイを再起動しても、設定でGPIOを無効にして、再度有効ににしても改善されません。
どなたか改善策を教えてください。
発生している問題・エラーメッセージ
GPIOに関するものです。
エラーメッセージ project4-3.py:56: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(GPIO20, GPIO.OUT) project4-3.py:57: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(GPIO21, GPIO.OUT) project4-3.py:58: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(GPIO26, GPIO.OUT) このエラーが連続して出て、プログラムが実行されません。``` ### 該当のソースコード import tkinter as tk import tkinter.font as font import tkinter.ttk as ttk import os import sys import glob import time from time import sleep import RPi.GPIO as GPIO from tkinter import Tk, Label, Button import threading def restart_program(): """Restarts the current program. Note: this function does not return. Any cleanup action (like saving data) must be done before calling this function.""" python = sys.executable os.execl(python, python, * sys.argv) #GPIO.cleanup() GPIO20 = 20 #ヒーター GPIO21 = 21 #ファン GPIO26 = 26 #ブザー GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO20, GPIO.OUT) GPIO.setup(GPIO21, GPIO.OUT) GPIO.setup(GPIO26, GPIO.OUT) time_mov=False tloop=False sloop=False hloop=False GPIO20=True GPIO21=True GPIO26=True #読み込み 温度 file = open('OUTPUT-T.txt', 'r') b=file.read() ther_s=b #print(ther_s) file.close() #読み込み 時間 file = open('OUTPUT.txt', 'r') a=file.read() time_s=a #print(time_s) file.close() root=tk.Tk() root.title('Project') root.geometry("800x600+600+200") my_font=font.Font(size=40) ther_set = tk.StringVar() ther_set.set(ther_s) ther_ss=int(ther_s) time_set = tk.StringVar() time_set.set(time_s) time_ss=int(time_s) time_k=tk.StringVar() #time_ke="" strt=tk.StringVar() var = tk.StringVar() ther_spn=tk.IntVar() time_spn=tk.IntVar() #iw tsensor='/sys/bus/w1/devices/28-030e97944a4f/w1_slave' def traw(): f=open(tsensor,'r') lines=f.readlines() f.close() return lines def readtemp(): lines=traw() while lines[0].strip()[-3:]!='YES': time.sleep(0.3) lines=traw() tout=lines[1].find('t=') if tout!=-1: tstr=lines[1].strip()[tout+2:] tc = round(float(tstr)/1000)#.1=なしで整数表示 #space=(' ℃')#'C F' #tf=round(tc*9.0/5.0+32.0,1) return tc #,tf,space def on_alarm(): global var,temp var.set(readtemp()) temp=readtemp() root.after(1000,on_alarm) root.after(1000, on_alarm) #1w label=tk.Label(root,font=(my_font),fg='blue', textvariable = var,width=5,justify="center") label.grid(row=1,column=1,columnspan=1) #iw labbel=tk.Label(root,text='温 度 : ',fg='blue',font=(my_font),width=8) labbel.grid(row=1,column=0,columnspan=1) labbel=tk.Label(root,text=' ℃',fg='blue',font=(my_font),width=5) labbel.grid(row=1,column=2,columnspan=1) labbel=tk.Label(root,text='保管庫操作パネル',font=(my_font),width=15) labbel.grid(row=0,column=0,columnspan=4) label= tk.Label(root,textvariable=time_k,fg='red',font=(my_font),width=5) label.grid(row=2,column=1) labbel=tk.Label(root,text="残時間 :",fg='red',font=(my_font),width=8) labbel.grid(row=2,column=0,columnspan=1) labbel=tk.Label(root,width=3,text="分",fg='red',font=(my_font)) labbel.grid(row=2,column=2,columnspan=1) #labbel=tk.Label(root,text='完了',fg='blue',font=(my_font),width=14) #labbel.grid(row=4,column=0,columnspan=2) def timeup(): global tloop,sloop,hloop tloop=False sloop=False hloop=False restart() def timer(): global tloop,sloop,strt,time_k,kei,time_ke,time_ss #timend=root.after(500,timer) if sloop==True: if tloop==False: strt=time.perf_counter() tloop=True else: kei=(time.perf_counter()-strt) #time_k=int(((time_ss)*60-kei)/60) #time_k=int(((time_ss)*60-kei)/60) #time_ke=time_k #label= tk.Label(root,text=time_ke,fg='red',font=(my_font),width=5) #label.grid(row=2,column=1) if time_ke<=0: timeup() root.after(500,timer) thread = threading.Thread(target=timer) thread.start() def restart(): GPIO.output(20,0) GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) time.sleep(0.05) GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) time.sleep(60) GPIO.output(21,0) GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) time.sleep(0.05) GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) time.sleep(0.2) GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) time.sleep(0.05) GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) GPIO.cleanup() restart_program() def startup(): global tloop,sloop,hloop b_start=tk.Button(root,text="START",command=start,fg='green',font=(my_font),width=5,state=tk.NORMAL) b_start.grid(row=5,column=0) b_stop=tk.Button(root,text="STOP",command=restart_program(),fg='red',font=(my_font),width=5,state=tk.DISABLED) b_stop.grid(row=5,column=1) b_reset=tk.Button(root,text="SET",command=rset,fg='blue',font=(my_font),width=5,state=tk.NORMAL) b_reset.grid(row=5,column=2) b_reset=tk.Button(root,text="REC",command=rem,fg='red',font=(my_font),width=5,state=tk.DISABLED) b_reset.grid(row=5,column=3) labbel=tk.Label(root,text='待機中',fg='blue',font=(my_font),width=10) labbel.grid(row=4,column=0,columnspan=2) def gpioc(): global ther_ss,hloop,temp #gpioend=root.after(100,gpioc) if temp<ther_ss and hloop==True: GPIO.output(20,1) ther_spn= tk.Spinbox(root,textvariable =ther_set, from_=25, to=110,increment = 1, font=(my_font),fg='invisible',width=5,justify="center") ther_spn.grid(row=1,column=3) time_spn= tk.Spinbox(root,textvariable =time_set, from_=1, to=120,increment = 1, font=(my_font),fg='red',width=5,justify="center") time_spn.grid(row=2,column=3) else: GPIO.output(20,0) root.after(1000,gpioc) def start(): global sloop,tloop,hloop,temp,time_ke b_start=tk.Button(root,text="START",command=start,fg='green',font=(my_font),width=5,state=tk.DISABLED) b_start.grid(row=5,column=0) b_stop=tk.Button(root,text="STOP",command=restart,fg='red',font=(my_font),width=5,state=tk.NORMAL) b_stop.grid(row=5,column=1) b_reset=tk.Button(root,text="SET",command=rset,fg='blue',font=(my_font),width=5,state=tk.DISABLED) b_reset.grid(row=5,column=2) b_reset=tk.Button(root,text="REC",command=rem,fg='red',font=(my_font),width=5,state=tk.DISABLED) b_reset.grid(row=5,column=3) labbel=tk.Label(root,text='作動中',fg='blue',font=(my_font),width=10) labbel.grid(row=4,column=0,columnspan=2) GPIO.output(21,1) hloop=True gpioc() #global stopend #stopend=root.after(500,start) if temp>=ther_ss and sloop==False: sloop=True timer() root.after(500,start) def rset(): b_start=tk.Button(root,text="START",command=start,fg='green',font=(my_font),width=5,state=tk.DISABLED) b_start.grid(row=5,column=0) b_stop=tk.Button(root,text="STOP",command=restart,fg='red',font=(my_font),width=5,state=tk.DISABLED) b_stop.grid(row=5,column=1) b_reset=tk.Button(root,text="SET",command=rset,fg='blue',font=(my_font),width=5,state=tk.DISABLED) b_reset.grid(row=5,column=2) b_reset=tk.Button(root,text="REC",command=rem,fg='red',font=(my_font),width=5,state=tk.NORMAL) b_reset.grid(row=5,column=3) def rem(): ther_set=ther_spn.get() ther_s=ther_set print(ther_set) time_set=time_spn.get() time_s=time_set print(time_set) b_start=tk.Button(root,text="START",command=start,fg='green',font=(my_font),width=5,state=tk.NORMAL) b_start.grid(row=5,column=0) b_stop=tk.Button(root,text="STOP",command=restart,fg='red',font=(my_font),width=5,state=tk.DISABLED) b_stop.grid(row=5,column=1) b_reset=tk.Button(root,text="SET",command=rset,fg='blue',font=(my_font),width=5,state=tk.NORMAL) b_reset.grid(row=5,column=2) b_reset=tk.Button(root,text="REC",command=rem,fg='red',font=(my_font),width=5,state=tk.DISABLED) b_reset.grid(row=5,column=3) file = open('OUTPUT-T.txt', 'w') d=ther_s file.write(d) print(d) file.close() #読み込み 時間 file = open('OUTPUT.txt', 'w') c=time_s file.write(c) print(c) file.close() GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) time.sleep(0.05) GPIO.output(26,1) time.sleep(0.1) GPIO.output(26,0) GPIO.cleanup() restart_program() ther_spn= tk.Spinbox(root,textvariable =ther_set, from_=25, to=110,increment = 1, font=(my_font),fg='blue',width=5,justify="center") ther_spn.grid(row=1,column=3) time_spn= tk.Spinbox(root,textvariable =time_set, from_=1, to=120,increment = 1, font=(my_font),fg='red',width=5,justify="center") time_spn.grid(row=2,column=3) startup() #kyoutu root.mainloop() if __name__ == '__main__': main() ```Python3.7.3 ソースコード
試したこと
GPIO.clean()を最初においたり、最後においたりしましたが、改善されません。
また、ラズベリーパイを再起動しても、設定でGPIOを無効にして、再度有効ににしても改善されません。
補足情報(FW/ツールのバージョンなど)
こにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー