<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://smwiki.info/index.php?action=history&amp;feed=atom&amp;title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8%3A2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0</id>
	<title>아두이노:2.4GHz 송수신 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://smwiki.info/index.php?action=history&amp;feed=atom&amp;title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8%3A2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0"/>
	<link rel="alternate" type="text/html" href="https://smwiki.info/index.php?title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8:2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0&amp;action=history"/>
	<updated>2026-07-23T17:54:57Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://smwiki.info/index.php?title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8:2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0&amp;diff=11361&amp;oldid=prev</id>
		<title>Sam: /* 개요 */</title>
		<link rel="alternate" type="text/html" href="https://smwiki.info/index.php?title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8:2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0&amp;diff=11361&amp;oldid=prev"/>
		<updated>2026-07-23T14:57:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;개요&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://smwiki.info/index.php?title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8:2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0&amp;amp;diff=11361&amp;amp;oldid=11358&quot;&gt;차이 보기&lt;/a&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://smwiki.info/index.php?title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8:2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0&amp;diff=11358&amp;oldid=prev</id>
		<title>Sam: 새 문서: {{아두이노}}  == 개요 == 2.4GHz ISM 밴드는 별도의 사용 허가(라이선스) 없이 누구나 쓸 수 있는 주파수 대역으로, Wi-Fi·블루투스와 동일한 대역이다.   == 왜 2.4GHz인가? ==  === 원래는 &quot;버려진 쓰레기 대역&quot;이었다 (역사적 이유) === 전자레인지, 산업용 가열기, 의료용 투열기 같은 기기가 부산물로 RF 에너지를 내뿜는 대역이었음. 이미 노이즈가 심한 대역이라, 규제 당국이...</title>
		<link rel="alternate" type="text/html" href="https://smwiki.info/index.php?title=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8:2.4GHz_%EC%86%A1%EC%88%98%EC%8B%A0&amp;diff=11358&amp;oldid=prev"/>
		<updated>2026-07-23T14:51:33Z</updated>

		<summary type="html">&lt;p&gt;새 문서: {{아두이노}}  == 개요 == 2.4GHz ISM 밴드는 별도의 사용 허가(라이선스) 없이 누구나 쓸 수 있는 주파수 대역으로, Wi-Fi·블루투스와 동일한 대역이다.   == 왜 2.4GHz인가? ==  === 원래는 &amp;quot;버려진 쓰레기 대역&amp;quot;이었다 (역사적 이유) === 전자레인지, 산업용 가열기, 의료용 투열기 같은 기기가 부산물로 RF 에너지를 내뿜는 대역이었음. 이미 노이즈가 심한 대역이라, 규제 당국이...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{아두이노}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
