1

我正在尝试在 HTML 网站上读取 MPU 数据。我使用 MQTT 进行连接,使用 ESP8266 发送数据。这很好用,但我的问题是 esp 只是发送字节数组,我不知道如何将它们转换为数值。

这是 MQTT 发送数据时 JavaScript 控制台向我显示的内容:

[Log] Buffer [51, 50] (2) 
[Log] Buffer [51, 50] (2) 
[Log] Buffer [51, 50] (2) 
[Log] Buffer [51, 50] (2) 
[Log] Buffer [51, 50] (2) 
[Log] Buffer [51, 50] (2) 

在我的代码中,我尝试将值转换为字符串,因为 MQTT 似乎不发送普通整数。

if (myMPU.readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01)
{
  myMPU.readAccelData(&myResultAcc);
}

myMPU.updateTime();

//myResultAcc.printResult();
//myResultGyro.printResult();
//myResultMag.printResult();

//i think this converts a undefined value into a string
char str[12];
sprintf(str, "%d", myResultAcc);
Serial.println(str);
client.publish("esp/gyro",str);
Serial.println();

delay(600);
4

2 回答 2

0

所有 MQTT 有效负载都是字节数组,这意味着它可以轻松传输任何东西。

您可以使用 paho 客户端从 HTML 页面中接收的字节数组中读取整数。您需要使用类型化数组,您使用的排序取决于您尝试读取的整数的大小。鉴于它看起来像你有 2 个字节,那么它可能是一个 16 位整数,所以你需要一个Int16Array

var intArray = Int16Array.from(buffer);
var value = intArray[0];

你可以在我的博客上找到一个例子

于 2018-01-22T23:38:52.500 回答
-2
char * itoa (int value, char *result, int base)
{
// check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; }

char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value;

do {
    tmp_value = value;
    value /= base;
    *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value );

// Apply negative sign
if (tmp_value < 0) *ptr++ = '-';
*ptr-- = '\0';
while (ptr1 < ptr) {
    tmp_char = *ptr;
    *ptr--= *ptr1;
    *ptr1++ = tmp_char;
}
return result;
}

希望这会有所帮助

于 2018-01-22T11:45:40.020 回答