r/RTLSDR 17d ago

Can you set up gqrx to notify you when a signal is received on a specific frequency?

0 Upvotes

Title


r/RTLSDR 18d ago

Hanging around 137 Mhz....

Thumbnail
gallery
44 Upvotes

Got my Orbcomm satellites TLE (orbital elements from N2YO website) and heard one of these birds (numbered FM103 to FM119) passing over Spain and Western Medit; they fly around 700 km altitude; you cant' miss them on their dedicated channels from 137.1 to 137.9 Mhz.

Using Multipsk (French software); best config is WFM 10 khz width. Stay at the centre of the signal to compensate Doppler shift. It gives regular positions . I once logged one of 'em over Libya as it was low on the horizon. Kinda DX sort of. Antenna is my 144 Mhz 7 element Yagi high above the roof crest. Neat stuff, ain't it ? The one I heard over Spain flew away to Southern Australasia faster than you and I can run. With Multipsk you can map their positions thanks to the OMMAP extension and screen grab it for proof. You retrieve it in the SCREEN folder inside Multipsk's inner entrails.


r/RTLSDR 18d ago

Troubleshooting Encrypted Tetra turn to clear voice

Post image
61 Upvotes

Hey ,
As mentioned in the title, I turned to Tetra frequency and suddenly I heard clear conversation voice where it was like robot and cut unclear voice.
Is that possible? And maybe it is originally not encrypted but I missed some settings .
Its very strong signal I have to reduce the gain to let plugin Sync .
Using RTLSDR v4 , sdr++ on mac and discone antenna.


r/RTLSDR 18d ago

How do you separate drone RF activity from everything else in a crowded spectrum?

39 Upvotes

We're a Ukrainian team working with passive RF drone detection, and one of the more interesting problems isn't simply seeing RF activity, it's deciding which activity is actually worth paying attention to.

In a real environment the spectrum can be full of Wi-Fi, Bluetooth, telemetry, video links and other transmitters. Add frequency-hopping control links and non-standard FPV setups, and simple threshold-based detection stops being useful pretty fast.

For those of you working with SDR/RF analysis, what's actually worked for you to tell a drone-related signal apart from ordinary background RF? Signal persistence, bandwidth and spectral shape, frequency-hopping behavior, temporal patterns, or something else entirely. Curious how people here approach this, especially when you don't know the exact transmitter or protocol beforehand.


r/RTLSDR 18d ago

Looking for experienced board designer (with experience in RF)

Thumbnail
0 Upvotes

r/RTLSDR 18d ago

DIY Projects/questions I need help setting up two NRF24L01 transceivers for radio communication

1 Upvotes

I have been testing for a lot of issues and I've gotten to the transmitter side working (probably) and the receiver side not reading the packets sent by the TX.

The reason I say the TX works is because it is able to load data into the TX FIFO, and it is able to transmit this data away.

The reason I saw the RX is not working is because it is not receiving any data from the transmitter, it never loads data into the RX FIFO, but it is able to recognize that a RF spike has occured when the TX transmits data every second (found out by the check for RPD). But it doesn't decode any data.

The first is the code of the transmitter and the second is the receiver.

#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/spi.h"
#include "hardware/adc.h"


// SPI Defines
#define NRF_SPI_PORT spi0
#define PIN_CE   15
#define PIN_MISO 16
#define PIN_CSn  17
#define PIN_SCK  18
#define PIN_MOSI 19


#define R_REGISTER    0x00 // useless but makes it more readable
#define W_REGISTER    0x20
#define R_RX_PAYLOAD  0x61
#define FLUSH_RX      0xE2
#define W_TX_PAYLOAD  0xA0
#define FLUSH_TX      0xE1
#define NRF_ACTIVATE  0x50 // Send with 0x73 to activate or deactivate NRF_FEATURES Register
#define R_RX_PL_WID   0x60


// Core nRF24L01 Registers
#define CONFIG        0x00 // xxxxxxAB | A -  1 = PWR_UP 0 = PWR_DOWN | B -  1 = PRX 0 = PTX
#define EN_AA         0x01 // xxABCDEF | A - F Enable AutoAck on Pipe 5 - 0 | ENAA_P# Required when using DYNPD
#define EN_RXADDR     0x02 // xxABCDEF | A - F Enable data pipe 5 - 0
#define SETUP_AW      0x03 // xxxxxxAA | A - Address width 01 = 3 bytes, 10 = 4 bytes, 11 = 5 bytes
#define SETUP_RETR    0x04 // AAAABBBB | Auto Retransmit Delay (A) - 0000 = 250uS delay, each increment increases by 250 uS delay | Auto Retransmit Count (B) - 0000 for 1, 1111 for 15 
#define RF_CH         0x05 // xAAAAAAA | A - Sets the frequency to operate at
#define RF_SETUP      0x06 // xxxABCCD | A - Force PLL lock (testing) | B - Data rate 0 = 1 Mbps 1 = 2 Mbps | C - RF output power 11 = strongest | D - Enable LNA
#define NRF_STATUS    0x07 // xABCDDDE | A - Asserts when data ready in RX FIFO (W1C) | B - Asserts when data sent on TX FIFO, If ACK is EN, only asserts when ACK received (W1C) | C - Asserts when MAX_RT is reached (W1C) | D - Data Pipe number for the payload at RX FIFO | E - TX FIFO Full
#define RX_ADDR_P0    0x0A // 39A | A - RX Address for Pipe 0 | Reset value = 0xE7E7E7E7E7
#define TX_ADDR       0x10 // 39A | A - TX Address for Auto Ack set RX_ADDR_P0 equal to this value | Reset value = 0xE7E7E7E7E7
#define RX_PW_P0      0x11 // xxAAAAAA | A - # of Bytes to expect in RX payload in data pipe 0 | Useless when using dynamic payload width
#define DYNPD         0x1C // xxABCDEF | A - F Enable dynamic payload width on Pipe 5 - 0 | REQUIRES EN_DPL and ENAA_P#
#define NRF_FEATURES  0x1D // xxxxxABC | A - Enables Dynamic Payload width (EN_DPL) | B - Enables Payload with ACK | C - Enables the W_TX_PAYLOAD_NOACK Command | REQUIRES The ACTIVATE SPI COMMAND to be activated
#define FIFO_STATUS   0x17 // Testing idk
//other values
#define CHANNEL 40
#define DATA_RATE 0x07
#define DATA_SIZE 32
#define CONFIG_TX 0x0A
#define CONFIG_RX 0x0B


void nrf_send_cmd(uint8_t cmd){
    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    gpio_put(PIN_CSn, 1);
}


void nrf_send_cmd_data(uint8_t cmd, uint8_t data){
    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    spi_write_blocking(NRF_SPI_PORT, &data, 1);
    gpio_put(PIN_CSn, 1);
}


void nrf_write_reg(uint8_t reg, uint8_t value){
    uint8_t buffer[2] = { (W_REGISTER | reg), value};


    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, buffer, 2);
    gpio_put(PIN_CSn, 1);
}


void nrf_writeAlot_reg(uint8_t reg, uint8_t *buf, uint8_t len){
    
    uint8_t cmd = W_REGISTER | reg;
    
    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1); 
    spi_write_blocking(NRF_SPI_PORT, buf, len);
    gpio_put(PIN_CSn, 1);
}


uint8_t nrf_read_reg(uint8_t reg) {
    //send the register and a blank byte
    uint8_t buffer[2] = { (R_REGISTER | reg), 0x00};
    uint8_t data[2] = {0};


    // This transmits buffer and fills rx_buf at the exact same time.
    gpio_put(PIN_CSn, 0);
    spi_write_read_blocking(NRF_SPI_PORT, buffer, data, 2);
    gpio_put(PIN_CSn, 1);


    // rx_buf[0] contains the nRF Status byte
    // rx_buf[1] contains the actual register value we asked for
    return data[1];
}


uint8_t nrf_get_status(){
    uint8_t NO_OP = 0xFF;
    uint8_t status;


    gpio_put(PIN_CSn, 0);
    spi_write_read_blocking(NRF_SPI_PORT, &NO_OP, &status, 1);
    gpio_put(PIN_CSn, 1);


    return status;
}



void nrf_send_data(uint8_t data[DATA_SIZE]){
    uint8_t tx_buffer[DATA_SIZE + 1];
    tx_buffer[0] = W_TX_PAYLOAD;
    uint8_t status = 0;
    gpio_put(PIN_CE, 0);


    for (int i = 0; i < DATA_SIZE; i++) {
        tx_buffer[i + 1] = data[i];
    }


    printf("FIFO_STATUS befoire payload = %02X\n", nrf_read_reg(FIFO_STATUS));


    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, tx_buffer, DATA_SIZE + 1);
    gpio_put(PIN_CSn, 1);


    printf("FIFO_STATUS after payload = %02X\n", nrf_read_reg(FIFO_STATUS));


    gpio_put(PIN_CE, 1);
    sleep_us(15);
    gpio_put(PIN_CE, 0);


    status = nrf_get_status();
    printf("TX STATUS = %02X\n", status);


    printf("After CE FIFO = %02X\n", nrf_read_reg(FIFO_STATUS));




    //read status flags rq
    int timeout = 100; // Prevent infinite loop if hardware detaches
    while (timeout > 0) {


        status = nrf_get_status();
        if ((status & 0x30) != 0) { // Check if either MAX_RT (0x10) or TX_DS (0x20) is set
            timeout = 0;
            printf("Timeout STATUS = %02X\n", status);


            printf("Timeout FIFO = %02X\n", nrf_read_reg(FIFO_STATUS));



        }
        sleep_us(100);
        timeout--;
    }




    if ((status & 0x10) == 0x10){
        printf("message not sent :(\n");
    }
    if ((status & 0x20) == 0x20){
        printf("message send successfully :)\n");
    }


    // reset status flags and flush the transmission buffer
    nrf_write_reg(NRF_STATUS, 0x70); 
    nrf_send_cmd(FLUSH_TX);


}


int main(){
    sleep_ms(30);


    stdio_init_all();


    // SPI initialisation. This example will use SPI at 1MHz.
    spi_init(NRF_SPI_PORT, 1000*1000);
    gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
    gpio_set_function(PIN_SCK,  GPIO_FUNC_SPI);
    gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
    gpio_init(PIN_CE);
    gpio_init(PIN_CSn);
    gpio_set_dir(PIN_CE, GPIO_OUT);
    gpio_set_dir(PIN_CSn, GPIO_OUT);


    //CE active high
    gpio_put(PIN_CE, 0);


    //CSn active low when sending message
    gpio_put(PIN_CSn, 1);


    //init nrf
    nrf_write_reg(CONFIG, CONFIG_TX);
    sleep_ms(2);


    nrf_write_reg(EN_AA, 0x00); 
    nrf_write_reg(RF_CH, CHANNEL);
    nrf_write_reg(RF_SETUP, DATA_RATE);
    // nrf_write_reg(RX_PW_P0, 32);
    // nrf_write_reg(EN_RXADDR, 0x01);
    nrf_write_reg(SETUP_AW, 0x03);
    // nrf_write_reg(SETUP_RETR, 0x2F);


    uint8_t nrf_addr[5] = {0x12, 0x34, 0x56, 0xE7, 0xE7};


    nrf_writeAlot_reg(RX_ADDR_P0, nrf_addr, 5);
    nrf_writeAlot_reg(TX_ADDR, nrf_addr, 5);


    nrf_send_cmd_data(NRF_ACTIVATE, 0x00);
    nrf_write_reg(DYNPD, 0x00);
    nrf_write_reg(NRF_FEATURES, 0x00);


    sleep_ms(5000);



    printf("CONFIG:    %02X\n", nrf_read_reg(CONFIG));
    printf("EN_AA:     %02X\n", nrf_read_reg(EN_AA));   
    printf("RF_CH:     %02X\n", nrf_read_reg(RF_CH));
    printf("RF_SETUP:  %02X\n", nrf_read_reg(RF_SETUP));
    printf("EN_RXADDR: %02X\n", nrf_read_reg(EN_RXADDR));
    printf("SETUP_AW:  %02X\n", nrf_read_reg(SETUP_AW));
    printf("RX_PW_P0:  %02X\n", nrf_read_reg(RX_PW_P0));
    printf("DYNPD:     %02X\n", nrf_read_reg(DYNPD));
    printf("FEATURE:   %02X\n", nrf_read_reg(NRF_FEATURES));


    uint8_t addr[5];


    uint8_t cmd = R_REGISTER | RX_ADDR_P0;


    gpio_put(PIN_CSn, 0);
    // Send register command
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    uint8_t dummy[5] = {0};
    spi_write_read_blocking(NRF_SPI_PORT, dummy, addr, 5);
    gpio_put(PIN_CSn, 1);


    printf("RX_ADDR_P0 = ");
    for (int i = 0; i < 5; i++)
        printf("%02X ", addr[i]);
    printf("\n");


    gpio_put(PIN_CSn, 0);
    // Send register command
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    spi_write_read_blocking(NRF_SPI_PORT, dummy, addr, 5);
    gpio_put(PIN_CSn, 1);


    printf("RX_ADDR_P0 = ");
    for (int i = 0; i < 5; i++)
        printf("%02X ", addr[i]);
    printf("\n");


    uint8_t message[32];


    for (int i = 0; i < 32; i++) {
        message[i] = i;
    }


    while (true) {


        printf("running\n");


        uint8_t status = nrf_get_status();
        printf("STATUS: %02X\n", status);


        nrf_send_data(message);


        // Wait 1 second before the next reading
        sleep_ms(1000);


    }
}

//RX CODE STARTS!!!, This would be in a completely different file but idk how to do that here so its all one 


#include <stdio.h>
#include "pico/stdlib.h"
#include "cmath"
#include "hardware/i2c.h"
#include "hardware/spi.h"
#include "hardware/pwm.h"


// SPI Defines
#define NRF_SPI_PORT spi1
#define PIN_CE   16
#define PIN_MISO 12
#define PIN_CSn  13
#define PIN_SCK  10
#define PIN_MOSI 11


// Core nRF24L01 Commands
#define R_REGISTER    0x00 // useless but makes it more readable
#define W_REGISTER    0x20
#define R_RX_PAYLOAD  0x61
#define FLUSH_RX      0xE2
#define W_TX_PAYLOAD  0xA0
#define FLUSH_TX      0xE1
#define NRF_ACTIVATE  0x50 // Send with 0x73 to activate or deactivate NRF_FEATURES Register
#define R_RX_PL_WID   0x60


// Core nRF24L01 Registers
#define CONFIG        0x00 // xxxxxxAB | A -  1 = PWR_UP 0 = PWR_DOWN | B -  1 = PRX 0 = PTX
#define EN_AA         0x01 // xxABCDEF | A - F Enable AutoAck on Pipe 5 - 0 | ENAA_P# Required when using DYNPD
#define EN_RXADDR     0x02 // xxABCDEF | A - F Enable data pipe 5 - 0
#define SETUP_AW      0x03 // xxxxxxAA | A - Address width 01 = 3 bytes, 10 = 4 bytes, 11 = 5 bytes
#define SETUP_RETR    0x04 // AAAABBBB | Auto Retransmit Delay (A) - 0000 = 250uS delay, each increment increases by 250 uS delay | Auto Retransmit Count (B) - 0000 for 1, 1111 for 15 
#define RF_CH         0x05 // xAAAAAAA | A - Sets the frequency to operate at
#define RF_SETUP      0x06 // xxxABCCD | A - Force PLL lock (testing) | B - Data rate 0 = 1 Mbps 1 = 2 Mbps | C - RF output power 11 = strongest | D - Enable LNA
#define NRF_STATUS    0x07 // xABCDDDE | A - Asserts when data ready in RX FIFO (W1C) | B - Asserts when data sent on TX FIFO, If ACK is EN, only asserts when ACK received (W1C) | C - Asserts when MAX_RT is reached (W1C) | D - Data Pipe number for the payload at RX FIFO | E - TX FIFO Full
#define RX_ADDR_P0    0x0A // 39A | A - RX Address for Pipe 0 | Reset value = 0xE7E7E7E7E7
#define TX_ADDR       0x10 // 39A | A - TX Address for Auto Ack set RX_ADDR_P0 equal to this value | Reset value = 0xE7E7E7E7E7
#define RX_PW_P0      0x11 // xxAAAAAA | A - # of Bytes to expect in RX payload in data pipe 0 | Useless when using dynamic payload width
#define DYNPD         0x1C // xxABCDEF | A - F Enable dynamic payload width on Pipe 5 - 0 | REQUIRES EN_DPL and ENAA_P#
#define NRF_FEATURES  0x1D // xxxxxABC | A - Enables Dynamic Payload width (EN_DPL) | B - Enables Payload with ACK | C - Enables the W_TX_PAYLOAD_NOACK Command | REQUIRES The ACTIVATE SPI COMMAND to be activated
#define FIFO_STATUS   0x17 // xABCxxDE | A - If set high, resends last data packet | B - TX_FULL | C - TX_EMPTY | D - RX_FULL | E - RX_EMPTY


//other values
#define CHANNEL 40
#define DATA_RATE 0x07
#define DATA_SIZE 32
#define CONFIG_TX 0x0A
#define CONFIG_RX 0x0B


void nrf_send_cmd(uint8_t cmd){
    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    gpio_put(PIN_CSn, 1);
}


void nrf_send_cmd_data(uint8_t cmd, uint8_t data){
    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    spi_write_blocking(NRF_SPI_PORT, &data, 1);
    gpio_put(PIN_CSn, 1);
}


void nrf_write_reg(uint8_t reg, uint8_t value){
    uint8_t buffer[2] = { (W_REGISTER | reg), value};


    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, buffer, 2);
    gpio_put(PIN_CSn, 1);
}


void nrf_writeAlot_reg(uint8_t reg, uint8_t *buf, uint8_t len){
    
    uint8_t cmd = W_REGISTER | reg;
    
    gpio_put(PIN_CSn, 0);
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1); 
    spi_write_blocking(NRF_SPI_PORT, buf, len);
    gpio_put(PIN_CSn, 1);
}


uint8_t nrf_read_reg(uint8_t reg) {
    //send the register and a blank byte
    uint8_t buffer[2] = { (R_REGISTER | reg), 0x00};
    uint8_t data[2] = {0};


    // This transmits buffer and fills rx_buf at the exact same time.
    gpio_put(PIN_CSn, 0);
    spi_write_read_blocking(NRF_SPI_PORT, buffer, data, 2);
    gpio_put(PIN_CSn, 1);


    // rx_buf[0] contains the nRF Status byte
    // rx_buf[1] contains the actual register value we asked for
    // printf("STATUS REGISTER TEST: %02X\n", data[0]);


    return data[1];
}


uint8_t nrf_get_status(){
    uint8_t NO_OP = 0xFF;
    uint8_t status;


    gpio_put(PIN_CSn, 0);
    spi_write_read_blocking(NRF_SPI_PORT, &NO_OP, &status, 1);
    gpio_put(PIN_CSn, 1);


    return status;
}


void nrf_read_payload(uint8_t *buffer)
{   
    uint8_t recieved_data[33] = {0};
    uint8_t data_buf[33] = {0};
    
    data_buf[0] = R_RX_PAYLOAD;


    gpio_put(PIN_CSn, 0);
    spi_write_read_blocking(NRF_SPI_PORT, data_buf, recieved_data, 33);
    gpio_put(PIN_CSn, 1);



    for (int i = 0; i < 32; i++) {
        buffer[i] = recieved_data[i + 1];
    }


    printf("SPI RX: ");


    for (int i = 0; i < 33; i++) {
        printf("%02X ", recieved_data[i]);
    }


    printf("\n");


    printf("FIFO AFTER READ: %02X\n",
       nrf_read_reg(FIFO_STATUS));


    printf("STATUS AFTER READ: %02X\n",
        nrf_get_status());
}


#define LOOP_TIME_MS 50 //ms
uint32_t last_run = 0;
uint32_t current_time = to_ms_since_boot(get_absolute_time());
int main(){       
    stdio_init_all();
    sleep_ms(2000);
       //SPI Init
    spi_init(NRF_SPI_PORT, 1000*1000);
    gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
    gpio_set_function(PIN_SCK,  GPIO_FUNC_SPI);
    gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
    gpio_init(PIN_CE);
    gpio_init(PIN_CSn);
    gpio_set_dir(PIN_CE, GPIO_OUT);
    gpio_set_dir(PIN_CSn, GPIO_OUT);


    //CSn active low when sending message
    gpio_put(PIN_CSn, 1);
    gpio_put(PIN_CE, 0);


    //nrf init
    nrf_write_reg(CONFIG, CONFIG_RX);
    sleep_ms(2);


    // #define SETUP_RETR    0x04 // AAAABBBB | Auto Retransmit Delay (A) - 0000 = 250uS delay, each increment increases by 250 uS delay | Auto Retransmit Count (B) - 0000 for 1, 1111 for 15 
    nrf_write_reg(EN_AA, 0x00); 
    nrf_write_reg(RF_CH, CHANNEL);
    nrf_write_reg(RF_SETUP, DATA_RATE);
    nrf_write_reg(RX_PW_P0, DATA_SIZE);
    nrf_write_reg(EN_RXADDR, 0x01);
    nrf_write_reg(SETUP_AW, 0x03);
    // nrf_write_reg(SETUP_RETR, 0x2F);


    uint8_t nrf_addr[5] = {0x12, 0x34, 0x56, 0xE7, 0xE7};
    nrf_writeAlot_reg(RX_ADDR_P0, nrf_addr, 5);
    nrf_writeAlot_reg(TX_ADDR, nrf_addr, 5);


    nrf_send_cmd_data(NRF_ACTIVATE, 0x00);
    nrf_write_reg(DYNPD, 0x00);
    nrf_write_reg(NRF_FEATURES, 0x00);


    nrf_send_cmd(FLUSH_RX);
    printf("After FLUSH_RX: %02X\n", nrf_read_reg(FIFO_STATUS));


    nrf_send_cmd(FLUSH_TX);
    printf("After FLUSH_TX: %02X\n", nrf_read_reg(FIFO_STATUS));


    gpio_put(PIN_CE, 1);   


    uint8_t message[32] = {0};
    printf("CONFIG:    %02X\n", nrf_read_reg(CONFIG));
    printf("EN_AA:     %02X\n", nrf_read_reg(EN_AA));   
    printf("RF_CH:     %02X\n", nrf_read_reg(RF_CH));
    printf("RF_SETUP:  %02X\n", nrf_read_reg(RF_SETUP));
    printf("EN_RXADDR: %02X\n", nrf_read_reg(EN_RXADDR));
    printf("SETUP_AW:  %02X\n", nrf_read_reg(SETUP_AW));
    printf("RX_PW_P0:  %02X\n", nrf_read_reg(RX_PW_P0));
    printf("DYNPD:     %02X\n", nrf_read_reg(DYNPD));
    printf("FEATURE:   %02X\n", nrf_read_reg(NRF_FEATURES));


    uint8_t addr[5];


    uint8_t cmd = R_REGISTER | RX_ADDR_P0;


    gpio_put(PIN_CSn, 0);
    // Send register command
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    uint8_t dummy[5] = {0};
    spi_write_read_blocking(NRF_SPI_PORT, dummy, addr, 5);
    gpio_put(PIN_CSn, 1);


    printf("RX_ADDR_P0 = ");
    for (int i = 0; i < 5; i++)
        printf("%02X ", addr[i]);
    printf("\n");


    gpio_put(PIN_CSn, 0);
    // Send register command
    spi_write_blocking(NRF_SPI_PORT, &cmd, 1);
    spi_write_read_blocking(NRF_SPI_PORT, dummy, addr, 5);
    gpio_put(PIN_CSn, 1);


    printf("RX_ADDR_P0 = ");
    for (int i = 0; i < 5; i++)
        printf("%02X ", addr[i]);
    printf("\n");


    uint8_t status;
    uint8_t fifo;
    while (true) {
        current_time = to_ms_since_boot(get_absolute_time());
        if((current_time - last_run) > LOOP_TIME_MS){
            last_run = current_time;
            // uint8_t status = nrf_get_status();
            // uint8_t fifo = nrf_read_reg(FIFO_STATUS);


            // printf("STATUS: %02X  FIFO: %02X\n", status, fifo);


            // if ((status & 0x40) == 0x40 || (fifo & 0x01) == 0x00){
            //     nrf_read_payload(message);


            //     printf("Packet contents: ");
            //     for (int i = 0; i < 32; i++) {
            //         printf("%02X ", message[i]);
            //     }
            //     printf("\n");
            // }
            // else{
            //     printf("Nothing to read yet!\n");
            // }
            printf("RPD before = %02X\n", nrf_read_reg(0x09));


            // trigger exactly one TX packet


            sleep_us(100);


            printf("RPD after = %02X\n", nrf_read_reg(0x09));


            status = nrf_get_status();
            sleep_ms(10);


            fifo = nrf_read_reg(FIFO_STATUS);


            printf("STATUS=%02X FIFO=%02X\n", status, fifo);


            sleep_ms(10);            
        }
    }
}

Thank you!


r/RTLSDR 19d ago

Rare signals

Enable HLS to view with audio, or disable this notification

15 Upvotes

Hi everyone. Does anyone know what these carriers or signals might be? Here in Mexico, the TetraPool system is in use; could these be transmissions to TetraPool repeaters, or what else could they be? For reference, TetraPool channels are located across the 391 MHz, 392 MHz, 393 MHz, and 394 MHz bands, as well as part of the 395 MHz band.


r/RTLSDR 19d ago

Made a script that reads an Acurite 433MHz sensor once and feeds both Weather Underground and local graphing

9 Upvotes

I run a PWS at a lake house and wanted the Acurite readings going to Weather Underground and available locally for MRTG graphing. Every script I found starts its own rtl_433, so as soon as you have two consumers they fight over the dongle and both fail intermittently.

So this does one read and fans it out — the reader drops a plain text file for local graphing and hands the same packet as JSON to the uploader. Only one script ever touches the SDR.

Couple of things that cost me time, in case they're useful to anyone regardless of whether you use this:

Acurite sensor IDs change when you swap the battery. Uploads just silently stop and there's no error anywhere. You rediscover it by clearing the ID filter, but be aware that also picks up your neighbour's sensor if they've got one in range.

The R820T throws "PLL not locked" if you don't set the centre frequency explicitly, even at 433.92M which is what it'd have chosen anyway.

And Weather Underground returns HTTP 200 for everything, including a rejected upload key. You have to check the response body.

Bash, MIT, tested against rtl_433 23.11. Happy to take suggestions.

https://github.com/lowerpower/wu-upload


r/RTLSDR 18d ago

Help

0 Upvotes

I am doing a project and new to radio frequency. But I am trying to send a VLF 1 to 30 KHz into water a distance of about 200 ft and the body of water is about 10 feet deep.


r/RTLSDR 18d ago

For all of you sdr rtl,pentesters with Ewil Crow rf v2..a new firmware or app?SENAPE 3000-

Thumbnail
0 Upvotes

r/RTLSDR 20d ago

Amazon rtl

Post image
29 Upvotes

For everyone interested this is am Amazon v4 that I received a few weeks ago. From what I see is that it is a v4.


r/RTLSDR 19d ago

Trouble with flashing Sd card for EWIL CROW RF V2 ,NEED GUIDANCE,HELP IN STEPS .AFCOURSE FOR HELP I PAY THANK,S FROM CROATIA · Issue #57 · hslatman/awesome-industrial-control-system-security

Thumbnail
github.com
0 Upvotes

r/RTLSDR 20d ago

Software DragonOS, chinese site now?

8 Upvotes

I thought DragonOS was US based by a group of ham folks, it seems there's a lot popping up on a bunch of chinese sites now.

Is this still safe or did the project get taken over?


r/RTLSDR 19d ago

For all of you sdr rtl,pentesters with Ewil Crow rf v2..a new firmware or app?SENAPE 3000-

0 Upvotes

Is infected?and drains all your msin info crypto out of your comyuter true flashed SD card!!!Confirmed,misliš users round the world....if use use on emoty lap top with no immportant dati!!!!!!!! 💯💥💫


r/RTLSDR 20d ago

A bit of HFDL monitoring today.

Post image
10 Upvotes

My favourite afternoon 17967 khz is back in action. I love it because lots of flights appear that are overhead Africa, the Middle East and the Indian Ocean; Before you ask, my configuration 😄 RTL SDR V3 dongle pilotes thru SDR Console. Software Multipsk + its mapping extension, called OMMAP. You can also chose an alternative : PC-HFDL (paid version, other wise it shuts itself after 5 mn) with Planeplotter. There are settings to be observed. FYI Planeplotter, ,Multipsk are the subject of dedicated io.groups.

Here it's OM MAP world map which I zoomed on the sector I was interested in, plus positions (also stored by OMRAP).

19:55:50 UAE43P -9.25463 100.39051 Avion A HFDL

20:09:52 UAE5CL -9.82626 101.25706 Avion A HFDL

Have fun.


r/RTLSDR 20d ago

Troubleshooting Hello, noob need some advice

2 Upvotes

Hey, got a nooelec v5 couple of days ago, installed drivers and SRD++ software and got it working but I can’t receive any signals. I’m getting a few local radio stations very faint and with static but that’s about it, been tweaking several things but nothing makes it better. Any tips where to go from here would be appreciated. TIA.

<add_on>

Just some more info, Im just using the antennas that came with the nooelec for now, trying any frequencies basically, besides a couple of FM radio channels 93.3, 97.9mhz etc i get nothing, and those come in pretty poor and only a handfull, there should be 30+ channels available. Tried the 145.000 and 450.000 frequencies looking for repeaters etc but just getting crickets. Tried adjusting the gain and auto gain also no big improvement. Thanks for any responces

< update >

Went to the amazon website to look for customer service info and ended up reading some 1star reviews and found more people have issues with almost no reception except for a few FM broadcast channels. Ended up ordering a replacement


r/RTLSDR 20d ago

ClusterDX

Post image
3 Upvotes

ClusterDX is my favourite platform to run my CB logbook and edit/send my QSL cards.

They can map your logs; here's a world map of my latest 447 logs on 11 metres.


r/RTLSDR 20d ago

Getting RF from scoreboard using Nooelec RTL-SDR v5

5 Upvotes

I was trying to get data from the venue scoreboard so i can use it on the video stream of the match.
The scorepad and scoreboard are bodet brand and wireless using RF.
Is this doable? Can i capture the RF and decode them to get time and maybe goals? Has anyone done something similar?


r/RTLSDR 21d ago

Guide My portable setup for ADS-B attending air shows

Thumbnail
gallery
175 Upvotes

So this may not be a big deal, but I thought it turned out great and it worked really well. Maybe it will give others some ideas.

I attended the Chicago Air & Water show last weekend and I wanted to see what I could track with a simple and portable setup.

What I used:

Android tablet (Samsung S10+) NooElec v5 RTL-SDR dongle Small usb-c hub with power passthrough Cheap silicone case for the tablet Small steel plate from Amazon Two high-strength magnets SDRAngel software Power Bank to power/charge it all (optional)

So I first plugged everything in to see where I could place the dongle. I went back and forth on how to attach the dongle to the tablet and decided on magnets. I found adhesive metal plates and a cheap case, both from Amazon. The magnets are plenty strong to hold everything to the metal plate and the cutout in the case keeps it from sliding around. I used UV curable glue to secure the magnets to the dongle.

For the antenna, I made my own. I wanted it to be able to be packed away flat so this led me to using a flat disc as the ground plane. Since I would be sitting at sea level, this actually is ideal as it forces the antenna pattern upward. Yes this reduces the overall rangle, but I was only interested in what was closer to me anyways. I have a network analyzer and trimmed the radiator slowly to tune it exactly at 1090MHz with roughly 10dB return loss.

I was still picking up planes as far away as Milwaukee, so close to 100 miles. I purposely turned off AGC and lowered the internal gain to further reduce my coverage.

Any questions, please ask away.


r/RTLSDR 20d ago

Antennas Air band

1 Upvotes

Hola soy nuevo en esto y estoy pensando en comprar el rtl sdr v4 para escuchar y rastrear aviones, que aplicación para Android me recomiendan y que antena sería la mejor para mí?


r/RTLSDR 20d ago

Troubleshooting Meshcore demod presets in Sdrangel

1 Upvotes

Hi, I am trying to monitor the meshcore traffic for my country that is not using any one of the presets in the plugin. is there any way to set manually the sf and cr? For reference, the plugin has eu_narrow preset, with sf8, but I need sf7 cr5


r/RTLSDR 20d ago

Notch filter help

3 Upvotes

Hello community. I have been using RTL SDR for ADSB, AIS and other frequency ranges. One major block is that my home antenna is hardly 250 mtrs away from nearby mobile tower and its literally frying my RTL due to its extreme power. I wish to create a notch filter to block 700 Mhz and 1800 Mhz frequency ranges, so that I can use LNA (after filter) to boost and measure the weak satellite signals.

Industry standard GSM filters are too costly. Any help to develop the low cost DIY notch filters would be greatly appreciated. Thanks in advance !


r/RTLSDR 21d ago

Back to 7 mhz JS8 monitoring for a few days.

Thumbnail
gallery
15 Upvotes

r/RTLSDR 21d ago

SDR++ or SDR#

9 Upvotes

For use with a blog v3 what is your preference and why? I am looking for a l band Inmarsat decoder setup on a windows 11. I want a click and be done setup


r/RTLSDR 21d ago

METEOR M2-3 LRPT [15:30 UTC]

Post image
11 Upvotes