통신

nRF24L01+ driver class

디다새 2021. 5. 17. 20:22

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.