Go Down

Topic: Problema modulo nrf24l01 (Read 534 times) previous topic - next topic

zioCri

Salve a tutti!
Ho un problema con la comunicazione wireless tramite il modulo NRF24L01. Sto cercando di far comunicare due Arduino (un nano e un mega) fra di loro e fin tanto che utilizzo codici di base (come questo) tutto funziona alla perfezione. Poi però come vado ad ampliare il progetto, non riesco a farli comunicare.
Ad esempio sull'arduino che trasmette se aggiungo il codice per la lettura della corrente non invia più nulla. Ho scoperto che commentando una parte di codice, la comunicazione si interrompe dopo un minuto circa. Ad esempio così:
Code: [Select]
// Calculate Irms only
  double correnteIN /*= emon2.calcIrms(1480)*/; 
  double correnteOUT /*= emon1.calcIrms(1480)*/;


Qualcuno sa cosa possa fare? Credo che il problema sia prettamente software ma non escludo nulla.
Grazie per l'aiuto!

Standardoil

È meglio se ci mostri tutto il codice
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

Standardoil

Mi sembra di capire, dalla sequenza dei tuoi post (se posso mi informo sempre) che stai tentando di leggere la produzione del solare fotovoltaico, e se hai margine accendere il clima. Sbaglio?
Perché sarebbe il mio prossimo progetto....
Ci sei riuscito a leggere produzione e consumo? E a accendere il clima da Arduino?
È difficile? Cosa hai usato?
Scusa domande, ma facciamo a scambio, io aiuto te sul tuo problema, tu mi indichi la retta via....
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

zioCri

#3
Feb 12, 2019, 05:43 pm Last Edit: Feb 12, 2019, 05:45 pm by zioCri
Questo è il codice base che ho utilizzato e funziona perfettamente, infatti l'ho utilizzato per farmi un'idea della copertura sulla casa del segnale

Code: [Select]
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN   9
#define CSN_PIN 10
const uint64_t pipe = 0x7878787878LL; // Definisce il canale di trasmissione
RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione
int datatosend[1]={};
void setup() 
{
  radio.begin();
  radio.openWritingPipe(pipe);
}
void loop() 
{
  radio.write (datatosend, sizeof(datatosend)) ;
}


Mentre quello non funzionante è questo:

Code: [Select]
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "EmonLib.h"        // Include Emon Library

#define CE_PIN   9
#define CSN_PIN 10
#define output A1      // output pin per rilevatore corrente
#define input A2        // input pin

const uint64_t pipe = 0x7878787878LL; // Definisce il canale di trasmissione
RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione

// Create an instance
EnergyMonitor emon1;
EnergyMonitor emon2;

int datatosend[1]={};

void setup() 
{
  // lettura della corrente in entrata e uscita ----------------------------------------------------------------------------------------------
  emon1.current(output, 36.69);             // Current: output pin, calibration.
  // calibration = valoreReale/valoreLetto*calibration (precedente)
  emon2.current(input, 36.69);              // input

  radio.begin();
  radio.openWritingPipe(pipe);
}

void loop() 
{
  // Calculate Irms only
  // commentando la trasmissione funziona per qualche minuto
  double correnteIN /*= emon2.calcIrms(1480)*/; 
  double correnteOUT /*= emon1.calcIrms(1480)*/;

  Serial.print("IN ");
  Serial.print(correnteIN);
  Serial.print("  OUT  ");
  Serial.println(correnteOUT);

 
  radio.write (datatosend, sizeof(datatosend)) ;
}
}





Mi sembra di capire, dalla sequenza dei tuoi post (se posso mi informo sempre) che stai tentando di leggere la produzione del solare fotovoltaico, e se hai margine accendere il clima. Sbaglio?
Perché sarebbe il mio prossimo progetto....
Ci sei riuscito a leggere produzione e consumo? E a accendere il clima da Arduino?
È difficile? Cosa hai usato?
Scusa domande, ma facciamo a scambio, io aiuto te sul tuo problema, tu mi indichi la retta via....
Si è esattamente quello che sto cercando di fare in questo primo step, poi di idee per ampliare il progetto sono molte. Purtroppo però fra gli impegni e l'università ci sto mettendo parecchio tempo...
Per leggere i consumi ho seguito la guida a questo link ed è stato piuttosto semplice nonostante fossi alle prime armi. Per quanto riguarda il condizionatore la difficoltà è di gran lunga maggiore e senza l'aiuto del forum e Lollo82 non sarei mai riuscito. Ora rimane da collegare il tutto ma sto riscontrando problemi...
Se hai altre domande chiedi pure, anche in Direct, sarebbe bello poter aiutare finalmente qualcuno e non chiedere sempre e solo aiuto!

Standardoil

.
.


Mentre quello non funzionante è questo:

Code: [Select]

.
.
.
.

.
.

Se hai altre domande chiedi pure, anche in Direct, sarebbe bello poter aiutare finalmente qualcuno e non chiedere sempre e solo aiuto!
Ritenta sarai più fortunato, il codice che hai messo non compila, quindi NON hai messo il codice corretto e quindi NON ti possiamo aiutare, come ho detto: ritenta!
per il Direct: non leggo e non scrivo messaggi privati, TUTTO (tutto) quello che faccio è pubblico, grazie comunque
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

zioCri

Scusami devo aver perso qualcosa nel copia e incolla perché a me funziona, questo è quello giusto:

Code: [Select]
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "EmonLib.h"        // Include Emon Library

#define CE_PIN   9
#define CSN_PIN 10
#define output A1      // output pin per rilevatore corrente
#define input A2        // input pin

const uint64_t pipe = 0x7878787878LL; // Definisce il canale di trasmissione
RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione

// Create an instance
EnergyMonitor emon1;
EnergyMonitor emon2;

int datatosend[1]={};

void setup() 
{
  // lettura della corrente in entrata e uscita ----------------------------------------------------------------------------------------------
  emon1.current(output, 36.69);             // Current: output pin, calibration.
  // calibration = valoreReale/valoreLetto*calibration (precedente)
  emon2.current(input, 36.69);              // input

  radio.begin();
  radio.openWritingPipe(pipe);
}

void loop() 
{
  // Calculate Irms only
  // commentando funziona, senza no
  double correnteIN /*= emon2.calcIrms(1480)*/; 
  double correnteOUT /*= emon1.calcIrms(1480)*/;

  Serial.print("IN ");
  Serial.print(correnteIN);
  Serial.print("  OUT  ");
  Serial.println(correnteOUT);

 
  radio.write (datatosend, sizeof(datatosend)) ;
}


Io dicevo il direct tanto per dire, va bene anche qui!

Standardoil

Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

zioCri

Ci avevo provato ma non va comunque. Ho notato però che riavviando il modulo che trasmette (con il codice senza commenti), riesce ad inviare i dati una volta.
Non so proprio da cosa sia dovuto e non riesco a venire fuori

Standardoil

Stasera provo a caricare le librerie e vederci dentro, un programma del genere è semplicissimo, non dovrebbe avere casini...
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

zioCri

Grazie mille, anche perché io ricordavo funzionasse, magari ricordo male. Avevo fatto la prova quest'estate e di tempo ne è passato, forse provai solo la semplice comunicazione come nel primo esempio.
Comunque mi sono accorto che sul computer di casa (con il quale avevo fatto la prova quest'estate) non mi trova più né il mega né l'uno in uscita seriale mentre sul mio portatile si... lo dico per far più chiara la situazione generale perché magari il problema è un altro

Go Up