Arduino MKRFOX 1200 in comunicazione con Arduino Nano

Ciao,
sto cercando una soluzione per far comunicazione un Arduino Nano (Master) con un Arduino MKRFOX1200 (Slave).
Ho cercato soluzioni su Google ma non ho trovato alcun suggerimento utile.
Potete suggerirmi qualche soluzioni?

Grazie mille,

rodbs

ciao :slight_smile:

dovresti spiegarti meglio... :slight_smile:
nel dubbio ti direi di farli comunicare in sariale :slight_smile:

MD

>rodsbs: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) ...

Ora, tu stai parlando di qualche cosa che è molto simile QUI, anche se, al momento, non posso ancora definirlo cross-posting.

Attenzione però ... io tengo d'occhio i due thread e se vedo che l'argomento diventa lo stesso, questo (che hai aperto dopo) deve venire chiuso. :confused:

Guglielmo

MatteoDerrico:
ciao :slight_smile:

dovresti spiegarti meglio... :slight_smile:
nel dubbio ti direi di farli comunicare in sariale :slight_smile:

MD

Buonasera Matteo,
praticamente ho un Arduino Nano che legge da un sensore e deve successivamente inviare questa lettura all'Arduino MKRFox1200, così da poterla inviare a Sigfox.

Come giustamente mi hai suggerito tu, sto provando ad implementare la comunicazione seriale tra i due dispositivi ma sto incontrando difficoltà perché l'Arduino MKRFox1200 sembra non ricevere alcun dato. Hai qualche suggerimento implementativo?

gpb01:
>rodsbs: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) ...

Ora, tu stai parlando di qualche cosa che è molto simile QUI, anche se, al momento, non posso ancora definirlo cross-posting.

Attenzione però ... io tengo d'occhio i due thread e se vedo che l'argomento diventa lo stesso, questo (che hai aperto dopo) deve venire chiuso. :confused:

Guglielmo

Buonasera,
mi scuso per l'errore. La prossima volta starò sicuramente più attento!

Se possibile, chiudiamo pure quello in inglese dove non ho ricevuto alcuna risposta.

rodsbs

rodsbs:
Come giustamente mi hai suggerito tu, sto provando ad implementare la comunicazione seriale tra i due dispositivi ma sto incontrando difficoltà perché l'Arduino MKRFox1200 sembra non ricevere alcun dato. Hai qualche suggerimento implementativo?

Beh, qualche info in più ? Come li hai collegati ? Arduino Nano a 5V ? Ma la MKRFxo1200 è a 3.3V

rodsbs:
Se possibile, chiudiamo pure quello in inglese dove non ho ricevuto alcuna risposta.

L'ho direttamente eliminato, così evitiamo inutili thread :wink:

Guglielmo

ciao :slight_smile:

se riesci a mandarci lo schema di collegamento tra i due Arduino e gli sketch che hai caricato ci aiuteresti :slight_smile:

PS ricorda di usare il tasto CODE per allegare i programmi :slight_smile:
MD

nid69ita:
Beh, qualche info in più ? Come li hai collegati ? Arduino Nano a 5V ? Ma la MKRFxo1200 è a 3.3V

Buongiorno, alla luce della sua osservazione abbiamo deciso di non seguire questa strada perché non abbiamo lo spazio necessario per aggiungere la shield di commutazione dei livelli.

Da specifiche, però, ho letto che Arduino MKRFOX1200 dispone della comunicazione I2C (pin 11 SDA e pin 12 SCL); ho letto altresì che Arduino Nano dispone della comunicazione I2C (pin A4 e pin A5).
Prima di scrivere codice ed effettuare collegamenti tra le due schede, ritenete implementabile questo tipo di comunicazione tra le due schede?

Grazie per il supporto e scusate per l'ignoranza,

rodsbs

rodsbs:
Prima di scrivere codice ed effettuare collegamenti tra le due schede, ritenete implementabile questo tipo di comunicazione tra le due schede?

