{"id":52303,"date":"2026-11-01T10:50:54","date_gmt":"2026-11-01T10:50:54","guid":{"rendered":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/"},"modified":"2026-11-01T10:50:54","modified_gmt":"2026-11-01T10:50:54","slug":"nrf24l01-radio","status":"publish","type":"siratek_tutorial","link":"https:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/","title":{"rendered":"Board-to-Board Radio with NRF24L01"},"content":{"rendered":"<body><p><\/p>\n<h2>What it does<\/h2>\n<p>Two Arduinos talking to each other directly, over 2.4 GHz, with no network, no router and no internet. One sends a packet, the other receives it, and the radio handles acknowledgement and retries by itself.<\/p>\n<p>That is a genuinely different thing from Wi-Fi. There is no infrastructure to set up and nothing to configure beyond an address both ends agree on. For a remote sensor in a field, a handheld controller for a robot, or two boards in different rooms of a workshop, it is simpler and cheaper than anything else here.<\/p>\n<p>It also has a reputation for not working, and that reputation comes from <strong>one cause<\/strong>, which this page puts before the wiring.<\/p>\n<h2>Read this first: the capacitor<\/h2>\n<p>The NRF24L01 draws current in short bursts while transmitting. Between bursts it draws almost nothing.<\/p>\n<p>An Uno\u2019s <code>3.3V<\/code> pin is supplied by a small regulator that is not built for that pattern. The voltage dips during each burst, the radio browns out mid-packet, and what you see is a module that initialises fine and then transmits nothing, or works at thirty centimetres and fails at three metres.<\/p>\n<p><strong>Fit a capacitor across the module\u2019s <code>VCC<\/code> and <code>GND<\/code>, at the module.<\/strong> 10 microfarads is the usual value; anything from 10 to 100 \u00b5F electrolytic works. It stores enough charge to supply the burst so the rail does not sag.<\/p>\n<p>This is not a refinement. <strong>Most NRF24L01 modules that \u201cdo not work\u201d are missing this capacitor<\/strong>, and fitting one fixes them. Solder it directly across the module\u2019s supply pins if you can; a breadboard row right beside the module is the next best thing.<\/p>\n<p>Watch the polarity: an electrolytic capacitor\u2019s stripe marks the negative leg.<\/p>\n<h2>Before you begin<\/h2>\n<h3>Required parts and tools<\/h3>\n<ul>\n<li><strong>Two<\/strong> Arduino Unos. This tutorial needs a pair; one board proves nothing.<\/li>\n<li><strong>Two<\/strong> NRF24L01 modules. This is Siratek product 2627.<\/li>\n<li><strong>Two<\/strong> 10 microfarad capacitors.<\/li>\n<li>Fourteen jumper wires.<\/li>\n<\/ul>\n<h3>3.3 volts, but tolerant inputs<\/h3>\n<p>The module is a <strong>3.3 V part<\/strong>, and <code>VCC<\/code> at 5 V destroys it.<\/p>\n<p>Unusually, though, <strong>its logic inputs are 5 V tolerant<\/strong>. So an Uno can drive <code>CE<\/code>, <code>CSN<\/code>, <code>SCK<\/code> and <code>MOSI<\/code> directly with no level converter, and <code>MISO<\/code> comes back at 3.3 V which the Uno reads as HIGH.<\/p>\n<p>So the rule for this part is simple and narrow: <strong>only <code>VCC<\/code> needs care<\/strong>. That is a pleasant exception to everything in <em>Mixing 3.3 V and 5 V Safely<\/em>, and it is why these modules are usable on an Uno at all.<\/p>\n<h3>Eight pins, in two rows<\/h3>\n<p>The header is two rows of four. Pin 1 is marked on the board, usually by a square pad.<\/p>\n<table>\n<thead>\n<tr>\n<th>Pin<\/th>\n<th>Name<\/th>\n<th>Goes to<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td><code>GND<\/code><\/td>\n<td>Ground<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td><code>VCC<\/code><\/td>\n<td><strong>3.3 V<\/strong>, never 5 V<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td><code>CE<\/code><\/td>\n<td>Any digital pin, <code>D9<\/code> below<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td><code>CSN<\/code><\/td>\n<td>Any digital pin, <code>D10<\/code> below<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td><code>SCK<\/code><\/td>\n<td><code>D13<\/code><\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td><code>MOSI<\/code><\/td>\n<td><code>D11<\/code><\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td><code>MISO<\/code><\/td>\n<td><code>D12<\/code><\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td><code>IRQ<\/code><\/td>\n<td>Not used here<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><code>CE<\/code> and <code>CSN<\/code> do different jobs and are easy to swap: <code>CSN<\/code> is the SPI chip select, <code>CE<\/code> switches the radio between listening and transmitting. Swapping them gives a module that initialises and then does nothing.<\/p>\n<h3>Both ends must agree<\/h3>\n<p>Three things have to match, or the two radios never hear each other:<\/p>\n<ul>\n<li><strong>The address<\/strong>, a five-byte value. Any value, as long as both use it.<\/li>\n<li><strong>The channel<\/strong>, 0 to 125. The default works; change it only if something else nearby is noisy.<\/li>\n<li><strong>The data rate and payload size.<\/strong> The library\u2019s defaults are fine.<\/li>\n<\/ul>\n<p>Mismatched addresses are the second most common fault after the capacitor, and the symptom is identical: everything initialises, nothing arrives.<\/p>\n<h2>Pin reference<\/h2>\n<table>\n<thead>\n<tr>\n<th>Module pin<\/th>\n<th>Connect to<\/th>\n<th>Purpose<\/th>\n<th>Notes<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>GND<\/code><\/td>\n<td>Uno <code>GND<\/code><\/td>\n<td>Ground<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>VCC<\/code><\/td>\n<td>Uno <strong><code>3.3V<\/code><\/strong><\/td>\n<td>Power<\/td>\n<td><strong>Never <code>5V<\/code><\/strong>, and fit the capacitor<\/td>\n<\/tr>\n<tr>\n<td><code>CE<\/code><\/td>\n<td>Uno <code>D9<\/code><\/td>\n<td>Listen or transmit<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>CSN<\/code><\/td>\n<td>Uno <code>D10<\/code><\/td>\n<td>SPI chip select<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>SCK<\/code><\/td>\n<td>Uno <code>D13<\/code><\/td>\n<td>Clock<\/td>\n<td>5 V tolerant<\/td>\n<\/tr>\n<tr>\n<td><code>MOSI<\/code><\/td>\n<td>Uno <code>D11<\/code><\/td>\n<td>Data out<\/td>\n<td>5 V tolerant<\/td>\n<\/tr>\n<tr>\n<td><code>MISO<\/code><\/td>\n<td>Uno <code>D12<\/code><\/td>\n<td>Data in<\/td>\n<td>Returns 3.3 V<\/td>\n<\/tr>\n<tr>\n<td><code>IRQ<\/code><\/td>\n<td>Not connected<\/td>\n<td>Interrupt<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<figure class=\"siratek-tutorial-figure\"><img decoding=\"async\" src=\"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/nrf24l01-radio-wiring.svg\" alt=\"Two Arduinos each with an NRF24L01 module, showing the eight-pin connections and the 10 microfarad capacitor fitted across the module's supply pins\" loading=\"lazy\"><figcaption>Only VCC needs 3.3 V: the inputs are 5 V tolerant. The capacitor is what makes it work at range.<\/figcaption><\/figure>\n<h2>Wiring steps<\/h2>\n<p>Do this twice, once per board. They are wired identically.<\/p>\n<ol>\n<li>Unplug the USB cable.<\/li>\n<li>Find pin 1 on the module, marked with a square pad.<\/li>\n<li><code>GND<\/code> to <code>GND<\/code>, and <code>VCC<\/code> to the Uno\u2019s <strong><code>3.3V<\/code><\/strong>.<\/li>\n<li><strong>Fit the 10 \u00b5F capacitor across <code>VCC<\/code> and <code>GND<\/code>, as close to the module as you can.<\/strong> Stripe to ground.<\/li>\n<li><code>CE<\/code> to <code>D9<\/code>, <code>CSN<\/code> to <code>D10<\/code>.<\/li>\n<li><code>SCK<\/code> to <code>D13<\/code>, <code>MOSI<\/code> to <code>D11<\/code>, <code>MISO<\/code> to <code>D12<\/code>.<\/li>\n<li>Plug the USB cable back in.<\/li>\n<\/ol>\n<p>Keep the leads short. SPI over long loose jumpers is unreliable, and this is a radio you will later want to blame instead.<\/p>\n<h2>Software and libraries<\/h2>\n<p>Install <strong>RF24<\/strong> by TMRh20 through Library Manager. Record the version; the interface has changed across major versions.<\/p>\n<h2>Minimal working example<\/h2>\n<p>Prove the module is alive before trying to send anything.<\/p>\n<pre><code>\/\/ Siratek: is the radio actually there? Run this on both boards first.\n\n#include &lt;SPI.h&gt;\n#include &lt;RF24.h&gt;\n\nRF24 radio(9, 10);        \/\/ CE, CSN\n\nvoid setup() {\n  Serial.begin(9600);\n  while (!Serial) {\n    ;\n  }\n\n  if (!radio.begin()) {\n    Serial.println(\"Siratek: radio not responding.\");\n    Serial.println(\"  Check VCC is 3.3V, check CE and CSN, check the SPI wiring.\");\n    while (1) {\n      delay(100);\n    }\n  }\n\n  Serial.println(\"Siratek: radio found.\");\n  radio.printDetails();   \/\/ dumps the registers; all zeros or all ones means wiring\n}\n\nvoid loop() {\n}<\/code><\/pre>\n<p><code>printDetails()<\/code> earns its place. A module that is not talking at all prints registers that are all <code>0x00<\/code> or all <code>0xFF<\/code>, which tells you immediately that the problem is SPI wiring rather than anything to do with radio. Sensible-looking values mean the module is there and you can move on.<\/p>\n<h3>Transmitter<\/h3>\n<pre><code>\/\/ Siratek: the sending board.\n\n#include &lt;SPI.h&gt;\n#include &lt;RF24.h&gt;\n\nRF24 radio(9, 10);\n\n\/\/ Both boards must use this same address.\nconst byte address[6] = \"SIRA1\";\n\nstruct Packet {\n  uint16_t count;\n  int16_t  temperatureTenths;\n};\n\nPacket packet = {0, 0};\n\nvoid setup() {\n  Serial.begin(9600);\n  radio.begin();\n\n  radio.openWritingPipe(address);\n  radio.setPALevel(RF24_PA_LOW);     \/\/ low power while both are on the bench\n  radio.stopListening();\n\n  Serial.println(\"Siratek: transmitting.\");\n}\n\nvoid loop() {\n  packet.count++;\n  packet.temperatureTenths = 243;    \/\/ 24.3 C, as tenths, to avoid floats\n\n  bool ok = radio.write(&amp;packet, sizeof(packet));\n\n  Serial.print(\"sent \");\n  Serial.print(packet.count);\n  Serial.println(ok ? \": acknowledged\" : \": no acknowledgement\");\n\n  delay(1000);\n}<\/code><\/pre>\n<p><strong><code>write()<\/code> returns whether the other end acknowledged.<\/strong> The radio does that handshake in hardware, so this one boolean tells you whether the packet arrived, with no code at the far end. It is the most useful diagnostic this part offers.<\/p>\n<p><strong><code>RF24_PA_LOW<\/code> while testing.<\/strong> At full power two modules sitting next to each other can overload each other\u2019s receivers, so the classic first experiment fails for a reason that has nothing to do with your wiring. Turn the power up once it works at range.<\/p>\n<p><strong>Sending a struct, not a string<\/strong>, keeps packets small and avoids parsing. Both sketches must declare the same struct; adding a field to one and not the other produces nonsense rather than an error.<\/p>\n<h3>Receiver<\/h3>\n<pre><code>\/\/ Siratek: the receiving board.\n\n#include &lt;SPI.h&gt;\n#include &lt;RF24.h&gt;\n\nRF24 radio(9, 10);\n\nconst byte address[6] = \"SIRA1\";\n\nstruct Packet {\n  uint16_t count;\n  int16_t  temperatureTenths;\n};\n\nvoid setup() {\n  Serial.begin(9600);\n  radio.begin();\n\n  radio.openReadingPipe(0, address);\n  radio.setPALevel(RF24_PA_LOW);\n  radio.startListening();\n\n  Serial.println(\"Siratek: listening.\");\n}\n\nvoid loop() {\n  if (!radio.available()) {\n    return;\n  }\n\n  Packet packet;\n  radio.read(&amp;packet, sizeof(packet));\n\n  Serial.print(\"packet \");\n  Serial.print(packet.count);\n  Serial.print(\"  temperature \");\n  Serial.print(packet.temperatureTenths \/ 10.0, 1);\n  Serial.println(\" C\");\n}<\/code><\/pre>\n<p>Note the <code>count<\/code> field. Watching it arrive as 1, 2, 3, 5, 6 tells you packet 4 was lost, which is information a bare reading cannot give you. Any radio link should carry a sequence number for exactly this reason.<\/p>\n<h3>Range, and what affects it<\/h3>\n<p>The bare-PCB-antenna modules in this kit manage perhaps <strong>twenty to thirty metres indoors<\/strong> with walls, more outdoors in the open. The versions with an external antenna and a power amplifier do considerably better and need a more generous supply still.<\/p>\n<p>What hurts: metal near the antenna, a module lying flat on a metal surface, walls at an angle, and 2.4 GHz Wi-Fi on a nearby channel. Standing the module upright and away from the board helps more than you would expect.<\/p>\n<h2>Expected result<\/h2>\n<p>Both boards printing \u201cradio found\u201d and sensible register values. Then a packet a second, with \u201cacknowledged\u201d on the transmitter and an increasing count on the receiver.<\/p>\n<p>Walk away with the receiver and watch where the acknowledgements stop. That is your real range, and it is the only figure that matters.<\/p>\n<h2>Troubleshooting<\/h2>\n<table>\n<thead>\n<tr>\n<th>Symptom<\/th>\n<th>Likely cause<\/th>\n<th>Check or fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Works at 30 cm, fails further away<\/td>\n<td><strong>No capacitor<\/strong><\/td>\n<td>Fit 10 \u00b5F across <code>VCC<\/code> and <code>GND<\/code><\/td>\n<\/tr>\n<tr>\n<td>Transmits nothing at all<\/td>\n<td>Same cause, more often than not<\/td>\n<td>Fit the capacitor first<\/td>\n<\/tr>\n<tr>\n<td><code>printDetails()<\/code> all zeros or all ones<\/td>\n<td>SPI wiring<\/td>\n<td>Check <code>MOSI<\/code>, <code>MISO<\/code>, <code>SCK<\/code>, <code>CSN<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>begin()<\/code> fails<\/td>\n<td>Power or wiring<\/td>\n<td><code>VCC<\/code> must be 3.3 V<\/td>\n<\/tr>\n<tr>\n<td>Module dead after one use<\/td>\n<td>5 V on <code>VCC<\/code><\/td>\n<td>That pin is 3.3 V only<\/td>\n<\/tr>\n<tr>\n<td>Initialises, nothing arrives<\/td>\n<td>Addresses differ<\/td>\n<td>Both ends, byte for byte<\/td>\n<\/tr>\n<tr>\n<td>Initialises, still nothing<\/td>\n<td><code>CE<\/code> and <code>CSN<\/code> swapped<\/td>\n<td>They do different jobs<\/td>\n<\/tr>\n<tr>\n<td>Nonsense values received<\/td>\n<td>Structs differ between sketches<\/td>\n<td>Keep them identical<\/td>\n<\/tr>\n<tr>\n<td>Fails with both on the bench<\/td>\n<td>Receiver overloaded at full power<\/td>\n<td>Use <code>RF24_PA_LOW<\/code><\/td>\n<\/tr>\n<tr>\n<td>Intermittent at any distance<\/td>\n<td>Long jumper leads, or metal nearby<\/td>\n<td>Shorten; stand the module up<\/td>\n<\/tr>\n<tr>\n<td>Packet numbers skip<\/td>\n<td>Genuine packet loss<\/td>\n<td>Normal at range; the count shows it<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Next steps<\/h2>\n<ul>\n<li><strong>Easier first:<\/strong> <em>Mixing 3.3 V and 5 V Safely<\/em>, though this part needs it only on <code>VCC<\/code>.<\/li>\n<li><strong>Related:<\/strong> <em>Sending Sensor Data with MQTT<\/em>, when the data has to reach a network rather than another Arduino.<\/li>\n<li><strong>Next project:<\/strong> a remote sensor in a shed reporting to a display indoors, with a sequence number so you can see what is lost.<\/li>\n<\/ul>\n<h2>Sources and attribution<\/h2>\n<p>All text, wiring guidance and code in this tutorial are original Siratek work.<\/p>\n<ul>\n<li>nRF24L01+ datasheet for the supply range, the 5 V tolerant inputs, the current drawn during transmission and the automatic acknowledgement behaviour.<\/li>\n<li>RF24 library documentation for the calls used.<\/li>\n<li>The PCB-trace antenna, the 16 MHz crystal and the two-by-four header were read from the Siratek product photographs for item 2627.<\/li>\n<\/ul>\n<p>Range figures are typical for a PCB-antenna module and depend heavily on surroundings; the tutorial gives a procedure for measuring your own. No third-party tutorial text, diagrams, photographs or code has been reproduced here.<\/p>\n<p><\/p>\n<\/body>","protected":false},"excerpt":{"rendered":"<p>Two Arduinos talking to each other directly, over 2.4 GHz, with no network, no router and no internet. One sends a packet, the other receives it, and the radio handles acknowledgement and retries by itself.<\/p>\n","protected":false},"featured_media":0,"template":"","siratek_tutorial_level":[],"class_list":["post-52303","siratek_tutorial","type-siratek_tutorial","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Board-to-Board Radio with NRF24L01 - siratek<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Board-to-Board Radio with NRF24L01 - siratek\" \/>\n<meta property=\"og:description\" content=\"Two Arduinos talking to each other directly, over 2.4 GHz, with no network, no router and no internet. One sends a packet, the other receives it, and the radio handles acknowledgement and retries by itself.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/\" \/>\n<meta property=\"og:site_name\" content=\"siratek\" \/>\n<meta property=\"og:image\" content=\"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/nrf24l01-radio-wiring.svg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/\",\"url\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/\",\"name\":\"Board-to-Board Radio with NRF24L01 - siratek\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/siratek.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/siratek.net\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/nrf24l01-radio-wiring.svg\",\"datePublished\":\"2026-11-01T10:50:54+00:00\",\"breadcrumb\":{\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/#primaryimage\",\"url\":\"https:\\\/\\\/siratek.net\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/nrf24l01-radio-wiring.svg\",\"contentUrl\":\"https:\\\/\\\/siratek.net\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/nrf24l01-radio-wiring.svg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/nrf24l01-radio\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/siratek.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorials\",\"item\":\"https:\\\/\\\/siratek.net\\\/index.php\\\/tutorials\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Board-to-Board Radio with NRF24L01\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/siratek.net\\\/#website\",\"url\":\"https:\\\/\\\/siratek.net\\\/\",\"name\":\"siratek\",\"description\":\"Your Best Electronic Retail Shop\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/siratek.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Board-to-Board Radio with NRF24L01 - siratek","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/","og_locale":"en_US","og_type":"article","og_title":"Board-to-Board Radio with NRF24L01 - siratek","og_description":"Two Arduinos talking to each other directly, over 2.4 GHz, with no network, no router and no internet. One sends a packet, the other receives it, and the radio handles acknowledgement and retries by itself.","og_url":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/","og_site_name":"siratek","og_image":[{"url":"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/nrf24l01-radio-wiring.svg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/","url":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/","name":"Board-to-Board Radio with NRF24L01 - siratek","isPartOf":{"@id":"https:\/\/siratek.net\/#website"},"primaryImageOfPage":{"@id":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/#primaryimage"},"image":{"@id":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/#primaryimage"},"thumbnailUrl":"http:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/nrf24l01-radio-wiring.svg","datePublished":"2026-11-01T10:50:54+00:00","breadcrumb":{"@id":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/#primaryimage","url":"https:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/nrf24l01-radio-wiring.svg","contentUrl":"https:\/\/siratek.net\/wp-content\/uploads\/2026\/11\/nrf24l01-radio-wiring.svg"},{"@type":"BreadcrumbList","@id":"http:\/\/siratek.net\/index.php\/tutorials\/nrf24l01-radio\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/siratek.net\/"},{"@type":"ListItem","position":2,"name":"Tutorials","item":"https:\/\/siratek.net\/index.php\/tutorials\/"},{"@type":"ListItem","position":3,"name":"Board-to-Board Radio with NRF24L01"}]},{"@type":"WebSite","@id":"https:\/\/siratek.net\/#website","url":"https:\/\/siratek.net\/","name":"siratek","description":"Your Best Electronic Retail Shop","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/siratek.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial\/52303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial"}],"about":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/types\/siratek_tutorial"}],"version-history":[{"count":0,"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial\/52303\/revisions"}],"wp:attachment":[{"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/media?parent=52303"}],"wp:term":[{"taxonomy":"siratek_tutorial_level","embeddable":true,"href":"https:\/\/siratek.net\/index.php\/wp-json\/wp\/v2\/siratek_tutorial_level?post=52303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}