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