- O Módulo RF nRF24L01
- Diagrama de circuito
- Programando Raspberry Pi para enviar mensagem usando nRF24l01
- Programando Arduino UNO para receber mensagens usando nRF24l01
Os designers usam muitos sistemas de comunicação sem fio como Bluetooth Low Energy (BLE 4.0), Zigbee, Módulos Wi-Fi ESP8266, Módulos RF 433MHz, Lora, nRF etc. E a seleção do meio depende do tipo de aplicação em que está sendo usado. Ao todo, um meio sem fio popular para comunicação de rede local é o nRF24L01. Esses módulos operam em 2,4 GHz (banda ISM) com taxa de transmissão de 250 Kbps a 2 Mbps, o que é legal em muitos países e pode ser usado em aplicações industriais e médicas. Também é afirmado que, com antenas adequadas, esses módulos podem transmitir e receber sinais até uma distância de 100 metros entre eles. Anteriormente, usamos o nRF24L01 com o Arduino para controlar o servo motor e criar uma sala de bate-papo.
Aqui, usaremos nRF24L01 - módulo Transceiver RF de 2,4 GHz com Arduino UNO e Raspberry Pi para estabelecer uma comunicação sem fio entre eles. O Raspberry pi atuará como um transmissor e o Arduino Uno ouvirá o Raspberry Pi e imprimirá a mensagem enviada pelo Raspberry Pi usando o nRF24L01 em um LCD 16x2. nRF24L01 também tem recursos BLE embutidos e também pode se comunicar sem fio usando BLE.
O tutorial é dividido em duas seções. A primeira seção incluirá a interface de nRF24L01 com Arduino para atuar como receptor e a segunda seção incluirá a interface de nRF24L01 com Raspberry Pi para atuar como transmissor. O código completo para ambas as seções com o vídeo de trabalho será anexado no final deste tutorial.
O Módulo RF nRF24L01
Os módulos nRF24L01 são módulos transceptores, o que significa que cada módulo pode enviar e receber dados, mas, como são half-duplex, podem enviar ou receber dados ao mesmo tempo. O módulo possui o IC genérico nRF24L01 da Nordic semicondutores que é responsável pela transmissão e recepção de dados. O IC se comunica usando o protocolo SPI e, portanto, pode ser facilmente conectado a qualquer microcontrolador. Fica muito mais fácil com o Arduino, pois as bibliotecas estão prontamente disponíveis. A pinagem de um módulo nRF24L01 padrão é mostrada abaixo
O módulo tem voltagem operacional de 1,9 V a 3,6 V (normalmente 3,3 V) e consome muito menos corrente de apenas 12 mA durante a operação normal, o que o torna eficiente em bateria e, portanto, pode até funcionar com células tipo moeda. Mesmo que a tensão de operação seja de 3,3 V, a maioria dos pinos é tolerante a 5 V e, portanto, podem ter interface direta com microcontroladores de 5 V como o Arduino. Outra vantagem de usar esses módulos é que, cada módulo possui 6 Pipelines. Ou seja, cada módulo pode se comunicar com 6 outros módulos para transmitir ou receber dados. Isso torna o módulo adequado para criar redes em estrela ou em malha em aplicativos de IoT. Além disso, eles têm uma ampla faixa de endereços de 125 IDs exclusivos, portanto, em uma área fechada, podemos usar 125 desses módulos sem interferir uns com os outros.
Diagrama de circuito
nRF24L01 com Arduino:
O diagrama de circuito para conectar nRF24L01 com Arduino é fácil e não tem muitos componentes. O nRF24l01 será conectado pela interface SPI e o LCD 16x2 é conectado ao protocolo I2C que usa apenas dois fios.
nRF24L01 com Raspberry Pi:
O diagrama de circuito para conectar nRF24L01 com Raspberry Pi também é muito simples e apenas a interface SPI é usada para conectar Raspberry Pi e nRF24l01.
Programando Raspberry Pi para enviar mensagem usando nRF24l01
A programação do Raspberry Pi será feita em Python3. Você também pode usar C / C ++ como Arduino. Mas já existe uma biblioteca disponível para nRF24l01 em python que pode ser baixada da página do github. Observe que o programa python e a biblioteca devem estar na mesma pasta ou o programa python não será capaz de encontrar a biblioteca. Depois de baixar a biblioteca basta extrair e fazer uma pasta onde todos os programas e arquivos da biblioteca serão armazenados. Quando a instalação da biblioteca estiver concluída, apenas comece a escrever o programa. O programa começa com a inclusão de bibliotecas que serão utilizadas em códigos como biblioteca GPIO de importação para acesso aos GPIOs Raspberry Pi e tempo de importação para acessar as funções relacionadas ao tempo. Se você é novo no Raspberry Pi, volte aos primeiros passos com o Raspberry Pi.
import RPi.GPIO como GPIO import time import spidev from lib_nrf24 import NRF24
Defina o modo GPIO no " canal Broadcom SOC". Isso significa que você está se referindo aos pinos pelo número "Broadcom SOC channel", estes são os números depois de "GPIO" (por exemplo, GPIO01, GPIO02…). Estes não são os números do conselho.
GPIO.setmode (GPIO.BCM)
Em seguida, vamos configurar o endereço do pipe. Esse endereço é importante para a comunicação com o receptor Arduino. O endereço estará em código hexadecimal.
tubos =,]
Comece o rádio usando GPIO08 como CE e GPIO25 como pinos CSN.
radio.begin (0, 25)
Defina o tamanho da carga útil como 32 bits, endereço do canal como 76, taxa de dados de 1 Mbps e níveis de potência como mínimo.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Abra os tubos para começar a escrever os dados e imprimir os detalhes básicos do nRF24l01.
radio.openWritingPipe (tubos) radio.printDetails ()
Prepare uma mensagem na forma de string. Esta mensagem será enviada para o Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") enquanto len (sendMessage) <32: sendMessage.append (0)
Comece a escrever para o rádio e continue escrevendo a sequência completa até que o rádio esteja disponível. Junto com ele, anote a hora e imprima uma instrução de depuração da entrega da mensagem.
enquanto True: start = time.time () radio.write (sendMessage) print ("Enviou a mensagem: {}". format (sendMessage)) send radio.startListening ()
Se a string for concluída e o tubo for fechado, imprima uma mensagem de depuração de tempo limite esgotado.
while not radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Timed out.") # imprimir mensagem de erro se o rádio estiver desconectado ou não funcionar mais interromper
Pare de ouvir o rádio e feche a comunicação e reinicie a comunicação após 3 segundos para enviar outra mensagem.
radio.stopListening () # close radio time.sleep (3) # dá um atraso de 3 segundos
O programa Raspberry é simples de entender se você conhece os fundamentos do python. O programa Python completo é fornecido no final do tutorial.
Executando o Programa Python no Raspberry Pi:
Executar o programa é muito fácil após seguir as etapas abaixo:
- Salve o programa Python e os arquivos de biblioteca na mesma pasta.
- Meu nome de arquivo de programa para Sender é nrfsend.py e também todos os arquivos estão na mesma pasta
- Vá para o Terminal de Comando do Raspberry Pi. E localize o arquivo de programa python usando o comando “cd”.
- Em seguida, abra a pasta e escreva o comando “ sudo python3 your_program.py ” e pressione Enter. Você poderá ver os detalhes básicos do nRf24 e o rádio começará a enviar as mensagens a cada 3 segundos. A mensagem de depuração será exibida após o envio de todos os caracteres enviados.
Agora veremos o mesmo programa como receptor no Arduino UNO.
Programando Arduino UNO para receber mensagens usando nRF24l01
Programar o Arduino UNO é semelhante a programar o Raspberry Pi. Seguiremos métodos semelhantes, mas com linguagem de programação e etapas diferentes. As etapas incluirão a parte de leitura do nRF24l01. A biblioteca para nRF24l01 para Arduino pode ser baixada da página do github. Comece incluindo as bibliotecas necessárias. Estamos usando LCD 16x2 usando I2C Shield, então inclua a biblioteca Wire.h e também o nRF24l01 tem interface com SPI, então inclua a biblioteca SPI.
#incluir
Inclui RF24 e biblioteca de LCD para acessar as funções de RF24 e LCD.
#incluir
O endereço do LCD para I2C é 27 e é um LCD de 16x2, então escreva isso na função.
LiquidCrystal_I2C lcd (0x27, 16, 2);
O RF24 é conectado com pinos SPI padrão junto com CE no pino 9 e CSN no pino 10.
Rádio RF24 (9, 10);
Ligue o rádio, defina o nível de potência e defina o canal para 76. Defina também o endereço do tubo como Raspberry Pi e abra o tubo para ler.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, tubo);
Comece a comunicação I2C e inicialize o display LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Pronto para receber");
Comece a ouvir o rádio para receber mensagens e defina o comprimento da mensagem como 32 bytes.
radio.startListening (); char receivedMessage = {0}
Se o rádio estiver conectado, comece a ler a mensagem e salve-a. Imprima a mensagem para o monitor serial e também para o display até que a próxima mensagem chegue. Pare o rádio para ouvir e tente novamente após algum intervalo. Aqui está 10 micro segundos.
if (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (receivedMessage); Serial.println ("Desligando o rádio."); radio.stopListening (); String stringMessage (receivedMessage); lcd.clear (); atraso (1000); lcd.print (stringMessage); }
Carregue o código completo fornecido ao final para o Arduino UNO e aguarde o recebimento da mensagem.
Isso conclui o tutorial completo sobre como enviar uma mensagem usando Raspberry Pi & nRf24l01 e recebê-la usando Arduino UNO & nRF24l01. A mensagem será impressa no LCD 16x2. Os endereços dos tubos são muito importantes no Arduino UNO e no Raspberry Pi. Se você enfrentar qualquer dificuldade ao fazer este projeto, por favor, comente abaixo ou entre em nosso fórum para uma discussão mais detalhada.
Verifique também o vídeo de demonstração abaixo.