19 fevereiro 2015

Comunicação wireless com Arduino e módulo NRF24L01 2.4GHz

Vou mostrar mais uma alternativa para comunicação wireless entre placas Arduino, o módulo wireless NRF24L01, que opera na frequência de 2.4GHz.

arduino modulo NRF24L01

Esse módulo é uma opção de baixo custo para comunicação não só entre placas Arduino, mas também pode ser utilizado para comunicação entre Arduino e Raspberry, Arduino e PIC, Raspberry e Beaglebone, e várias outras combinações.

Ele utiliza o chip NRF24L01+ da Nordic (datasheet), e funciona com alimentação de 1,9 à 3.6V. Possui um regulador de tensão interno que permite que seja ligado tanto em microcontroladores com nível de sinal de 3.3 como de 5V. A velocidade máxima de comunicação é de 2Mbps, utilizando uma antena embutida.  Uma outra característica do módulo é que ele pode funcionar como emissor ou como receptor, mediante alteração na programação.

Com relação à frequência de operação, apesar de operar na faixa de 2.4GHz, esse módulo não consegue se conectar às redes wireless padrão 802.11x, já que utiliza um protocolo de comunicação diferente dessas redes.

Pinagem do NRF24L01 e ligação ao Arduino

Na lateral da placa temos um conector de 10 pinos, dos quais 7 serão utilizados para conexão ao Arduino. Veja que no esquema abaixo temos os pinos Vcc e GND duplicados. Nos meus testes, eu utilizei apenas um de cada. Aparentemente não há necessidade de ligar os dois ao mesmo tempo.

NRF24L01 - Pinagem


Na tabela abaixo, o esquema de ligação do módulo que utiliza a interface SPI para comunicação com o microcontrolador. Vamos utilizar essa tabela para testar a comunicação entre duas placas Arduino, controlando, à partir de um Arduino Uno, um servo motor 9G e um led conectados à um Arduino Mega :

NRF24L01 - Tabela conexão


Vamos dividir esse tutorial em duas partes, apresentando o circuito e o programa para o emissor (Uno) e depois para o receptor (Mega).

Circuito NRF24L01 e Arduino Uno - Emissor

Nesse primeiro circuito, temos apenas o Arduino Uno e o módulo NRF24L01. Utilizaremos esse circuito emissor para enviar comandos ao receptor via serial monitor.

Circuito Emissor - Arduino Uno


Antes de carregar o programa, baixe a biblioteca RF24 neste link. Descompacte o arquivo e coloque a pasta RF24 dentro da pasta Libraries da IDE do Arduino.

Carregue o programa abaixo no Arduino Uno. Tenha uma atenção especial com esta linha :

const uint64_t pipe = 0xE13CBAF433LL

O número no final da linha (0xE13CBAF433LL), deve ser o mesmo nos dois programas, pois é este valor que indica em qual rede o módulo está operando.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Programa : NRF24L01 Emissor - Servo motor
// Autor : Arduino e Cia

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

// Armazena caractere digitado na serial
char valor[1];

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

// Inicializa o NRF24L01 nos pinos 9 (CE) e 10 (CS) do Arduino Uno
RF24 radio(9,10);

// Define o endereco para comunicacao entre os modulos
const uint64_t pipe = 0xE13CBAF433LL;

void setup()
{
  // Inicializa a serial
  Serial.begin(57600);
  Serial.println("Digite 1, 2 ou L e pressione ENVIAR...");
  
  // Inicializa a comunicacao do NRF24L01
  radio.begin();
  // Entra em modo de transmissao
  radio.openWritingPipe(pipe);
}

void loop()
{
  // Le o caractere digitado na serial
  if (Serial.available() > 0) 
  {
    valor[0] = Serial.read();
  }
  
  // Envia 1 via radio caso seja digitado o valor 1
  if (valor[0] == '1')
  {
    Serial.println("Enviado : 1 - Gira servo para a esquerda");
    dados[0] = 1;
    radio.write(dados, 1);
    delay(100);
    valor[0] = 0;
  }
  
  // Envia 2 via radio caso seja digitado o valor 2
  if (valor[0] == '2')
  {
    Serial.println("Enviado : 2 - Gira servo para a direita");
    dados[0] = 2;
    radio.write(dados, 1);
    delay(100);
    valor[0] = 0;
  }
  
  // Envia 3 via radio caso seja digitado o caractere L
  if (valor[0] == 'L')
  {
    Serial.println("Enviado : L - Acende o led");
    dados[0] = 3;
    radio.write(dados, 1);
    delay(100);
    valor[0] = 0;
  }
}