Probabilmnete SI ...
... il bus I2C è di tipo "open-drain" (equivalente dell'"open-collector con i BJT) e quindi il livello HIGH va "mantenuto" con delle resistenze di pull-up.

Collegando dette resistenze al +3.3V si ha un livello HIGH conforme alla tensione di alimentazione del MKR e che comunque dovrebbe venire letto come HIGH anche dalla Nano (... se alimentata a 5V il minimo del livello HIGH è, da datasheet, 3V).

Guglielmo

Buongiorno,
a seguito del suggerimento datomi da Guglielmo allego lo schema.

L’Arduino MKRFOX1200 è il Master, di conseguenza l’Arduino Nano è lo Slave; all’Arduino Nano è collegato un Sensore SRF01.

La mia idea di collegamento è corretta?

Grazie ancora,
rodsbs

NO, le resistenze di pull-up, come ti ho indicato, devono andare verso il 3.3V e NON, come mi sembra di vedere, verso i 5V !

Inoltre il GND del MKR e quello della Nano DEVONO essere messi in comune (collegati tra loro).

Guglielmo

Buongiorno, ha ragione: dalla fretta non ho seguito il suo consiglio e ho collegato tutto a 5V. In allegato può trovare lo schema corretto, credo possa funzionare!

Devo, successivamente, alimentare entrambe le schede a batteria: se collego i 5V insieme e alimento il tutto con 4 batterie AA (per un totale, quindi, di 6V), riesco nel mio intento?

rodsbs

6V è un brutto valore ...
... NON è 5V e quindi NON lo puoi attaccare all'ingresso 5V, ma non è neanche 7V che è il minimo normalmente richiesto in ingresso al regolatore di tensione della Nano (se guardi le specifiche tecniche della Nano trovi: "Input Voltage 7-12V").

Mettine 5 ed arrivi ai 7.5V che va bene per l'ingresso Vin (quello che va al regolatore). Non ho comunque idea della durata di quelle batterie ... ::slight_smile:

Guglielmo

gpb01:
Mettine 5 ed arrivi ai 7.5V che va bene per l'ingresso Vin (quello che va al regolatore). Non ho comunque idea della durata di quelle batterie ... ::slight_smile:

Purtroppo 5 batterie occupano troppo spazio. Le alternative, secondo me, sono due:
1 5 batterie AAA
2 1 batteria da 9V

Lei cosa mi consiglia, a questo punto?

Grazie ancora, rodsbs

Fai una cosa, quando hai assemblato il tutto, alimenta con un alimentatore esterno a 5V e misura con un tester l'assorbimento ... senza sapere quant'è l'assorbimento medio è difficile dare un consiglio ::slight_smile:

Guglielmo

Grazie
Il problema è una questione di consumo della batteria? nel senso che la 9V potrebbe durare molto meno delle AA? oppure una questione che con la 9V non funzionerebbe?

le spiego... abbiamo necessità di realizzare un prototipo. La questione alimentazione potremmo analizzarla poi, modificando il contenitore che ora è troppo piccolo ma che non abbiamo tempo di sostituire.

Se la 9V funziona e dura meno delle 5 AA, pazienza.

nuovamente Grazie

Si, il problema era solo di “durata” delle batterie, ma se è solo per fare una breve dimostrazione … ce la dovreste fare :wink:

Guglielmo

Buonasera, sono riuscito a far comunicare tramite I2C i due Arduino seguendo lo schema postato nei commenti sopra! Allego il codice, per chiarezza

I2C_Slave: codice caricato sull’Arduino Nano

#include <Wire.h>

#define SCL_PIN A5 // Corrisponde ad A5
#define SDA_PIN A4 // Corrisponde ad A4
#define ADDRESS 8

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT); // Abilito il LED installato sulla scheda, così ogni volta che faccio requestEvent() si esegue

  pinMode(SCL_PIN, INPUT);
  pinMode(SDA_PIN, INPUT);
  Wire.begin(ADDRESS);
  Wire.onRequest(requestEvent); // esegue la funzione quando ha una richiesta

  digitalWrite(LED_BUILTIN, LOW); // Spengo il LED installato sulla scheda
}

void loop()
{
  delay(100);
}

void requestEvent()
{
  digitalWrite(LED_BUILTIN, HIGH);
  Wire.write('a'); // Invio il char 'a'
  digitalWrite(LED_BUILTIN, LOW);
}

I2C_Master: codice caricato sull’Arduino MKRFOX1200

#include <Wire.h>

#define SCL_PIN 12
#define SDA_PIN 11
#define ADDRESS 8

void setup()
{
  pinMode (LED_BUILTIN, OUTPUT); // // Abilito il LED installato sulla scheda
    
  Wire.begin(); // Avvia il bus I2C, indirizzo opzionale per il master
  
  digitalWrite(LED_BUILTIN, LOW); // Spengo il LED installato sulla scheda
  Serial.begin(9600);
  Serial.println("Sono pronto");
}

void loop()
{
  Wire.requestFrom(ADDRESS, 1); // Inviando solo il carattere a, richiedo 1 byte all'indirizzo ADDRESS (che è lo stesso dell'I2C_SLAVE.ino)
  
  while (Wire.available()) {
    char c = Wire.read(); // leggi il byte ricevuto
    if (c == 'a') {
      digitalWrite(LED_BUILTIN, HIGH); // Dato che ho ricevuto a, cioè ciò che mi aspetto, accendo il LED_BUILTIN
      delay(3000);
      Serial.print("Ho ricevuto: ");
      Serial.println(c);
    }
    digitalWrite(LED_BUILTIN, LOW); // Spengo il LED
  }
  
  delay(500);
}

Ringrazio tutti gli utenti che hanno letto e/o risposto al mio post,

rodsbs