RaspberryPi - Interfacciarsi con un relay, esempio
Jump to navigation
Jump to search
Vi posto il programmino in python che ho scritto per controllare un relay. Questo è il programma che uso per accendere e spegnere le luci in camera. Se siete particolarmente pigri come me potreste utilizzarlo come sveglia, o se ci allegate un programmino che controlla l'input di un rilevatore di movimenti potete accendere le luci automaticamente quando entrate in camera. B-) Da notare che a quanto pare il relay abbia la logica invertita, per cui dando il segnale LOW in realtà mandiamo 3.3V (accendendo il relay) e dando invece HIGH si torna a 0V. Ho appena iniziato a cimentarmi con il python quindi se avete suggerimenti li accetto ben volentieri.
#!/usr/bin/env python3
#MagicLamp 1.0
#questo programma e' usato per controllare un relay. Esegue un controllo di esistenza su due file shut_path e interr_path.
#Se shut_path e' presente termina il programma; se interr_path è presente accende il relay.
import RPi.GPIO as GPIO
from time import sleep
import os
#numero del pin GPIO
pin1 = #numero del GPIO che state usando
#questo file (se presente) viene usato per terminare il programma
shut_path= '**qui la path dove viene controllata l'esistenza dell'interruttore di terminazione**'
#questo file (se presente) viene usato per accendere la luce
interr_path= '**qui la path dove viene controllata l'esistenza dell'interruttore di accensione e spegnimento**'
#questa variabile viene usata per controllare che la luce non sia gia' accesa cosi da non inviare il segnale due volte
on = False
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin1,GPIO.OUT) #utilizza il relay numero 1
#GPIO.output(pin1, GPIO.HIGH) #spegni la lampada
try:
#rimuovo shut_path se presente poichè viene usao in fase di terminazione del servizio
if (os.path.isfile (interr_path) == True):
os.remove(interr_path)
if (os.path.isfile (shut_path) == True):
os.remove( shut_path)
print ("MagicLamp 0.1..... Ready!")
sleep (1)
while (1):
shutdown = os.path.isfile (shut_path)
interruttore = os.path.isfile (interr_path)
if (interruttore == True and shutdown == False):
if (on == False): #se non e gia accesa
GPIO.output(pin1, GPIO.LOW) #accendi la lampada
print ("Accendo la luce...\n")
on = True
elif (shutdown == True):
if (on == True):
print ("Spengo la luce e termino il programma...\n")
#rimuovi i file di controllo per un riavvio pulito
os.remove( shut_path)
if (interruttore == True):
os.remove( interr_path)
else:
print ("Termino il programma")
break
else:
if (on == True):
GPIO.output(pin1, GPIO.HIGH) #spegni la luce
print ("Spengo la lampada\n")
on = False
sleep (5)
GPIO.output(pin1, GPIO.HIGH) #spengo la luce
GPIO.cleanup()
except KeyboardInterrupt:
GPIO.output(pin1, GPIO.HIGH)
GPIO.cleanup()
if (os.path.isfile (interr_path) == True):
os.remove( interr_path)
if (os.path.isfile (shut_path) == True):
os.remove( shut_path)
print('Termino il programma\n')
potete poi accendere e spegnere la la luce con uno script fatto così:
#!/bin/bash
INTERRUTTORE="**path del vostro interruttore**"
if [ -e "$INTERRUTTORE" ]
then
rm "$INTERRUTTORE"
else
echo 1 > "$INTERRUTTORE"
fi