{"id":398117,"date":"2024-06-29T13:52:44","date_gmt":"2024-06-29T13:52:44","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=398117"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=398117","title":{"rendered":"<span>Arduino \u0438 NRF24L01 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435. \u041f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435! \u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0432 \u0440\u0443\u043a\u0438 \u043f\u0430\u0440\u0430 \u043f\u043b\u0430\u0442 Arduino Nano \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c  \u043c\u043e\u0434\u0443\u043b\u0435\u043c NRF24L01, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0438 Arduino Nano + NRF24L01. \u041c\u043e\u0434\u0443\u043b\u044c NRF24L01 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0439 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0446\u0435\u043d\u0430, \u043d\u0438\u0437\u043a\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0438 \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u0434\u043e128 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u0432\u044f\u0437\u0438 \u0434\u0430\u0435\u0442 NRF24L01 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0434\u0438\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a  wifi, bluetooth, Zigbee  \u0438 \u0442.\u0434.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0430\u043a \u0441 Arduino RF, \u0442\u0430\u043a \u0438 \u0441 NRF24L01 \u0432 \u0446\u0435\u043b\u043e\u043c. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/5d4\/189\/caa\/5d4189caa4ebbbbd69cf028e9d707af7.jpg\" width=\"900\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d4\/189\/caa\/5d4189caa4ebbbbd69cf028e9d707af7.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 \u043f\u043b\u0430\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043d\u0430 <a href=\"https:\/\/www.aliexpress.com\/i\/4000457027535.html\" rel=\"noopener noreferrer nofollow\">Aliexpress<\/a>. \u0414\u0430\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u044b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e68\/a74\/c81\/e68a74c81f99ee0d917ecdae8e270990.png\" width=\"622\" height=\"527\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e68\/a74\/c81\/e68a74c81f99ee0d917ecdae8e270990.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/maniacbug.github.io\/RF24\/index.html\" rel=\"noopener noreferrer nofollow\">\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 RF24<\/a>. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0437\u043e\u0440\u0430 \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e: <\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u043b\u0430\u0442\u0430\u043c\u0438  Arduino RF;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 Arduino RF \u0438 Raspberry Pi;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0432\u044f\u0437\u043a\u043e\u0439 Arduino + \u043c\u043e\u0434\u0443\u043b\u044c NRF24L01.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u043b\u0430\u0442\u0430\u043c\u0438 Arduino RF<\/h2>\n<p>\u041e\u0431\u0435 \u043f\u043b\u0430\u0442\u044b Arduino RF  \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043a \u043f\u043e\u0440\u0442\u0430\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0442\u0430\u043c\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0440\u0435\u0434\u0443 Arduino Studio, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439  \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<p> Tools <code>-><\/code> Boards-> Arduino AVR Boards<code>-><\/code>Arduino Nano<\/p>\n<p> Tools <code>-><\/code> Processor<code>-><\/code> ATmega328P (Old Bootloader)<\/p>\n<p> Tools <code>-><\/code> Managie Libraries<code>-> <\/code>&#171;RF24&#187;  <code>-><\/code> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 RF24  by TMRh20 ( \u0443 \u043c\u0435\u043d\u044f \u0432\u0435\u0440\u0441\u0438\u044f 1.4.1). \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 SPI.h \u0438 printf.h<\/p>\n<details class=\"spoiler\">\n<summary>\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u0432 Arduino Studio<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u0432\u0443\u0445\u00a0\u043e\u043a\u043e\u043d SerialMonitor, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442 \u0434\u0432\u0443\u0445 Arduino, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043a \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u0430\u043c, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ArduinoStuio \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0443 ArduinoStuio \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 &#171;\u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430&#187;\u00a0 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430.<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043b\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 RF24, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0435 \u043f\u043b\u0430\u0442\u044b Arduino.<\/p>\n<p> Files<code>-><\/code> Examples<code>-><\/code> GettingStarted<\/p>\n<details class=\"spoiler\">\n<summary>\u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b GettingStarted.ino<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/*  * See documentation at https:\/\/nRF24.github.io\/RF24  * See License information at root directory of this library  * Author: Brendan Doherty (2bndy5)  *\/  \/**  * A simple example of sending data from 1 nRF24L01 transceiver to another.  *  * This example was written to be used on 2 devices acting as \"nodes\".  * Use the Serial Monitor to change each node's behavior.  *\/ #include &lt;SPI.h> #include \"printf.h\" #include \"RF24.h\"  \/\/ instantiate an object for the nRF24L01 transceiver RF24 radio(7, 8); \/\/ using pin 7 for the CE pin, and pin 8 for the CSN pin  \/\/ Let these addresses be used for the pair uint8_t address[][6] = {\"1Node\", \"2Node\"}; \/\/ It is very helpful to think of an address as a path instead of as \/\/ an identifying device destination  \/\/ to use different addresses on a pair of radios, we need a variable to \/\/ uniquely identify which address this radio will use to transmit bool radioNumber = 1; \/\/ 0 uses address[0] to transmit, 1 uses address[1] to transmit  \/\/ Used to control whether this node is sending or receiving bool role = false;  \/\/ true = TX role, false = RX role  \/\/ For this example, we'll be using a payload containing \/\/ a single float number that will be incremented \/\/ on every successful transmission float payload = 0.0;  void setup() {    Serial.begin(115200);   while (!Serial) {     \/\/ some boards need to wait to ensure access to serial over USB   }    \/\/ initialize the transceiver on the SPI bus   if (!radio.begin()) {     Serial.println(F(\"radio hardware is not responding!!\"));     while (1) {} \/\/ hold in infinite loop   }    \/\/ print example's introductory prompt   Serial.println(F(\"RF24\/examples\/GettingStarted\"));    \/\/ To set the radioNumber via the Serial monitor on startup   Serial.println(F(\"Which radio is this? Enter '0' or '1'. Defaults to '0'\"));   while (!Serial.available()) {     \/\/ wait for user input   }   char input = Serial.parseInt();   radioNumber = input == 1;   Serial.print(F(\"radioNumber = \"));   Serial.println((int)radioNumber);    \/\/ role variable is hardcoded to RX behavior, inform the user of this   Serial.println(F(\"*** PRESS 'T' to begin transmitting to the other node\"));    \/\/ Set the PA Level low to try preventing power supply related problems   \/\/ because these examples are likely run with nodes in close proximity to   \/\/ each other.   radio.setPALevel(RF24_PA_LOW);  \/\/ RF24_PA_MAX is default.    \/\/ save on transmission time by setting the radio to only transmit the   \/\/ number of bytes we need to transmit a float   radio.setPayloadSize(sizeof(payload)); \/\/ float datatype occupies 4 bytes    \/\/ set the TX address of the RX node into the TX pipe   radio.openWritingPipe(address[radioNumber]);     \/\/ always uses pipe 0    \/\/ set the RX address of the TX node into a RX pipe   radio.openReadingPipe(1, address[!radioNumber]); \/\/ using pipe 1    \/\/ additional setup specific to the node's role   if (role) {     radio.stopListening();  \/\/ put radio in TX mode   } else {     radio.startListening(); \/\/ put radio in RX mode   }    \/\/ For debugging info   \/\/ printf_begin();             \/\/ needed only once for printing details   \/\/ radio.printDetails();       \/\/ (smaller) function that prints raw register values   \/\/ radio.printPrettyDetails(); \/\/ (larger) function that prints human readable data  } \/\/ setup  void loop() {    if (role) {     \/\/ This device is a TX node      unsigned long start_timer = micros();                    \/\/ start the timer     bool report = radio.write(&amp;payload, sizeof(float));      \/\/ transmit &amp; save the report     unsigned long end_timer = micros();                      \/\/ end the timer      if (report) {       Serial.print(F(\"Transmission successful! \"));          \/\/ payload was delivered       Serial.print(F(\"Time to transmit = \"));       Serial.print(end_timer - start_timer);                 \/\/ print the timer result       Serial.print(F(\" us. Sent: \"));       Serial.println(payload);                               \/\/ print payload sent       payload += 0.01;                                       \/\/ increment float payload     } else {       Serial.println(F(\"Transmission failed or timed out\")); \/\/ payload was not delivered     }      \/\/ to make this example readable in the serial monitor     delay(1000);  \/\/ slow transmissions down by 1 second    } else {     \/\/ This device is a RX node      uint8_t pipe;     if (radio.available(&amp;pipe)) {             \/\/ is there a payload? get the pipe number that recieved it       uint8_t bytes = radio.getPayloadSize(); \/\/ get the size of the payload       radio.read(&amp;payload, bytes);            \/\/ fetch payload from FIFO       Serial.print(F(\"Received \"));       Serial.print(bytes);                    \/\/ print the size of the payload       Serial.print(F(\" bytes on pipe \"));       Serial.print(pipe);                     \/\/ print the pipe number       Serial.print(F(\": \"));       Serial.println(payload);                \/\/ print the payload's value     }   } \/\/ role    if (Serial.available()) {     \/\/ change the role via the serial monitor      char c = toupper(Serial.read());     if (c == 'T' &amp;&amp; !role) {       \/\/ Become the TX node        role = true;       Serial.println(F(\"*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\"));       radio.stopListening();      } else if (c == 'R' &amp;&amp; role) {       \/\/ Become the RX node        role = false;       Serial.println(F(\"*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\"));       radio.startListening();     }   }  } \/\/ loop<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043e\u0434\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0438\u043d\u044b CE \u0438 CSN \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 RF24 radio(CEpin, CSNpin) \u0431\u044b\u043b\u0438 7 \u0438 8 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043a\u0435\u0442\u0447\u0430 \u043d\u0430 \u043f\u043b\u0430\u0442\u0443, \u0432 Serial monitor \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430:<\/p>\n<p><em>                                  Which radio is this? Enter &#8216;0&#8217; or &#8216;1&#8217;. Defaults to &#8216;0&#8217;<\/em><\/p>\n<p>\u0412\u0432\u043e\u0436\u0443 &#171;1&#187; \u0432 \u043e\u043a\u043e\u0448\u043a\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 &#171;0&#187; \u0432 \u043e\u043a\u043e\u0448\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<p><em>                              *** PRESS &#8216;T&#8217; to begin transmitting to the other node<\/em><\/p>\n<p>\u0432\u044b\u0431\u0438\u0440\u0430\u044e &#171;T&#187; \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 Arduino \u043a\u0430\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 &#171;R&#187; \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043f\u0430\u043a\u0435\u0442 \u0441 \u0447\u0438\u0441\u043b\u043e\u043c  0.0, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441 \u0448\u0430\u0433\u043e\u043c 0.01):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1a3\/63a\/3a9\/1a363a3a9730eadd0cbd0a4cfabe7b9d.png\" width=\"1086\" height=\"648\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1a3\/63a\/3a9\/1a363a3a9730eadd0cbd0a4cfabe7b9d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0437\u0430\u043d\u044f\u043b\u043e \u0432\u0441\u0435\u0433\u043e 552 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b <\/p>\n<h2>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 Arduino RF \u0438 Raspberry Pi<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0443\u0441\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u043d\u043e\u0432\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 Arduino Nano RF, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 &#8212; Raspberry Pi 4 \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c NRF24L01, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ed1\/e5e\/2af\/ed1e5e2af56917ae9bfaeaa1fdc2a28f.png\" width=\"349\" height=\"450\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed1\/e5e\/2af\/ed1e5e2af56917ae9bfaeaa1fdc2a28f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Raspberry \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430, \u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430  \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a Raspberry, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e IP \u0430\u0434\u0440\u0435\u0441 Raspberry \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Aadvanced Ip scanner (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 &#8212; \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u0430). <\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Putty, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0441\u044c \u043a Raspberry \u043f\u043e ssh, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f Ip \u0430\u0434\u0440\u0435\u0441 Raspberry \u0438 \u043f\u043e\u0440\u0442 22 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043b\u043e\u0433\u0438\u043d &#171;pi&#187;, \u043f\u0430\u0440\u043e\u043b\u044c &#171;raspberry&#187; ). <\/p>\n<p>P.S. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443  VNCviewer, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c Raspberry \u043a\u043e\u043c\u0430\u043d\u0434\u0443 vncserver.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Raspbrry \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 SPI \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<pre><code>sudo raspi-config<\/code><\/pre>\n<p>\u0412 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e 5. Interfacting options <code>-><\/code> SPI <code>-><\/code> Enabledtparam=spi=on<\/p>\n<details class=\"spoiler\">\n<summary><\/summary>\n<div class=\"spoiler__content\">\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043c\u043e\u044f Raspberry Pi \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u043c \u043a \u0442\u0435\u043c \u0436\u0435 \u043f\u043e\u0440\u0442\u0430\u043c, \u0447\u0442\u043e \u0438 NRFL01 \u043c\u043e\u0434\u0443\u043b\u044c. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0443\u0431\u0440\u0430\u043d, \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b boot\/config.txt , \u0437\u0430\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u0434\u0438\u0441\u043f\u043b\u0435\u044e. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0437\u0430\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0430<\/p>\n<pre><code>dtparam=spi=on<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0441\u044c \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0441\u044c<\/p>\n<pre><code>sudo reboot sudo apt-get update<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 RF24 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430 <a href=\"https:\/\/github.com\/nRF24\/RF24\/blob\/master\/docs\/linux_install.md\" rel=\"noopener noreferrer nofollow\">github<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/medium.com\/@anujdev11\/communication-between-arduino-and-raspberry-pi-using-nrf24l01-818687f7f363\" rel=\"noopener noreferrer nofollow\">medium<\/a>)<\/p>\n<details class=\"spoiler\">\n<summary>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0438\u0435\u043a\u0438 RF24 \u043d\u0430 Raspberry<\/summary>\n<div class=\"spoiler__content\">\n<ol>\n<li>\n<p>Install prerequisites if there are any (MRAA, LittleWire libraries, setup SPI device etc)<\/p>\n<\/li>\n<li>\n<p>Download the install.sh file from\u00a0<a href=\"http:\/\/tmrh20.github.io\/RF24Installer\/RPi\/install.sh\" rel=\"noopener noreferrer nofollow\">http:\/\/tmrh20.github.io\/RF24Installer\/RPi\/install.sh<\/a><\/p>\n<pre><code>wget http:\/\/tmrh20.github.io\/RF24Installer\/RPi\/install.sh<\/code><\/pre>\n<\/li>\n<li>\n<p>Make it executable<\/p>\n<pre><code>chmod +x install.sh<\/code><\/pre>\n<\/li>\n<li>\n<p>Run it and choose your options<\/p>\n<pre><code>.\/install.sh<\/code><\/pre>\n<\/li>\n<li>\n<p>Run an example from one of the libraries<\/p>\n<pre><code>cd rf24libs\/RF24\/examples_linux<\/code><\/pre>\n<p>Edit the gettingstarted example, to set your pin configuration<\/p>\n<pre><code>nano gettingstarted.cpp make sudo .\/gettingstarted<\/code><\/pre>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0444\u0430\u0439\u043b gettingstarted.py, \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u044e  \u043d\u043e\u043c\u0435\u0440 \u043c\u043e\u0434\u0443\u043b\u044f &#171;1&#187; \u0438 \u0440\u0435\u0436\u0438\u043c &#171;R&#187;.<\/p>\n<details class=\"spoiler\">\n<summary>\u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b gettingstarted.py<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">\"\"\" A simple example of sending data from 1 nRF24L01 transceiver to another. This example was written to be used on 2 devices acting as 'nodes'. \"\"\" import sys import argparse import time import struct from RF24 import RF24, RF24_PA_LOW   parser = argparse.ArgumentParser(     description=doc,     formatter_class=argparse.RawDescriptionHelpFormatter ) parser.add_argument(     \"-n\",     \"--node\",     type=int,     choices=range(2),     help=\"the identifying radio number (or node ID number)\" ) parser.add_argument(     \"-r\",     \"--role\",     type=int,     choices=range(2),     help=\"'1' specifies the TX role. '0' specifies the RX role.\" ) ########### USER CONFIGURATION ########### See https:\/\/github.com\/TMRh20\/RF24\/blob\/master\/pyRF24\/readme.md Radio CE Pin, CSN Pin, SPI Speed CE Pin uses GPIO number with BCM and SPIDEV drivers, other platforms use their own pin numbering CS Pin addresses the SPI bus number at \/dev\/spidev&lt;a>.&lt;b> ie: RF24 radio(&lt;ce_pin>, &lt;a>*10+&lt;b>); spidev1.0 is 10, spidev1.1 is 11 etc.. Generic: radio = RF24(22, 0) ################## Linux (BBB,x86,etc) ######################### See http:\/\/nRF24.github.io\/RF24\/pages.html for more information on usage See http:\/\/iotdk.intel.com\/docs\/master\/mraa\/ for more information on MRAA See https:\/\/www.kernel.org\/doc\/Documentation\/spi\/spidev for more information on SPIDEV using the python keyword global is bad practice. Instead we'll use a 1 item list to store our float number for the payloads sent\/received payload = [0.0] def master():     \"\"\"Transmits an incrementing float every second\"\"\"     radio.stopListening()  # put radio in TX mode     failures = 0     while failures &lt; 6:         # use struct.pack() to packet your data into the payload         # \"&lt;f\" means a single little endian (4 byte) float value.         buffer = struct.pack(\"&lt;f\", payload[0])         start_timer = time.monotonic_ns()  # start timer         result = radio.write(buffer)         end_timer = time.monotonic_ns()  # end timer         if not result:             print(\"Transmission failed or timed out\")             failures += 1         else:             print(                 \"Transmission successful! Time to Transmit: \"                 \"{} us. Sent: {}\".format(                     (end_timer - start_timer) \/ 1000,                     payload[0]                 )             )             payload[0] += 0.01         time.sleep(1)     print(failures, \"failures detected. Leaving TX role.\") def slave(timeout=6):     \"\"\"Listen for any payloads and print the transaction :param int timeout: The number of seconds to wait (with no transmission)     until exiting function. \"\"\" radio.startListening()  # put radio in RX mode  start_timer = time.monotonic() while (time.monotonic() - start_timer) &amp;lt; timeout:     has_payload, pipe_number = radio.available_pipe()     if has_payload:         # fetch 1 payload from RX FIFO         buffer = radio.read(radio.payloadSize)         # use struct.unpack() to convert the buffer into usable data         # expecting a little endian float, thus the format string \"&amp;lt;f\"         # buffer[:4] truncates padded 0s in case payloadSize was not set         payload[0] = struct.unpack(\"&amp;lt;f\", buffer[:4])[0]         # print details about the received packet         print(             \"Received {} bytes on pipe {}: {}\".format(                 radio.payloadSize,                 pipe_number,                 payload[0]             )         )         start_timer = time.monotonic()  # reset the timeout timer  print(\"Nothing received in\", timeout, \"seconds. Leaving RX role\") # recommended behavior is to keep in TX mode while idle radio.stopListening()  # put the radio in TX mode  def set_role():     \"\"\"Set the role using stdin stream. Timeout arg for slave() can be     specified using a space delimiter (e.g. 'R 10' calls slave(10)) :return:     - True when role is complete &amp;amp; app should continue running.     - False when app should exit \"\"\" user_input = input(     \"*** Enter 'R' for receiver role.\\n\"     \"*** Enter 'T' for transmitter role.\\n\"     \"*** Enter 'Q' to quit example.\\n\" ) or \"?\" user_input = user_input.split() if user_input[0].upper().startswith(\"R\"):     if len(user_input) &amp;gt; 1:         slave(int(user_input[1]))     else:         slave()     return True elif user_input[0].upper().startswith(\"T\"):     master()     return True elif user_input[0].upper().startswith(\"Q\"):     radio.powerDown()     return False print(user_input[0], \"is an unrecognized input. Please try again.\") return set_role()  if name == \"main\": args = parser.parse_args()  # parse any CLI args  # initialize the nRF24L01 on the spi bus if not radio.begin():     raise RuntimeError(\"radio hardware is not responding\")  # For this example, we will use different addresses # An address need to be a buffer protocol object (bytearray) address = [b\"1Node\", b\"2Node\"] # It is very helpful to think of an address as a path instead of as # an identifying device destination  print(sys.argv[0])  # print example name  # to use different addresses on a pair of radios, we need a variable to # uniquely identify which address this radio will use to transmit # 0 uses address[0] to transmit, 1 uses address[1] to transmit radio_number = args.node  # uses default value from `parser` if args.node is None:  # if '--node' arg wasn't specified     radio_number = bool(         int(             input(                 \"Which radio is this? Enter '0' or '1'. Defaults to '0' \"             ) or 0         )     )  # set the Power Amplifier level to -12 dBm since this test example is # usually run with nRF24L01 transceivers in close proximity of each other radio.setPALevel(RF24_PA_LOW)  # RF24_PA_MAX is default  # set the TX address of the RX node into the TX pipe radio.openWritingPipe(address[radio_number])  # always uses pipe 0  # set the RX address of the TX node into a RX pipe radio.openReadingPipe(1, address[not radio_number])  # using pipe 1  # To save time during transmission, we'll set the payload size to be only # what we need. A float value occupies 4 bytes in memory using # struct.pack(); \"&amp;lt;f\" means a little endian unsigned float radio.payloadSize = len(struct.pack(\"&amp;lt;f\", payload[0]))  # for debugging, we have 2 options that print a large block of details # (smaller) function that prints raw register values # radio.printDetails() # (larger) function that prints human readable data # radio.printPrettyDetails()  try:     if args.role is None:  # if not specified with CLI arg '-r'         while set_role():             pass  # continue example until 'Q' is entered     else:  # if role was set using CLI args         # run role once and exit         master() if bool(args.role) else slave() except KeyboardInterrupt:     print(\" Keyboard Interrupt detected. Exiting...\")     radio.powerDown()     sys.exit()  <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0432\u044b\u0432\u043e\u0434 \u0432 IDE ArduinoStudio \u0438 Thonny):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c3c\/883\/a7e\/c3c883a7e935148ba2d5655a8c7f19a6.png\" width=\"1135\" height=\"429\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c3c\/883\/a7e\/c3c883a7e935148ba2d5655a8c7f19a6.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0448\u0435. \u0422\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/p>\n<h2>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0432\u044f\u0437\u043a\u043e\u0439 Arduino Leonardo + \u043c\u043e\u0434\u0443\u043b\u044c NRF24L01<\/h2>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0431\u044b\u043b \u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u0440\u0430\u0442\u043a\u0438\u043c, \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438 \u044f \u043f\u0440\u0438\u043c\u0435\u0440 gettingstarted \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0435 Arduino + NRFL01 \u0438 Raspberry + NRFL01 <\/p>\n<p>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f NRFL01 \u043a Arduino Nano \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u0432 \u043f\u043e\u0441\u0442\u0435 \u0432\u044b\u0448\u0435. \u0423 \u043c\u0435\u043d\u044f \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 Arduino Nano, \u043d\u043e \u0431\u044b\u043b\u0430 Arduino Leonardo, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 SPI \u043f\u0438\u043d\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0441\u0431\u043e\u043a\u0443 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ca\/f26\/1ab\/2caf261ab989cb593d82c5fee0c0896b.png\" width=\"745\" height=\"400\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ca\/f26\/1ab\/2caf261ab989cb593d82c5fee0c0896b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e05\/01f\/aff\/e0501faff8ca87b9351ac6986828d646.png\" width=\"1190\" height=\"402\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e05\/01f\/aff\/e0501faff8ca87b9351ac6986828d646.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u0441\u0442\u0430, \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0434\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0443\u043b\u044c\u0442\u0440\u0430\u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e \u0441\u0445\u0435\u043c\u0435 ( \u043a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f NRF24L01 \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435): <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/681\/fc9\/9e3\/681fc99e36f26d4107fd4e0ac3844989.png\" width=\"790\" height=\"347\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/681\/fc9\/9e3\/681fc99e36f26d4107fd4e0ac3844989.png\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u043a\u043e\u0434 Arduino US.ino<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"> #include &lt;SPI.h> #include \"nRF24L01.h\" #include \"RF24.h\" #include &lt;NewPing.h> \/\/static char send_payload[256];  #define TRIGGER_PIN 4      \/\/Trig pin #define ECHO_PIN  3        \/\/Echo pin #define MAX_DIST 400  const int min_payload_size = 4; const int max_payload_size = 32; const int payload_size_increments_by = 1; int next_payload_size = min_payload_size; float send_payload = 0.0;   NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DIST); RF24 radio(7, 8); \/\/ \/\/const int role_pin = 5;  \/\/ Radio pipe addresses for the 2 nodes to communicate. uint8_t address[][6] = {\"1Node\", \"2Node\"}; \/\/ char receive_payload[max_payload_size + 1]; void setup() {   Serial.begin(115200);   radio.begin();   radio.enableDynamicPayloads();   radio.setRetries(5, 15);   radio.openWritingPipe(address[0]); \/\/   radio.openReadingPipe(1, address[1]); \/\/   radio.startListening(); }  void loop(void) {   int water_level = sonar.ping_cm();   Serial.print(\"Sending Data :\");   Serial.print(water_level);   Serial.println(\" cm\");   \/\/delay(1000);   String water = String(water_level);    radio.stopListening();   send_payload = water_level;   unsigned long start_timer = micros();                    \/\/ start the timer   radio.write(&amp;send_payload, sizeof(float));    unsigned long end_timer = micros();                      \/\/ end the timer   Serial.print(F(\"Time to transmit = \"));   Serial.print(end_timer - start_timer);                 \/\/ print the timer result   Serial.print(F(\" us. Sent: \"));  }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0438\u0436\u0435. \u0412\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0448\u0435. \u0421 \u0445\u043e\u0434\u0443 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0437\u043d\u0430\u043d\u0438\u0439 \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e \u0438 \u043a\u0430\u043a \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/df1\/f75\/fc4\/df1f75fc456baf1b44cd3f958ed819eb.png\" width=\"1136\" height=\"503\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df1\/f75\/fc4\/df1f75fc456baf1b44cd3f958ed819eb.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043c\u043d\u0435  \u0441\u0445\u043e\u0434\u0443 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0433\u0430\u0439\u0434\u043e\u0432 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Arduino RF, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f. \u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <a href=\"https:\/\/www.electrodragon.com\/w\/NRF24L01-Mirf\" rel=\"noopener noreferrer nofollow\">Mirf<\/a> \u043a\u0430\u043a-\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0435 \u0437\u0430\u0434\u0430\u043b\u043e\u0441\u044c. \u041f\u043e\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u0433\u0430\u0439\u0434. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Arduino RF \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0438 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0442\u0440\u0443\u0434\u043d\u043e. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0447\u0442\u043e \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c \u0438 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 Arduino RF. \u0422\u0430\u043a\u0436\u0435 \u0445\u043e\u0447\u0443 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u043e\u0441\u0442\u043e\u0432 \u043f\u0440\u043e NRF24L01, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0431\u0440\u0430\u043b\u043e\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u043c\u0430\u043b\u043e \ud83d\ude42<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/575216\/\"> https:\/\/habr.com\/ru\/articles\/575216\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435! \u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0432 \u0440\u0443\u043a\u0438 \u043f\u0430\u0440\u0430 \u043f\u043b\u0430\u0442 Arduino Nano \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c  \u043c\u043e\u0434\u0443\u043b\u0435\u043c NRF24L01, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0438 Arduino Nano + NRF24L01. \u041c\u043e\u0434\u0443\u043b\u044c NRF24L01 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0439 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0446\u0435\u043d\u0430, \u043d\u0438\u0437\u043a\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0438 \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u0434\u043e128 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u0432\u044f\u0437\u0438 \u0434\u0430\u0435\u0442 NRF24L01 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0434\u0438\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a  wifi, bluetooth, Zigbee  \u0438 \u0442.\u0434.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0430\u043a \u0441 Arduino RF, \u0442\u0430\u043a \u0438 \u0441 NRF24L01 \u0432 \u0446\u0435\u043b\u043e\u043c. <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 \u043f\u043b\u0430\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043d\u0430 <a href=\"https:\/\/www.aliexpress.com\/i\/4000457027535.html\" rel=\"noopener noreferrer nofollow\">Aliexpress<\/a>. \u0414\u0430\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u044b:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/maniacbug.github.io\/RF24\/index.html\" rel=\"noopener noreferrer nofollow\">\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 RF24<\/a>. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0437\u043e\u0440\u0430 \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e: <\/p>\n<ul>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u043b\u0430\u0442\u0430\u043c\u0438  Arduino RF;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 Arduino RF \u0438 Raspberry Pi;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0432\u044f\u0437\u043a\u043e\u0439 Arduino + \u043c\u043e\u0434\u0443\u043b\u044c NRF24L01.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u043b\u0430\u0442\u0430\u043c\u0438 Arduino RF<\/h2>\n<p>\u041e\u0431\u0435 \u043f\u043b\u0430\u0442\u044b Arduino RF  \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043a \u043f\u043e\u0440\u0442\u0430\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0442\u0430\u043c\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0440\u0435\u0434\u0443 Arduino Studio, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439  \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<p> Tools <code>-><\/code> Boards-> Arduino AVR Boards<code>-><\/code>Arduino Nano<\/p>\n<p> Tools <code>-><\/code> Processor<code>-><\/code> ATmega328P (Old Bootloader)<\/p>\n<p> Tools <code>-><\/code> Managie Libraries<code>-> <\/code>&#171;RF24&#187;  <code>-><\/code> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 RF24  by TMRh20 ( \u0443 \u043c\u0435\u043d\u044f \u0432\u0435\u0440\u0441\u0438\u044f 1.4.1). \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 SPI.h \u0438 printf.h<\/p>\n<details class=\"spoiler\">\n<summary>\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u0432 Arduino Studio<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u0432\u0443\u0445\u00a0\u043e\u043a\u043e\u043d SerialMonitor, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442 \u0434\u0432\u0443\u0445 Arduino, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043a \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u0430\u043c, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ArduinoStuio \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0443 ArduinoStuio \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 &#171;\u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430&#187;\u00a0 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430.<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043b\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 RF24, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0435 \u043f\u043b\u0430\u0442\u044b Arduino.<\/p>\n<p> Files<code>-><\/code> Examples<code>-><\/code> GettingStarted<\/p>\n<details class=\"spoiler\">\n<summary>\u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b GettingStarted.ino<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/*  * See documentation at https:\/\/nRF24.github.io\/RF24  * See License information at root directory of this library  * Author: Brendan Doherty (2bndy5)  *\/  \/**  * A simple example of sending data from 1 nRF24L01 transceiver to another.  *  * This example was written to be used on 2 devices acting as \"nodes\".  * Use the Serial Monitor to change each node's behavior.  *\/ #include &lt;SPI.h> #include \"printf.h\" #include \"RF24.h\"  \/\/ instantiate an object for the nRF24L01 transceiver RF24 radio(7, 8); \/\/ using pin 7 for the CE pin, and pin 8 for the CSN pin  \/\/ Let these addresses be used for the pair uint8_t address[][6] = {\"1Node\", \"2Node\"}; \/\/ It is very helpful to think of an address as a path instead of as \/\/ an identifying device destination  \/\/ to use different addresses on a pair of radios, we need a variable to \/\/ uniquely identify which address this radio will use to transmit bool radioNumber = 1; \/\/ 0 uses address[0] to transmit, 1 uses address[1] to transmit  \/\/ Used to control whether this node is sending or receiving bool role = false;  \/\/ true = TX role, false = RX role  \/\/ For this example, we'll be using a payload containing \/\/ a single float number that will be incremented \/\/ on every successful transmission float payload = 0.0;  void setup() {    Serial.begin(115200);   while (!Serial) {     \/\/ some boards need to wait to ensure access to serial over USB   }    \/\/ initialize the transceiver on the SPI bus   if (!radio.begin()) {     Serial.println(F(\"radio hardware is not responding!!\"));     while (1) {} \/\/ hold in infinite loop   }    \/\/ print example's introductory prompt   Serial.println(F(\"RF24\/examples\/GettingStarted\"));    \/\/ To set the radioNumber via the Serial monitor on startup   Serial.println(F(\"Which radio is this? Enter '0' or '1'. Defaults to '0'\"));   while (!Serial.available()) {     \/\/ wait for user input   }   char input = Serial.parseInt();   radioNumber = input == 1;   Serial.print(F(\"radioNumber = \"));   Serial.println((int)radioNumber);    \/\/ role variable is hardcoded to RX behavior, inform the user of this   Serial.println(F(\"*** PRESS 'T' to begin transmitting to the other node\"));    \/\/ Set the PA Level low to try preventing power supply related problems   \/\/ because these examples are likely run with nodes in close proximity to   \/\/ each other.   radio.setPALevel(RF24_PA_LOW);  \/\/ RF24_PA_MAX is default.    \/\/ save on transmission time by setting the radio to only transmit the   \/\/ number of bytes we need to transmit a float   radio.setPayloadSize(sizeof(payload)); \/\/ float datatype occupies 4 bytes    \/\/ set the TX address of the RX node into the TX pipe   radio.openWritingPipe(address[radioNumber]);     \/\/ always uses pipe 0    \/\/ set the RX address of the TX node into a RX pipe   radio.openReadingPipe(1, address[!radioNumber]); \/\/ using pipe 1    \/\/ additional setup specific to the node's role   if (role) {     radio.stopListening();  \/\/ put radio in TX mode   } else {     radio.startListening(); \/\/ put radio in RX mode   }    \/\/ For debugging info   \/\/ printf_begin();             \/\/ needed only once for printing details   \/\/ radio.printDetails();       \/\/ (smaller) function that prints raw register values   \/\/ radio.printPrettyDetails(); \/\/ (larger) function that prints human readable data  } \/\/ setup  void loop() {    if (role) {     \/\/ This device is a TX node      unsigned long start_timer = micros();                    \/\/ start the timer     bool report = radio.write(&amp;payload, sizeof(float));      \/\/ transmit &amp; save the report     unsigned long end_timer = micros();                      \/\/ end the timer      if (report) {       Serial.print(F(\"Transmission successful! \"));          \/\/ payload was delivered       Serial.print(F(\"Time to transmit = \"));       Serial.print(end_timer - start_timer);                 \/\/ print the timer result       Serial.print(F(\" us. Sent: \"));       Serial.println(payload);                               \/\/ print payload sent       payload += 0.01;                                       \/\/ increment float payload     } else {       Serial.println(F(\"Transmission failed or timed out\")); \/\/ payload was not delivered     }      \/\/ to make this example readable in the serial monitor     delay(1000);  \/\/ slow transmissions down by 1 second    } else {     \/\/ This device is a RX node      uint8_t pipe;     if (radio.available(&amp;pipe)) {             \/\/ is there a payload? get the pipe number that recieved it       uint8_t bytes = radio.getPayloadSize(); \/\/ get the size of the payload       radio.read(&amp;payload, bytes);            \/\/ fetch payload from FIFO       Serial.print(F(\"Received \"));       Serial.print(bytes);                    \/\/ print the size of the payload       Serial.print(F(\" bytes on pipe \"));       Serial.print(pipe);                     \/\/ print the pipe number       Serial.print(F(\": \"));       Serial.println(payload);                \/\/ print the payload's value     }   } \/\/ role    if (Serial.available()) {     \/\/ change the role via the serial monitor      char c = toupper(Serial.read());     if (c == 'T' &amp;&amp; !role) {       \/\/ Become the TX node        role = true;       Serial.println(F(\"*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\"));       radio.stopListening();      } else if (c == 'R' &amp;&amp; role) {       \/\/ Become the RX node        role = false;       Serial.println(F(\"*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\"));       radio.startListening();     }   }  } \/\/ loop<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043e\u0434\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0438\u043d\u044b CE \u0438 CSN \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 RF24 radio(CEpin, CSNpin) \u0431\u044b\u043b\u0438 7 \u0438 8 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043a\u0435\u0442\u0447\u0430 \u043d\u0430 \u043f\u043b\u0430\u0442\u0443, \u0432 Serial monitor \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430:<\/p>\n<p><em>                                  Which radio is this? Enter &#8216;0&#8217; or &#8216;1&#8217;. Defaults to &#8216;0&#8217;<\/em><\/p>\n<p>\u0412\u0432\u043e\u0436\u0443 &#171;1&#187; \u0432 \u043e\u043a\u043e\u0448\u043a\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 &#171;0&#187; \u0432 \u043e\u043a\u043e\u0448\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<p><em>                              *** PRESS &#8216;T&#8217; to begin transmitting to the other node<\/em><\/p>\n<p>\u0432\u044b\u0431\u0438\u0440\u0430\u044e &#171;T&#187; \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 Arduino \u043a\u0430\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 &#171;R&#187; \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043f\u0430\u043a\u0435\u0442 \u0441 \u0447\u0438\u0441\u043b\u043e\u043c  0.0, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441 \u0448\u0430\u0433\u043e\u043c 0.01):<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0437\u0430\u043d\u044f\u043b\u043e \u0432\u0441\u0435\u0433\u043e 552 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b <\/p>\n<h2>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 Arduino RF \u0438 Raspberry Pi<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0443\u0441\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u043d\u043e\u0432\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 Arduino Nano RF, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 &#8212; Raspberry Pi 4 \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c NRF24L01, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Raspberry \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430, \u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430  \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a Raspberry, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e IP \u0430\u0434\u0440\u0435\u0441 Raspberry \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Aadvanced Ip scanner (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 &#8212; \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u0430). <\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Putty, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0441\u044c \u043a Raspberry \u043f\u043e ssh, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f Ip \u0430\u0434\u0440\u0435\u0441 Raspberry \u0438 \u043f\u043e\u0440\u0442 22 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043b\u043e\u0433\u0438\u043d &#171;pi&#187;, \u043f\u0430\u0440\u043e\u043b\u044c &#171;raspberry&#187; ). <\/p>\n<p>P.S. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443  VNCviewer, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c Raspberry \u043a\u043e\u043c\u0430\u043d\u0434\u0443 vncserver.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Raspbrry \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 SPI \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<pre><code>sudo raspi-config<\/code><\/pre>\n<p>\u0412 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e 5. Interfacting options <code>-><\/code> SPI <code>-><\/code> Enabledtparam=spi=on<\/p>\n<details class=\"spoiler\">\n<summary><\/summary>\n<div class=\"spoiler__content\">\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043c\u043e\u044f Raspberry Pi \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u043c \u043a \u0442\u0435\u043c \u0436\u0435 \u043f\u043e\u0440\u0442\u0430\u043c, \u0447\u0442\u043e \u0438 NRFL01 \u043c\u043e\u0434\u0443\u043b\u044c. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0443\u0431\u0440\u0430\u043d, \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b boot\/config.txt , \u0437\u0430\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u0434\u0438\u0441\u043f\u043b\u0435\u044e. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0437\u0430\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0430<\/p>\n<pre><code>dtparam=spi=on<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0441\u044c \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0441\u044c<\/p>\n<pre><code>sudo reboot sudo apt-get update<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 RF24 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430 <a href=\"https:\/\/github.com\/nRF24\/RF24\/blob\/master\/docs\/linux_install.md\" rel=\"noopener noreferrer nofollow\">github<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/medium.com\/@anujdev11\/communication-between-arduino-and-raspberry-pi-using-nrf24l01-818687f7f363\" rel=\"noopener noreferrer nofollow\">medium<\/a>)<\/p>\n<details class=\"spoiler\">\n<summary>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0438\u0435\u043a\u0438 RF24 \u043d\u0430 Raspberry<\/summary>\n<div class=\"spoiler__content\">\n<ol>\n<li>\n<p>Install prerequisites if there are any (MRAA, LittleWire libraries, setup SPI device etc)<\/p>\n<\/li>\n<li>\n<p>Download the install.sh file from\u00a0<a href=\"http:\/\/tmrh20.github.io\/RF24Installer\/RPi\/install.sh\" rel=\"noopener noreferrer nofollow\">http:\/\/tmrh20.github.io\/RF24Installer\/RPi\/install.sh<\/a><\/p>\n<pre><code>wget http:\/\/tmrh20.github.io\/RF24Installer\/RPi\/install.sh<\/code><\/pre>\n<\/li>\n<li>\n<p>Make it executable<\/p>\n<pre><code>chmod +x install.sh<\/code><\/pre>\n<\/li>\n<li>\n<p>Run it and choose<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-398117","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=398117"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398117\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=398117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=398117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=398117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}