使用 RFDuino 通过 BLE 发送数据
Send data over BLE with RFDuino
我已将传感器连接到 RFDuino,并希望通过 BLE 将读数发送到 Android 应用程序。
const int sensorPin = 2;
int sensorValue = 0;
void setup() {
Serial.begin(9600);
RFduinoBLE.begin();
}
void loop() {
sensorValue = analogRead(sensorPin);
float voltage= sensorValue * (3.3 / 1023.0);
Serial.print("uv sensor = ");
Serial.println(voltage);
RFduinoBLE.sendFloat(voltage);
delay(1000);
}
在控制台中,我看到类似 0.2
的值。但在应用程序中,它转换为类似 00-00-A4-41
的内容,它被描述为 here 但我不明白它背后的逻辑是什么。如何正确转换从 RFDuino 发送的值?
RFduino 以小端方式发送浮点数。您的 android 应用程序将以 4 个字节的形式接收它,您需要通过反转字节的顺序(并转换为浮点数)将其转换为大端。关于这个话题有几个话题,例如。 Converting Little Endian to Big Endian 和您使用的那个。
应该只是快速阅读字节顺序和浮点格式以了解其背后的逻辑。但基本上,4 字节浮点数的字节以小端与大端的相反顺序存储。当你反转 little endian 中的 4 个字节时,它就变成了 big endian,你可以根据自己的情况去做。
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html
http://en.wikipedia.org/wiki/Single-precision_floating-point_format
我已将传感器连接到 RFDuino,并希望通过 BLE 将读数发送到 Android 应用程序。
const int sensorPin = 2;
int sensorValue = 0;
void setup() {
Serial.begin(9600);
RFduinoBLE.begin();
}
void loop() {
sensorValue = analogRead(sensorPin);
float voltage= sensorValue * (3.3 / 1023.0);
Serial.print("uv sensor = ");
Serial.println(voltage);
RFduinoBLE.sendFloat(voltage);
delay(1000);
}
在控制台中,我看到类似 0.2
的值。但在应用程序中,它转换为类似 00-00-A4-41
的内容,它被描述为 here 但我不明白它背后的逻辑是什么。如何正确转换从 RFDuino 发送的值?
RFduino 以小端方式发送浮点数。您的 android 应用程序将以 4 个字节的形式接收它,您需要通过反转字节的顺序(并转换为浮点数)将其转换为大端。关于这个话题有几个话题,例如。 Converting Little Endian to Big Endian 和您使用的那个。
应该只是快速阅读字节顺序和浮点格式以了解其背后的逻辑。但基本上,4 字节浮点数的字节以小端与大端的相反顺序存储。当你反转 little endian 中的 4 个字节时,它就变成了 big endian,你可以根据自己的情况去做。
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html http://en.wikipedia.org/wiki/Single-precision_floating-point_format