如何将数据从 Arduino mkr zreo 保存到 matlab?
How can I save Data from an Arduino mkr zreo to matlab?
我正在使用 Arduino mkr zero 通过 mems 麦克风录制音频。现在我想从 Arduino 获取数据到 matlab 中进行进一步评估。 Arduino 支持包不支持 mkr 零,仅支持 mkr1000。有没有一种简单的方法可以将数据直接保存到 matlab 中,或者至少将其保存到 .txt 文件中,然后在 matlab 中读取它?
所以有几个选项可以执行此操作,选择哪个可能仅取决于偏好/经验。
将数据直接发送到Matlab
Matlab 已经构建了一个内置的 Serial Object for reading and writing to the Serial ports. Below is an example of using Serial in Matlab to open, read, write and close the serial port (with "COM1" being a windows based device, see docs 以获取更多信息)。
s = serial('COM1','BaudRate',1200);
fopen(s)
fprintf(s,'*IDN?')
idn = fscanf(s);
fclose(s)
因此您可以直接从 Arduino 的 Serial.write()
写入数据,如果 Matlab 正在以正确的 波特率 监听,那么工作就很好了。如果你想要任何实时的东西,我会推荐尽可能高的 baudrate 它可以处理,但你似乎不需要它,所以你总是可以稍微延迟发送数据并将其缓冲(如果需要,可以缓冲到文本文件或 .mat 文件)。
将数据发送到另一个程序
由于 Matlab 对用户来说(一般来说不包括工具箱)出现 single threaded,因此编写另一个专门用于接收此串行数据的程序可能更有意义。使用另一种语言也可能 运行 比 Matlab 快很多,并且可以帮助在此过程中学习新技能。
您会发现许多用多种语言读取串行数据的示例,包括我附上的一些示例以供参考;这个想法是将数据写入文本文件并在 Matlab 准备就绪时从 Matlab 读取它:C#, Java, Rust, Python 等等...
如果你想变得更有趣,你可以用另一种语言完成所有串行读取,然后通过 local network sockets. Or even use Java's native interface 将其发送到 Matlab,使用 Matlab 同时处理多个 Arduino 的发送数据(可能是不必要的)。
总结
如果您想要一些简单的设置并快速完成工作,我可能会选择第一个选项,但也许会考虑一个更永久的解决方案的替代方案。
额外的硬核方法(您已被警告)
我假设您正在使用 I2S 进行录音?因此,SPI 可以自由地将所有数据通过 SPI 传输到 PC。您可以使用 breakout module 将您的 SPI 消息转换为 I2C,然后我链接的那个具有虚拟 COM 端口,因此可以再次充当串行。或者您可以构建自定义驱动程序来读取通过 I2C 传入的消息。也许您可以将速度提高到高于当前串行 USB 端口的速度?比较它们会很酷。
我正在使用 Arduino mkr zero 通过 mems 麦克风录制音频。现在我想从 Arduino 获取数据到 matlab 中进行进一步评估。 Arduino 支持包不支持 mkr 零,仅支持 mkr1000。有没有一种简单的方法可以将数据直接保存到 matlab 中,或者至少将其保存到 .txt 文件中,然后在 matlab 中读取它?
所以有几个选项可以执行此操作,选择哪个可能仅取决于偏好/经验。
将数据直接发送到Matlab
Matlab 已经构建了一个内置的 Serial Object for reading and writing to the Serial ports. Below is an example of using Serial in Matlab to open, read, write and close the serial port (with "COM1" being a windows based device, see docs 以获取更多信息)。
s = serial('COM1','BaudRate',1200);
fopen(s)
fprintf(s,'*IDN?')
idn = fscanf(s);
fclose(s)
因此您可以直接从 Arduino 的 Serial.write()
写入数据,如果 Matlab 正在以正确的 波特率 监听,那么工作就很好了。如果你想要任何实时的东西,我会推荐尽可能高的 baudrate 它可以处理,但你似乎不需要它,所以你总是可以稍微延迟发送数据并将其缓冲(如果需要,可以缓冲到文本文件或 .mat 文件)。
将数据发送到另一个程序
由于 Matlab 对用户来说(一般来说不包括工具箱)出现 single threaded,因此编写另一个专门用于接收此串行数据的程序可能更有意义。使用另一种语言也可能 运行 比 Matlab 快很多,并且可以帮助在此过程中学习新技能。
您会发现许多用多种语言读取串行数据的示例,包括我附上的一些示例以供参考;这个想法是将数据写入文本文件并在 Matlab 准备就绪时从 Matlab 读取它:C#, Java, Rust, Python 等等...
如果你想变得更有趣,你可以用另一种语言完成所有串行读取,然后通过 local network sockets. Or even use Java's native interface 将其发送到 Matlab,使用 Matlab 同时处理多个 Arduino 的发送数据(可能是不必要的)。
总结
如果您想要一些简单的设置并快速完成工作,我可能会选择第一个选项,但也许会考虑一个更永久的解决方案的替代方案。
额外的硬核方法(您已被警告)
我假设您正在使用 I2S 进行录音?因此,SPI 可以自由地将所有数据通过 SPI 传输到 PC。您可以使用 breakout module 将您的 SPI 消息转换为 I2C,然后我链接的那个具有虚拟 COM 端口,因此可以再次充当串行。或者您可以构建自定义驱动程序来读取通过 I2C 传入的消息。也许您可以将速度提高到高于当前串行 USB 端口的速度?比较它们会很酷。