代码之家  ›  专栏  ›  技术社区  ›  Lennard

如何从MPU陀螺仪发送的字节数组中获取整数

  •  1
  • Lennard  · 技术社区  · 7 年前

    我试图在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);
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   hardillb    7 年前

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

    您可以通过paho客户端从HTML页面中接收的字节数组中读取整数。您需要使用 Typed Arrays 使用哪种排序将取决于您尝试读取的整数的大小。如果它看起来有2个字节,那么它可能是一个16位整数,因此需要 Int16Array

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

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

        2
  •  -2
  •   JDP    7 年前
    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;
    }
    

    希望这会有帮助