2.4GHz ISM 밴드는 별도의 사용 허가(라이선스) 없이 누구나 쓸 수 있는 주파수 대역으로, Wi-Fi·블루투스와 동일한 대역이다. &lt;br /&gt;
&lt;br /&gt;
== 왜 2.4GHz인가? ==&lt;br /&gt;
&lt;br /&gt;
=== 원래는 &amp;quot;버려진 쓰레기 대역&amp;quot;이었다 (역사적 이유) ===&lt;br /&gt;
전자레인지, 산업용 가열기, 의료용 투열기 같은 기기가 부산물로 RF 에너지를 내뿜는 대역이었음. 이미 노이즈가 심한 대역이라, 규제 당국이 &amp;quot;어차피 시끄러우니 통신에 써도 되게 열어주자&amp;quot;고 개방한 것. 전자레인지가 2.45GHz에서 동작하기 때문에 이 대역은 이미 간섭에 &amp;quot;희생된&amp;quot; 상태였고, 그래서 오히려 부담 없이 통신용풀렸다.&lt;br /&gt;
&lt;br /&gt;
=== 무면허 개방 (법적/제도적 이유) ===&lt;br /&gt;
결정적 전환점은 1985년 5월 9일 미국 FCC가 2.4GHz를 무면허 대역으로 개방한 사건. 이때 라이선스 없이도 최대 1W 출력의 무선 기기를 시장에 내놓을 수 있게 되었고, 이것이 훗날 Wi-Fi(1997)와 블루투스(1998) 탄생의 토대가 되었다.&lt;br /&gt;
&lt;br /&gt;
=== 그런데, 물리적으로도 좋아. ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;안테나 크기&amp;#039;&amp;#039;&amp;#039;: 주파수가 높을수록 파장이 짧아져 안테나가 작아진다. 2.4GHz의 파장은 약 12.5cm라, 마우스·이어폰 같은 소형 기기에 탑재 가능. + 정상파는 파장의 1/2이면 충분하고, + 접지면으로 인해 거리가 2배가 되는 효과라 결과적으로 파장의 1/4만 있어도 안테나로 기능이 가능한데,(3cm정도로도 기능) + 유전률이 높은 기판을 쓰면 빛의 속도가 감소하여 유효파장이 줄어들어 더 작게 만들 수 있다. + 접으면 효율이 떨어지지만 공진은 여전히 유지가 되어 또 더 작게 만들 수 있다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;대역폭/데이터 속도&amp;#039;&amp;#039;&amp;#039;: 낮은 주파수(예: 433MHz)보다 넓은 대역폭을 확보할 수 있어 더 빠른 전송이 가능합니다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;투과성/도달거리&amp;#039;&amp;#039;&amp;#039;: 5GHz보다 파장이 길어 벽 통과와 회절이 유리합니다. 더 높은 주파수는 빠르지만 장애물에 약하고, 더 낮은 주파수는 잘 뚫지만 안테나가 커지고 느립니다. 2.4GHz가 그 중간입니다.&lt;br /&gt;
&lt;br /&gt;
=== 활용 예시 ===&lt;br /&gt;
&lt;br /&gt;
* RC 송신기(조종기) 제작&lt;br /&gt;
* 무선 기상 관측소(센서 데이터 원격 수집)&lt;br /&gt;
* 로봇·드론 원격 제어&lt;br /&gt;
* 홈 오토메이션 및 센서 네트워크&lt;br /&gt;
&lt;br /&gt;
= 사용 모듈 =&lt;br /&gt;
&lt;br /&gt;
=== nRF24L01+ 모듈 규격 ===&lt;br /&gt;
nRF24L01+ 모듈은 이 대역에서 동작하는 GFSK 방식의 반이중(half-duplex) 트랜시버로, 한 순간에는 송신 또는 수신 중 하나만 수행하지만 소프트웨어적으로 역할을 빠르게 전환해 양방향 통신을 구현할 수 있다.&amp;lt;ref&amp;gt;How To Mechatronics, &amp;quot;nRF24L01 – How It Works&amp;quot;.&amp;lt;/ref&amp;gt;&lt;br /&gt;
주요 특징:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;초저전력&amp;#039;&amp;#039;&amp;#039;: 송신 시 약 12 mA(0 dBm 기준)로 LED 한 개보다 적게 소비하며, 대기 22 µA, 파워다운 900 nA 수준이다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;저가&amp;#039;&amp;#039;&amp;#039;: 모듈당 미화 2달러 내외로 매우 저렴하다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;다중 노드&amp;#039;&amp;#039;&amp;#039;: 최대 125개 채널, 채널당 6개 주소(파이프)를 지원해 하나의 수신 허브가 최대 6개 송신 노드와 통신할 수 있다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;하드웨어 프로토콜&amp;#039;&amp;#039;&amp;#039;: Enhanced ShockBurst 엔진이 패킷 조립, 자동 응답(ACK), 재전송, CRC를 하드웨어에서 처리한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+주요 사양&lt;br /&gt;
!항목&lt;br /&gt;
!표준 모듈&lt;br /&gt;
!PA/LNA 모듈&lt;br /&gt;
|-&lt;br /&gt;
|동작 주파수&lt;br /&gt;
|2.400 – 2.525 GHz&lt;br /&gt;
|2.400 – 2.525 GHz&lt;br /&gt;
|-&lt;br /&gt;
|공급 전압&lt;br /&gt;
|1.9 – 3.6 V&lt;br /&gt;
|1.9 – 3.6 V&lt;br /&gt;
|-&lt;br /&gt;
|로직 입력&lt;br /&gt;
|5 V 허용(tolerant)&lt;br /&gt;
|5 V 허용&lt;br /&gt;
|-&lt;br /&gt;
|출력 전력&lt;br /&gt;
|−18 dBm ~ 0 dBm&lt;br /&gt;
|−18 dBm ~ +20 dBm&lt;br /&gt;
|-&lt;br /&gt;
|송신 전류(최대)&lt;br /&gt;
|약 11.3 mA @ 0 dBm&lt;br /&gt;
|약 115 mA @ +20 dBm&lt;br /&gt;
|-&lt;br /&gt;
|대기 전류&lt;br /&gt;
|22 µA&lt;br /&gt;
|22 µA&lt;br /&gt;
|-&lt;br /&gt;
|파워다운 전류&lt;br /&gt;
|900 nA&lt;br /&gt;
|900 nA&lt;br /&gt;
|-&lt;br /&gt;
|데이터 속도&lt;br /&gt;
|250 kbps / 1 Mbps / 2 Mbps&lt;br /&gt;
|250 kbps / 1 Mbps / 2 Mbps&lt;br /&gt;
|-&lt;br /&gt;
|페이로드 크기&lt;br /&gt;
|1 – 32 바이트&lt;br /&gt;
|1 – 32 바이트&lt;br /&gt;
|-&lt;br /&gt;
|채널 수&lt;br /&gt;
|126 (1 MHz 간격)&lt;br /&gt;
|126 (1 MHz 간격)&lt;br /&gt;
|-&lt;br /&gt;
|통신 거리&lt;br /&gt;
|최대 약 100 m(개활지)&lt;br /&gt;
|최대 약 1,000 m(외장 안테나)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 모듈 종류 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;기판 안테나형(PCB 안테나)&amp;#039;&amp;#039;&amp;#039;: 소형·컴팩트, 개활지 기준 약 100 m. 실내·벽 통과 시 거리 감소.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PA/LNA + 외장 안테나형&amp;#039;&amp;#039;&amp;#039;: 전력 증폭기(PA)와 저잡음 증폭기(LNA)를 내장해 최대 약 1 km까지 도달. 전류 소모가 크므로 별도 3.3 V 전원 권장.&lt;br /&gt;
&lt;br /&gt;
=== 배선 (Arduino Uno / Nano 기준) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+nRF24L01+ ↔ 아두이노 연결&lt;br /&gt;
!nRF24L01+ 핀&lt;br /&gt;
!아두이노 Uno/Nano 핀&lt;br /&gt;
!비고&lt;br /&gt;
|-&lt;br /&gt;
|VCC&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;3.3 V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|절대 5 V 연결 금지&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CE&lt;br /&gt;
|D9 (변경 가능)&lt;br /&gt;
|코드와 일치시킬 것&lt;br /&gt;
|-&lt;br /&gt;
|CSN&lt;br /&gt;
|D10 (변경 가능)&lt;br /&gt;
|코드와 일치시킬 것&lt;br /&gt;
|-&lt;br /&gt;
|SCK&lt;br /&gt;
|D13&lt;br /&gt;
|하드웨어 SPI 고정&lt;br /&gt;
|-&lt;br /&gt;
|MOSI&lt;br /&gt;
|D11&lt;br /&gt;
|하드웨어 SPI 고정&lt;br /&gt;
|-&lt;br /&gt;
|MISO&lt;br /&gt;
|D12&lt;br /&gt;
|하드웨어 SPI 고정&lt;br /&gt;
|-&lt;br /&gt;
|IRQ&lt;br /&gt;
|(미사용)&lt;br /&gt;
|인터럽트용, 선택 사항&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 전원 안정화 (매우 중요) ===&lt;br /&gt;
아두이노 내장 3.3 V 레귤레이터는 전류 공급 능력이 부족해 통신 불안정의 가장 흔한 원인이다.&lt;br /&gt;
&lt;br /&gt;
* VCC–GND 사이에 &amp;#039;&amp;#039;&amp;#039;10 µF ~ 100 µF 전해 커패시터&amp;#039;&amp;#039;&amp;#039;를 최대한 모듈 가까이 병렬 연결한다.&lt;br /&gt;
* PA/LNA 모듈이나 다수 노드 사용 시 별도 외장 3.3 V 레귤레이터를 권장한다.&lt;br /&gt;
* 어댑터 보드(소켓형)를 쓰면 레귤레이터와 디커플링이 내장되어 편리하다.&lt;br /&gt;
&lt;br /&gt;
== 동작 원리 ==&lt;br /&gt;
&lt;br /&gt;
=== SPI 인터페이스 ===&lt;br /&gt;
모듈은 SPI 슬레이브로 동작하며, 아두이노(마스터)의 하드웨어 SPI 핀(MOSI, MISO, SCK)에 반드시 연결해야 한다. 여기에 더해 두 개의 제어 핀을 사용한다.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CE (Chip Enable)&amp;#039;&amp;#039;&amp;#039;: 송신/수신 모드를 활성화하는 핀. 임의의 디지털 핀 사용 가능.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CSN (Chip Select Not)&amp;#039;&amp;#039;&amp;#039;: SPI 슬레이브 선택 핀. 임의의 디지털 핀 사용 가능.&lt;br /&gt;
&lt;br /&gt;
=== Enhanced ShockBurst ===&lt;br /&gt;
Enhanced ShockBurst는 하드웨어 기반 프로토콜 엔진으로 다음을 자동 처리한다.&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;자동 패킷 조립&amp;#039;&amp;#039;&amp;#039;: 프리앰블, 주소, CRC 필드를 페이로드에 자동 추가.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;자동 응답 및 재전송&amp;#039;&amp;#039;&amp;#039;: 수신 측이 ACK를 자동 전송하며, 송신 측은 ACK를 못 받으면 최대 15회까지 자동 재전송.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;동적 페이로드 길이&amp;#039;&amp;#039;&amp;#039;: 1~32바이트 가변 길이 지원.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;멀티 파이프&amp;#039;&amp;#039;&amp;#039;: 서로 다른 주소를 가진 6개 데이터 파이프를 동시에 수신 대기.&lt;br /&gt;
&lt;br /&gt;
== 라이브러리 설치 ==&lt;br /&gt;
가장 널리 쓰이는 라이브러리는 TMRh20이 유지보수하는 &amp;#039;&amp;#039;&amp;#039;RF24&amp;#039;&amp;#039;&amp;#039; 라이브러리다.&lt;br /&gt;
&lt;br /&gt;
# 아두이노 IDE를 연다.&lt;br /&gt;
# 메뉴에서 &amp;#039;&amp;#039;&amp;#039;스케치 → 라이브러리 포함하기 → 라이브러리 관리&amp;#039;&amp;#039;&amp;#039;를 선택한다.&lt;br /&gt;
# 검색창에 &amp;lt;code&amp;gt;RF24&amp;lt;/code&amp;gt;를 입력하고 TMRh20의 &amp;lt;code&amp;gt;RF24 by TMRh20&amp;lt;/code&amp;gt;을 설치한다.&lt;br /&gt;
&lt;br /&gt;
필요한 헤더는 다음과 같다.&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;       // SPI 통신&lt;br /&gt;
#include &amp;lt;nRF24L01.h&amp;gt;  // 레지스터 정의&lt;br /&gt;
#include &amp;lt;RF24.h&amp;gt;      // RF24 드라이버 클래스&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 예제 1: 단방향 통신 (&amp;quot;Hello World&amp;quot;) ==&lt;br /&gt;
가장 기본적인 예제로, 송신기가 문자열을 1초마다 보내고 수신기가 시리얼 모니터에 출력한다. 최신 RF24 라이브러리는 주소를 &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; 대신 &amp;#039;&amp;#039;&amp;#039;바이트 배열&amp;#039;&amp;#039;&amp;#039;로 지정하는 방식을 권장한다.&lt;br /&gt;
&lt;br /&gt;
=== 송신기 (Transmitter) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;nRF24L01.h&amp;gt;&lt;br /&gt;
#include &amp;lt;RF24.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RF24 radio(9, 10);  // CE, CSN 핀&lt;br /&gt;
&lt;br /&gt;
const byte address[6] = &amp;quot;00001&amp;quot;;  // 5바이트 주소(파이프)&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (!radio.begin()) {&lt;br /&gt;
    Serial.println(F(&amp;quot;무선 모듈이 응답하지 않습니다!&amp;quot;));&lt;br /&gt;
    while (1) {}  // 무한 루프로 정지&lt;br /&gt;
  }&lt;br /&gt;
  radio.openWritingPipe(address);   // 송신 파이프 열기&lt;br /&gt;
  radio.setPALevel(RF24_PA_LOW);    // 출력 레벨(테스트 시 LOW 권장)&lt;br /&gt;
  radio.setDataRate(RF24_250KBPS);  // 데이터 속도(거리↑, 안정성↑)&lt;br /&gt;
  radio.stopListening();            // 송신 모드로 전환&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  const char text[] = &amp;quot;Hello World&amp;quot;;&lt;br /&gt;
  bool ok = radio.write(&amp;amp;text, sizeof(text));&lt;br /&gt;
  Serial.println(ok ? F(&amp;quot;전송 성공&amp;quot;) : F(&amp;quot;전송 실패&amp;quot;));&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 수신기 (Receiver) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;nRF24L01.h&amp;gt;&lt;br /&gt;
