#RPi5GPIO.py contains the functions listed below #By D@CC #Purpose: to deprecate RPi.GPIO for the RPi 5B #Source: https://ephotocaption.com/a/213/213.html #Created on 2024AJan18 #Modified on 2024AJan19 #Status: compatible with vsn I on the RPi5B, CM4 # PB down turns LED on with both RPi.GPIO and RPi5GPIO # GPIO.BCM,GPIO.IN,GPIO.OUT, GPIO.HIGH, GPIO.LOW # GPIO.setmode, GPIO.setup, GPIO.input, GPIO.output # unity #which is used to support GPIO.BCM, GPIO.IN, # GPIO.OUT, GPIO.HIGH and GPIO.LOW def BCM(parm="GPIO.BCM"): return parm def IN(parm="GPIO.IN"): return parm def OUT(parm="GPIO.OUT"): return parm def HIGH(parm="GPIO.HIGH"): return parm def LOW(parm="GPIO.LOW"): return parm def unity(func): #by D@CC on 2024AJan18 #Purpose: return "constants" such as GPIO.BCM, GPIO.HIGH etc #strReturn=func() try: strReturn=func() except: strReturn=True finally: pass #try end if strReturn=="GPIO.HIGH": strReturn=func(parm=True) if strReturn=="GPIO.LOW" : strReturn=func(parm=False) return strReturn #/unity.py def setmode(Qmode): global gix_Qmode global gix_QinOut global gix_PINs global gix_datetime gix_QinOut={} #initialize an empty dict gix_PINs=[0]*41 #initialize an empty pin list # BEWARE OF PIN # 0,1,40 and 41 mode=unity(Qmode) if mode=="GPIO.BCM": gix_Qmode=mode gix_datetime = "2024-01-19 01:25:40" #print("@5.45 set gix_datetime=",gix_datetime) else: print("RPi5GPIO ERROR mode must be GPIO.BCM") #if end return #def end def setup(QPin,QinOut): #Purpose: Save LED or Button type for QPin from gpiozero import LED,Button global gix_QinOut global gix_PINs isInOut = False #print("@5.59,QPin:",QPin) #print("@5.60,QinOut:",unity(QinOut)) IO="NA" inOrOut=unity(QinOut) if inOrOut=="GPIO.IN" : IO="Button"; isInOut=True if inOrOut=="GPIO.OUT" : IO="LED" ; isInOut=True if QPin>0 and QPin<41 : isInOut=True #print("@5.66, isInOut:",isInOut) #print("@5.67, QPin:",QPin) if isInOut: #if QPin is valid #print("@5.71, unity(QinOut):",unity(QinOut)) #print("@5.72, if not (inOrOut =="GPIO.IN"): #if Pin is not IN ie is a LED #print("@5.75, IO:",IO) gix_QinOut[QPin]=IO gix_PINs[QPin]=LED(QPin) # create LED object else: #print("@5.79, IO:",IO) gix_QinOut[QPin]=IO gix_PINs[QPin] =Button(QPin) # create Button object in gix_PINs #print("RPi5GPIO has set up Button(QPin)") #if end #if end #print("@5.85 gix_QinOut",gix_QinOut) return #def end def output(QPin,TorF): from gpiozero import LED,Button global gix_QinOut global gix_PINs if QPin>0 and QPin<41 : #process output dir= gix_QinOut[QPin] if dir=="LED": if TorF : #True #print("on") gix_PINs[QPin].on() else: #print("off") gix_PINs[QPin].off() #if end else: print("RPi5GPIO ERROR output cannot be Button") #if end else: print("RPi5GPIO ERROR Bad Pin") #if end #def end def input(QQPin): from gpiozero import LED,Button #Purpose: read button, return True if Pressed # return False if Not Pressed global gix_QinOut global gix_PINs #print("@5.119: QPin:",QPin) QPin=int(QQPin) if QPin>0 and QPin<41 : #process input dir= gix_QinOut[QPin] if dir=="Button": # read Button and return True or False #print("@126: QPin:",QPin) if gix_PINs[QPin].is_pressed : #is this Button Pressed #print("@5.128 RPi5GPIO button was pressed") return False else: #print("@5.131 RPi5GPIO button was NOT pressed") return True #if end else: print("RPi5GPIO ERROR Input cannot be LED") #if end else: print("RPi5GPIO ERROR Bad Pin") #if end #def end