Abra o serial monitor e você terá a tela abaixo, onde poderá enviar os caracteres 1, 2 ou L para o receptor :

NRF24L01 - Serial Monitor - Emissor


Circuito NRF24L01 e Arduino Mega - Receptor

No Arduino Mega, vamos conectar o módulo NRF24L01 às portas 50, 51 e 52, que formam a interface SPI. O servo motor está ligado à porta digital 4 e o led à porta 5.

Circuito Receptor - Arduino Mega


Carregue o seguinte programa no Arduino, que aguarda pelo sinal de rádio do módulo e, caso receba o número 1 movimenta o servo no sentido anti-horário, com o número 2 move o servo no sentido horário e para o número 3 (caractere L digitado), aciona o led.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Programa : NRF24L01 Receptor - Servo motor
// Autor : Arduino e Cia

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

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

// Inicializa o NRF24L01 nos pinos 9 (CE) e 53 (CS) do Arduino Mega
RF24 radio(9,53);

Servo myservo;

// Define o endereco para comunicacao entre os modulos
const uint64_t pipe = 0xE13CBAF433LL;

// Define o pino do led
int LED1 = 5;

void setup()
{
  // Servo conectado ao pino 4
  myservo.attach(4);
  // Define o pino do led como saida
  pinMode(LED1, OUTPUT);
  // Inicializa a serial
  Serial.begin(57600);
  // Inicializa a comunicacao do NRF24L01
  radio.begin();
  // Entra em modo de recepcao
  radio.openReadingPipe(1,pipe);
  radio.startListening();
  // Mensagem inicial
  Serial.println("Aguardando dados...");
}

void loop()
{
  // Verifica sinal de radio
  if (radio.available())
  {
    bool done = false;    
    while (!done)
    {
      done = radio.read(recebidos, 1);
      Serial.print("Recebido : ");    
      Serial.print(recebidos[0]);
      
      // Se recebeu 1, movimenta o servo para a esquerda
      if (recebidos[0] == 1)
      {
        delay(10);
        Serial.println(" -> Girando motor para a esquerda");
        myservo.write(1);
      }
      
      // Se recebeu 2, movimenta o servo para a direita
      if (recebidos[0] == 2)
      {
        delay(10);
        Serial.println(" -> Girando motor para a direita");
        myservo.write(160);
      }

      // Se recebeu 3, acende o led
      if (recebidos[0] == 3)
      {
        delay(10);
        Serial.println(" -> Acende led");
        digitalWrite(LED1, HIGH);
      }
      else
      {
        digitalWrite(LED1, LOW);
      }
      delay(100);
    }
  }
}

No serial monitor, podemos acompanhar o recebimento dos dados ao mesmo tempo em que o servo motor e o led são acionados :

NRF24L01 - Serial Monitor - Receptor


