ps picerno non è che fai lezioni di elettronica ? analogica e digitale


Moderatore: Moderatore Raspberry
Si è vero, ma il setmode è solo una semplice impostazione che ti fa scegliere come numerare i pin.. in modalità BCM lo chiamerai n. 3 ( = GPIO3), mentre in modalità BOARD n. 5 ( = quinto pin del pettine).. io sono più abituato al BCM, ma alla fine non cambia assolutamente nulla.sant0 ha scritto: ↑01/02/2017, 16:39 ah ecco allora adesso mi torna tutto, grazie picerno. Ho giocato poco con la gpio del rpi e sapevo che via codice si può scegliere di "chiamare" i pin con la numerazione gpio o per numero di pin, perlomeno in python con la funzione setmode() in RPi.GPIO e l'ho sempre usata per numero di pin.
Codice: Seleziona tutto
#!/usr/bin/python
import os
import time
import RPi.GPIO as GPIO
GPIOpin1=3
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIOpin1, GPIO.IN)
power = GPIO.LOW
while power == GPIO.LOW:
time.sleep(1)
power = GPIO.input(GPIOpin1)
print 'Power pin status: {}'.format(power)
if power == GPIO.HIGH:
print 'poweroff'
os.system('sudo poweroff') # shutdown -h now
si proprio lei, la libreria per interpretare tutti i protocolli dei telecomandi. non è per niente abbandonata, anzi ora fa anche parte del kernel linux. su PC usava un sensore sul connettore seriale e come alternativa c'era girder. già quando l'ho usato io (più di 10 anni fa) c'era uno schema con microcontrollore su usb
ho provato anche io kore ma mi piace di più usare lo stesso telecomando della TV, e siccome non supporta il CEC ho risolto saldando un semplice TSOP4838 sul connettore GPIO
non mi sento in grado di dare lezioni, ma solo di parlarne tra amici
bene! lo script si diffonde in più linguaggidR.pRoDiGy ha scritto: ↑01/02/2017, 23:08 Per il resto se preferisci farlo in python non c'è nulla di complicato (la versione in shell di picerno andava già cmq più che benissimo!).. per curiosità, lo stesso codice si traduce così
hai fatto benissimo. io non ne ho avuto bisogno perchè libreelec parte già come root e non è possibile (apparentemente) cambiarlodR.pRoDiGy ha scritto: ↑01/02/2017, 23:08 Una piccolezza: ho aggiunto "sudo" davanti alla chiamata a poweroff, di modo che lo shutdown possa essere eseguito anche se lo script non girasse sotto l'utente root (cosa che comunque solitamente è, visto che dovresti inserirlo nella sequenza di boot) ma, ad esempio, pi (che non è root, ma essendo un sudoer può elevarsi a root temporaneamente.. con sudo appunto).![]()
Urk, hai ragione, l'ho scritto al contrario.. l'interruttore chiude su GND!
infatti io optai per la versione su RS232 con 4 componenti
se usi libreelec, che consiglio, c'è già tutto installato, devi solo fargli apprendere i tasti che vuoi usare. prima di agire, assicurati che la TV ignori tutti i tasti che dovresti usare quando cambi la sorgente in HDMI
era solo per sapere se ci fosse un motivo particolare che mi sfuggiva. dovrebbe funzionare lo stesso anzi, pensandoci bene, potrebbe essere anche meglio. funzionerebbe sia con l'interruttore che con il pulsante e non spegnerebbe il dispositivo durante i test quando dimentichi di collegarlo, come è successo a me alcune voltedR.pRoDiGy ha scritto: ↑02/02/2017, 15:22 Urk, hai ragione, l'ho scritto al contrario.. l'interruttore chiude su GND!
Come dicevo ieri sera ho scritto il programmino ma non l'ho testato con l'interruttore, se no me ne sarei accorto subito.. cmq ora l'ho corretto! Grazie![]()
Codice: Seleziona tutto
#!/bin/bash
GPIOpin1=3
echo "$GPIOpin1" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction
power=1
while [ $power = 1 ]; do
sleep 1
power=$(cat /sys/class/gpio/gpio$GPIOpin1/value)
echo $power
if [ $power != 1 ]; then
poweroff
# shutdown -h now
fi
done
Ciao picerno, é proprio quello che cercavo!picerno ha scritto: ↑03/02/2017, 11:11 certo con il pulsante non si può evitare lo spegnimento automatico in caso di power loss ma senza modificarlo non funzionerebbe comunque. non ci resta che sfidarci per vedere chi sconfigge il boss dell'ultimo livello. se posso domani provo il mio script modificandolo come segue.
Codice: Seleziona tutto
#!/bin/bash GPIOpin1=3 echo "$GPIOpin1" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIOpin1/direction power=1 while [ $power = 1 ]; do sleep 1 power=$(cat /sys/class/gpio/gpio$GPIOpin1/value) echo $power if [ $power != 1 ]; then poweroff # shutdown -h now fi done
doc ho provato lo script e la logica inversa funziona in tutte le situazioni. purtroppo è utilizzabile solo con il pulsante e non con l'interruttore perchè il raspi per l'accensione riconosce solo il fronte di discesa del GPIO3 e non anche quello di salitadR.pRoDiGy ha scritto: ↑03/02/2017, 8:17 Posto che ne sai a pacchi più di me Giusèe quindi col massimo rispetto .. ribadisco che secondo me nell'altro modo non poteva funzionare.. nel senso di poter accendere da spento, spegnere da acceso, e non accendere in caso di power loss partendo da spento (quest'ultima in particolare se usi un pulsante non la puoi avere sicuramente).. e infatti era figlio di una semplice svista, non certo di una gran pensata!
![]()
ciao, mi fa piacere che può essere utile a tanti questo script. devi compiare il contenuto in un file e lo rinomini con estensione sh per esempio "switchoff.sh". assegna al file i diritti di esecuzione eseguendo il comando "chmod +x shutdown.sh" e poi inseriscilo nello script di esecuzione automatica con la & alla fine del comando (per eseguirlo in background) in questo modo "shutdown.sh &". l'esecuzione automatica dipende dal sistema ospitante. su linux in genere si può mettere in /etc/rc.local ma per esempio su libreelec si inserisce in /storage/.config/autostart.sh . se accedi in linux non come root dovresti anteporre sudo ad ogni comando
A me fa molto piacere che la cosa sia interessante per molti!picerno ha scritto: ↑06/02/2017, 12:38ciao, mi fa piacere che può essere utile a tanti questo script. devi compiare il contenuto in un file e lo rinomini con estensione sh per esempio "switchoff.sh". assegna al file i diritti di esecuzione eseguendo il comando "chmod +x shutdown.sh" e poi inseriscilo nello script di esecuzione automatica con la & alla fine del comando (per eseguirlo in background) in questo modo "shutdown.sh &". l'esecuzione automatica dipende dal sistema ospitante. su linux in genere si può mettere in /etc/rc.local ma per esempio su libreelec si inserisce in /storage/.config/autostart.sh . se accedi in linux non come root dovresti anteporre sudo ad ogni comando
E' proprio quel che intendevo! se vuoi avere lo spegnimento dopo il power loss devi per forza "matchare" a livello elettrico le 2 modalità (accensione via GPIO3 del rasp da spento, lettura del GPIO da acceso).. proprio per questo mi era piaciuta così tanto la prima soluzione con interruttore: perchè è clamorosamente semplice, ma calza a pennello!picerno ha scritto: ↑06/02/2017, 12:24doc ho provato lo script e la logica inversa funziona in tutte le situazioni. purtroppo è utilizzabile solo con il pulsante e non con l'interruttore perchè il raspi per l'accensione riconosce solo il fronte di discesa del GPIO3 e non anche quello di salitadR.pRoDiGy ha scritto: ↑03/02/2017, 8:17 Posto che ne sai a pacchi più di me Giusèe quindi col massimo rispetto .. ribadisco che secondo me nell'altro modo non poteva funzionare.. nel senso di poter accendere da spento, spegnere da acceso, e non accendere in caso di power loss partendo da spento (quest'ultima in particolare se usi un pulsante non la puoi avere sicuramente).. e infatti era figlio di una semplice svista, non certo di una gran pensata!
![]()
PDOR ha scritto: ↑06/02/2017, 17:05 A me fa molto piacere che la cosa sia interessante per molti!
Io ho un RaspBerry pi Zero con installato Retropie, non ho collegato un PC, ma "lavoro" da tastiera...
Porta pazienza ma mi sono perso...
Quindi digito F4 poi scrivo "sudo switchoff.sh",
poi premo enter e scrivo tutto il codice di cui sopra,
poi premo CTRL+X è dopo Y.
Giusto?
Ok grazie, appena posso posto cosa ho scritto...dR.pRoDiGy ha scritto: ↑06/02/2017, 22:12PDOR ha scritto: ↑06/02/2017, 17:05 A me fa molto piacere che la cosa sia interessante per molti!
Io ho un RaspBerry pi Zero con installato Retropie, non ho collegato un PC, ma "lavoro" da tastiera...
Porta pazienza ma mi sono perso...
Quindi digito F4 poi scrivo "sudo switchoff.sh",
poi premo enter e scrivo tutto il codice di cui sopra,
poi premo CTRL+X è dopo Y.
Giusto?Non per sfiduciarti ma.. anche se ci impegnamo, ho paura che così si vada poco lontano..
Comincia a leggere un pò qui:
comandi linux
è una guida teoricamente per Ubuntu, ma non cambia assolutamente di nulla rispetto a Raspbian (entrambi gli OS sono "figli" dello stesso padre, ovvero Debian Linux).
A parte te, penso che chiunque voglia "pasticciare" un minimo col rasp debba sapere almeno quello che c'è là dentro.
Quando hai imparato qualcosina su come "muoverti" con la riga di comando vedrai che tutto ti verrà più semplice..
Se hai dubbi chiedi, facce sape![]()