#include &amp;lt;RF24.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RF24 radio(9, 10);  // CE, CSN 핀&lt;br /&gt;
&lt;br /&gt;
const byte address[6] = &amp;quot;00001&amp;quot;;  // 송신기와 동일해야 함&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (!radio.begin()) {&lt;br /&gt;
    Serial.println(F(&amp;quot;무선 모듈이 응답하지 않습니다!&amp;quot;));&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
  radio.openReadingPipe(0, address);  // 수신 파이프 0번 열기&lt;br /&gt;
  radio.setPALevel(RF24_PA_LOW);&lt;br /&gt;
  radio.setDataRate(RF24_250KBPS);&lt;br /&gt;
  radio.startListening();             // 수신 모드로 전환&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (radio.available()) {&lt;br /&gt;
    char text[32] = &amp;quot;&amp;quot;;&lt;br /&gt;
    radio.read(&amp;amp;text, sizeof(text));&lt;br /&gt;
    Serial.print(F(&amp;quot;수신: &amp;quot;));&lt;br /&gt;
    Serial.println(text);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;{{참고|송신기와 수신기의 &amp;#039;&amp;#039;&amp;#039;주소(address)&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;데이터 속도(setDataRate)&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;채널(setChannel)&amp;#039;&amp;#039;&amp;#039;은 반드시 서로 일치해야 통신이 된다.}}&lt;br /&gt;
&lt;br /&gt;
== 예제 2: 구조체로 여러 값 한 번에 전송 ==&lt;br /&gt;
온도·습도·기압처럼 여러 값을 한 패킷(≤ 32바이트)에 담아 보낼 때 &amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt;를 사용한다.&lt;br /&gt;
&lt;br /&gt;
=== 공통 구조체 정의 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct SensorData {&lt;br /&gt;
  byte  id;           // 1바이트&lt;br /&gt;
  float temperature;  // 4바이트&lt;br /&gt;
  float humidity;     // 4바이트&lt;br /&gt;
  int   pressure;     // 2바이트&lt;br /&gt;
};  // 총 11바이트 (32바이트 이하)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 송신기 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;nRF24L01.h&amp;gt;&lt;br /&gt;
#include &amp;lt;RF24.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RF24 radio(9, 10);&lt;br /&gt;
const byte address[6] = &amp;quot;00001&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
struct SensorData {&lt;br /&gt;
  byte  id;&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
  int   pressure;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
SensorData data;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  radio.begin();&lt;br /&gt;
  radio.openWritingPipe(address);&lt;br /&gt;
  radio.setPALevel(RF24_PA_LOW);&lt;br /&gt;
  radio.stopListening();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  data.id = 1;&lt;br /&gt;
  data.temperature = 24.5;&lt;br /&gt;
  data.humidity    = 55.2;&lt;br /&gt;
  data.pressure    = 1013;&lt;br /&gt;
  radio.write(&amp;amp;data, sizeof(data));&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 수신기 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;nRF24L01.h&amp;gt;&lt;br /&gt;
#include &amp;lt;RF24.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RF24 radio(9, 10);&lt;br /&gt;
const byte address[6] = &amp;quot;00001&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
struct SensorData {&lt;br /&gt;
  byte  id;&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
  int   pressure;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
SensorData data;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  radio.begin();&lt;br /&gt;
  radio.openReadingPipe(0, address);&lt;br /&gt;
  radio.setPALevel(RF24_PA_LOW);&lt;br /&gt;
  radio.startListening();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (radio.available()) {&lt;br /&gt;
    radio.read(&amp;amp;data, sizeof(data));&lt;br /&gt;
    Serial.print(F(&amp;quot;ID: &amp;quot;));    Serial.print(data.id);&lt;br /&gt;
    Serial.print(F(&amp;quot;  온도: &amp;quot;)); Serial.print(data.temperature);&lt;br /&gt;
    Serial.print(F(&amp;quot;  습도: &amp;quot;)); Serial.print(data.humidity);&lt;br /&gt;
    Serial.print(F(&amp;quot;  기압: &amp;quot;)); Serial.println(data.pressure);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 예제 3: 양방향 통신 (송수신 전환) ==&lt;br /&gt;
한 노드가 송신과 수신을 번갈아 수행한다. 두 노드는 서로 다른 주소를 쓴다.&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;nRF24L01.h&amp;gt;&lt;br /&gt;
#include &amp;lt;RF24.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RF24 radio(9, 10);&lt;br /&gt;
&lt;br /&gt;
// 두 개의 주소: 이 노드가 A라면 상대는 B&lt;br /&gt;
const byte addresses[][6] = {&amp;quot;NODE1&amp;quot;, &amp;quot;NODE2&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
bool isNode1 = true;  // 상대 노드에서는 false로 설정&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  radio.begin();&lt;br /&gt;
  if (isNode1) {&lt;br /&gt;
    radio.openWritingPipe(addresses[1]);     // NODE2로 송신&lt;br /&gt;
    radio.openReadingPipe(1, addresses[0]);  // NODE1로 수신&lt;br /&gt;
  } else {&lt;br /&gt;
    radio.openWritingPipe(addresses[0]);&lt;br /&gt;
    radio.openReadingPipe(1, addresses[1]);&lt;br /&gt;
  }&lt;br /&gt;
  radio.setPALevel(RF24_PA_LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // --- 송신 단계 ---&lt;br /&gt;
  radio.stopListening();&lt;br /&gt;
  const char msg[] = &amp;quot;PING&amp;quot;;&lt;br /&gt;
  radio.write(&amp;amp;msg, sizeof(msg));&lt;br /&gt;
&lt;br /&gt;
  // --- 수신 단계 ---&lt;br /&gt;
  radio.startListening();&lt;br /&gt;
  unsigned long started = millis();&lt;br /&gt;
  while (!radio.available()) {&lt;br /&gt;
    if (millis() - started &amp;gt; 200) return;  // 200ms 타임아웃&lt;br /&gt;
  }&lt;br /&gt;
  char reply[32] = &amp;quot;&amp;quot;;&lt;br /&gt;
  radio.read(&amp;amp;reply, sizeof(reply));&lt;br /&gt;
  Serial.print(F(&amp;quot;응답 수신: &amp;quot;));&lt;br /&gt;
  Serial.println(reply);&lt;br /&gt;
&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 주요 함수 정리 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+RF24 라이브러리 핵심 메서드&lt;br /&gt;
!함수&lt;br /&gt;
!설명&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.begin()&amp;lt;/code&amp;gt;&lt;br /&gt;
|모듈 초기화. 성공 시 &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; 반환&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.openWritingPipe(addr)&amp;lt;/code&amp;gt;&lt;br /&gt;
|송신 파이프 주소 설정&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.openReadingPipe(n, addr)&amp;lt;/code&amp;gt;&lt;br /&gt;
|n번(0~5) 수신 파이프 주소 설정&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.startListening()&amp;lt;/code&amp;gt;&lt;br /&gt;
|수신 모드 진입&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.stopListening()&amp;lt;/code&amp;gt;&lt;br /&gt;
|송신 모드 진입&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.write(&amp;amp;buf, len)&amp;lt;/code&amp;gt;&lt;br /&gt;
|데이터 송신(ACK 수신 시 true)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.available()&amp;lt;/code&amp;gt;&lt;br /&gt;
|수신 데이터 존재 여부&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.read(&amp;amp;buf, len)&amp;lt;/code&amp;gt;&lt;br /&gt;
|수신 데이터 읽기&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.setPALevel(level)&amp;lt;/code&amp;gt;&lt;br /&gt;
|출력 레벨: &amp;lt;code&amp;gt;RF24_PA_MIN / LOW / HIGH / MAX&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.setDataRate(rate)&amp;lt;/code&amp;gt;&lt;br /&gt;
|속도: &amp;lt;code&amp;gt;RF24_250KBPS / RF24_1MBPS / RF24_2MBPS&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.setChannel(ch)&amp;lt;/code&amp;gt;&lt;br /&gt;
|채널(0~125) 설정&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.setRetries(delay, count)&amp;lt;/code&amp;gt;&lt;br /&gt;
|재전송 간격·횟수 설정&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;radio.printDetails()&amp;lt;/code&amp;gt;&lt;br /&gt;
|디버깅 정보 시리얼 출력&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 문제 해결 (Troubleshooting) ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;전송이 계속 실패하거나 데이터가 안 옴&amp;#039;&amp;#039;&amp;#039; → 전원 문제일 가능성이 가장 큼. VCC–GND에 10~100 µF 커패시터 추가, 외장 3.3 V 전원 사용.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;송·수신이 안 됨&amp;#039;&amp;#039;&amp;#039; → 양쪽의 주소·데이터 속도·채널이 일치하는지 확인.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;radio.begin()&amp;lt;/code&amp;gt;이 false&amp;#039;&amp;#039;&amp;#039; → SPI 배선(MOSI/MISO/SCK) 및 CE/CSN 핀 번호 확인. &amp;lt;code&amp;gt;printDetails()&amp;lt;/code&amp;gt;로 레지스터 값이 0x00/0xFF만 나오면 배선 불량.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;거리가 짧음&amp;#039;&amp;#039;&amp;#039; → 데이터 속도를 250 kbps로 낮추고, PA 레벨을 높이거나 PA/LNA 외장 안테나 모듈 사용.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;간헐적 끊김&amp;#039;&amp;#039;&amp;#039; → Wi-Fi(1~11 채널) 간섭 회피를 위해 상위 채널(예: 100번 이상) 사용.&lt;br /&gt;
&lt;br /&gt;
== 안전 및 규제 ==&lt;br /&gt;
&lt;br /&gt;
* 2.4GHz ISM 대역은 비면허 대역이나, 출력 및 사용 규정은 국가별로 다를 수 있으므로 고출력 PA/LNA 모듈 사용 시 국내 전파 규정을 확인한다.&lt;br /&gt;
* 다수 모듈을 밀집 배치할 경우 상호 간섭을 줄이기 위해 채널을 분리한다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
&lt;br /&gt;
* [[아두이노]]&lt;br /&gt;
* [[SPI]]&lt;br /&gt;
* [[ISM 밴드]]&lt;br /&gt;
* [[블루투스]]&lt;br /&gt;
* [[Wi-Fi]]&lt;br /&gt;
&lt;br /&gt;
== 각주 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 외부 링크 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/nRF24/RF24 RF24 라이브러리 공식 GitHub 저장소]&lt;br /&gt;
* [https://nrf24.github.io/RF24/classRF24.html RF24 클래스 레퍼런스 문서]&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
</feed>