Transmissão Wireless com nRF24L01 RESOLVIDO!!!!!!

Saudações prezados.

Depois de muito pesquisar, consegui fazer uma transmissão consistente com o Módulo Transceptor nRF24L01....olha....não foi fácil...rsrsrrs

Ainda existe pouco material disponível para o assunto...então faço questão de compartilhar com vocês o meu feito...que é apenas o acendimento de um LED através do apertar de um botão.

Digo faço questão porque sempre que precisei do pessoal do Fórum eu fui ajudado...infelizmente não por todos..tem gente que responde uma dúvida só pra constar que "ajudou"...porque fala cada "asneira" sem tamanho..o que pode confundir ao invés de ajudar.O pior é que quando questionamos a "ajuda", o "camarada" nem dá mais as caras..acho que deve ser a vergonha bobagem num Fórum tão difundido e conceituado...mas isso não vem ao caso.

Pessoal..segue o código comentado (para 2 Arduinos UNO)...e o esquemático de ligação.

Abração a todos e espero que seja útil futuramente.

Código Emissor
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"


int dados[1]; //Armazena os dados enviados pelo rádio

RF24 radio(9,10); //Inicializa a placa nos pinos 9 (CE) e 10 (CS) do Arduino

const uint64_t pipe = 0xE14BC8F482LL; //Define o endereço para comunicacao entre os módulos

int pino_botao1 = 7; //Inclui a Porta Digital 7 na estrutura da programação do módulo

void setup()
{
   pinMode(7, INPUT); //Define a Porta Digital 7 para entrada de sinal para disparo do Dispositivo Secundário
   digitalWrite(7,HIGH); //Define a Porta Digital 7 inicialmente em nível alto
 
  radio.begin(); //Inicializa a comunicação entre os módulos
  radio.openWritingPipe(pipe); //Entra em modo de transmissao
}

void loop()
{
  if (digitalRead(pino_botao1) == LOW) //Envia o comando para disparo caso a Porta Digital 7 entre em nível baixo
  {
    dados[0] = 1; // salva o valor 1 no índice dos valores enviados pelo rádio
    radio.write(dados, 1); // escreve o valor 1 na variável dados
  }
}


Código Receptor

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"


int recebidos[1]; //Armazena os dados recebidos

RF24 radio(9, 10); //Inicializa a placa nos pinos 9 (CE) e 10 (CS) do Arduino

const uint64_t pipe = 0xE14BC8F482LL; //Define o endereco para comunicaçao entre os módulos

int LED1 = 5; //Inclui a Porta Digital 5 na estrutura da programação do módulo

void setup()
{
  pinMode(LED1, OUTPUT); //Define a Porta Digital 5 como saída de sinal para disparo do Dispositivo Secundário

  radio.begin(); //Inicializa a comunicaçao entre os módulos
  radio.openReadingPipe(1, pipe); //Entra em modo de recepcao
  radio.startListening(); ////Entra em modo de recepcao
}

void loop()
{
  if (radio.available()) //Verifica se há sinal de radio
  {
    bool done = false; //determina a variável booleana como falsa
    while (!done) //executa uma rotina determinada enquanto a variável booleana é negada
    {
      done = radio.read(recebidos, 1); // Lê a variável transmitida

      if (recebidos[0] == 1) //Se recebeu o numero 1, executa determinada ação
      {
        delay(10); //Tempo até executar a rotina de ativamento
        digitalWrite(LED1, HIGH); //Ativa a Porta Digital 5 em nível alto para disparo do Dispositivo Secundário
      }
      else
      {
        digitalWrite(LED1, LOW); //Desativa Porta Digital 5 caso o valor recebido não seja igual ao valor 1
      }

      delay(100); //Tempo para reiniciar a verificação do sinal transmitido
    }
  }
 
}

Exibições: 8373

Anexos

Responder esta

Respostas a este tópico

AJUDA?

ERRO na linha 30 

done = radio.read(recebidos, 1); // Lê a variável transmitida

ERRO :

void value not ignored as it ought to be

codigo receptor dando erro. socorrrrrrrrrrrrrrro

nessa linha 

  done = radio.read(recebidos, 1); // Lê a variável transmitida

me ajudem por favor

Pessoal talvez vcs estejam tentando receber um valor maior que um byte, experimentem trocar o parâmetro 1 por um número maior.
done = radio.read(recebidos, 1);
O primeiro parâmetro é a variável q receberá os dados, é o segundo é o tamanho do dado recebido, no caso 1byte.
O mesmo acontece no transmissor radio.write(dados, 1); o primeiro é o valor enviado é o segundo é o tamanho do valor.

Tentei compilar aqui, mas apresentou erro na linha abaixo.

done = radio.read(recebidos, 1);

Descrição do erro: void value not ignored as it ought to be

Wg, desculpa a demora em responder.

   Cara, é o xiguinte, a biblioteca RF24 passou por varias mãos, o criador principal dela é o MANIACBUG, só que atualmente quem mantem ela é o TMRH20.

    O lance é que enquanto o Maniacbug prezava pela simplicidade, o TMRH20 resolveu colocar esteroides na library.

    Atualmente ela conta com suporte pra outros universos alem do arduino, como por exemplo pra o raspbery pi.

    O problema é que pra mexer tanto na biblioteca ela acabou tornando ela mais pesada e incompativel com muita coisa da biblioteca original.

    Resultado, exemplos que foram compilados pra uma versão da biblioteca não irão funcionar em outra versão.

    Qual a solução:   A solução é você abrir os exemplos que vem com a propria lib que você esta com ela instalada, e ver como é feita a comunicação dela,

    Porem, pessoalmente eu uso uma versão que não é nem a original do ManiacBug nem a mais recente do TMRH20, eu uso a versão de um figuraça chamado GREG COPELAND (auto intitulado maniacbit),   ela é uma versão da original mas com uma serie de correções.   Dá uma olhada no google que é facil de achar.

