# Problema di comunicazione I2C

**URL:** <https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613>\
**Category:** Software\
**Created:** [August 6, 2025, 2:20pm UTC](https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613 "2025-08-06T14:20:09Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![saverio\_manganaro](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/saverio_manganaro/32/925913_2.png) [@saverio\_manganaro](https://forum.arduino.cc/u/saverio_manganaro)\
**Post date:** [August 6, 2025, 2:20pm UTC](https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613/1 "2025-08-06T14:20:09Z")

</div>

Scusate innanzitutto il disturbo, ma ho un problema con una comunicazione I2C che mi blocca da un paio di settimane; qui di seguito la spiegazione e un estratto dei software.  
Ho un sistema di controllo basato su un Arduino UNO 3 e un paio di Arduino NANO collegati tra di loro con una linea I2C . Considerando le distanze tra i 3 componenti (circa 100cm tra il Master ed i due slave) ho utilizzato dei qwiicBus della Sparkfun e cavo cat.6.  
L’Arduino UNO (in funzione di master) trasmette un codice numerico ai due Arduini NANO , quali eseguono delle elaborazioni e rimandano al master due codici in base all’elaborazione eseguita. Qui di seguito un estratto degli sketch relativi:  
Istruzioni sul MASTER per trasmettere ai NANO  
Trasmissione “Codice” (definito intero) al NANO 1 (indirizzo 72)

```arduino
Wire.beginTransmission(72);
        Wire.write (Codice);
        Wire.endTransmission(72);
        delay (500);

```

Trasmissione “Codice” (definito intero) al NANO 2 (indirizzo 81)

```arduino
Wire.beginTransmission(81);      
        Wire.write (Codice);
        Wire.endTransmission(81);
        delay (5000);

```

Istruzioni sul MASTER per ricevere dai NANO  
Ricezione dal NANO 1 di un byte “knt”

```arduino
 Wire.requestFrom(72, 2);
        while (Wire.available()) {
         knt = Wire.read();
         }

```

Ricezione dal NANO 2 di un byte “knt1”

```arduino
Wire.requestFrom(81,2);
        while (Wire.available()) {
         knt1 = Wire.read();
        }

```

Istruzioni sui NANO per trasmettere al MASTER  
Sul NANO 1 le istruzioni sono:  
Nel setup

```arduino
Wire.onReceive(controllo); //Fnz che riceve il “Codice” dal master e lo passa al LOOP che lo elabora 
Wire.onRequest(confermo);

```

quindi:

```arduino
int controllo () {                                       
  while (Wire.available()) {
    Codice = Wire.read();
  }
   return Codice;
}

```

```arduino
void confermo() { // Fnz che scrive su richiesta del master, il codice di controllo knt elaborato nel LOOP;                                        	
  while (Wire.available()) {
    Wire.write(knt);
  }
  Serial.print ("Ho inviato codice di controllo knt: ");
  prt (knt);
  Serial.println();

```

* * *

Sul NANO 2 le istruzioni sono:  
Nel setup

```arduino
Wire.onReceive(ricevo_codice); //Fnz che riceve il codice itinerario e lo passa al LOOP
Wire.onRequest(confermo);

```

quindi:

```arduino
int ricevo_codice () {                                       
  while (Wire.available()) {
    Codice = Wire.read();
  }
   return Codice;
}

```

* * *

```arduino
void confermo() { //Funzione che scrive su richiesta del master,
                    il codice di controllo knt elaborato nel LOOP;
  while (Wire.available()) {
    Wire.write(knt1);
  }
  Serial.print ("Ho inviato codice di controllo knt1: ");
  prt (knt1);
  Serial.println();
}

```

Risultati:  
Il sistema funzione perfettamente con il NANO 1 dal momento che il MASTER riceve esattamente il “knt” inviato dal NANO (controllo con la stampa bit x bit) sia monitorando il NANO sia monitorando il MASTER, con il NANO 2 il MASTER riceve sempre un codice knt1=11111111, mentre il NANO ha inviato un knt1 diverso e corretto con l’elaborazione del suo LOOP.  
Scusate la lunghezza, ma ho cercato di condensarlo al massimo. Grazie in anticipo per il vs aiuto.

---

<div class="post-metadata">

**Author:** ![gpb01](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gpb01/32/830685_2.png) [@gpb01](https://forum.arduino.cc/u/gpb01)\
**Post date:** [August 6, 2025, 2:38pm UTC](https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613/2 "2025-08-06T14:38:49Z")

</div>

Mmmm ... la libreria Wire, per molti dei suoi metodi, ritorna un codice di errore ma io non vedo alcun controllo di tale codice da parte tua ... magari aiuterebbe 🙄

Guglielmo

---

<div class="post-metadata">

**Author:** ![saverio\_manganaro](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/saverio_manganaro/32/925913_2.png) [@saverio\_manganaro](https://forum.arduino.cc/u/saverio_manganaro)\
**Post date:** [August 7, 2025, 5:00pm UTC](https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613/3 "2025-08-07T17:00:39Z")

</div>

Purtroppo non sono molto pratico con questi controlli; dove posso trovare materiale per aggiornamento? Grazie in anticipo

---

<div class="post-metadata">

**Author:** ![gpb01](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gpb01/32/830685_2.png) [@gpb01](https://forum.arduino.cc/u/gpb01)\
**Post date:** [August 7, 2025, 5:12pm UTC](https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613/4 "2025-08-07T17:12:06Z")

</div>

Nel [reference della libreria Wire](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) … per ogni singolo metodo è riportato come si usa e se ritorna o meno un codice di errore 🙂

Guglielmo

---

<div class="post-metadata">

**Author:** ![saverio\_manganaro](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/saverio_manganaro/32/925913_2.png) [@saverio\_manganaro](https://forum.arduino.cc/u/saverio_manganaro)\
**Post date:** [August 10, 2025, 5:55am UTC](https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613/5 "2025-08-10T05:55:22Z")

</div>

Problema risolto: era dovuto ad un’impostazione errata sul numero di byte trasmessi. Ho utilizzato i codici di errore come da suggerimento e, finalmente, ho individuato l’errore. Grazie

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [February 6, 2026, 5:55am UTC](https://forum.arduino.cc/t/problema-di-comunicazione-i2c/1400613/6 "2026-02-06T05:55:42Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
