Luigi94
Posts: 18
Joined: Sun Dec 22, 2013 9:40 am

Reset pin GPIO

Sun Jan 26, 2014 7:24 pm

Salve a tutti!

rieccomi con un nuovo problema! :D

Ho iniziato finalmente ad usare la porta GPIO per accendere il primo led :) , tuttavia ora nasce un problema.... dopo aver avviato il progetto da terminale come si resetta il pin di alimentazione? (io utilizzo per ora il pin 11 e 6)
non riesco a fermare il programma.... da terminale una volta avviato scompare la dicitura iniziale "raspberrypi:" e non ho altra scelta se non quella di togliere l'alimentazione...

Grazie anticipate!

User avatar
ruzzine
Posts: 95
Joined: Wed Nov 28, 2012 2:20 pm
Location: Italy
Contact: Website

Re: Reset pin GPIO

Mon Jan 27, 2014 8:32 am

Che comando hai dato per accendere il led?

Angelus88
Posts: 442
Joined: Mon May 13, 2013 9:25 am
Location: Ivrea, TO (Italy)

Re: Reset pin GPIO

Mon Jan 27, 2014 10:28 am

Da terminale, i comandi sono semplicemente questi:

Code: Select all

# Set up GPIO 4 and set to output
echo "4" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio4/direction

# Set up GPIO 7 and set to input
echo "7" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio7/direction

# Write output
echo "1" > /sys/class/gpio/gpio4/value

# Read from input
cat /sys/class/gpio/gpio7/value 

# Clean up
echo "4" > /sys/class/gpio/unexport
echo "7" > /sys/class/gpio/unexport
Quindi per il pin 11 ad esempio dovresti fare

Code: Select all

echo "11" > /sys/class/gpio/export
per attivare il pin 11 poi

Code: Select all

echo "out" > /sys/class/gpio/gpio11/direction
per impostare la direzione in uscita poi

Code: Select all

echo "1" > /sys/class/gpio/gpio11/value
per accendere il pin o echo "0" per spegnerlo e infine

Code: Select all

echo "11" > /sys/class/gpio/unexport
per disattivare del tutto il pin 11

Luigi94
Posts: 18
Joined: Sun Dec 22, 2013 9:40 am

Re: Reset pin GPIO

Mon Jan 27, 2014 2:11 pm

Scusate dovevo essere più descrittivo


Ho creato un progetto con IDLE e l'ho lanciato da terminale per avere i permessi di root, il programma funziona ma poi non riesco più a fermarlo!

Angelus88
Posts: 442
Joined: Mon May 13, 2013 9:25 am
Location: Ivrea, TO (Italy)

Re: Reset pin GPIO

Mon Jan 27, 2014 3:07 pm

Beh Idle è un'interfaccia di programmazione per Python giusto? In quel progetto avrai scritto il codice per far funzionare i pin della GPIO no? Semplicemente devi adattare il progetto a quei comandi. Non riesco ad essere più specifico di così però... O piuttosto crei un altro progetto che si occupa di fare le operazioni inverse. Quando devi accendere il led avvii il primo progetto e quando devi spegnerlo avvii il secondo.

Luigi94
Posts: 18
Joined: Sun Dec 22, 2013 9:40 am

Re: Reset pin GPIO

Mon Jan 27, 2014 3:14 pm

Angelus88 wrote:Beh Idle è un'interfaccia di programmazione per Python giusto? In quel progetto avrai scritto il codice per far funzionare i pin della GPIO no? Semplicemente devi adattare il progetto a quei comandi. Non riesco ad essere più specifico di così però... O piuttosto crei un altro progetto che si occupa di fare le operazioni inverse. Quando devi accendere il led avvii il primo progetto e quando devi spegnerlo avvii il secondo.
Si esatto, IDLE non ha i permessi per utilizzare la porta GPIO e quindi devo avviarlo da terminale con

Code: Select all

sudo python nomedelprogetto.py
Ho capito cosa intendi e potrebbe anche funzionare (ora lo testo), quello che però volevo sapere è se esiste un modo per resettare la porta GPIO , insomma come se non avessi avviato il progetto da terminale

Angelus88
Posts: 442
Joined: Mon May 13, 2013 9:25 am
Location: Ivrea, TO (Italy)

Re: Reset pin GPIO

Mon Jan 27, 2014 4:04 pm

Si la porta puoi resettarla ma devi farlo sempre da terminale con i comandi opposti a quelli utilizzati nel progetto ovvero:

Code: Select all

echo "0" > /sys/class/gpio/gpio11/value
per spegnere il PIN e

Code: Select all

echo "11" > /sys/class/gpio/unexport
per disattivare del tutto il PIN. Per riattivarlo dovresti fare di nuovo

Code: Select all

echo "11" > /sys/class/gpio/export
seguito da

Code: Select all

echo "1" > /sys/class/gpio/gpio11/value
per accenderlo.

Volendo l'ultimo comando dell'unexport potresti evitarlo se successivamente vuoi riutilizzare lo stesso PIN direttamente con un echo "1" per riaccenderlo ma al riavvio del Raspberry lo troveresti comunque disattivato.

