Un computer intero in 85 × 56 mm
Se Arduino è un microcontrollore — un singolo chip ottimizzato per eseguire un programma in tempo reale — Raspberry Pi è qualcosa di completamente diverso: un computer completo racchiuso in una scheda delle dimensioni di una carta di credito. Ha un processore multi-core, centinaia di MB di RAM, supporta un sistema operativo Linux, esegue qualsiasi applicazione Python, C, Java o Node.js, e si connette a monitor, tastiera, rete Wi-Fi e dispositivi fisici tramite i pin GPIO.
Raspberry Pi nasce nel 2012 come progetto della Raspberry Pi Foundation, un’organizzazione no-profit britannica, con l’obiettivo di rendere accessibile l’informatica alle scuole. Il prezzo di partenza — 35 dollari — ha aperto un mercato enorme di maker, hobbisti, ricercatori e industria.
SBC vs Microcontrollore — la distinzione fondamentale
Hardware — Raspberry Pi nel dettaglio
Il SoC — System on Chip
Il cuore di Raspberry Pi è il SoC (System on Chip) Broadcom — un singolo chip che integra tutto: CPU multi-core ARM, GPU per grafica e calcolo, memoria RAM e controller per le interfacce. A differenza dell’ATmega328P di Arduino (8 bit, 16 MHz), il SoC di un Raspberry Pi 4 ha 4 core ARM Cortex-A72 a 1,5 GHz — paragonabile a un laptop low-end.
I GPIO — 40 pin programmabili
Il GPIO (General Purpose Input/Output) è l’interfaccia fisica di Raspberry Pi con il mondo esterno. Il connettore da 40 pin include tensioni di alimentazione, massa e pin digitali programmabili. A differenza di Arduino, tutti i pin GPIO operano a 3.3V — non 5V. Collegare un segnale a 5V ai GPIO può danneggiare permanentemente il SoC.
Se colleghi un segnale a 5V (es. proveniente da Arduino o da un sensore con logica 5V) direttamente a un pin GPIO, rischi di bruciare il chip BCM irrimediabilmente. Usa sempre un divisore di tensione o un level shifter per adattare i livelli logici.
I protocolli di comunicazione seriale
Il limite critico — nessun ADC
A differenza di Arduino (che ha 6 pin analogici con ADC 10 bit), Raspberry Pi ha solo GPIO digitali. Non può leggere direttamente un potenziometro, una fotoresistenza LDR o qualsiasi sensore con uscita analogica.
Programmazione GPIO con Python
Python è il linguaggio standard per programmare Raspberry Pi. La libreria RPi.GPIO (preinstallata in Raspberry Pi OS) permette di leggere e scrivere sui pin GPIO con poche righe di codice. Più moderna e consigliata per i nuovi progetti è gpiozero — un’astrazione di alto livello che semplifica ulteriormente il codice.
Concetti fondamentali — RPi.GPIO
import RPi.GPIO as GPIO # BOARD: numerazione fisica del connettore (pin 1, 2, 3...40) GPIO.setmode(GPIO.BOARD) # BCM: numerazione logica del chip BCM (GPIO17, GPIO27...) # BCM è la più usata nei tutorial — corrisponde alle etichette del pinout GPIO.setmode(GPIO.BCM)
Esempio 1 — LED blink
# Schema: LED → [330Ω] → GPIO18 — Catodo LED → GND # (3.3V max! Usare resistenza da 330Ω, non 220Ω come con Arduino) import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # usa numerazione BCM GPIO.setup(18, GPIO.OUT) # GPIO18 come uscita try: while True: GPIO.output(18, GPIO.HIGH) # LED acceso → 3.3V time.sleep(1) GPIO.output(18, GPIO.LOW) # LED spento → 0V time.sleep(1) except KeyboardInterrupt: pass # Ctrl+C per uscire finally: GPIO.cleanup() # SEMPRE: rilascia i pin alla fine
try/finally con GPIO.cleanup() è fondamentale — resetta i pin in stato sicuro all’uscita del programma, evitando che rimangano in uno stato indefinito.Esempio 2 — Lettura pulsante con pull-up interno
# Pulsante: un terminale → GPIO23, altro → GND # PUD_UP: resistenza di pullup interna → 3.3V quando il pulsante è aperto import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) # LED GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) # pulsante con pullup try: while True: stato = GPIO.input(23) # legge il pin if stato == GPIO.LOW: # LOW = pulsante premuto (pullup) GPIO.output(18, GPIO.HIGH) print("Pulsante premuto — LED acceso") else: GPIO.output(18, GPIO.LOW) time.sleep(0.05) # 50 ms polling except KeyboardInterrupt: pass finally: GPIO.cleanup()
Esempio 3 — Lettura DHT11 (temperatura e umidità)
# Installazione: pip install adafruit-circuitpython-dht # Schema: DHT11 pin dati → GPIO4 (con resistenza 10kΩ pullup a 3.3V) import adafruit_dht import board import time sensore = adafruit_dht.DHT11(board.D4) # sensore su GPIO4 while True: try: temperatura = sensore.temperature umidita = sensore.humidity print(f"Temperatura: {temperatura}°C Umidità: {umidita}%") except RuntimeError as e: # Il DHT11 può fallire una lettura su 10 — è normale print(f"Lettura fallita: {e} — riprovo...") time.sleep(2) # DHT11: max 1 lettura ogni 2 sec
gpiozero — la libreria moderna e semplificata
from gpiozero import LED, Button from signal import pause led = LED(18) button = Button(23) # Associa automaticamente il pulsante al LED button.when_pressed = led.on button.when_released = led.off # Mantieni il programma in esecuzione pause()
Arduino vs Raspberry Pi — come scegliere
Molti progetti professionali usano entrambi: Arduino come front-end per il controllo in tempo reale di sensori e attuatori (lettura analogica, PWM preciso, timing critico), connesso via UART a Raspberry Pi che gestisce il backend (elaborazione complessa, interfaccia web, connessione cloud, machine learning). Arduino fa il lavoro sporco vicino al hardware, Raspberry Pi fa il lavoro intelligente nel software.
- Raspberry Pi è un SBC — ha un OS Linux completo, CPU multi-core, RAM, USB, HDMI, Wi-Fi. Arduino è un microcontrollore — esegue un solo sketch in loop, senza OS, ma con risposta deterministica in microsecondi
- I GPIO operano a 3.3V (non 5V come Arduino). Raspberry Pi non ha ADC — per leggere segnali analogici serve un chip esterno (es. MCP3008 via SPI)
- I protocolli di comunicazione: I²C (2 fili, multi-device, fino a 400 kHz), SPI (4 fili, full-duplex, veloce, un CS per device), UART (2 fili, asincrono, comunicazione seriale punto-punto)
- Programmazione GPIO in Python:
GPIO.setmode(BCM)→GPIO.setup(pin, OUT/IN)→GPIO.output()/GPIO.input()→GPIO.cleanup()nel blocco finally. La libreria gpiozero semplifica ulteriormente il codice - Scegli Arduino per: sensori analogici, timing preciso, basso consumo, semplicità. Scegli Raspberry Pi per: web server, computer vision, machine learning, interfaccia utente. Spesso si usano insieme nello stesso progetto