Arduino USB 与 Linux 的兼容性
Arduino USB compatibility with Linux
我一直在做一个需要通过 USB 与 (Debian) Linux NAS 通信的 Arduino 项目。
它与 Windows 终端完美可靠地通信。
与Linux的沟通很糟糕。
这是我用于此通信的测试应用程序:
void setup(void) {
Serial.begin(9600, SERIAL_8N1);
}
void loop(void) {
do {
Serial.println("1234567890");
delay(1000);
} while (true);
}
OSEPP Nano Arduino 到 Windows:
使用 OSEPP Nano Arduino,通信看起来像这样 Windows:
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
(forever, ok)
OSEPP Nano Arduino 到 QNAP NAS 上的 Linux:
使用 OSEPP Nano Arduino,在 QNAP NAS 上与 Linux 的通信看起来像这样:
[~] # busybox stty -F /dev/ttyUSB0 cs8 9600 opost -ixon -ixoff -cstopb -parenb
[~] # screen /dev/ttyUSB0 –fn
/var/run/utmp: No such file or directory
15
59
1351159113
51115353579779
9
79111137311371
11131131359
11579
11711359
7139
357
35
3130577917931359
39
913717117
31
1313315791113579
133
373
偶数几乎从不出现这一事实应该是解决这个问题的线索。我在 Arduino 程序和 Linux 命令中选择了不同的串行参数,但只能让它变得更糟("worse",我的意思是没有正确接收到字符)。
OSEPP ATMega2560 Arduino 到 QNAP NAS 上的 Linux:
起初看起来很有用,但没用多久。
[~] # busybox stty -F /dev/ttyUSB0 cs8 9600 opost -ixon -ixoff -cstopb -parenb
[~] # screen /dev/ttyUSB0 –fn
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
CC�������CC�����C�������CC����CC�
我试了几次,结果惊人地相似(不完全相同)。
Arduino Duemilanove:
[~] # busybox stty -F /dev/ttyUSB0 cs8 9600 opost -ixon -ixoff -cstopb -parenb
[~] # screen /dev/ttyUSB0 –fn
/var/run/utmp: No such file or directory
1713
371
3579
137557
5379
359599
371591311533609
597
3579
1391913
15359
16813579
15
715715379
11375
551135
7
135513311993
51791357
15959
1111919
113
Arduino Lilypad
与 Nano & Duemilanove 相似的结果。
问题:
有谁知道为什么会这样?我更喜欢使用 "Nano" Arduino,因为这个项目只需要几行 I/O 行,任何更大的行都是多余的。
Arduino USB 实现是否在某些方面与 Linux 不兼容?
感谢您提供的任何见解!
Linux 不会阻止多个进程打开串行端口,如果其中有多个进程从端口读取数据,那么其他进程将错过任何此类数据读取。确认没有其他进程打开串口。
我一直在做一个需要通过 USB 与 (Debian) Linux NAS 通信的 Arduino 项目。
它与 Windows 终端完美可靠地通信。
与Linux的沟通很糟糕。
这是我用于此通信的测试应用程序:
void setup(void) {
Serial.begin(9600, SERIAL_8N1);
}
void loop(void) {
do {
Serial.println("1234567890");
delay(1000);
} while (true);
}
OSEPP Nano Arduino 到 Windows: 使用 OSEPP Nano Arduino,通信看起来像这样 Windows:
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
(forever, ok)
OSEPP Nano Arduino 到 QNAP NAS 上的 Linux: 使用 OSEPP Nano Arduino,在 QNAP NAS 上与 Linux 的通信看起来像这样:
[~] # busybox stty -F /dev/ttyUSB0 cs8 9600 opost -ixon -ixoff -cstopb -parenb
[~] # screen /dev/ttyUSB0 –fn
/var/run/utmp: No such file or directory
15
59
1351159113
51115353579779
9
79111137311371
11131131359
11579
11711359
7139
357
35
3130577917931359
39
913717117
31
1313315791113579
133
373
偶数几乎从不出现这一事实应该是解决这个问题的线索。我在 Arduino 程序和 Linux 命令中选择了不同的串行参数,但只能让它变得更糟("worse",我的意思是没有正确接收到字符)。
OSEPP ATMega2560 Arduino 到 QNAP NAS 上的 Linux: 起初看起来很有用,但没用多久。
[~] # busybox stty -F /dev/ttyUSB0 cs8 9600 opost -ixon -ixoff -cstopb -parenb
[~] # screen /dev/ttyUSB0 –fn
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
CC�������CC�����C�������CC����CC�
我试了几次,结果惊人地相似(不完全相同)。
Arduino Duemilanove:
[~] # busybox stty -F /dev/ttyUSB0 cs8 9600 opost -ixon -ixoff -cstopb -parenb
[~] # screen /dev/ttyUSB0 –fn
/var/run/utmp: No such file or directory
1713
371
3579
137557
5379
359599
371591311533609
597
3579
1391913
15359
16813579
15
715715379
11375
551135
7
135513311993
51791357
15959
1111919
113
Arduino Lilypad 与 Nano & Duemilanove 相似的结果。
问题: 有谁知道为什么会这样?我更喜欢使用 "Nano" Arduino,因为这个项目只需要几行 I/O 行,任何更大的行都是多余的。
Arduino USB 实现是否在某些方面与 Linux 不兼容?
感谢您提供的任何见解!
Linux 不会阻止多个进程打开串行端口,如果其中有多个进程从端口读取数据,那么其他进程将错过任何此类数据读取。确认没有其他进程打开串口。