O nosso leitor já está familiarizado a fazer projetos em apenas uma placa Arduino, e só aí as possibilidade são infinitas, porém imagine agora a quantidade e a variedade de projetos possíveis de serem desenvolvidos se duas placas ou mais pudessem comunicar entre si sem a necessidade de fios entre elas. Essa é a principal funcionalidade do componente que abordaremos neste post: o Módulo Wireless NRF24L01+. Trataremos aqui sobre todas as suas características, principais funcionalidades, especificações e como utilizá-lo. Prontos para aprender? Bora lá!
NRF24L01 é um transceptor de rádio de chip único que opera dentro das faixas de frequência ISM (Industrial, Sientific and Medical) de 2,4 – 2,5 GHz. O transceptor consiste em um sintetizador de frequência totalmente integrado, um amplificador, um oscilador de cristal, um demodulador, modulador e o protocolo Enhanced ShockBurst ™. Sua potência de saída, canais de frequência e configuração de protocolo são facilmente programáveis por meio de uma interface SPI. O consumo de corrente é muito baixo, apenas 9,0 mA a uma potência de saída de -6 dBm e 12,3 mA no modo RX. Os modos de “desligamento integrado” (Built-in Power Down) e de “espera” (Standby) tornam a economia de energia facilmente realizável.
O módulo transceptor nRF24L01 + transmite e recebe dados em uma determinada frequência chamada Canal (channel). Além disso, para que dois ou mais módulos de transceptor se comuniquem, eles precisam estar no mesmo canal. Este canal pode ser qualquer frequência na banda ISM de 2,4 GHz ou, para ser mais preciso, pode estar entre 2,400 a 2,525 GHz.
Cada canal ocupa uma largura de banda de menos de 1 MHz. Isso nos dá 125 canais possíveis com espaçamento de 1 MHz. Assim, o módulo pode usar 125 canais diferentes que dão a possibilidade de ter uma rede de 125 modems trabalhando independentemente em um só lugar.
Quando conectado a um microcontrolador, o módulo nRF24L01 + usa o protocolo de comunicação Serial Peripheral Interface (SPI) que usa o conceito de mestre e escravo. Na maioria das aplicações, o Arduino é o mestre e o módulo transceptor nRF24L01 + é o escravo. O número de escravos no barramento SPI é limitado e para o Arduino Uno é possível ter no máximo dois dispositivos escravos SPI, ou seja, dois módulos transceptores nRF24L01 +.
A prática que será desenvolvida aqui tem o intuito de familiarizar o leitor com as funcionalidades do NRF24L01+. Ela consiste em estabelecer uma comunicação entre um módulo cliente e um servidor que são capazes de mandarem mensagem entre si. Para isso, é necessário baixar e instalar a biblioteca RadioHead. Para isso, basta acessar o link a seguir e clicar no local indicado na imagem para fazer o download da biblioteca.
airspayce.com/mikem/arduino/RadioHead/
Feito isso, abra sua IDE e instale a biblioteca baixada. Para isso, clique em Sketch->Incluir Biblioteca->Adicionar biblioteca .ZIP. Encontre a zip file da biblioteca no seu computador e instale-a.
Os materiais necessários para a realização desta prática são os seguintes:
O diagrama do projeto está detalhado a seguir. As conexões do servidor e do cliente são as mesmas.
ATENÇÃO: Concecte o Vcc do módulo na saída de 3,3 V do Arduino. NUNCA conecte o módulo aos 5 V do Arduino, fazer isso pode queimar seu módulo!
Os pinos são:
O pino IRQ do módulo não será usado.
Os códigos utilizados aqui são exemplos incluídos na biblioteca que foi baixada. Serão utilizados dois códigos aqui, um para o cliente e outro para o servidor. Para acessar o código do cliente, basta abrir sua IDE e ir em Arquivo->Exemplos->RadioHead->nrf24->nrf24_client.
Ou se preferir, basta copiar o código abaixo.
// nrf24_client.pde // -*- mode: C++ -*- // Example sketch showing how to create a simple messageing client // with the RH_NRF24 class. RH_NRF24 class does not provide for addressing or // reliability, so you should only use RH_NRF24 if you do not need the higher // level messaging abilities. // It is designed to work with the other example nrf24_server. // Tested on Uno with Sparkfun NRF25L01 module // Tested on Anarduino Mini (http://www.anarduino.com/mini/) with RFM73 module // Tested on Arduino Mega with Sparkfun WRL-00691 NRF25L01 module #include <SPI.h> #include <RH_NRF24.h> // Singleton instance of the radio driver RH_NRF24 nrf24; // RH_NRF24 nrf24(8, 7); // use this to be electrically compatible with Mirf // RH_NRF24 nrf24(8, 10);// For Leonardo, need explicit SS pin // RH_NRF24 nrf24(8, 7); // For RFM73 on Anarduino Mini void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial port to connect. Needed for Leonardo only if (!nrf24.init()) Serial.println("init failed"); // Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm if (!nrf24.setChannel(1)) Serial.println("setChannel failed"); if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF failed"); } void loop() { Serial.println("Sending to nrf24_server"); // Send a message to nrf24_server uint8_t data[] = "Hello World!"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); // Now wait for a reply uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.waitAvailableTimeout(500)) { // Should be a reply message for us now if (nrf24.recv(buf, &len)) { Serial.print("got reply: "); Serial.println((char*)buf); } else { Serial.println("recv failed"); } } else { Serial.println("No reply, is nrf24_server running?"); } delay(400); }
Já o código do servidor é possível ser encontrado em Arquivo->Exemplos->RadioHead->nrf24->nrf_server.
O código também se encontra abaixo.
// nrf24_server.pde // -*- mode: C++ -*- // Example sketch showing how to create a simple messageing server // with the RH_NRF24 class. RH_NRF24 class does not provide for addressing or // reliability, so you should only use RH_NRF24 if you do not need the higher // level messaging abilities. // It is designed to work with the other example nrf24_client // Tested on Uno with Sparkfun NRF25L01 module // Tested on Anarduino Mini (http://www.anarduino.com/mini/) with RFM73 module // Tested on Arduino Mega with Sparkfun WRL-00691 NRF25L01 module #include <SPI.h> #include <RH_NRF24.h> // Singleton instance of the radio driver RH_NRF24 nrf24; // RH_NRF24 nrf24(8, 7); // use this to be electrically compatible with Mirf // RH_NRF24 nrf24(8, 10);// For Leonardo, need explicit SS pin // RH_NRF24 nrf24(8, 7); // For RFM73 on Anarduino Mini void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial port to connect. Needed for Leonardo only if (!nrf24.init()) Serial.println("init failed"); // Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm if (!nrf24.setChannel(1)) Serial.println("setChannel failed"); if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF failed"); } void loop() { if (nrf24.available()) { // Should be a message for us now uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.recv(buf, &len)) { // NRF24::printBuffer("request: ", buf, len); Serial.print("got request: "); Serial.println((char*)buf); // Send a reply uint8_t data[] = "And hello back to you"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); Serial.println("Sent a reply"); } else { Serial.println("recv failed"); } } }
Após carregar o código do cliente em uma placa e o do servidor na outra, basta rodar os códigos e abrir o monitor serial para conferir os resultados. Eles devem ser semelhantes aos da imagem abaixo.
Crédito: DroneBot Workshop
Se o leitor estiver interessado em aprofundar ainda mais seus conhecimentos neste módulo super prático e quiser desenvolver um projeto mais complexo utilizando os conhecimentos adquiridos aqui, indico fortemente que acesse nosso post sobre Radio Controle! Nele, é desenvolvido uma comunicação entre um carro e um controle remoto justamente com uma variante do Módulo Wireless NRF24L01+, ótimo para aprender ainda mais. Confira!
A partir do post acima, foi possível compreender um pouco mais sobre a aplicação do Módulo Wireless NRF24L01+, bem como seu funcionamento e as vantagens de sua utilização. Se o leitor se interessou pela implementação prática do projeto, acredito que gostará dos seguintes posts relacionados:
Curtiu o post? Avalie e deixe um comentário!
Siga-nos também no Instagram e nos marque quando fizer algum projeto nosso: @eletrogate.
Até a próxima!
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!