Nota
Ciao, benvenuto nella Comunità di Appassionati di SunFounder per Raspberry Pi, Arduino & ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Why Join?
Expert Support: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Learn & Share: Scambia consigli e tutorial per potenziare le tue competenze.
Exclusive Previews: Accedi in anteprima agli annunci di nuovi prodotti e anteprime esclusive.
Special Discounts: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Festive Promotions and Giveaways: Partecipa a giveaway e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca [qui] e unisciti oggi!
Lezione 17: Modulo Encoder Rotativo
In questa lezione, imparerai come collegare e programmare un encoder rotativo con un Raspberry Pi. Ti forniremo istruzioni passo dopo passo su come scrivere uno script Python che monitora la posizione dell’encoder e lo stato del pulsante, con risultati visualizzati nella console.
Componenti Necessari
Per questo progetto, abbiamo bisogno dei seguenti componenti.
È decisamente conveniente acquistare un kit completo, ecco il link:
Nome |
ARTICOLI IN QUESTO KIT |
LINK |
---|---|---|
Kit Sensori Universale per Makers |
94 |
Puoi anche acquistarli separatamente dai link qui sotto:
Introduzione al Componente |
Link Acquisto |
---|---|
Raspberry Pi 5 |
|
- |
|
Cablaggio

Codice
from gpiozero import RotaryEncoder, Button
from time import sleep
# Inizializza l'encoder rotativo sui pin GPIO 17 (CLK) e 27 (DT) con wrap-around al massimo di 16 passi
encoder = RotaryEncoder(a=17, b=27, wrap=True, max_steps=16)
# Inizializza il pin SW dell'encoder rotativo sul pin GPIO 22
button = Button(22)
last_rotary_value = 0 # Variabile per memorizzare l'ultimo valore dell'encoder rotativo
try:
while True: # Ciclo infinito per monitorare continuamente l'encoder
current_rotary_value = encoder.steps # Leggi il conteggio dei passi corrente dall'encoder rotativo
# Controlla se il valore dell'encoder rotativo è cambiato
if last_rotary_value != current_rotary_value:
print("Result =", current_rotary_value) # Stampa il valore corrente
last_rotary_value = current_rotary_value # Aggiorna l'ultimo valore
# Controlla se l'encoder rotativo è premuto
if button.is_pressed:
print("Button pressed!") # Stampa un messaggio alla pressione del pulsante
button.wait_for_release() # Attendi fino al rilascio del pulsante
sleep(0.1) # Breve pausa per prevenire un uso eccessivo della CPU
except KeyboardInterrupt:
print("Program terminated") # Stampa un messaggio quando il programma è terminato tramite interruzione da tastiera
Analisi del Codice
Importazione delle Librerie
Lo script inizia importando le classi
RotaryEncoder
eButton
dalla libreria gpiozero per l’interfacciamento con l’encoder rotativo, rispettivamente, e la funzionesleep
dal modulo time per aggiungere ritardi.from gpiozero import RotaryEncoder, Button from time import sleep
Inizializzazione dell’Encoder Rotativo e del Pulsante
Questa linea inizializza un oggetto
RotaryEncoder
dalla libreriagpiozero
. L’encoder è collegato ai pin GPIO 17 e 27.Il parametro
wrap=True
significa che il valore dell’encoder si azzera dopo aver raggiuntomax_steps
(16 in questo caso), simulando il comportamento di un quadrante circolare.Qui, un oggetto
Button
è creato, collegato al pin GPIO 22. Questo oggetto sarà utilizzato per rilevare quando l’encoder rotativo è premuto.
encoder = RotaryEncoder(a=17, b=27, wrap=True, max_steps=16) button = Button(22)
Implementazione del Ciclo di Monitoraggio
Un ciclo infinito (
while True:
) è utilizzato per monitorare continuamente l’encoder rotativo.Il valore corrente dell’encoder rotativo è letto e confrontato con il suo ultimo valore registrato. Se c’è una modifica, il nuovo valore viene stampato.
Lo script verifica se l’encoder rotativo è premuto. Alla rilevazione di una pressione, stampa un messaggio e attende fino al rilascio dell’encoder rotativo.
Un
sleep(0.1)
è incluso per aggiungere un breve ritardo, prevenendo un eccessivo utilizzo della CPU.
last_rotary_value = 0 try: while True: current_rotary_value = encoder.steps if last_rotary_value != current_rotary_value: print("Result =", current_rotary_value) last_rotary_value = current_rotary_value if button.is_pressed: print("Button pressed!") button.wait_for_release() sleep(0.1) except KeyboardInterrupt: print("Program terminated")