You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ESP8266发送的MPU陀螺仪字节数组转为整数?

解决ESP8266通过MQTT发送MPU数据时的字节数组转数值问题

看起来你这里的核心问题出在对myResultAcc的处理上——你直接把这个MPU加速度结果对象传给了sprintf,而不是提取里面的实际数值,导致发送的是无效的字符串内容,JS那边收到的自然是这些错误字符串对应的字节数组。

问题根源分析

你之前的代码里:

sprintf(str, "%d", myResultAcc); 

myResultAcc是一个MPU加速度结果的类实例(比如包含x/y/z轴数据的对象),不是单个整数。当你把它传给%d格式符时,sprintf会把对象的内存地址转换成十进制数字,输出成字符串。比如如果地址对应的十进制是32,那字符串就是"32",对应的ASCII字节就是51('3')和50('2')——这就是你在JS控制台看到Buffer [51, 50]的原因,完全不是你想要的加速度数值。

修正方案

首先要明确:myResultAcc内部应该包含x、y、z三个轴的具体加速度数值(比如成员变量ax、ay、az,具体名称取决于你使用的MPU9250库),你需要提取这些数值再格式化发送。

方案1:发送单个轴的数值(比如x轴)

修改代码提取具体轴的数值,再格式化字符串:

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

// 提取x轴加速度的具体数值(假设ax是int16_t类型的成员变量)
int16_t accelX = myResultAcc.ax;
char str[12]; 
sprintf(str, "%d", accelX); 
Serial.println(str); 
client.publish("esp/gyro", str); 
Serial.println(); 
delay(600);

方案2:发送所有轴的JSON格式数据(更推荐)

如果想一次性发送x/y/z三个轴的数据,用JSON格式会更方便JS端解析:

// 先安装ArduinoJson库
#include <ArduinoJson.h>

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

// 创建JSON文档并填充数据
StaticJsonDocument<128> doc;
doc["ax"] = myResultAcc.ax;
doc["ay"] = myResultAcc.ay;
doc["az"] = myResultAcc.az;

// 把JSON转换成字符串
char str[128];
serializeJson(doc, str);

Serial.println(str); 
client.publish("esp/gyro", str); 
Serial.println(); 
delay(600);

JS端解析数据

  • 如果用方案1,收到字符串后直接转数字即可:
client.onMessageArrived = function(topic, message) {
  const accelValue = parseInt(message.payloadString);
  console.log("加速度值:", accelValue);
};
  • 如果用方案2,直接解析JSON:
client.onMessageArrived = function(topic, message) {
  const accelData = JSON.parse(message.payloadString);
  console.log("X轴加速度:", accelData.ax);
  console.log("Y轴加速度:", accelData.ay);
  console.log("Z轴加速度:", accelData.az);
};

内容的提问来源于stack exchange,提问作者Lennard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:57:40