如何通过 BLE 发送浮点数据并在 UART 上正确显示(nRF 工具箱)
How to send float data over BLE and display it properly on the UART (nRF Toolbox)
我正在通过 BLE 从中央 (Android) 向 nRF52832 发送命令,并接收回 SPI 数据,但格式错误。我怎样才能 convert/display 按原样处理这些数据。
当我向 nRF52832 发送 '1'
时,我希望收到 [1.2 2.2 3.2]
。到目前为止我得到的只是十六进制数据 [FF?@]
.
if (p_evt->params.rx_data.p_data[0] == '1') // If the Rx_Central input is '1', ble_nus_data_send the accelerometer data.
{
spim_rx_buffer.AccX = 1.2; // Random dummy data
spim_rx_buffer.AccY = 2.2; // Random dummy data
spim_rx_buffer.AccZ = 3.2; // Random dummy data
for(int i = 0; i < 3; i++)
{
uint16_t len = sizeof(float);
float* spi_p = (float*) &spim_rx_buffer;
err_code = ble_nus_data_send (&m_nus, (uint8_t*)spi_p+i*sizeof(float), &len, m_conn_handle);
}
}
阅读 ble_nus_data_send 的文档有帮助:
Function for sending a data to the peer.
This function sends the input string as an RX characteristic notification to the peer.
Parameters
[in] p_nus Pointer to the Nordic UART Service structure.
[in] p_data String to be sent.
[in,out] p_length Pointer Length of the string. Amount of sent bytes.
[in] conn_handle Connection Handle of the destination client.
你所做的是将一个浮点指针转换为 uint8,因此,你
- 仅从浮点位表示传输一个字节
- 传输可能在某处被解释为字符串的原始数据
您可以使用 sprintf 将浮点数转换为有效字符串。
或者您尝试违反 API(丑陋)并将浮点原始数据转换为 uint8,这意味着一个浮点可能产生 4 个字节。现在希望底层代码不会将某些东西解释为字符串,例如 0 终止符等等。
我正在通过 BLE 从中央 (Android) 向 nRF52832 发送命令,并接收回 SPI 数据,但格式错误。我怎样才能 convert/display 按原样处理这些数据。
当我向 nRF52832 发送 '1'
时,我希望收到 [1.2 2.2 3.2]
。到目前为止我得到的只是十六进制数据 [FF?@]
.
if (p_evt->params.rx_data.p_data[0] == '1') // If the Rx_Central input is '1', ble_nus_data_send the accelerometer data.
{
spim_rx_buffer.AccX = 1.2; // Random dummy data
spim_rx_buffer.AccY = 2.2; // Random dummy data
spim_rx_buffer.AccZ = 3.2; // Random dummy data
for(int i = 0; i < 3; i++)
{
uint16_t len = sizeof(float);
float* spi_p = (float*) &spim_rx_buffer;
err_code = ble_nus_data_send (&m_nus, (uint8_t*)spi_p+i*sizeof(float), &len, m_conn_handle);
}
}
阅读 ble_nus_data_send 的文档有帮助:
Function for sending a data to the peer.
This function sends the input string as an RX characteristic notification to the peer.
Parameters
[in] p_nus Pointer to the Nordic UART Service structure.
[in] p_data String to be sent.
[in,out] p_length Pointer Length of the string. Amount of sent bytes.
[in] conn_handle Connection Handle of the destination client.
你所做的是将一个浮点指针转换为 uint8,因此,你
- 仅从浮点位表示传输一个字节
- 传输可能在某处被解释为字符串的原始数据
您可以使用 sprintf 将浮点数转换为有效字符串。
或者您尝试违反 API(丑陋)并将浮点原始数据转换为 uint8,这意味着一个浮点可能产生 4 个字节。现在希望底层代码不会将某些东西解释为字符串,例如 0 终止符等等。