Obrigado Weider Duart!!!

Vou dar uma olhada aqui google pra vê se encontro. Mas consegui fazer aqui um programinha que deu certo comunicar os dois módulos. Mas surgiu outro probleminha que não sei se é de Hardware ou Software. Observei que os módulos só funcionam corretamente se eu ficar tocando com o dedo o Cristal do módulo, ou seja, quando eu tiro o dedo do Cristal o programa tipo trava, quando eu volto a ficar com o dedo no Cristal o programa destrava, não consigo entender, já soldei um capacitor de 100nF entre a alimentação do módulo, mas continua do mesmo jeito.

Mais uma vez obrigado e vou dar uma olhada aqui no google nessa versão indicada.

Valeu!!! 

Wg existe um modulo base a venda na china pra você ligar os NRF24L01 aos circuitos, é esse ***AQUI****,

 Vamos a historia , kkk, eu adquiri recentemente um equipamentozinho que mede componentes, o nome é teste de transistores( ESSE) pois ele foi criado inicialmente pra testar esses componente, mas hoje ele testa tudo que é componente que tenha ate 3 perninhas.

   Beeeem, como eu tenho alguns adaptadorezinhos desses, eu resolvi matar e perder um pra descobri como ele é feito, logo, retirei as peças, soldei perninhas nos componentes pois eles sao SMD, e...

   O que descobri é que a parte ativa e que faz ele funcionar se baseia em 4 capacitores, e um regulador de voltagem,  que pega os 5v e converte para os 3.3v que o NRF24L01 precisa.

   Bem, esses 4 capacitores são dois conjuntos sendo.

UM CAPACITOR DE 10uF +  UM CAPACITOR DE 100nF   (EM PARALELO, ou seja soldado tudo junto)

   Ou seja, ainda na etapa 5v antes do regulador tem um conjunto desse, e depois da saida de 3.3v do regulador tem outro conjunto.

   Não fiz ainda testes na pratica, mas acredito que a brincadeira é essa aqui, solde no NRF24L01 nos pinos VCC e GND dois capacitores, primeiro coloque um eletrolitoco de 10UF, lembrando que o eletrolitico é polarizado, logo, GND na faixa branca do capacitor e o outro pino no VCC,  já o capacitor de 100nF não é polarizado, pode soldar uma perna no gnd e outra no vcc que já estara com o outro capacitor, sem medo, ficando um por cima do outro.

    Só lembrando, tem que colocar a mesma montagem em todos os NRFs que estiverem em sua rede.

   Bem, testa ai e dá o resultado.

Weider Duarte... Fiz aqui e... por algumas vezes funcionou em apenas um único módulo, e no outro tive que ficar com o dedo no cristal kkkkkkkkkkkkkk. Alguém por aqui falou que podia ser solda fria no cristal, refiz a solda e continua do mesmo jeito. Deixando bem  claro que pra funcionar sem travar o funcionamento, eu toco no cristal do módulo bem de leve, sem fazer nenhum tipo de força, e fica funcionando normal. Acho que vou adquirir o adaptador que vc me mostrou, e fazer o teste.

Wg,

     Uma dica cara, os NRF24L01 fazem um sucesso tremendo, e como tudo que vem da china e faz sucesso tem lotes de fabricação de melhor e pior qualidade.

     Logo, a dica é Teste outros radios, de preferencia se você compra-los de outro vendedor.

     Já aconteceu isso comigo, eu comprei um lote de 20 peças, e eles falhavam pra caramba, dai achei uns radios velhos guardados e eles não davam uma travadinha sequer.

     Logo aqui o lance não é comprar de vendedor A ou B,  é sorte mesmo.

      só uma duvida, você ta usando a versão pequena O NRF24L01+  ou a versão grande de 1km o NRF24L01+PA+LNA ?

Weider

      Só me resta agora fazer isso mesmo, testar outros módulos e vê se tenho sorte com algum rsrsrsrsrs. Então, estou usando a versão para pequena distância sem antena.

      Muito obrigado pelas dicas, e qualquer coisa comunico, se conseguir algum resultado positivo.

      

      Até logo!!!

 

Weider

      Meus módulos aqui funcionaram rsrsrsrsrs. Depois de muitas tentativas sem sucessos, resolvi fazer mais alguns testes rsrsrsrsrs. Mudei a forma de alimentação do Arduino. Passei a alimentá-los com fontes de carregadores de celular e eles funcionaram perfeitamente rsrsrsrsrs. Então continuei testando outros tipos de fontes, para verificar o comportamento deles. Então no meu caso particular, eles não irão funcionar com qualquer tipo de fonte. Testei com vários carregadores de celular, mas só funcionou com alguns, não sei se por alguma deficiência do nível de tensão entre eles, infelizmente não tenho uma explicação mais precisa.

      Valeu Weider até a próxima!!!  

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço