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);
}

Parents
  • 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

  • And how exactly is your approach to send data from the nRF52 to the app? Does the standard ble_app_uart application work as intended or not?

    Best regards,

    Simon

    As for  , this seems to be the exact opposite problem. I would recommend using nRF Connect instead of the Toolbox app, as the toolbox app is pretty dated at this point. Please also make sure you've set up PuTTY according to our example projects:

    Start a terminal emulator like PuTTY and connect to the used COM port with the following UART settings:

    • Baud rate: 115.200
    • 8 data bits
    • 1 stop bit
    • No parity
    • HW flow control: None
Reply
  • And how exactly is your approach to send data from the nRF52 to the app? Does the standard ble_app_uart application work as intended or not?

    Best regards,

    Simon

    As for  , this seems to be the exact opposite problem. I would recommend using nRF Connect instead of the Toolbox app, as the toolbox app is pretty dated at this point. Please also make sure you've set up PuTTY according to our example projects:

    Start a terminal emulator like PuTTY and connect to the used COM port with the following UART settings:

    • Baud rate: 115.200
    • 8 data bits
    • 1 stop bit
    • No parity
    • HW flow control: None
Children
Related