Skip to Content

Trova i pin predefiniti per I2C e SPI

Trova i pin predefiniti per I2C e SPI

In questo tutorial imparerai come trovare i pin di default/hardware per le interfacce I2C e SPI per i microcontrollori supportati dall’Arduino IDE, come Arduino, ESP32 e ESP8266

Molti dispositivi hardware esterni come display o sensori utilizzano il protocollo I2C o SPI per comunicare con il tuo microcontrollore. I2C è un protocollo a due fili che usa i segnali SDA e SCL, mentre SPI è un protocollo a quattro fili con SS, MOSI, MISO, SCK.

I2C and SPI wiring
Collegamento I2C e SPI (source)

Per collegare un dispositivo I2C o SPI al tuo microcontrollore devi sapere quali pin sul microcontrollore sono i pin I2C (SDA, SCL) o pin SPI (SS, MOSI, MISO, SCK).

I2C and SPI pins on Arduino Uno
Pin I2C e SPI su Arduino Uno

Per le schede di sviluppo più comuni, come la maggior parte delle schede Arduino, questi pin sono solitamente ben documentati, facili da trovare o etichettati sulla scheda. Tuttavia, per alcune schede più esotiche, vecchie o clonate, specialmente della famiglia ESP8266 e ESP32, la documentazione spesso manca.

Stampare i pin di default I2C e SPI

Finché riesci a vedere la tua scheda (o una compatibile) nel Board Manager, c’è un modo semplice per stampare i pin di default per le interfacce I2C e SPI. Lo screenshot qui sotto mostra come selezionare Arduino Uno nel Board Manager, e quali altre schede Arduino sono disponibili:

Board Manager in Arduino IDE
Board Manager nell’Arduino IDE

Una volta selezionata la tua scheda puoi eseguire il codice seguente. Utilizza le costanti per quei pin definite per tutte o la maggior parte delle schede di sviluppo per print them to the Serial Monitor.

void print(const char* name, int pin) {
  Serial.print(name);
  Serial.println(pin);
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  print("LED:  ", LED_BUILTIN);

  print("SDA:  ", SDA);
  print("SCL:  ", SCL);

  print("SS:   ", SS);
  print("MOSI: ", MOSI);
  print("MISO: ", MISO);
  print("SCK:  ", SCK);

  delay(5000);
}

Assicurati solo di impostare la corretta velocità di trasmissione (baud rate) per il Serial Monitor. Può variare a seconda della scheda selezionata. Altre velocità diverse da 9600 vanno bene, ma la velocità nel codice (Serial.begin()) e nel Serial Monitor devono corrispondere, altrimenti vedrai caratteri incomprensibili.

Set baud rate for Serial Monitor
Imposta la velocità di trasmissione (9600) per il Serial Monitor

Se carichi ed esegui il codice sopra su un Arduino Uno dovresti vedere il seguente output nel Serial Monitor:

I2C and SPI default pins printed to Serial Monitor
Pin di default I2C e SPI stampati nel Serial Monitor

Puoi trovare le definizioni dei pin nel file pins_arduino.h per gli Arduino standard. Per varianti come Mega, Leonardo e altre, guarda nella sottocartella variants.

I2C e SPI per ESP32 e ESP8266

Il codice sopra funziona allo stesso modo per la maggior parte delle schede ESP32 o ESP8266, ma devi aver prima installato il core ESP32 o ESP8266. Dai un’occhiata al nostro tutorial su How to Program ESP32 with Arduino ID, se hai problemi con l’installazione del core ESP32.

L’installazione del core ESP8266 funziona allo stesso modo. Ma se hai bisogno di aiuto, dai un’occhiata al tutorial Game of Life on a Dot Matrix Display with MAX7219, dove spiego in dettaglio come installare il core ESP8266.

Per ogni tipo di scheda ci saranno definizioni di pin diverse nel file pins_arduino.h. I diversi tipi di schede sono organizzati in una sottocartella chiamata “variants“. Vedi ESP32 board variants e il ESP8266 board variants. Lo screenshot qui sotto mostra la struttura delle cartelle con la cartella variants per le schede ESP32:

GitHub Repo with ESP32 variants
Repository GitHub con varianti ESP32 (source)

Ognuna delle sottocartelle specifiche per scheda avrà un file pins_arduino.h. Per esempio, qui c’è il file pins_arduino.h per l’ESP32 standard e qui il file pins_arduino.h per la WEMOS LOLIN32 lite – una scheda che uso spesso.

Nota che queste sono le definizioni di pin di default e per la maggior parte delle schede ESP32 e ESP8266 puoi cambiare quali pin usare per I2C e SPI. Inoltre, a seconda della scheda, alcune definizioni potrebbero mancare e altre potrebbero essere aggiuntive, ad esempio A0, A1, … per ingressi analogici o TX e RX per l’interfaccia seriale.

Conclusioni

Spero che questo piccolo pezzo di codice ti sia utile e se hai domande non esitare a chiedere.

Buon divertimento con il tinkering ; )