nRF24L01+ driver class
Optimized high speed nRF24L01+ driver class documentation v1.4.0 요약본
(https://nrf24.github.io/RF24/classRF24.html#a127105eb7a3b351cfe777c1cec50627a)
RF24 (uint16_t _cepin, uint16_t _cspin, uint32_t _spi_speed=RF24_SPI_SPEED)
RF24 생성자. 이 드라이버의 새로운 인스턴스를 만든다. 사용하기 전에 이 인스턴스를 만들고, 이 칩이 연결된 고유 핀들을 보낸다.
(매개변수)
_cepin : RF 모듈의 Chip Enable에 연결된 핀
_cspin : RF 모듈의 Chip Select (종종 CSN이라고도 함)에 연결된 핀
_spi_speed : SPI speed in Hz ie: 1000000 == 1Mhz
(사용예)
RF24 radio(22, 0);
사용자는 RF24_config.h에 정의되어 있는 #define RF24_SPI_SPEED를 수정하여 SPI 속도를 지정할 수 있다.
Arduino의 경우, 기본 SPI 속도는 SPI TRANSICTIONS을 지원하는 장치에서만 이러한 방식으로 올바르게 구성된다. 이전 / 지원되지 않는 Arduino 장치는 기본 클록 분배기 및 설정 구성을 사용한다.
Linux의 경우 : BCM2835 드라이버 열거를 사용하여 SPI 속도를 설정하는 이전 방법은 v1.3.7부터 제거되었다.
bool RF24::available(void)
읽을 수 있는 바이트가 있는지 검사한다.
(반환값)
만약 페이로드가 있으면 true, 없으면 false를 반환한다.
bool RF24::available(uint8_t* pipe_num)
읽을 수 있는 바이트가 있는지 검사한다.
이 메소드는 메시지가 도착한 파이프를 찾을 때 사용한다.
(매개변수)
[out] pipe_num : 사용가능한 페이로드가 있는 파이프
(반환값)
만약 페이로드가 있으면 true, 없으면 false를 반환한다.
bool RF24::begin(void)
칩이 동작을 시작한다.
다른 메소드를 호출하기 전에 이 메소드를 호출하라.
(사용예)
radio.begin();
(반환값)
radio 인스턴스가 성공적으로 초기화되면 true를, MCU가 RF 하드웨어와 통신을 하지 못한 경우에는 false를 반환한다.
void RF24::enableDynamicPayloads(void)
페이로드의 사이즈를 동적으로 활성화한다. 모든 파이프에서 동적 페이로드를 사용할 수 있다.
(사용예)
radio.enableDynamicPayloads();
uint8_t RF24::getDynamicPayloadSize(void)
동적인 페이로드 사이즈를 받아온다.
동적인 페이로드에 대해서, 이 메소드는 칩에서 페이로드의 사이즈를 알아냅니다.
(반환값)
마지막으로 수신된 동적인 패이로드의 길이
void RF24::openReadingPipe(uint8_t number, uint64_t address)
데이터를 읽기위해 파이프를 연다.
한 번에 최대 6개 파이프까지 읽어올 수 있다. 데이터를 읽기위한 모든 파이프를 열었으면 startListen() 메소드를 호출한다.
(주의)
파이프 1-5은 첫 32비트를 공유해야한다. 마지막 한 바이트만 다르게 사용할 수 있다.
openReadingPipe(1, 0xF0F1F2F3AA);
openReadingPipe(2, 0xF0F1F2F366);
파이프 0은 쓰기 파이프에도 사용된다. 그래서 만약 파이프 0을 읽기위해 열고 startListening()한다면, 쓰기 파이프를 덮어쓸 것이다. 따라서, write()를 사용하기 전에 openWritingPipe()를 수행하라.
(매개변수)
number : 열기위한 파이프 번호, 0-5
address : 열기위한 파이프의 40-bit 주소
void RF24::openWritingPipe(uint64_t address)
데이터를 쓰기위한 파이프를 연다.
한 번에 하나의 파이프만 열 수 있다. 하지만, 듣고자 하는 파이프를 바꿀 수는 있다.
이 메소드를 'listening'이 활성화 되어있는 상태에서는 호출하지 말라. stopListening()이 항상 먼저임을 기억하라.
주소는 40-bit 16진수 값이다.
(예) openWritingPipe(0xF0F1F2F3F4)
(매개변수)
address : 열기위한 파이프의 40-bit 주소. 그 주소에 값을 쓰는 사람이 당신이 유일하고, 그 주소로 듣는 radio가 유일하다면 그 주소값은 어떤 값이든 될 수 있다. 네트워크 노드간 이 파이프 주소를 편성하시오.
void RF24::printDetails(void)
거대한 디버깅 정보 블록을 표준출력(stdout)을 통해 프린트한다.
(주의)
stdout이 정의되지 않은 경우 아무 작업도 수행하지 않는다. stdio.h의 fdevopen을 참조하라.
void RF24::read(void* buf, uint8_t len)
페이로드를 읽어온다. 마지막으로 수신된 페이로드를 반환한다.
읽어올 데이터의 사이즈는 고정된 페이로드 사이즈이다. getPayloadSize()를 참조하라.
(매개변수)
buf : 데이터가 쓰여야 할 버퍼의 포인터
len : 버퍼로 읽어올 최대 바이트 수 (==버퍼에 최대 몇 바이트의 데이터를 쓸것인가?)
void RF24::setAutoAck(bool enable)
모든 파이프에 대해 자동 Ack 기능을 활성화/비활성화 한다. 이 기능은 기본적으로 활성화되어 있다.
자동 Ack 기능은 수신된 모든 페이로드에 대해 빈 Ack 패킷으로 응답한다.
이 Ack 패킷은 수신 radio에서 송신 radio로 다시 전송된다.
Ack 패킷에 Ack 페이로드를 첨부하려면 writeAckPayload()를 사용해야한다.
만약 송신 radio에서 이 기능이 비활성화되었다면, 송신 radio는 항상 페이로드가 수신되었다고 보고한다. 실제로 페이로드를 수신하지 못한 경우에도 수신되었다고 보고한다.
이 기능의 설정은 송신과 수신 radio들을 위해 매치(match) 시킬 필요가 있다.
(사용예)
radio.setAutoAck(1);
void RF24::setChannel(uint8_t channel)
RF 통신 채널을 설정한다.
(매개변수)
channel : 0-127 중 하나
void RF24::setCRCLength(rf24_crclength_e length)
CRC 길이 설정
(매개변수)
length : RF24_CRC_8 for 8-bit 또는 RF24_CRC_16 for 16-bit
bool RF24::setDataRate(rf24_datarate_e speed)
데이터 전송 속도를 설정한다.
(주의)
non-plus units에 대해서는 RF24_250KBPS 설정은 실패할 것이다.
(매개변수)
speed : RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps, or RF24_2MBPS for 2Mbps
(반환값)
설정이 성공하였으면 true를 반환
void RF24::setPALevel(rf24_pa_dbm_e level)
4가지 출력 레벨 중 하나를 설정한다.
향후 PA 레벨 변경을 허용하기 위해 상대적인 니모닉이 사용되었다. nRF24L01+ 데이터시트 6.5 PA Control에 따르면,
RF24_PA_MIN = -18dBm, RF24_PA_LOW = -12dBm, RF24_PA_HIGH = -6dBm, RF24_PA_MAX = 0dBm이다.
(매개변수)
level : 원하는 PA 레벨(니모닉)
void RF24::setPayloadSize(uint8_t size)
고정된 페이로드 사이즈를 설정한다.
이 메소드는 모든 전송에 대해 미리 설정된 고정 페이로드 사이즈를 사용한다. 만약 이 메소드를 호출하지 않으면 write() 메소드가 얼마나 보내든지 상관없이 드라이버는 항상 최대 페이로드 사이즈(32바이트)를 전송한다.
(매개변수)
size : 페이로드 바이트 수
void RF24::setRetries(uint8_t delay, uint8_t count)
데이터 전송 실패시 횟수와 재시도 지연시간을 설정한다.
(매개변수)
delay : 각 재시도 사이의 대기시간은 250us의 배수로 최대 15이다. 0은 250us, 15는 4000us이다.
count : 재시도 횟수. 최대 15회
void RF24::startListening(void)
읽기를 위해 열여둔 파이프에 대해 'listening'을 시작한다.
openReadingPipe()를 먼저 호출하라. 이 모드를 사용하는 동안 stopListening() 호출없이 write()를 호출하지 말라. 트래픽이 들어오고 있는지 확인하려면 available()을 호출하고 이를 가져오려면 read()를 사용하라.
void RF24::stopListening(void)
유입되는 메시지에 대해 'listening'을 멈춘다.
이 메소드는 write()메소드를 호출하기 전에 사용한다.
bool RF24::write(const void* buf. uint8_t len)
열려있는 쓰기 파이프에 데이터를 쓴다.
어디에 쓸것인지를 대상을 설정하기 전에 openWritingPipe()를 먼저 호출한다.
이 메소드는 수신자로부터 메시지를 잘 받았다는 Ack받거나 또는 타임아웃/최대전송 시간에 도달할 때 까지 모든 절차를 차단한다. 현재 설정에서 최대 지연은 60-70ms이다.
쓰여질 데이터의 최대 사이즈는 고정된 페이로드 사이즈이며, getPayloadSize()를 참조하라. 그러나 더 작게 쓸 수 있으며 나머지는 0으로 채워진다.
(매개변수)
buf : 보낼 데이터에 대한 포인터
len : 보낼 데이터의 바이트 수
(반환값)
페이로드가 성공적으로 전송되면 true, 그렇지 않으면 false.