esp32与matlab之间的串口问题

rn0zuynd  于 12个月前  发布在  Matlab
关注(0)|答案(1)|浏览(230)

我使用的是连接到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后显示此
while 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我怎么能得到没有信息的数据,出现在开头。这样我就可以真实的绘制数据了
我尝试将数据作为浮点数组发送。但数据不正确显示(只有0.00出现在arduino的串行监视器.其实,我是一个初学者在Arduino。我想建立七个动作捕捉单元(esp32+振动电机+mpu9250传感器),这样我就可以计算主体的运动。然后,数据应该被发送到MATLAB,MATLAB发送允许的运动范围并以真实的时间绘制Angular 。如果运动Angular 超出运动范围,则振动电机将振动。我想把这个esp转换成路由器,并使用串行端口来显示从其他esp接收到的所有数据到matlab,用于显示真实的时间数据图,并向esp发送命令。我不能用matlab的Wifi。如果有任何解决这些问题建议

vltsax25

vltsax251#

您正在获得额外的数据,因为您使用相同的串行端口进行日志记录(您在Arduino串行监视器中看到的)并将数据发送到MATLAB,因此您也可以在MATLAB中看到所有日志消息。
有两种可能的解决方案:
1.使用不同的串行端口将数据发送到MATLAB。这将需要修改您的电路,并使用一个USB适配器串行。
1.过滤您在MATLAB中读取的内容,忽略所有日志消息并仅处理具有预期格式的消息。

相关问题