La breve risposta
No, tu (quasi) non lo fai. In realtà è il contrario: devi impostarli non per essere GPIO ma per servire al loro scopo speciale. L'unica eccezione sono i pin UART. Anche i pin I²C sono in qualche modo speciali.
Pin UART
I pin UART sono usati dal kernel per la console. Dovrai configurare il sistema in modo che non li usi se vuoi che siano disponibili per il tuo utilizzo:
- modifica
/boot/cmdline.txt
e rimuovi console=ttyAMA0,115200
e kgdboc=ttyAMA0,115200
parametri
modifica /etc/inittab
e commenta (metti il #
carattere davanti) la riga:
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
riavvia il tuo RaspberryPi
Ora i pin non dovrebbero essere usati dal sistema e puoi usarli
Pin I²C
I pin I²C dispongono di resistori pull-up 1.8k integrati. Non possono essere disabilitati. Ciò limita l'utilizzo di tali pin in alcune situazioni (ma può essere utile in altre).
Soluzioni aggiuntive
Se i pin GPIO sono in esaurimento, a volte puoi facilmente estenderne il numero utilizzando hardware aggiuntivo (ma semplice). Ad esempio, per l'output, è possibile utilizzare shift registers
o I²C I/O expanders
(chiamato anche `espansori bus I²C), sia facilmente acquistabili che utilizzabili. Puoi trovare un esempio del suo utilizzo qui .
PFC8574
(o simili di questa famiglia) sono così popolari che esiste un modulo kernel pronto all'uso che gestisce tutte le comunicazioni per te ( non è abilitato nel kernel ufficiale RaspberryPi, dovrai utilizzarlo per compilarlo ). Il modulo viene chiamato gpio_pcf857x
, a condizione che sia stato caricato con modprobe
(insieme ai driver I²C) e che il chip sia collegato al I²C
bus, è possibile attivarlo in questo modo:
echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device
dove si pcf8574
trova il nome del tuo chip (questo modulo può gestire alcuni chip diversi come pca967x
e max732x
) ed 0x27
è il suo indirizzo I²C
(puoi configurare l'indirizzo del chip quando lo colleghi).
Ciò creerà voci nella /sys/class/gpio/
directory che ti consentiranno di usarle allo stesso modo delle altre porte GPIO in RaspberryPi, a condizione che tu stia utilizzando l' sys
interfaccia (ad esempio wiringPiSetupSys()
in cablaggioPi). Sfortunatamente, il RPi.GPIO
modulo di Python non supporta questa modalità, quindi non sarà in grado di usare questi pin con questa libreria. I pin avranno numeri alti come 248-255 o simili.
Nota: PCF8574
è sinking current
- può fornire un sink di unità (accetta in stato basso) fino a 20 mA, ma può generare solo 0,1 mA in stato alto. Ciò significa che di solito lo userai in logica inversa, cioè +3.3V -> LED -> RESISTOR -> PCF8574_PIN
.