python - 从电脑读取wav文件到arduino mega

标签 python serial-port arduino byte

我必须读取wav文件(我决定用python来做)并将字节从文件写入串行端口。这是我的 python 代码(进行了一些更改以修复字节传输/接收)

import serial, time
ser = serial.Serial(6, 19200, timeout=0,parity=serial.PARITY_EVEN, rtscts=1)
f = open("out.wav", "rb")
try:
    n=0
    while n!=7000:
        f.read(1)
        n+=1
    while n != 7002:
        byte = f.read(1)
        ser.write(byte)
        n+=1
    finally:
        print(byte)
        time.sleep(1)
        print(ser.read())
        f.close()
        ser.close()

这是我的 arduino 代码,用于确定我收到的内容

byte buf;
void setup(){
Serial.begin(19200);
}
void loop(){
if(Serial.available()>0){
    buf=Serial.read();
    Serial.flush();
    Serial.println(buf);
    }
}

我的主要问题是我从 python 和 arduino 获取不同的字节。我尝试了很多方法,但最后我还是来这里,因为我不知道如何解决它

最佳答案

串行端口通信提供了随每个字节一起传输奇偶校验位的选项。这可用于检测传输错误。

在 Arduino 上,您使用 Serial.begin(19200)。这会隐式配置为不使用奇偶校验位。

在运行Python的机器上,您使用serial.Serial(6, 19200, timeout=0,parity=serial.PARITY_EVEN, rtscts=1)。这明确地设置了偶校验位。

因此,Python 为每个字节发送偶校验位,而 arduino 预计根本不会接收奇偶校验位。这可能是您观察到接收到的字节与预期不同的原因。

在运行 Python 的机器上尝试一下:

serial.Serial(6, 19200, timeout=0)

这应该隐式配置为不使用奇偶校验位,就像您对 Arduino 所做的那样。

关于python - 从电脑读取wav文件到arduino mega,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518978/

相关文章:

c++ - 为什么使用 arduino uno、sr04 超声波传感器和 9 个 LED 时此代码无法工作?

c++ - 有没有办法在 C++ 中将字节数组转换为数字?

python - 将 python 脚本转换为 Airflow PythonOperator

C AVR 序列号 : Strange behaviour while using integers of different sizes

linux - 通用 USB 串行设备连续提供 1`

java - java中的串口读写

python - 如何将用户添加到资格

python - 在聚类中找到异常值的标识

python - 在 Heroku 上为 Django 处理静态文件和模板的正确方法

.net - ESP8266 - .Net 可行吗?