Buonasera a tutti, mi servirebbe un aiuto con un mio progetto:
Ho intenzione di far comunicare Arduino Uno e Arduino Nano mediante 2 ricetrasmettitori, uno ciascuno, NRF24L01+(hanno anche l'antennina incorporata). Tuttavia, dopo aver appurato che sia il nano funzioni (blink-test e prove varie utilizzando sketch che muovono un servomotore), sia l'Uno, che ovviamente i moduli NRF24L01+ (riescono a trasmettere i dati solo con Uno e non con Nano, inoltre non ho verificato personalmente che riescano a ricevere i dati trasmessi dall'altro modulo, proprio per il problema seguente).Non riesco a far utilizzare il modulo al Nano, né per trasmettere, né per ricevere, tutte le volte il led 'L' rispettivamente: lampeggia molto debolmente oppure lampeggia ripetutamente ma sempre fiocamente. Ho controllato tutti i collegamenti, nessun cortocircuito, il codice l'ho scritto e poi ho corretto eventuali errori con ChatGPT. Pensando fosse un problema di cavo micro-usb, l'ho cambiato numerose volte, nulla; ho sempre collegato i moduli al 3.3 Volt di Arduino uno (ovviamente da accesa).
Quando utilizzo Uno come trasmettitore, trasmette alla grande, ma il Nano non riesce a ricevere, poiché non comunica (d'altronde il led 'L' del nano è spento), ma neppure a parti invertite funziona, ovvero: il nano non riesce a trasmettere e quindi, di conseguenza Uno non riceve nulla.
Entrambe le schede sono cloni, ma Arduino compatibili.
L'Uno è una scheda Elegoo; Il Nano è una scheda presa su Amazon (marca XTVTX).
Nel modulo NRF24L01+ non ho compiuto modifiche dall'originale, quindi non ho montato condensatori o altro.
Dubito che sia un problema d'interferenza: i due moduli sono praticamente attaccati.
Documentandomi su YouTube ho visto numerosi utenti usare i miei medesimi elementi e riuscire a concludere il progetto.
Qualcuno riesce ad aiutarmi? Perdonatemi nel caso mi fossi dilungato troppo/dato info inutili
Grazie mille in anticipo
Per info scrivete pure!
Buonasera e benvenuto nella sezione Italiana del forum,
cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. ![]()
Il pin 3.3V di arduino UNO non è in grado di erogare la corrente richiesta dal modulo NRF. Per adesso non effettuare altre prove e scollega tutto. Posta un link al tuo modulo NRF, in questo modo possiamo renderci conto se sia necessario un "traslatore di livello" per adattare i segnali GPIO 3.3V con quelli della UNO che lavora a 5.0V.
Ciao e benvenuto.
Grazie mille per la risposta, avevo pensato la stessa cosa, ma non ne ero sicuro. Ti allego il link del modulo: https://www.amazon.it/sspa/click?ie=UTF8&spc=MTo1MTA1ODY0MDYzMjg0Njg1OjE3MDAyNjUxODA6c3BfcGhvbmVfc2VhcmNoX2F0ZjozMDAwMDUzNjM0ODg1MzI6OjA6Og&url=%2FDollaTek-NRF24L01-Transceiver-antistatica-Compatibile%2Fdp%2FB07PQPFTWZ%2Fref%3Dmp_s_a_1_1_sspa%3Fkeywords%3DDollaTek%26qid%3D1700265180%26sr%3D8-1-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9waG9uZV9zZWFyY2hfYXRm%26psc%3D1.
Su Arduino Uno funziona, il problema è su Arduino Nano, ma penso sia proprio per il motivo da te citato, anche se su Internet si trovano parecchi video che usa il Nano e il modulo RF24
Ingressi tolleranti 5V che consentono la connessione diretta dei pin SPI all'Arduino.
Quindi non servono traslatori di livello, ciò vuole dire che puoi collegarli ad arduino UNO, nano direttamente.
Mentre per la corrente di lavoro a 3.3V c'è scritto che servono almeno 115mA, in sostanza ti serve un alimentatore a 3.3V 500mA.
Qui di seguito un link dove trovare maggiori info. In particolare:
using a dedicated 3.3V power source instead of an Arduino's 3.3V supply, a good 3.3V regulator such as the LD33V works well
Ciao.
Ciao, grazie per la risposta, ho fatto quello che hai detto: non ho collegato i moduli all'alimentazione di entrambi gli Arduino, disponendo quindi di un alimentatore da banco (regolato in V e A), ho alimentato entrambi i moduli, scoprendo però che non assorbono corrente (alimentato a 3.3 V e con un tetto massimo di 0.5A, il modulo non assorbiva corrente: 3.3V e 0A). Tuttavia ho provato lo stesso ad eseguire il collegamento dei moduli, senza che questi venissero alimentati da alcuna fonte, il risultato è stato che il nano, secondo sketch, trasmetteva; l'Uno, secondo sketch, riceveva, ma riceveva dati sconosciuti. Poiché appena otteneva il messaggio dalla ricevente la seriale doveva comunicarmi un messaggio ben specifico, invece continua a dirmi che i dati sono stati ottenuti. Di seguito allego codice trasmittente e ricevente.
#include <SPI.h>
#include <RF24.h>
// Definizione dei pin collegati ai moduli NRF24L01+
#define CE_PIN 9
#define CSN_PIN 10
// Indirizzo del modulo per la comunicazione
const byte address[6] = "00001";
RF24 radio(CE_PIN, CSN_PIN);
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address); // Imposta l'indirizzo per la trasmissione
}
void loop() {
const char text[] = "Ciao, ricevitore!"; // Messaggio da trasmettere
radio.write(&text, sizeof(text)); // Invia il messaggio
Serial.println("Messaggio trasmesso!");
delay(1000);
}
#include <SPI.h>
#include <RF24.h>
// Definizione dei pin collegati ai moduli NRF24L01+
#define CE_PIN 9
#define CSN_PIN 10
// Indirizzo del modulo per la comunicazione
const byte address[6] = "00001";
RF24 radio(CE_PIN, CSN_PIN);
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address); // Imposta l'indirizzo per la ricezione
radio.startListening(); // Avvia la ricezione
}
void loop() {
if (radio.available()) {
char text[32] = ""; // Buffer per il messaggio ricevuto
radio.read(&text, sizeof(text)); // Legge il messaggio ricevuto
Serial.print("Messaggio ricevuto: ");
Serial.println(text);
const char response[] = "Trasmettitore to Ricevente ind:02020202020202202020020020202020202020202020"; // Messaggio di risposta
radio.stopListening(); // Interrompe la ricezione per trasmettere
radio.write(&response, sizeof(response)); // Invia il messaggio di risposta
radio.startListening(); // Riprende la ricezione
delay(100);
}
}
Grazie.
Ma dopo la scritta "Messaggio ricevuto: " non ti stampa proprio nulla?
Magari aggiungi una riga di stampa con un solo carattere conosciuto ad esempio '+', per evidenziare se c'è qualcosa tra : e +
No, allego il testo di ciò che esce nella seriale.
14:10:36.801 -> Messaggio ricevuto:
Riguardo al consiglio che mi hai dato, non ho capito cosa dovrei fare ![]()
In caso possano servire, per evitare di scrivere un nuovo messaggio dedicato, scrivo informazioni potenzialmente utili.
Uso un Arduino Uno, marca Elegoo acquistata su Amazon, perfettamente funzionante in tutti i progetti.
Uso un Arduino nano (clone), un ATMega328P, quindi un old bootloader, pagata 10 euro su Amazon (marca XTVTX), con altri sketch che non usano il modulo, funziona perfettamente, incluso il led 'L'.
Per la comunicazione wireless uso un kit della DollaTek dotato di due NRF24L01+ (con antenna per entrambi), acquistato su Amazon (circa 10 euro); sembra funzionare correttamente con Arduino Uno, mediante l'alimentazione della scheda.
Per quanto riguarda lo sketch ho installato tutte le librerie possibili ed immaginabili.
Per l'alimentazione, come già affermato, ho alimentato in maniera indipendente, entrambi i moduli con una tensione di 3.3 volt ed un tetto massimo per ciascuno di 0.5A, riscontrando che nessuno dei due assorbe corrente. Pertanto ho collegato CE e CSN di un modulo ad Arduino Uno e CE, CSN dell'altro modulo al Nano, senza ricevere (nella pratica) corrente, tuttavia però entrambi i moduli svolgevano il loro lavoro, ovvero Modulo A. Uno riceveva e Modulo A. Nano trasmetteva, senza che i due, però, comunicassero. Ho anche provato a scambiare i ruoli, ma niente da fare.
Penso che il problema derivi dal gruppo del Nano (quindi modulo per la trasmittenza e la scheda Nano stessa), dal momento in cui il led 'L' del Nano è molto fioco.
Assenza di cortocircuiti e tutti i cavi solo collegati correttamente.
Ti ringrazio.
Quindi usi due sorgenti di alimentazione separata?
Una per alimentare la scheda arduino e l'altra a 3.3V per alimentare il modulo NRF. Il negativo della sorgente da 3.3V deve essere collegato al GND di arduino.
Il modulo assorbe corrente variabile, in trasmissione aumenta per poi tornare ad un valore minimo. Lo strumento che usi per misurare la corrente è in grado di misurare 0.001A (10mA)?
Ciao.
Ho provato in tutti i modi possibili: prima ho connesso ambi i moduli ad una stessa alimentazione (non quella Arduino), con GND prima al negativo dell'alimentazione e poi al GND Arduino: Nulla.
Alimentazione separata, prima con GND-negativo per entrambi e poi con GND-GND (modulo gnd-->arduino gnd) sempre per entrambi: nulla. Il mio alimentatore è molto preciso, tuttavia per sicurezza ho usato anche un multimetro per misurare sia tensione che corrente. Il risultato è sempre stato 0.0000 A, con 3.3V fissi
Se non consuma non va
Se riceve va e consuma
Non stiamo a perdere tempo con descrizioni a parole e misure di non si sa cosa: metti lo schema
Trasmittente
#include <SPI.h>
#include <RF24.h>
// Definizione dei pin collegati ai moduli NRF24L01+
#define CE_PIN 9
#define CSN_PIN 10
// Indirizzo del modulo per la comunicazione
const byte address[6] = "00001";
RF24 radio(CE_PIN, CSN_PIN);
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address); // Imposta l'indirizzo per la trasmissione
}
void loop() {
const char text[] = "Ciao, ricevitore!"; // Messaggio da trasmettere
radio.write(&text, sizeof(text)); // Invia il messaggio
Serial.println("Messaggio trasmesso!");
delay(1000);
}
Ricevente
#include <SPI.h>
#include <RF24.h>
// Definizione dei pin collegati ai moduli NRF24L01+
#define CE_PIN 9
#define CSN_PIN 10
// Indirizzo del modulo per la comunicazione
const byte address[6] = "00001";
RF24 radio(CE_PIN, CSN_PIN);
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address); // Imposta l'indirizzo per la ricezione
radio.startListening(); // Avvia la ricezione
}
void loop() {
if (radio.available()) {
char text[32] = ""; // Buffer per il messaggio ricevuto
radio.read(&text, sizeof(text)); // Legge il messaggio ricevuto
Serial.print("Messaggio ricevuto: ");
Serial.println(text);
const char response[] = "Trasmettitore to Ricevente ind:02020202020202202020020020202020202020202020"; // Messaggio di risposta
radio.stopListening(); // Interrompe la ricezione per trasmettere
radio.write(&response, sizeof(response)); // Invia il messaggio di risposta
radio.startListening(); // Riprende la ricezione
delay(1000);
}
}
Dopo giorni di ricerche e scleri vari, sono giunto (spero) alla conclusione che i moduli non funzionano, utilizzando il codice allegato. Il codice l'ho eseguito con Uno e Nano.
Tuttavia continuo a non capire la vicenda del led 'L'del Nano che lampeggiava in modo fioco.
Farò il reso e vedrò se i nuovi moduli funzioneranno.
#include <SPI.h>
#include <RF24.h>
#include <printf.h>
RF24 radio(7, 8);
byte addresses[][6] = {"1Node", "2Node"};
void setup() {
radio.begin();
radio.setPALevel(RF24_PA_LOW);
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);
radio.startListening();
Serial.begin(9600);
printf_begin();
radio.printDetails();
}
void loop() {
// empty
}
Allego anche le informazioni ottenute dalla seriale.
22:47:08.576 -> SPI Speedz = 10 Mhz
22:47:08.576 -> STATUS = 0xff RX_DR=1 TX_DS=1 MAX_RT=1 RX_P_NO=7 TX_FULL=1
22:47:08.623 -> RX_ADDR_P0-1 = 0x0000000000 0xffffffffff
22:47:08.670 -> RX_ADDR_P2-5 = 0x00 0xff 0xff 0x00
22:47:08.715 -> TX_ADDR = 0x0000000000
22:47:08.715 -> RX_PW_P0-6 = 0x00 0xff 0x00 0x00 0x00 0xff
22:47:08.807 -> EN_AA = 0x00
22:47:08.807 -> EN_RXADDR = 0x00
22:47:08.807 -> RF_CH = 0x00
22:47:08.807 -> RF_SETUP = 0x00
22:47:08.853 -> CONFIG = 0x00
22:47:08.853 -> DYNPD/FEATURE = 0x00 0x00
22:47:08.899 -> Data Rate = 1 MBPS
22:47:08.946 -> Model = nRF24L01+
22:47:08.946 -> CRC Length = 16 bits
22:47:08.946 -> PA Power = PA_MIN
22:47:08.992 -> ARC = 0
Saluti.
Non capisco, ma mi adeguo
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.