Как получить целое число из байтового массива, который был отправлен с гироскопа MPU

Я пытаюсь прочитать данные MPU на веб-сайте HTML. Я использую MQTT для подключения и ESP8266 для отправки данных. Это работает довольно хорошо, но моя проблема в том, что esp просто отправляет байтовые массивы, и я не знаю, как преобразовать их в числовые значения.

Вот что консоль JavaScript показывает мне, когда MQTT отправляет данные:

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

1

Решение

Все полезные данные MQTT являются байтовыми массивами, это означает, что он может легко переносить что угодно.

Вы можете просто прочитать целые числа из байтовых массивов, которые вы получаете на HTML-странице с помощью клиента Paho. Вам нужно использовать Типизированные массивы и какой вид вы используете, будет зависеть от размера целого числа, которое вы пытаетесь прочитать. Учитывая, что у вас есть 2 байта, это, вероятно, 16-битное целое число, поэтому вам понадобится Int16Array

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

Вы можете найти пример в моем блоге Вот

0

Другие решения

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

Надеюсь, это будет полезно

-2

По вопросам рекламы [email protected]