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.

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).

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:

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.

Se carichi ed esegui il codice sopra su un Arduino Uno dovresti vedere il seguente output 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:

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 ; )

