Pelo menos uma vez na vida todos nós já saímos…
Como usar com Arduino – Módulo Transceptor Wireless NRF24L01 2.4GHz com Antena
– Descrição:
O Módulo Transceptor Wireless NRF24L01 2.4GHz é um dispositivo produzido pela Nordic Semiconductors. Possui baixo consumo de energia e este módulo conta com uma antena externa e um amplificador de potência embutido.
É ideal para muitas aplicações que requerem comunicações sem fio. O mesmo é compatível com o módulo NRF24L01 simples, logo, você poderá substituir ele pelo Módulo Transceptor Wireless NRF24L01 2.4GHz, ganhando uma melhor transmissão sem modificações consideráveis no seu projeto.
O Módulo Transceptor Wireless NRF24L01 2.4GHz possui longo alcance de sinal que pode chegar a 1Km (sem obstáculos) com transmissão de até 250Kbps. Esse alcance da transmissão em parte se dá pela antena de 2dBi que acompanha o módulo.
– Especificações e características:
– Controlador: RFX2401C
– Tensão de operação: 1,9V – 3.6VDC
– Corrente de operação (envio): 115mA
– Corrente de operação (recebimento): 45mA
– Corrente de operação (power-down): 4.2 µA
– Frequência de operação: 2,4GHz ~ 2,52GHz
– Modulação: GMSK
– Potência máxima de saída: 20dBm
– Sensibilidade do receptor em 2Mbp: -92dBm
– Sensibilidade do receptor em 1Mbps: -95dBm
– Sensibilidade do receptor em 250kbps: -104dBm
– Ganho de PA: 20dB
– Ganho de LNA: 10dB
– Antena: 2dBi
– Comprimento da antena: 107mm
– Taxa de transmissão em 2MB (área aberta): 520m
– Taxa de transmissão em 1MB (área aberta): 750m
– Taxa de transmissão em 250kb (área aberta): 1000m
– Quantidade de canais: 125
– Temperatura de operação: -40 a 85º celsius
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário utilizar comunicação sem fio de baixo custo.
– Proposta da prática:
Utilizar o Módulo Transceptor Wireless NRF24L01 2.4GHz com Antena em conjunto com o Arduino para enviar uma mensagem do transmissor para o receptor. A mensagem será exibida no monitor serial do ambiente de programação do Arduino.
– Lista dos itens necessários:
02 – Arduino com Cabo USB
02 – Módulo Transceptor Wireless NRF24L01 2.4GHz com Antena
14 – Cabos Jumper macho-fêmea
01 – Fonte DC 9V 1A Bivolt Chaveada (para um dos Arduinos)
OBS: você também pode alimentar os dois Arduinos pelo PC através de dois cabos USB.
– Esquema de ligação da prática:
OBS: utilize este esquema de ligação tanto para o módulo transmissor quanto para o módulo receptor.
– Bibliotecas (instalar as duas):
– Importando bibliotecas para o ambiente de programação do Arduino:
Arduino – Importando bibliotecas para a IDE
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Código (Transmissor):
OBS: conecte o cabo USB ao Arduino e ao computador e faça o carregamento do código na placa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <SPI.h> //INCLUSÃO DE BIBLIOTECA #include <nRF24L01.h> //INCLUSÃO DE BIBLIOTECA #include <RF24.h> //INCLUSÃO DE BIBLIOTECA RF24 radio(9, 10); //CRIA UMA INSTÂNCIA UTILIZANDO OS PINOS (CE, CSN) const byte address[6] = "00002"; //CRIA UM ENDEREÇO PARA ENVIO DOS //DADOS (O TRANSMISSOR E O RECEPTOR DEVEM SER CONFIGURADOS COM O MESMO ENDEREÇO) void setup() { radio.begin(); //INICIALIZA A COMUNICAÇÃO SEM FIO radio.openWritingPipe(address); //DEFINE O ENDEREÇO PARA ENVIO DE DADOS AO RECEPTOR radio.setPALevel(RF24_PA_HIGH); //DEFINE O NÍVEL DO AMPLIFICADOR DE POTÊNCIA radio.stopListening(); //DEFINE O MÓDULO COMO TRANSMISSOR (NÃO RECEBE DADOS) } void loop() { const char text[] = "MasterWalker Shop"; //VARIÁVEL RECEBE A MENSAGEM A SER TRANSMITIDA radio.write(&text, sizeof(text)); //ENVIA AO RECEPTOR A MENSAGEM delay(1000); //INTERVALO DE 1 SEGUNDO } |
– Código (Receptor):
OBS: conecte o cabo USB ao Arduino e ao computador e faça o carregamento do código na placa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <SPI.h> //INCLUSÃO DE BIBLIOTECA #include <nRF24L01.h> //INCLUSÃO DE BIBLIOTECA #include <RF24.h> //INCLUSÃO DE BIBLIOTECA RF24 radio(9, 10); //CRIA UMA INSTÂNCIA UTILIZANDO OS PINOS (CE, CSN) const byte address[6] = "00002"; //CRIA UM ENDEREÇO PARA ENVIO DOS //DADOS (O TRANSMISSOR E O RECEPTOR DEVEM SER CONFIGURADOS COM O MESMO ENDEREÇO) void setup() { Serial.begin(9600); //INICIALIZA A SERIAL radio.begin(); //INICIALIZA A COMUNICAÇÃO SEM FIO radio.openReadingPipe(0, address); //DEFINE O ENDEREÇO PARA RECEBIMENTO DE DADOS VINDOS DO TRANSMISSOR radio.setPALevel(RF24_PA_HIGH); //DEFINE O NÍVEL DO AMPLIFICADOR DE POTÊNCIA radio.startListening(); //DEFINE O MÓDULO COMO RECEPTOR (NÃO ENVIA DADOS) } void loop() { if (radio.available()) { //SE A COMUNICAÇÃO ESTIVER HABILITADA, FAZ char text[32] = ""; //VARIÁVEL RESPONSÁVEL POR ARMAZENAR OS DADOS RECEBIDOS radio.read(&text, sizeof(text)); //LÊ OS DADOS RECEBIDOS Serial.println(text); //IMPRIME NA SERIAL OS DADOS RECEBIDOS } } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Como usar com Arduino – Sensor Analógico de Refletância QRE1113
Próxima postagem: Como usar com Arduino – Sensor Infravermelho Reflexivo de Obstáculo
Olá Euler e pessoal.
Algúem pode me explicar esta linha?
“const byte address[6]”
Por que o número “6”?
Abs.
Euler, bom dia!
Funcionou perfeitamente!
Estou utilizando um Arduino Nano como transmissor e um Arduino UNO como resceptor.
Uma pergunta, tem como eu transformar o receptor em um gateway adicionando um Shield Ethernet e dai passar as informações para a rede cabeada?
Boa noite, é possível usar um módulo como transmissor e receptor? queria utilizar para sinais simples como mandar comando para acender um led em outro arduino e nesse outro apagar o led com um botão, enviando o sinal de volta com informação de que ele foi desligado
Boa noite, tive o mesmo problema do ELVIS PATRIK PEREIRA, acima, não teve jeito de funcionar com os adaptadores alimentados por 5 ou mesmo por 3,3V. Só funcionou sem os adaptadores. Achei que um deles estava queimado mas não foi isso porque testei colocando adaptador somente no transmissor ou somente no receptor e testando os dois adaptadores em cada um dos dois receptor ou transmissor de cada vez. Nada deu certo. Em nenhum momento inverti os pólos dos adaptadores.
Amigo,
Estou usando dois arduinos nano, e não consigo comunicação.
O que pode ser?
Voce pode me disponibilizar o arquivo do fritzing com o NFR24L01? os que eu tenho não vem com antena
Olá Michel.
Agradeço pelo comentário!
Na verdade este item não foi retirado do Fritzing.
então foi de que programa?
Foi um desenho feito por um membro aqui da empresa.
um unico nrf pode trabalhar como rx e tx ao mesmo tempo?
Euler boa noite, queria antes de mais nada agradecer por compartilhar seus conhecimentos, e que o tutorial é muito bem explicado, porém eu tenho uma dúvida.
Eu tenho a possibilidadede usar o NRF24L01 para conectar à minha rede Wifi ? Eu queria acessar o Arduino Uno pela IDE pelo NRF24L01 por um IP fixo, em vez de conectar o USB. Caso positivo acredito que eu consiga exportar meus códigos via NRF24 e usar o APP no Celular para ascender leds ou outros Módulos como motores escravos. Obrigado.
Olá Danilo.
Agradeço pelo comentário!
O NRF24L01 não tem suporte a rede WiFi.
Apenas recepção e Transmissão via CLI .. Entendi, fora o shield ethernet, teria algum módulo que me indicaria para fazer a conexão na Rede Wifi ?
Veja sobre o ESP8266:
https://blogmasterwalkershop.com.br/arduino/como-usar-com-arduino-modulo-wifi-esp8266-esp-01/
Caro Euler, boa noite. primeiramente gostaria de parabenizá-lo por compartilhar sua experiência. Excelente blog.
Gostaria de saber se eu poderia ligar 3 arduinos uno como transmissores(3 unos + 3 NRF24L01) e colocar um arduino mega como receptor(1 arduino mega + 1 NRF24L01)?
Olá Adriano.
Agradeço pelo comentário!
Sim, é possível desde que defina um endereço para cada transmissor.
Bom dia!
Eu compilei o sketch em meus dois arduinos, porém a serial do receptor apenas imprime “??????????” na tela, o que isto significa?
Olá Cristofer.
Agradeço pelo comentário!
Significa que alguma ligação entre o módulo e a placa Arduino pode estar errada ou que a taxa da serial está divergente do código.
Muito obrigado, cara.
Bom dia, amigo Euler! Como sempre, parabéns pelo ótimo trabalho, facilita muito o aprendizado de todos.
Gostaria de saber se com esse módulo é possível transmitir dados de um sensor também conectado ao arduino “em campo” para um arduino também com esse módulo num escritório, por exemplo. Isso pelo que eu entendi dá pra fazer, me corrija se eu estiver errado. Agora vem a dúvida de fato: caso o arduino que esteja no escritório recebendo os dados esteja conectado com um ethernet shield, é possível passar os dados recebidos para um banco de dados normalmente? Criando assim um sistema onde uma placa captura os dados em campo e os passa sem fio para outra placa e esta faz o processo de enviar os dados para o banco de dados.
Obrigado desde já.
Olá Matheus.
Agradeço pelo comentário e reconhecimento!
Sim, é possível implementar conforme você explicou.
Precisa utilizar as duas bibliotecas:
#include
#include
Apenas uma delas já funciona o projeto?
Olá Marcio.
Agradeço pelo comentário!
Deve ser utilizado as duas bibliotecas disponibilizadas na postagem
Olá Euler.
E possível alterar o código do endereço, como se eu quisesse colocar senha, para não entrar em conflito com outros partes de nrf?
ABS
Olá Sebastião.
Agradeço pelo comentário!
Sim, deve ser trocado caso tenha vários dispositivos NRF24L01.
E como faço isso? Se for no “0xF0F0F0F0E1LL”, tentei e fica dando erro de variável não declarada. Acho que estou alterando dígitos que não podem ser mudados, pois, o único que consegui mudar sem dar erro foi o “1”. Mas aí, só terei de zero a nove possibilidades. Sabe me orientar? Abraços.
Você deve manter o padrão do endereço numérico. Compilei o código com o endereço 99999 e não deu nenhum erro.
Teste o endereço 99999 e vá alternando os valores mantendo o formato de 5 casas e veja se irá funcionar.
Olá Euler!
Não consigo de jeito maneira a transmissão. Tem certeza que está tudo correto tanto no programa quanto na ligação? Estou usando um modulo NRF24L01 com aquela antena interna. Funciona também?
Olá Altair.
Agradeço pelo comentário!
Tenho absoluta certeza, até porque, na postagem há um vídeo mostrando o resultado final dos módulos em funcionamento conforme descrito nos passos do tutorial.
A versão simples do NRF24L01 temos em outro tutorial, contudo, os passos e código são idênticos:
https://blogmasterwalkershop.com.br/arduino/como-usar-com-arduino-modulo-transceptor-wireless-2-4ghz-nrf24l01/
ta falatando a library NRFL24L01..
Olá Ricardo.
Agradeço pelo comentário!
Na verdade faltava a biblioteca RF24.
Já atualizei a postagem e inseri a biblioteca faltante.
Obrigado por informar!
Eu estou com o mesmo problema, copia sem erro, mas não ocorre comunicação entre os módulos. Já fiz um teste com o exemplo de scanner que vem na biblioteca e funcionou bem. Você poderia me ajudar?
Olá Leandro.
Agradeço pelo comentário!
Utilizando o mesmo esquema de ligação desta postagem, funcionou com um exemplo da biblioteca? Os exemplos da biblioteca senão em engano, estão configurados para funcionar com a velocidade da serial em 115200 bauds e os pinos CE e CSN não são o 9 e o 10. O código da postagem está configurado para 9600 bauds.
Chegou a verificar se no monitor serial está definido a comunicação em 9600?
Euler, bom dia!
estou tentando utilizar os modulos de comunicação com o arduino nano porem sem sucesso, tem alguma coisa especifica para fazer eles funcionarem no nano?
Olá Fauze.
Agradeço pelo comentário!
O esquema de ligação com o Nano é o mesmo do Uno. Está recebendo algum erro ou o código carrega normalmente, mas a comunicação entre os módulos não ocorre?
como faço para mandar um caractere por vez?
Tipo mandar uma letra ‘A’ e uma letra ‘a’ do transmissor para o receptor.
aguardo resposta!
no arquivo zip não tem a biblioteca
Olá Pedro.
Arquivo verificado e a biblioteca está presente sim.
boa tarde, como faço ara mandar um sinal analógico ? por exemplo um potenciômetro
Boa noite Euler. por favor, poderia me ajudar?
Ola. Estou tentando realizar a comunicação entre os transmissores, mas utilizando um Arduino Uno e um Arduino Mega.
Não estou conseguindo comunicação, oque poderia ser alterado para funcionar?
Olá Elvis.
Alguns dos pinos no Mega 2560 mudam. O SCK é o pino 52, o MOSI é o pino 51 e o MISO é o pino 50.
Boa Tarde Euler.
então, se eu alterar os pinos para essa configuração (no Mega), deverá funcionar?
Olá, Boa noite! Talvez alguém possa me ajudar, quero fazer o transmissor começar a emitir através de uma variável qualquer, exemplo: ‘a’. Porém todas as vezes que programo o módulo transmissor com a condição if, ele não comunica mais, alguém pode me dar uma ajuda? A programação está igual a do site, so modifiquei o void loop dessa forma:
char tecla = Serial.read ();
If (tecla == ‘a’){ igual ao do site}
Se alguém puder ajudar agradeço muito!
Parabéns pelo trabalho do site, acompanho já a algum tempo!
Alterei os fios e consegui resposta, porém, não aparece o texto. Então tentei algumas alterações básicas…
de: const byte address[6] = “00002”;
para: const uint64_t address = 0xE8E8F0F0A1LL;
e também
TRANSMISSOR
de: const char text[] = “MasterWalker Shop”;
para: String text = “MasterWalker Shop”;
RECEPTOR
de: char text[32] = “”;
para: String text = “”;
… e ainda assim, o texto não aparece.
Oque pode ser? :/
Se não está aparecendo o texto na serial, como fez para identificar que os módulos estão respondendo?
Verifique seu esquema de ligação e utilize os códigos conforme disponibilizado na postagem. Verifique também se a velocidade de comunicação da serial está configurado corretamente.
por que apenas o texto não esta aparecendo….
realizei a conexão do Arduíno Mega no Adaptador do NRF24L01 + PA + LNA (50,51,52) e conectei o Arduíno Uno em um segundo adaptador conforme mostra no exemplo o Arduíno Uno esta como receptor e no Monitor (Serial.begin)adiciona novas linhas, mas o texto não aparece.
Ja achei o problema. Eu estava testando o código com os dois módulos NRF24L01, conectados cada um em um adaptador. Resolvi tirar os adaptadores para testar, e ligar direto nos módulos. Pronto! Funcionando!
#include //INCLUSÃO DE BIBLIOTECA
ao compilar dame o seguinte erro
nRF24L01.h: No such file or directory
pode me ajudar ?
Olá Júlio.
Depois do esquema de ligação no texto, tem o link para download da biblioteca RadioRead.
Você deve baixar a biblioteca e adicionar no ambiente de programação do Arduino.
ola amigo , quando eu importei essa biblioteca no rar pro adruino o erro se corrigiu
Revisem o esquemático para a alimentação dos módulos. A imagem mostra a conexão com a alimentação de 5V no Arduino, sendo que o módulo opera com 3,3V.
Olá Jack Morris.
Agradeço pelo aviso.
Já foi corrigido o esquema de ligação.
Vlw!