Can't send data to nrf Connect app o NRF52832

 I am trying to send two values to nrf Connect app through BLE  using NUS service.
The connection is working fine, device connects with the nrf Connect app but when I enable the notifications , There is no value being notify on the nrf Connect app 

using nRF sdk 16.00, softdevice s132

void send_data_via_nus(float X, float Y, ble_nus_t nus_service)
{
uint8_t data[8];
memcpy(data, &X, sizeof(X));
memcpy(data + sizeof(X), &Y, sizeof(Y));

uint16_t length = sizeof(X) + sizeof(Y);
ret_code_t err_code;
err_code = ble_nus_data_send(&m_nus, data, &length, m_conn_handle);
if ((err_code != NRF_ERROR_INVALID_STATE) && (err_code != NRF_ERROR_NOT_FOUND))
{
APP_ERROR_CHECK(err_code);
}

}

How I am handling the NUS service

static void nus_data_handler(ble_nus_evt_t * p_evt)
{

    if (p_evt->type == BLE_NUS_EVT_RX_DATA)
    {
        uint32_t err_code;

        NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART.");
        NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);

        for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++)
        {
            do
            {
                err_code = app_uart_put(p_evt->params.rx_data.p_data[i]);
              
                if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY))
                {
                    NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);
                    APP_ERROR_CHECK(err_code);
                }
            } while (err_code == NRF_ERROR_BUSY);
        }
     
        if (p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r')
        {
            while (app_uart_put('\n') == NRF_ERROR_BUSY);
        }

    }

}
/**@snippet [Handling the data received over BLE] */


/**@brief Function for initializing services that will be used by the application.
 */
static void services_init(void)
{

    uint32_t           err_code;
    ble_nus_init_t     nus_init;
    nrf_ble_qwr_init_t qwr_init = {0};

    // Initialize Queued Write Module.
    qwr_init.error_handler = nrf_qwr_error_handler;

    err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init);
    APP_ERROR_CHECK(err_code);

    // Initialize NUS.
    memset(&nus_init, 0, sizeof(nus_init));
 
    nus_init.data_handler = nus_data_handler;

    err_code = ble_nus_init(&m_nus, &nus_init);
    APP_ERROR_CHECK(err_code);
}

The UART PART

void uart_event_handle(app_uart_evt_t * p_event)
{
    static uint8_t data_array[BLE_NUS_MAX_DATA_LEN];
    static uint8_t index = 0;
    uint32_t       err_code;

    switch (p_event->evt_type)
    {
        case APP_UART_DATA_READY:
            UNUSED_VARIABLE(app_uart_get(&data_array[index]));
            index++;

            if (index >= m_ble_nus_max_data_len)
            {
                if (index > 1)
                {
                    NRF_LOG_DEBUG("Ready to send data over BLE NUS");
                    NRF_LOG_HEXDUMP_DEBUG(data_array, index);

                    do
                    {
                        uint16_t length = (uint16_t)index;
                        err_code = ble_nus_data_send(&m_nus,data_array, &length, m_conn_handle);
                        if ((err_code != NRF_ERROR_INVALID_STATE) &&
                            (err_code != NRF_ERROR_RESOURCES) &&
                            (err_code != NRF_ERROR_NOT_FOUND))
                        {
                            APP_ERROR_CHECK(err_code);
                        }
                    } while (err_code == NRF_ERROR_RESOURCES);
                }

                index = 0;
            }
            break;

        case APP_UART_COMMUNICATION_ERROR:
            APP_ERROR_HANDLER(p_event->data.error_communication);
            break;

        case APP_UART_FIFO_ERROR:
            APP_ERROR_HANDLER(p_event->data.error_code);
            break;

        default:
            break;
    }
}
/**@snippet [Handling the data received over UART] */


/**@brief  Function for initializing the UART module.
 */
/**@snippet [UART Initialization] */
static void uart_init(void)
{
    uint32_t                     err_code;
    app_uart_comm_params_t const comm_params =
    {
        .rx_pin_no    = RX_PIN_NUMBER,
        .tx_pin_no    = TX_PIN_NUMBER,
        .rts_pin_no   = RTS_PIN_NUMBER,
        .cts_pin_no   = CTS_PIN_NUMBER,
        .flow_control = APP_UART_FLOW_CONTROL_DISABLED,
        .use_parity   = false,
#if defined (UART_PRESENT)
        .baud_rate    = NRF_UART_BAUDRATE_115200
#else
        .baud_rate    = NRF_UARTE_BAUDRATE_115200
#endif
    };

    APP_UART_FIFO_INIT(&comm_params,
                       UART_RX_BUF_SIZE,
                       UART_TX_BUF_SIZE,
                       uart_event_handle,
                       APP_IRQ_PRIORITY_LOWEST,
                       err_code);
    APP_ERROR_CHECK(err_code);
}

  • Hi, 
    We just came back from Easter vacation and that was the reason for no response from out end. Due to very high traffic during this period on devzone and fewer people working this week, we did not manage to assign this to an expert yet. We will look into this as soon as possible, but please expect more delays the first two days. Thanks for your patience so far.

  • Hi

    What have you done in terms of debugging this? Do you see any error or log messages of use if your peripheral is connected to a debugger? And is there any information in the log on nRF Connect side so you can see that notifications are enabled correctly and whether any data is actually sent from the peripheral device.

    Are you able to write data manually to the central device like the ble_app_uart application does by default? 

    Best regards,

    Simon

  • Hi Simnor, 
    There is no error message or log message in debugging, Just the data that i want to send to nRF Connect App,
    Like the ble_app_uart i can only receive message from nRF Connect app but can not send any message to app.
    When I try to send message or a value , it doesn't show on App

  • I'm also running into some problems as well. 

    When using the nrfToolbox-->UART-->Connect it just stays as connecting

    The debug logs keep showing this:


    <info> app: BLE NUS disconnected
    <info> app: BLE NUS connected
    <info> app: BLE NUS disconnected
    <info> app: BLE NUS connected
    <info> app: BLE NUS disconnected
    <info> app: BLE NUS connected
    <info> app: BLE NUS disconnected
    <info> app: BLE NUS connected
    <info> app: BLE NUS disconnected
    <info> app: BLE NUS connected

    LED1 is solid

    LED3 is solid, right at boot up. It must've immediately connected to my iPhone. When I turn off the Bluetooth on my iPhone, LED3 turns off.

    When I send data on PuTTY, LED4 flashes.

    The only thing left I have is to send data from my phone and arrive in PuTTY which is not working. Don't know why!

Related