Per questo ti dico che dipende tutto da cosa hai scritto nel progetto.

Fai prima a fare un copia e incolla qui.

Luigi94
Posts: 18
Joined: Sun Dec 22, 2013 9:40 am

Re: Reset pin GPIO

Mon Jan 27, 2014 6:28 pm

Code: Select all

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.IN)
GPIO.setup(11, GPIO.OUT)
while True:
input_value= GPIO.input(12)
if input_value == False :
print ("Il bottone è stato premuto")
while input_value == False :
input_value = GPIO.input(12)
GPIO.output(11, True)
if input_value == True :
GPIO.output (11, False)
Potrebbero esserci errori di battitura ma il programma è questo...il pin 12 lo uso per il pulsante mentre l'11 per il led

Angelus88
Posts: 442
Joined: Mon May 13, 2013 9:25 am
Location: Ivrea, TO (Italy)

Re: Reset pin GPIO

Tue Jan 28, 2014 8:16 am

Ok... Non ho ancora fatto Python però il codice sembra abbastanza semplice...

Come ti dicevo, il codice e le operazioni scritte vanno bene. Il problema è che una volta chiuso il programma, se lo chiudi mentre che il led è acceso, ti rimane acceso. Non so come dovresti fare con Python ma dovresti integrare qualcosa che ti monitora costantemente l'esecuzione del programma in modo che una volta terminato, ti esegue un'ultima operazione.

Per essere più chiaro: per chiudere il programma immagino tu utilizzi la combinazione "CTRL+C". Ci vorrebbe qualche codice su Python che riesca a rilevare la pressione di "CTRL+C" (sicuramente c'è) e che prima di chiudere il programma ti esegue un comando o una serie di comandi ad esempio eseguirti sempre:

Code: Select all

GPIO.output(11, False)
in modo da spegnere sempre il led all'uscita e poi (se ho capito bene il codice)

Code: Select all

input_value = True
per reimpostare a True la variabile input_value che dovrebbe significare che il bottone è stato premuto nuovamente per spegnere il led.

Luigi94
Posts: 18
Joined: Sun Dec 22, 2013 9:40 am

Re: Reset pin GPIO

Tue Jan 28, 2014 8:56 pm

Ti hanno già detto che sei un mito vero? :lol:

Ci siamo quasi!!! ho aggiunto questo:

Code: Select all

if KeyboardInterrupt:
GPIO.output (11, False)
input_value = True
Il programma si ferma , tuttavia il led rimane acceso.... da qualche parte avevo letto che bisogna usare il comando "except" al posto di "if" tuttavia se lo uso mi da errore ._.

Angelus88
Posts: 442
Joined: Mon May 13, 2013 9:25 am
Location: Ivrea, TO (Italy)

Re: Reset pin GPIO

Wed Jan 29, 2014 7:29 am

hahahaha Grazie :) Su un forum propongono di utilizzare questo pezzo di codice:

Code: Select all

import signal
import sys
def signal_handler(signal, frame):
    print 'You pressed Ctrl+C!'
    sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
print 'Press Ctrl+C'
while True:
    continue
metti quindi i primi due import all'inizio del file python sotto l'import delle GPIO.

Poi alla fine del file aggiungi il resto ma in più sotto print 'You pressed Ctrl+C!' e prima di sys.exit(0) dovresti aggiungere quei due comandi che dovrebbero resettare i PIN ovvero:

Code: Select all

GPIO.output (11, False)
input_value = True
vediamo così! :D

Luigi94
Posts: 18
Joined: Sun Dec 22, 2013 9:40 am

Re: Reset pin GPIO

Wed Jan 29, 2014 2:56 pm

Niente non va.... ho provato anche con GPIO.cleanup e GPIO.reset senza risultati....

ho notato però che quando premo Ctrl+C mi vien fuori questo:

"^CTraceback (most recente call last):
File "TEST2.py", line 11, in <module>
input_value = GPIO.input(12)
KeyboardInterrupt

Quasi come se salvasse l'ultima "posizione" della variabile , infatti se fermo il programma con il led spento quest'ultimo rimane spento, se lo fermo accesso rimane acceso..... mistero

Angelus88
Posts: 442
Joined: Mon May 13, 2013 9:25 am
Location: Ivrea, TO (Italy)

Re: Reset pin GPIO

Wed Jan 29, 2014 3:02 pm

Non è che la salva... Semplicemente i comandi python che dai, non fanno altro che modificare un file normalissimo presente appunto al percorso

Code: Select all

/sys/class/gpio/gpio11/value
Questo file, che puoi aprire tranquillamente come file di testo, può contenere due valori: 0 o 1.

Se con un normalissimo editor di testo scrivi 1 e salvi il file, istantaneamente il led si accende.

Ovvio che se non riscrivi lo 0 e salvi nuovamente il file, il led rimane acceso.

Stesso discorso con il programma scritto con Python... Con il codice

Code: Select all

GPIO.output(11, True)
Python non fa altro che scrivere "1" su quel file. Bisognerebbe fare in modo che al momento di premere CTRL+C, Python scriva nuovamente "0"

Return to “Italiano”