50 comentários:

  1. Olá pessoal, alguém sabe me dizer se o transceptor nrf24l01 faz a seguinte tarefa:

    "Tenho dois transceptor o primeiro envia para o segundo "Mensagem 1" e logo ao receber retorna "Mensagem 2" para o primeiro transceptor" ou seja o primeiro transceptor vai estar em modo de transmissor e logo depois de enviar passar a entrar em modo de receptor.

    Alguém sabe me dizer se isso é capaz ? Possui exemplos de códigos que façam isso?

    ResponderExcluir
    Respostas
    1. Dê uma lida aqui amigo http://wiki.t-o-f.info/Arduino/Nordic#toc3

      Excluir
  2. Boa tarde. Você sabe dizer qual o alcance dentro de um ambiente fechado (casa, apartamento, etc.)?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Aproximadamente 10 metros.

      Abraço.

      Excluir
    2. Depende muito dos obstáculos

      Excluir
  3. Tem como você me orientar como acender e apagar o LED no mesmo botão, segue o código:

    //RECEPTOR
    #include
    #include "nRF24L01.h"
    #include "RF24.h"

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

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

    //Define o endereco para comunicacao entre os modulos
    const uint64_t pipe = 0xE24BC8F482LL;

    //Define os pinos dos leds
    int LED1 = 5;
    int LED2 = 3;

    void setup()
    {
    //Define os pinos dos leds como saida
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);

    //Inicializa a serial
    Serial.begin(57600);

    //Inicializa a comunicacao
    radio.begin();
    //Entra em modo de recepcao
    radio.openReadingPipe(1, pipe);
    radio.startListening();
    }

    void loop()
    {
    //Verifica se ha sinal de radio
    if (radio.available())
    {
    bool done = false;
    while (!done)
    {
    done = radio.read(recebidos, 1);
    Serial.print("Dados recebidos : ");
    Serial.println(recebidos[0]);

    //Se recebeu o numero 1, acende o LED1
    if (recebidos[0] == 1)
    {
    digitalWrite(LED1, HIGH);{

    }
    }


    //Se recebeu o numero 2, acende o LED2
    if (recebidos[0] == 2)
    {
    digitalWrite(LED1, LOW);
    }

    delay(100);
    }
    }
    else
    {
    Serial.println("Aguardando dados...");
    }
    }



    //TRANSMISSOR
    #include
    #include "nRF24L01.h"
    #include "RF24.h"

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

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

    //Define o endereco para comunicacao entre os modulos
    const uint64_t pipe = 0xE24BC8F482LL;

    //Define os pinos dos botoes
    int pino_botao1 = 7;
    int pino_botao2 = 2;

    void setup()
    {
    //Define os botoes como entrada e
    //ativa pull-up
    pinMode(7, INPUT_PULLUP);
    digitalWrite(7, HIGH);
    pinMode(2, INPUT_PULLUP);
    digitalWrite(2, HIGH);

    //Inicializa a serial
    Serial.begin(57600);
    Serial.println("Pressione botao 1 ou 2 para iniciar a comunicacao...");

    //Inicializa a comunicacao
    radio.begin();
    //Entra em modo de transmissao
    radio.openWritingPipe(pipe);
    }

    void loop()
    {
    //Envia o numero 1 caso o botao1 seja pressionado
    if (digitalRead(pino_botao1) == LOW)
    {
    Serial.println("Botao 1 pressionado !");
    dados[0] = 1;
    radio.write(dados, 1);
    }

    //Envia o numero 2 caso o botao2 seja pressionado
    if (digitalRead(pino_botao2) == LOW)
    {
    Serial.println("Botao 2 pressionado !");
    dados[0] = 2;
    radio.write(dados, 1);
    }
    }

    ResponderExcluir
  4. precisa de um alcance maior, o módulo rf 433 chega a 200 metros, eu precisava de um alcança de pelo menos 1km e área livre, alguma sugestão ?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Tente um APC220: www.filipeflop.com/pd-6b887-modulo-radio-wireless-apc220-adaptador-usb.html

      Abraço!

      Excluir
  5. Boa noite alguem pode me ajudar como eu faço pra baixar a biblioteca #include "nRF24L01.h"
    #include "RF24.h", grato

    ResponderExcluir
    Respostas
    1. Boa tarde,

      A biblioteca você encontra neste link: https://github.com/maniacbug/RF24

      Abraço

      Excluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. Hi Frank!

      Try this article, that I wrote for the Buildbot website: http://buildbot.com.br/blog/comunicacao-wireless-com-o-modulo-nrf24l01/

      Best regards !

      Excluir
    2. Este comentário foi removido pelo autor.

      Excluir
  7. GENTE ALGUEM PODE ME AJUDA. A PROGRAMAÇÃO ESTA OK. POREM NÃO FUNCIONA O RECEBITOR ELE ESTA LIGDO EM UM MEGA. E O EMISSOR ESTA EM UM NANO.. ALGUEM SABE ME DIZER COMO ARRUMAR.
    ESTA FUNCIONANDO TUDO DE ACORDO COM O POST. MAS INFELIZMENTE NADA FUNCIONA NÃO ENVIA OU NÃO ESTA RECEBENDO

    ResponderExcluir
  8. Amigos podem me ajudar estou usando o mesmo exemplo do post, só que preciso enviar o valor de um potenciômetro de 0 a 1024,
    O transmissor envia o valor 1024 mas no receptor aparece outro valor aleatório, gostaria de saber se tem alguma configuração que tenho que mexer para pode receber números grandes (tipo maiores que 1000).

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Você está declarando o valor do potenciômetro como int (inteiro) ?

      Abraço!

      Excluir
  9. Pessoal estou com um problema e muitas dúvidas.Tenho um projeto de automação residencial no qual tenho a seguinte estrutura:
    1 Arduino MEGA 2560 como central de controle. Conectada a ele um Shield de ethernet + LCD + nRF24L01.
    1 ou mais (n) Garaginos que comprei para cada ponto que quero controlar remotamente. Conectado a ele 1 módulo nRF24L01 + 1 ou mais sensores/reles, para controlar o que for necessário.
    O meu problema: no arduino MEGA onde tem o shield ethernet pelo que pesquisei, já muda a maneira como os pinos devem ser ligados tanto para o nRF24L01 quanto para o LCD pois o shield ethernet causava interferência no LCD e no caso do modulo RF ele utiliza a porta SPI nativa do arduino, impedindo a utilização dessa porta por outros modulos.
    Está difícil de encontrar alternativas na internet para fazer todas essas conexões. Algumas alternativas que minhas pesquisas indicaram: conectar o LCD utilizando um módulo Serial que reduziria a utilização de pinos. E também utilizar um módulo serial específico para o nRF24L01. Também achei um material que fala sobre conexão desse modulo RF utilizando SPI por software.
    Mas juntar todas essas informações e fazer funcionar é outra história.. rs
    Estou com dúvidas de qual biblioteca utilizar, como fazer o ajuste dos pinos que terei que mudar, como dizer isso a biblioteca... em fim.
    Alguém teria a bondade de me dar uma orientação? Se puder pode até ser pelo skype. Pois assim fica mais fácil explicar e mostrar o projeto no detalhe.

    Desde já agradeço a ajuda.
    Abs!

    ResponderExcluir
    Respostas
    1. Vou deixar ele conectado a um arduino nano, que por sua vez estara conectado ao shield Ethernet via RX, TX, livrando assim o meu Ethernet shield, seria assim: Mando ima string pela net que e recebido pelo shield que enviara via serial Para o nano que contem o transmissor que enviara Para outros receptores.

      Excluir
  10. Eu tentei o código e funcionou, porém só funciona o L várias vezes. Alguém sabe informar como se faz para quando o L é enviado o led acenda logo????

    ResponderExcluir
    Respostas
    1. George Harinson, da uma olhada no comentário que enviei.

      Excluir
  11. George, vc fez alguma alteração no codigo pra funcionar? Estou tentando aki acender apenas um led, mas o receptor nao recebe nada. Já verifiquei os módulos pelo exemplo da biblioteca Getting Started e eles estão funcionando normalmente. Alguém pode me ajudar??

    ResponderExcluir
  12. Código TRANSMISSOR:

    // Programa : NRF24L01 Emissor - Servo motor
    // Autor : Arduino e Cia

    #include
    #include "nRF24L01.h"
    #include "RF24.h"

    // Armazena caractere digitado na serial
    char valor[1];

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

    // Inicializa o NRF24L01 nos pinos 9 (CE) e 10 (CS) do Arduino Uno
    RF24 radio(9,10);

    // Define o endereco para comunicacao entre os modulos
    const uint64_t pipe = 0xE14BC8F482LL;

    void setup()
    {
    // Inicializa a serial
    Serial.begin(57600);
    Serial.println("Digite 1 e pressione ENVIAR...");

    // Inicializa a comunicacao do NRF24L01
    radio.begin();
    // Entra em modo de transmissao
    radio.openWritingPipe(pipe);
    }

    void loop()
    {
    // Le o caractere digitado na serial
    if (Serial.available() > 0)
    {
    valor[0] = Serial.read();
    }
    // Envia 1 via radio caso seja digitado o valor 1
    if (valor[0] == '1')
    {
    Serial.println("Enviado : 1 - ACENDE LED");
    dados[0] = 1;
    radio.write(dados, 1);
    delay(100);
    valor[0] = 0;
    }

    }
    }

    Código RECEPTOR:

    //Programa : Teste NRF24L01 - Receptor - Led
    //Autor : Adilson Thomsen

    #include
    #include "nRF24L01.h"
    #include "RF24.h"

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

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

    //Define o endereco para comunicacao entre os modulos
    const uint64_t pipe = 0xE14BC8F482LL;

    //Define os pinos dos leds
    int LED1 = 3;

    void setup()
    {
    //Define os pinos dos leds como saida
    pinMode(LED1, OUTPUT);
    //pinMode(LED2, OUTPUT);

    //Inicializa a serial
    Serial.begin(57600);

    //Inicializa a comunicacao
    radio.begin();
    //Entra em modo de recepcao
    radio.openReadingPipe(1,pipe);
    radio.startListening();
    Serial.println("Aguardando dados...");
    }

    void loop()
    {
    //Verifica se ha sinal de radio
    if (radio.available())
    {
    bool done = false;
    while (!done)
    {
    done = radio.read(recebidos, 1);
    Serial.print("Dados recebidos : ");
    Serial.print(recebidos[0]);

    //Se recebeu o numero 1, acende o LED1
    if (recebidos[0] == 1)
    {
    delay(10);
    Serial.println("ACENDE LED");
    digitalWrite(LED1, HIGH);
    }


    }
    }
    }

    ResponderExcluir
  13. Olá, gostaria de mover este servo com um potenciômetro alguém tem conhecimento de como ficaria o codigo?
    Obrigado.

    ResponderExcluir
  14. cheguei a alimentar os modulos com 5v sem querer ..... mais tirei rápido, pode ter queimado mesmo assim ? como saber se funcionam ainda ?

    ResponderExcluir
    Respostas
    1. Oi Natanael,

      Se foi por pouco tempo, creio que não, esses módulos tem uma certa tolerância à variações de tensão.

      Abraço!

      Excluir
  15. Boa tarde!

    Gostaria de controlar uma plataforma com duas rodas. Ao invés de funcionar como um controle remoto propriamente dito, aperto um botão no Master e no Slave vejo a resposta, gostaria que fosse armazenado as coordenadas de direção e após concluída a lógica, apertando um botão as informações fossem enviadas, armazenadas no Slave e executadas na mesma sequência setada no Master.

    É possível fazer isso com esse módulo?

    ResponderExcluir
    Respostas
    1. Oi Dimitry,

      Você vai ter que usar algum microcontrolador para armazenar as informações que você enviar pelo módulo. O módulo somente cuida da parte de comunicação, sem armazenar informações.

      Abraço!

      Excluir
    2. No caso o próprio Arduino faz esse trabalho?

      Excluir
    3. Oi Dimitry,

      O Arduino vai digamos fazer toda a parte, digamos, "pensante" do programa, com a lógica e o armazenamento de dados. O módulo NRF24L01 vai somente enviar os dados de um lado para o outro. Mas a princípio você terá que usar os dois, para ter uma solução completa.

      Abraço!

      Excluir
    4. Entendi! Por favor, veja o video abaixo que é o que estou querendo reproduzir e me diga se da pra fazer com esse módulo. Se for possível, quanto você cobraria para fazer apenas a programação? Estou desenvolvendo um projeto piloto na escola onde meu filho estuda para ensinar ciências da computação para crianças de 3 a 10 anos baseado no programa do Code.org, mas não tenho tanto conhecimento assim de programação para desenvolver algo do tipo. O projeto Cubetto e Open Source e eles usaram dois módulos Xbee para fazer a comunicação, mas esses módulos são muito caros para um projeto social.

      https://www.youtube.com/watch?v=xyHBRq504ZU&nohtml5=False

      Obrigado por sua atenção!

      Excluir
    5. Oi Dimitry,

      Muito interessante. Por favor entre em contato utilizando o formulário de contato no lado direito da página, assim combinamos por email.

      Abraço!

      Excluir
  16. Ola...Alguém sabe se é possível ouvir dois ou mais rádios(transmissores) ao mesmo tempo, preciso receber dados de 6 sensores mas não quero ficar alternando entre ouvir um e depois o outro, quero que se um transmitir ele pega os dados e depois volta a aguardar. Alguém sabe se é possível?

    ResponderExcluir
  17. se eu configurar 1 emissor e 3 receptores por exemplo..
    como devo proceder para enviar comandos distintos para cada placa??
    grato!

    ResponderExcluir
    Respostas
    1. Olá,

      Programe o Arduino emissor para enviar um código de controle antes, por exemplo R1 (receptor 1), R2 (receptor 2) e R3 (receptor 3), e no receptor, ele só será acionado quando receber o respectivo código.

      Abraço!

      Excluir
  18. alguém sabe alguma placa de comunicação que faz com que eu mando um comando pra ela há 20km de distancia via internet e ela faz ligar um motor ou acender uma lampada?

    ResponderExcluir
    Respostas
    1. Oi Guilherme,

      O que acha de usar um GSM shield ?

      http://www.arduinoecia.com.br/2015/11/acessar-internet-arduino-gsm-shield-sim-900.html

      Abraço!

      Excluir
  19. Olá pessoal... estava pesquisando sobre o nrf24l01 e vi que com ele é possível transmitir também audio (fone de ouvido)... nunca montei nada com arduíno... comprei várias coisas e estou aguardando a chegada... mas para não prolongar o assunto, alguém poderia me dar uma pista de como montar um sistema com essa aplicação? utilizarei 2 arduíno, 2 nrf24l01 (1 como receptor e outro como transmissor), 1 display em cada um deles.... enfim... a parte de amplificação de áudio depois é tranquila... mas acredito que terei que transformar o áudio no transmissor para algo digital de no receptor converte-lo para audio novamente... é isso mesmo? Caso alguém esteja com paciencia para um iniciante e quiser detalhar um pouco mais, gostaria de ter a lista toda de modulos e se possível configurações iniciais

    ResponderExcluir
    Respostas
    1. Oi Antonio,

      Encontrei uma biblioteca para o Arduino que trabalha com o envio de áudio em tempo real usando o NRF24L01, veja se te ajuda: http://tmrh20.github.io/RF24Audio/

      Abraço!

      Excluir
  20. Amigo, gostaria primeiramente parabenizar pelo post!
    Estou tendo problema na compilação do codigo do receptor, esta dando erro na linha done = radio.read(recebidos, 1); "void value not ignored as it ought to be" , poderia me ajudar?

    ResponderExcluir
  21. Muito bom.... Obrigado!!! Nesse final de semana brincarem com ele... tendo sucesso posto aqui!

    ResponderExcluir
    Respostas
    1. Olá você teve algum sucesso estou tentando aqui sem sucesso.

      Excluir
  22. ola, gostaria de saber se é possível mandar áudio pelo Arduíno com esse modulo? eu sei um que tem alcance de até 1 km, eu gostaria de fazer um walkie talkie

    ResponderExcluir
  23. olá gostaria de saber pq esse código nunca compila sempre dá erro na linha que tem: done = radio.read(recebidos, 1);
    juntamente com a mensagem "void value not ignored as it ought to be"

    ResponderExcluir
  24. Olá!

    Uma ajuda, poderiam indicar se estou no caminho certo?
    Gostaria de automatizar a Sala de Casa:

    - Central Arduino controlando tudo (Módulo ESP8266, Transceiver RF, Arduino Nano)
    -- 4 tomadas da sala (um único nó, com 4 Reles em série + Transceiver RF + Arduino Nano)
    -- Controle remoto TV, DVD... etc... (um único nó, com IR, Transceiver RF + Arduino Nano)
    -- Lampadas da Sala (três nós, cada qual com 2 reles em série + Transceiver RF + Arduino Nano)

    Os interruptores das lâmpadas seriam trocados todos por pushbuttons, assim, por exemplo, quando sair de casa posso apertar um único pushbutton perto da porta e ele indica para a central desligar a sala toda (desliga todas as tomadas, e todas as lampadas).

    A Central receberia um ESP8266 pois assim posso controlar pelo celular através de WebServer/HTML.

    Estou no caminho certo? O que acham?

    Parabéns pelo site e pelo seu conteúdo!

    ResponderExcluir
  25. Esse circuito só funciona com o mega? Tentei fazer com dois UNOS mas não está dando certo.

    ResponderExcluir
    Respostas
    1. Oi Olliver,

      Funciona com dois Uno´s sim... Minha dica: use fonte externa para alimentação. Esse módulo é bem "chato" no consumo de energia.

      Abraço!

      Excluir
  26. Olá, parabéns pelo post,
    estou tentando com dois nanos e não está rolando, na compilação aparece a mesma msg de erro do companheiro Henrique da silva que comentou dia 24 de agosto.
    ( done = radio.read(recebidos, 1);
    exit status 1
    void value not ignored as it ought to be)

    o que preciso estudar pra solucionar?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Eu tive alguns problemas sérios com esse módulo, por causa da alimentação dele, que puxa muita corrente.

      Você consegue testar usando uma fonte externa ?

      Abraço!

      Excluir
    2. A princípio o problema está na placa, por algum motivo ela não aceita o sketch (as duas placas são Arduino mini). A solução que compilou foi colocar o conteúdo atual do loop em uma função que retorna a leitura e chamar ela (função) no loop, farei testes com a compilação e SE der certo aviso. obrigado.

      Excluir