- nRF24L01 RF 모듈
- 회로도
- nRF24l01을 사용하여 메시지를 보내도록 Raspberry Pi 프로그래밍
- nRF24l01을 사용하여 메시지를 수신하도록 Arduino UNO 프로그래밍
설계자는 Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi 모듈, 433MHz RF 모듈, Lora, nRF 등과 같은 많은 무선 통신 시스템을 사용합니다. 매체 선택은 사용중인 애플리케이션 유형에 따라 다릅니다. 모두, 로컬 네트워크 통신에 널리 사용되는 무선 매체 중 하나는 nRF24L01 입니다. 이 모듈은 2.4GHz (ISM 대역)에서 250Kbps ~ 2Mbps의 전송 속도로 작동하며 이는 많은 국가에서 합법적이며 산업 및 의료 애플리케이션에서 사용할 수 있습니다. 또한 적절한 안테나를 사용하면 이러한 모듈이 최대 100 미터 거리까지 신호를 송수신 할 수 있다고 주장합니다. 이전에 Arduino와 함께 nRF24L01을 사용하여 서보 모터를 제어하고 대화방을 만들었습니다.
여기서는 Arduino UNO 및 Raspberry Pi 가있는 2.4GHz RF 트랜시버 모듈 인 nRF24L01 을 사용 하여 이들 간의 무선 통신을 설정합니다. Raspberry pi는 송신기 역할을하고 Arduino Uno는 Raspberry Pi를 수신하고 16x2 LCD에서 nRF24L01을 사용하여 Raspberry Pi가 보낸 메시지를 인쇄합니다. nRF24L01은 또한 BLE 기능이 내장되어 있으며 BLE를 사용하여 무선으로 통신 할 수도 있습니다.
튜토리얼은 두 섹션으로 나뉩니다. 첫 번째 섹션에는 수신기 역할을하는 Arduino와의 nRF24L01 인터페이스 가 포함되고 두 번째 섹션에는 송신기 역할을하는 Raspberry Pi와 nRF24L01 의 인터페이스 가 포함됩니다. 작동하는 비디오가있는 섹션의 전체 코드는이 튜토리얼의 끝에 첨부됩니다.
nRF24L01 RF 모듈
해 nRF24L01 모듈 이다 트랜시버 모듈 각 모듈을 의미 할 수있는 전송 및 데이터 모두를 수신하지만이 때문에 그들 중 전송하거나 시간에 데이터를 수신 할 수있다 반이중. 이 모듈에는 데이터 전송 및 수신을 담당하는 Nordic 반도체의 일반 nRF24L01 IC가 있습니다. IC는 SPI 프로토콜을 사용하여 통신하므로 모든 마이크로 컨트롤러와 쉽게 인터페이스 할 수 있습니다. 라이브러리를 쉽게 사용할 수 있기 때문에 Arduino를 사용하면 훨씬 쉬워집니다. 표준 nRF24L01 모듈 의 핀아웃 은 다음과 같습니다.
이 모듈은 1.9V ~ 3.6V (일반적으로 3.3V)의 작동 전압을 가지며 정상 작동 중에 12mA의 매우 적은 전류를 소비하므로 배터리 효율이 높아져 코인 셀에서도 작동 할 수 있습니다. 작동 전압이 3.3V이지만 대부분의 핀은 5V를 허용하므로 Arduino와 같은 5V 마이크로 컨트롤러와 직접 인터페이스 할 수 있습니다. 이러한 모듈 사용의 또 다른 장점은 각 모듈에 6 개의 파이프 라인이 있다는 것입니다. 즉, 각 모듈은 6 개의 다른 모듈과 통신하여 데이터를 송수신 할 수 있습니다. 따라서이 모듈은 IoT 애플리케이션에서 스타 또는 메시 네트워크를 생성하는 데 적합합니다. 또한 125 개의 고유 ID의 넓은 주소 범위를 가지고 있으므로 폐쇄 된 영역에서 서로 간섭하지 않고 125 개의 모듈을 사용할 수 있습니다.
회로도
Arduino가있는 nRF24L01:
nRF24L01을 Arduino와 연결하기위한 회로도는 쉽고 구성 요소가 많지 않습니다. NRF24L01는 SPI 인터페이스에 의해 접속 될 것이다 및 16 ×의 LCD는 두 개의 와이어를 사용 I2C 프로토콜과 인터페이스된다.
Raspberry Pi가있는 nRF24L01:
nRF24L01을 Raspberry Pi와 연결하는 회로도도 매우 간단하며 SPI 인터페이스 만 사용하여 Raspberry Pi와 nRF24l01을 연결합니다.
nRF24l01을 사용하여 메시지를 보내도록 Raspberry Pi 프로그래밍
Raspberry Pi의 프로그래밍은 Python3을 사용하여 수행됩니다. C / C ++를 Arduino로 사용할 수도 있습니다. 그러나 github 페이지에서 다운로드 할 수있는 python의 nRF24l01 라이브러리가 이미 있습니다. 파이썬 프로그램과 라이브러리는 같은 폴더에 있어야합니다. 그렇지 않으면 파이썬 프로그램이 라이브러리를 찾을 수 없습니다. 라이브러리를 다운로드 한 후 모든 프로그램과 라이브러리 파일이 저장 될 폴더를 추출하고 만드십시오. 라이브러리 설치가 완료되면 프로그램 작성을 시작하십시오. 이 프로그램 은 Raspberry Pi GPIO 및 가져 오기 시간 에 액세스하기 위해 GPIO 라이브러리 가져 오기와 같은 코드에 사용되는 라이브러리를 포함하는 것으로 시작됩니다. 시간 관련 기능에 액세스합니다. Raspberry Pi를 처음 사용하는 경우 Raspberry Pi 시작으로 돌아가십시오.
RPi.GPIO를 GPIO로 가져 오기 가져 오기 시간 lib_nrf24 에서 spidev 가져 오기 NRF24 가져 오기
" Broadcom SOC 채널" 에서 GPIO 모드를 설정합니다 . 이는 "Broadcom SOC 채널"번호로 핀을 참조하고 있음을 의미합니다. 이는 "GPIO"다음의 번호입니다 (예: GPIO01, GPIO02…). 이것은 보드 번호가 아닙니다.
GPIO.setmode (GPIO.BCM)
다음으로 파이프 주소를 설정합니다. 이 주소는 Arduino 수신기와 통신하기 위해 중요합니다. 주소는 16 진수 코드에 있습니다.
파이프 =,]
GPIO08을 CE로, GPIO25를 CSN 핀으로 사용하여 무선을 시작합니다.
radio.begin (0, 25)
페이로드 크기를 32 비트로, 채널 주소를 76으로, 데이터 속도를 1mbps로, 전력 수준을 최소로 설정합니다.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
파이프를 열어 데이터 쓰기를 시작하고 nRF24l01의 기본 세부 정보를 인쇄합니다.
radio.openWritingPipe (pipes) radio.printDetails ()
문자열 형식으로 메시지를 준비합니다. 이 메시지는 Arduino UNO로 전송됩니다.
sendMessage = list ("Hi..Arduino UNO") while len (sendMessage) <32: sendMessage.append (0)
라디오에 쓰기를 시작하고 라디오를 사용할 수있을 때까지 전체 문자열을 계속 작성하십시오. 이와 함께 시간을 기록하고 메시지 전달에 대한 디버그 설명을 인쇄하십시오.
while True: start = time.time () radio.write (sendMessage) print ("메시지를 보냈습니다: {}". format (sendMessage)) send radio.startListening ()
문자열이 완료되고 파이프가 닫히면 타임 아웃 된 디버그 메시지를 인쇄합니다.
반면 radio.available (0): time.sleep (1/100) 로 time.time () 경우 - 시작> 2: 인쇄 ("시간이 초과되었습니다.") # 인쇄 오류 메시지가 무선 연결이 끊어 또는 더 이상 작동하지 않을 경우 중단
라디오 청취를 중지하고 통신을 닫고 3 초 후에 통신을 다시 시작하여 다른 메시지를 보냅니다.
radio.stopListening () # 라디오 닫기 time.sleep (3) # 3 초 지연
Raspberry 프로그램은 파이썬의 기초를 알고 있다면 이해하기 쉽습니다. 완전한 Python 프로그램 은 튜토리얼의 끝에 제공됩니다.
Raspberry Pi에서 Python 프로그램 실행:
아래 단계를 따르면 프로그램을 실행하는 것은 매우 쉽습니다.
- Python 프로그램 및 라이브러리 파일을 동일한 폴더에 저장합니다.
- Sender의 프로그램 파일 이름은 nrfsend.py 이며 모든 파일이 동일한 폴더에 있습니다.
- Raspberry Pi의 명령 터미널로 이동합니다. 그리고“cd”명령을 사용하여 파이썬 프로그램 파일을 찾습니다.
- 그런 다음 폴더를 열고 " sudo python3 your_program.py " 명령을 작성 하고 Enter 키를 누르십시오. nRf24의 기본 세부 정보를 볼 수 있으며 무전기는 3 초마다 메시지를 보내기 시작합니다. 메시지 디버그는 전송 된 모든 문자로 전송이 완료된 후 표시됩니다.
이제 Arduino UNO에서 수신기와 동일한 프로그램을 볼 수 있습니다.
nRF24l01을 사용하여 메시지를 수신하도록 Arduino UNO 프로그래밍
Arduino UNO 프로그래밍은 Raspberry Pi 프로그래밍과 유사합니다. 유사한 방법을 따르지만 프로그래밍 언어와 단계가 다릅니다. 단계에는 nRF24l01의 읽기 부분이 포함됩니다. Arduino 용 nRF24l01 라이브러리는 github 페이지에서 다운로드 할 수 있습니다. 필요한 라이브러리를 포함하는 것으로 시작하십시오. 우리는 I2C Shield를 사용하여 16x2 LCD를 사용하고 있으므로 Wire.h 라이브러리를 포함하고 nRF24l01 도 SPI와 인터페이스되므로 SPI 라이브러리를 포함합니다.
#포함
RF24 및 LCD 기능에 액세스하기위한 RF24 및 LCD 라이브러리를 포함합니다.
#포함
I2C의 LCD 주소는 27이고 16x2 LCD이므로이를 함수에 쓰십시오.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24는 핀 9의 CE 및 핀 10의 CSN과 함께 표준 SPI 핀과 연결됩니다.
RF24 라디오 (9, 10);
라디오를 시작하고 전원 레벨을 설정하고 채널을 76으로 설정합니다. 또한 파이프 주소를 Raspberry Pi와 동일하게 설정하고 파이프를 열어 읽을 수 있습니다.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t 파이프 = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pipe);
I2C 통신을 시작하고 LCD 디스플레이를 초기화합니다.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("수신 준비 완료");
수신 메시지에 대한 라디오 청취를 시작하고 메시지 길이를 32 바이트로 설정합니다.
radio.startListening (); 수신 된 문자 메시지 = {0}
라디오가 연결되어 있으면 메시지를 읽고 저장하십시오. 직렬 모니터에 메시지를 인쇄하고 다음 메시지가 도착할 때까지 디스플레이에 인쇄합니다. 라디오를 중지하고 잠시 후에 다시 시도하십시오. 여기는 10 마이크로 초입니다.
if (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (receivedMessage); Serial.println ("라디오를 끕니다."); radio.stopListening (); 문자열 stringMessage (receivedMessage); lcd.clear (); 지연 (1000); lcd.print (stringMessage); }
끝에 제공된 전체 코드 를 Arduino UNO에 업로드하고 메시지가 수신 될 때까지 기다립니다.
이것으로 Raspberry Pi 및 nRf24l01을 사용하여 메시지를 보내고 Arduino UNO 및 nRF24l01을 사용하여 메시지를받는 방법에 대한 전체 자습서를 마쳤습니다. 메시지는 16x2 LCD에 인쇄됩니다. 파이프 주소는 Arduino UNO와 Raspberry Pi 모두에서 매우 중요합니다. 이 프로젝트를 수행하는 동안 어려움이 있으면 아래에 의견을 말하거나 포럼에 연락하여 더 자세한 토론을하십시오.
또한 아래 데모 비디오를 확인하십시오.