RaspberryPi - Interfacciarsi con un relay, esempio

From Sistemi Operativi
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