Come inviare dati in I2C da Yun a Arduino Uno

Buongiorno Forum,

sono uno studente perito-elettronico con qualche carenza in informatica, volevo dunque chiedere se qualcuno può suggerirmi come risolvere il mio problema:

Fornisco alimentazione a Arduino Yun, lo collego alla rete wifi e tramite broswer digito l'indirizzo IP della scheda da cui riesco ad accendere e spegnere un LED. Siccome voglio che un giorno sia un motore a girare, ho pensato (dato il limite di tensione al pin Vin (max 5V) della Yun) di inviare dati attraverso I2C da Arduino Yun impostato come slave sender ad Arduino Uno impostato come Master reader.

Vorrei quindi che se io digito l'indirizzo IP per accendere il led da Yun,Yun a sua volta invii questo tipo di dato attraverso l'istruzione "Wire.write" ad Arduino Uno il quale infine avrà anch'esso il led acceso.

Chiedo scusa se ho fatto un po troppi giri di parole, per cercare di essere un po piu chiaro posto i 2 codici.

Arduino Yun come Slave Sender:

#include <Wire.h>
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>


YunServer server;                //Istanziamento dell'oggetto server

void setup() {
  // Bridge startup
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);
 Wire.begin(2);                
  Wire.onRequest(requestEvent);
 
  
  server.listenOnLocalhost();   //modalità di connessione
  server.begin();               //istruisce il processo Bridge.py ad attivare il socket in ascolto sulla porta 5555
}

void loop() {
 
  YunClient client = server.accept(); //si connette sul server in ascolto sul localhost:5555

  
  if (client) {                       //una richiesta è in cosa sul socket 5555?Se sì
   
    process(client);                  //richiama la funzione per la gestione del messaggio

    
    client.stop();                    //alla fine chiude la connessione e libera le risorse
  }

  delay(50);
  }


void process(YunClient client) {
  // leggi i comandi
  String command = client.readStringUntil('/');

  //è un comando digitale?
  if (command == "digital") {
    digitalCommand(client);
  }
}

void digitalCommand(YunClient client) {
  int pin, value;

  // leggi numero pin
  pin = client.parseInt();

  // Se il prossimo carattere è '/' significa che vi è un URL
  // con valore come: "/digital/13/1"
  if (client.read() == '/') {
    value = client.parseInt();
    digitalWrite(pin, value);
  }
  else {
    value = digitalRead(pin);
  }
  if(value == 1){ //Se value vale 1 invia al Master reader 
    Wire.write(5); //il numero 5
    delay(100);
    }



  // invia feedback al client
  client.print(F("Pin D"));
  client.print(pin);
  client.print(F(" set to "));
  client.println(value);


  String key = "D";
  key += pin;
  Bridge.put(key, String(value));
}

void requestEvent()
{
  Wire.write(2); 
}

Arduino UNO come Master Reader:

#include <Wire.h>

int led=13;
void setup()
{
  pinMode(led,OUTPUT);
  Wire.begin();        
  Serial.begin(9600);  
}

void loop()
{
  Wire.requestFrom(2, 6);    

  while(Wire.available())    
  { 
    char c = Wire.read();      //leggi i valori provenienti dallo slave sender
    Serial.print(c);
    if(c == 5){                //se il valore è 5
      digitalWrite(led,HIGH);  //accendi il led 13
      delay(500);
    
    }
      
    Serial.print(c);        
  }

  delay(500);
}

In attesa di risposte, vi ringrazio anticipatamente. :slight_smile:

Ciao,
prova a vedere se ti può essere utile questa libreria :
EasyTransfer Arduino Library « The Mind of Bill Porter.
dovresti modificare un pochino il codice ma può risultarti utile.