Advertisement
Guest User

radio_sniffer.ino

a guest
Dec 8th, 2021
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <SPI.h>
  2. #include "printf.h"
  3. #include "nRF24L01.h"
  4. #include "RF24.h"
  5.  
  6. RF24 radio(9, 10);
  7.  
  8. uint32_t coil = 0x123456; // Номер катушки
  9.  
  10. void setup() {
  11.   Serial.begin(115200);
  12.   printf_begin();
  13.   radio.begin();
  14.  
  15.   // Настраиваем радио
  16.   radio.setDataRate(RF24_2MBPS);
  17.   radio.setPALevel(RF24_PA_MAX);
  18.   radio.setCRCLength(RF24_CRC_16);
  19.   radio.enableDynamicPayloads();
  20.   radio.setAutoAck(false);
  21.  
  22.   // Задаем адрес катушки
  23.   radio.setAddressWidth(5);
  24.   uint64_t address = coil << 8 | 0xC3000000A5;
  25.   address = reverse_bytes(address, 5);
  26.   radio.openReadingPipe(0, address);
  27.  
  28.   // Ищем рабочий канал
  29.   int channel = 0;
  30.   while(!radio.available()) {
  31.     if(channel>=76 || channel<4) {
  32.       channel = 4;
  33.     } else {
  34.       channel = channel + 2;
  35.     }
  36.     radio.stopListening();
  37.     radio.setChannel(channel);
  38.     radio.startListening();
  39.     delay(1);
  40.   }
  41.   radio.flush_rx();
  42. }
  43.  
  44. void loop() {
  45.   uint8_t pipe = false;
  46.   if(radio.available()) {
  47.     // Получаем размер принятых данных
  48.     uint8_t data_length = radio.getDynamicPayloadSize();
  49.     // Принимаем данные
  50.     if(data_length > 0 && data_length <= 32) {
  51.         byte data[data_length] = {};
  52.         char message[sizeof(data)*2+1] = "";
  53.         radio.read(&data, sizeof(data));
  54.         bytes2hex(data, sizeof(data), message);
  55.         printf("%s\n", message);
  56.     }
  57.     // Очищаем буфер приема
  58.     radio.flush_rx();
  59.   }
  60. }
  61.  
  62. void bytes2hex(byte array[], unsigned int len, char buffer[]) {
  63.   for(unsigned int i = 0; i < len; i++) {
  64.     byte nib1 = (array[i] >> 4) & 0x0F;
  65.     byte nib2 = (array[i] >> 0) & 0x0F;
  66.     buffer[i*2+0] = nib1 < 0xA ? '0' + nib1 : 'A' + nib1 - 0xA;
  67.     buffer[i*2+1] = nib2 < 0xA ? '0' + nib2 : 'A' + nib2 - 0xA;
  68.   }
  69.   buffer[len*2] = '\0';
  70. }
  71.  
  72. uint64_t reverse_bytes(uint64_t bytes, int length) {
  73.   uint64_t result = 0x00;
  74.   char *n1 = (char *)&bytes;
  75.   char *n2 = (char *)&result;
  76.   for(int i=0;i<length;i++) {
  77.     *(n2 + i) =  *(n1 + length-i-1);
  78.   }
  79.   return result;
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement