Radio - faster way?


#1

Hi all,

I am playing with core and dongle. I made something like wireless UART via radio and I thing this is quite slow communication way. It is good enough for sending temperature or push-button events, but I would like to transmit like 10 messages per second and I can’t reach it. Is there any example how to transmit data faster? As a template I am using push-button example, but there is quite a lot data transmit around (preamble, address, synchronization word, …) for just a two bytes of data in one package. Is there any option how to send 4B or more in one package? Or do you have any suggestions how to speed up the communication, please?

Thanks


#2

Hello,

you can use bc_radio_pub_* functions. You can send uin32_t, strings and even a buffer. The single radio message can send around 50-60 bytes. So you cannot send long buffer over 40 bytes, you have to test it with shorter ones first.

The 868 MHz is not ideal for streaming data because there apply CE & FCC duty cycles.

The duty cycle – it is defined as the maximum ratio of time on the air per hour. Basically, 1% means you can speak 36s per hour, not more. Duty Cycle is applicable for the sub-band.

Source

Example code, i’ve edited bcf-radio-push-button firmware

void button_event_handler(bc_button_t *self, bc_button_event_t event, void *event_param)
{
    (void) self;
    uint16_t *event_count = (uint16_t *) event_param;

    if (event == BC_BUTTON_EVENT_CLICK)
    {
        bc_led_pulse(&led, 100);

        //uint32_t u32 = 1234567890;
        //bc_radio_pub_uint32("uint32_t", &u32);

        uint8_t b[] = {1,2,3,4,5,6,7,8,9,0};
        bc_radio_pub_buffer(b, sizeof(b));
    }

    if (event == BC_BUTTON_EVENT_HOLD)
    {
        bc_led_pulse(&led, 100);

        bc_radio_pub_string("string", "Testin string over radio");
    }
}

Here are the received data in playground:
image


#3

Here is example how to use RAW radio packets without acknowledgments.
This is uring RAW packets and not the BigClown protocol so you have to use your gateway.

Upload this example to two Core Modules. Connect them over USB to PC and open both of them in the serial terminal. When you press the button the other one module gives you the message over USB.

Again, you have to check the duty cycle to not transmit for longer that 1% of the time in a hour - that CE/FCC duty cycle rule.


#4

Thank you for a help, it works perfectly. I do not have to worry about duty cycle, since the device is closed in heavy shielded cover with no chance for outgoing signal :).


#5

Hi, that’s sounds interesting. I’m curious what are you Core Module using for? Some metal escape-room with no escape? :slight_smile:


#6

Unfortunately I cant be more specific, but it is an equipment inside an huge X-Ray - that is why I have absolutely no worries about any duty cycle :). They want to publish it. Once it is out, I’ll send you link :).