I2C, non parte / problema di comunicazione arduino mega-esp8266

Salve a tutti, ho da poco iniziato con l'i2c per un progetto, ho bisogno di una scheda che effettua delle funzioni comandate dall'altra schega con collegamento wifi. (e quindi via smartphone)
Ho diversi tipi di arduno, nessuno è originale, il primo è un Mega2560 mentre il secondo è un WeMos D1 R2 (con schega wifi esp8266)

Sono riuscito a far partire delle funzioni dal mega, sono riuscito ad avviare il collegamento wifi dal wemos, ma quando vado a collegare sda/scl i due non si "rilevano" ho provato con uno sketch per rilevare gli "ip" collegati all'i2c, per sicuretta ho collegato pure un lcd che usa l'i2c, mi rilascia quindi l'ip dell'lcd, ma dell'altro "arduino" nemmeno l'ombra!
Ho letto che l'i2c del mega lavora a 5v, mentre quello del wemos lavora a 3,3v, quindi ho riprovato con un altro arduino uno compatibile (sempre china) questa volta 5v.
Nessun ip rilasciato neppure con quest'altra scheda, ho collegato i gnd delle schede anche se comunque sono collegati via pc(usb).
Consigli?

1 Like

nessun aiuto?

Non è che si capisca molto di quanto hai scritto ...
... comunque, hai configurato un Arduino come I2C MASTER e l'altro come I2C SLAVE ? Altrimenti difficilmente si parlano tra di loro eh !

Guglielmo

gpb01:
Non è che si capisca molto di quanto hai scritto ...
... comunque, hai configurato un Arduino come I2C MASTER e l'altro come I2C SLAVE ? Altrimenti difficilmente si parlano tra di loro eh !

Guglielmo

allego lo sketch, nulla di complesso, solo per provare la funzionalità ho eseguito questi due codici(poi quando funziona il tutto vado avanti con l'esecuzione di codici complessi), nel monitor seriale spunta solo la scritta "l'altro arduino ha scritto: ", mentre dovrebbe essere accompagnata dal "ciao" del 2° arduino

//MASTER

#include <Wire.h>

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

void loop()
{
  Wire.requestFrom(3,4);
  Serial.print("l'altro arduino ha scritto: ");
  while(Wire.available())
  {
    char a = Wire.read();
    Serial.print(a);
  }
  Serial.println();
  delay(1000);
}
//SLAVE

#include <Wire.h>

void setup()
{
  Wire.begin(3);
  Wire.onRequest(manda);
}

void loop()
{
  delay(100);
}

void manda()
{
  Wire.write("ciao");
}

la parte hardware è molto semplice, i due collegati sullo stesso pc (per il gnd in comune) e ovviamente sda1 con sda2 e scl1 con scl2 (sda1 scl1 scheda 1, sda2 scl2 scheda 2)

addirittura il topic era scomparso dalla prima pagina...

Controlla i collegamenti, perchè deve funzionare

Con quali schede stai provando ?

Non ci vorrebbero le resistenze di pull-up? O la libreria Wire attiva quelle interne?

La Wire attiva la PullUp interna e a meno che non abbia usato un metro di cavo, deve funzionare, oltretutto sono gli sketch di esempio allegati alla libreria

Brunello:
Controlla i collegamenti, perchè deve funzionare

Con quali schede stai provando ?

WeMos D1 R2

per il progetto che devo fare non ha pin a sufficienza, quindi pensavo di collegarla con l'i2c per effettuare solo il collegamento wifi quindi gestire l'altro arduino(mega) da remoto.
Prima di fare il tutto volevo iniziare a capire perchè le schede non si "vedono" ho provato quindi 2 wemos ma nulla, ho provato con resistenze pullup ma nulla, ho fatto un piccolo scambio di schede (avendo 4 wemos) ma nulla, tutto uguale, rileva solamente l'eventuale lcd collegato all'i2c (con uno sketch scanner i2c)

Ma caricarci un firmware AT, collegarla in seriale e usare la libreria WiFiEsp, non puoi?

SukkoPera:
Ma caricarci un firmware AT, collegarla in seriale e usare la libreria WiFiEsp, non puoi?

Scusa l'ignoranza, ma in termini più comuni cosa dovrei fare? :o

Ho trovato questo topic.. è possibile che non si può utulizzare l'i2c?
https://forum.arduino.cc/index.php?topic=346064.0
però i contatti sda scl sono presenti

I problemi ci sono se usi la Wemos come Slave

Quindi per funzionare dovresti:
La Mega2560 impostata come Slave Receiver
La Wemos impostata come Master Sender

Gli esempi li trovi nella libreria Wire ( Master_writer , Slave_receiver )

Brunello:
I problemi ci sono se usi la Wemos come Slave

Quindi per funzionare dovresti:
La Mega2560 impostata come Slave Receiver
La Wemos impostata come Master Sender

Gli esempi li trovi nella libreria Wire ( Master_writer , Slave_receiver )

Il problema è che non comunicano nemmeno frà i due wemos stessi, per iniziare a "sperimentare" ho provato l'i2c frà 2 soli wemos d1 r2 uguali, ho provato vari sketch trovati in giro per la rete. (ovviamente master e slave) Nessun risultato sono riuscito ad ottenere, per favore non ho tanto tempo ormai per terminare il progetto

Il problema è che non comunicano nemmeno frà i due wemos stessi,............

Se ti ho appena detto che non funziona la I2C in modalità slave sulla Wemos............

Quindi, o usi La Mega2560 ( come slave ) e una Wemos ( come master ) oppure usi qualche altro modo di comunicare, ad esempio la seriale

Brunello:
Se ti ho appena detto che non funziona la I2C in modalità slave sulla Wemos............

Quindi, o usi La Mega2560 ( come slave ) e una Wemos ( come master ) oppure usi qualche altro modo di comunicare, ad esempio la seriale

Scusa, non avevo capito
Quindi, provo con il wemos master e un arduino (GeekCreit) come slave, però è un problema la tensione del wemos?
Il wemos offre 3.3v, mentre il geekcreit come un arduino normale, 5v. (non so se per sda/scl la tensione sia poi uguale)

Infatti tra i due và inserito un adattatore di livello logico, ma essendo la I2C bidirezionale non puoi ad esempio usare una partitore resistivo.
Ci vuole qualcosa di simile link

Brunello:
Infatti tra i due và inserito un adattatore di livello logico, ma essendo la I2C bidirezionale non puoi ad esempio usare una partitore resistivo.
Ci vuole qualcosa di simile link

Ottimo!
Ne ordino subito uno.

Poi basta metterlo frà un arduino e l'altro utilizzando un solo canale no?

Si, così

Scusate la domanda, ma perché usare la WeMos D1 (che sto usando anche io, anche se la R1), che NON è uno shield, e non un normale ESP82660 da collegare al Mega via I2C? L'interfaccia I2C della D1 è, come hanno correttamente accennato, utilizzabile solo come "master" I2C per cui per far parlare un ESP8266 con Mega io accantonerei la D1 in favore di una schedina ESP82660 "classica" quindi con Mega Master e schedina Slave. Fermo restando il problema dei livelli...