esp32与matlab之间的串口问题

问题描述 投票:0回答:1

我正在使用连接到 mpu9250 模块的 esp32 (nodemcu 32s)。 电路原理图是 circuit

这是arduino ide的esp代码:

/***************************************************************************
* Example sketch for the MPU9250_WE library
***************************************************************************/

#include <MPU9250_WE.h>
#include <Wire.h>
#include <HardwareSerial.h>
#define MPU9250_ADDR 0x68

MPU9250_WE myMPU9250 = MPU9250_WE(MPU9250_ADDR);

void setup() {
  Serial.begin(115200);
  Wire.begin();
 delay(200);
 myMPU9250.autoOffsets();
 myMPU9250.setAccOffsets(-14240.0, 18220.0, -17280.0, 15590.0, -20930.0, 12080.0);
  myMPU9250.setGyrOffsets(45.0, 145.0, -105.0);
  myMPU9250.enableGyrDLPF();
  
  myMPU9250.setGyrDLPF(MPU9250_DLPF_6);

  myMPU9250.setSampleRateDivider(5);

  myMPU9250.setGyrRange(MPU9250_GYRO_RANGE_250);

  myMPU9250.setAccRange(MPU9250_ACC_RANGE_2G);

  myMPU9250.enableAccDLPF(true);

  myMPU9250.setAccDLPF(MPU9250_DLPF_6);

  
  myMPU9250.enableAccAxes(MPU9250_ENABLE_XYZ);
  myMPU9250.enableGyrAxes(MPU9250_ENABLE_XYZ);
 
  myMPU9250.setMagOpMode(AK8963_CONT_MODE_100HZ);
  delay(200);
}

void loop() {
  xyzFloat gValue = myMPU9250.getGValues();
  xyzFloat gyr = myMPU9250.getGyrValues();
  xyzFloat magValue = myMPU9250.getMagValues();
  float temp = myMPU9250.getTemperature();
  float resultantG = myMPU9250.getResultantG(gValue);
 //float AccArray[3]={gValue.x , gValue.y , gValue.z};
 // Serial.println(AccArray[3]);
 String pausedata=" ";
 String datatoprint= gValue.x +pausedata+gValue.y+pausedata + gValue.z;
 Serial.println(datatoprint);
delay(200);
}

运行 esp32 后串行监视器显示此信息 serial monitor

而matlab代码:

s=serialport("COM3",115200);
fid=fopen("serialread.txt",'a')
%legimu=[];
%row=0;
while (true)
   % row=row+1;
data=readline(s)
data2 = fscanf(s, '%f%c');
fprintf(fid,data);
%legimu(row,:)=str2num(data);
end

serialread.txt显示: enter image description here 如果没有开头出现的信息,如何获取数据。这样我就可以实时绘制数据。

我尝试将数据作为浮点数组发送。但数据无法正确显示(arduino 的串行监视器中仅出现 0.00)。 事实上,我是arduino的初学者。我想构建七个运动捕捉单元(esp32+振动电机+mpu 9250传感器),这样我就可以计算主体运动。然后数据应发送到 matlab,发送允许的运动范围并实时绘制角度。如果运动角度超出运动范围,振动电机就会振动。 我想将这个esp转换为路由器,并使用串口将从其他esp接收到的所有数据显示到matlab中,以便实时显示数据图并向esps发送命令。 我无法在 matlab 中使用 Wifi。 如果有任何建议来解决这些问题

matlab serial-port esp32 arduino-esp32
1个回答
0
投票

您获得了额外的数据,因为您使用相同的串行端口进行日志记录(您在 Arduino 串行监视器中看到的内容)并将数据发送到 MATLAB,因此您还可以在 MATLAB 中看到所有日志记录消息。

有 2 种可能的解决方案:

  1. 使用不同的串行端口将数据发送到 MATLAB。这需要修改您的电路并使用 UART 串行转 USB 适配器。
  2. 过滤您在 MATLAB 中读取的内容,以忽略所有日志消息并仅处理具有您期望格式的消息。
© www.soinside.com 2019 - 2024. All rights reserved.