Я пытаюсь прочитать данные 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);
Все полезные данные MQTT являются байтовыми массивами, это означает, что он может легко переносить что угодно.
Вы можете просто прочитать целые числа из байтовых массивов, которые вы получаете на HTML-странице с помощью клиента Paho. Вам нужно использовать Типизированные массивы и какой вид вы используете, будет зависеть от размера целого числа, которое вы пытаетесь прочитать. Учитывая, что у вас есть 2 байта, это, вероятно, 16-битное целое число, поэтому вам понадобится Int16Array
var intArray = Int16Array.from(buffer);
var value = intArray[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;
}
Надеюсь, это будет полезно