【发布时间】:2018-04-16 11:57:04
【问题描述】:
我已经设法通过串行将它从我的 arduino (Uno) 写入我的 Raspberry Pi 3。
如果我在 pi 端使用相同的 python 脚本,在 arduino 端使用相同的 Sketch,但使用 Teensy,我无法读取 Arduino 的任何输出。
arduino Uno 和 teensy 根据串行通信有什么区别吗?
Arduino 草图:
void setup() {
Serial.begin(115200);
}
void loop() {
delay(1000);
Serial.println("10.7;0.7;FFFF:FFFF:FFFF:FFFF:");
}
我的 Pi 上的 Python 脚本:
import serial
ser=serial.Serial("/dev/ttyACM0",115200)
while True:
print("Waiting for messages from arduino..");
read_ser=ser.readline()
print(read_ser)
此代码适用于我的 Arduino Uno,但不适用于我的 Teensy。 ttyACM0 在这两种情况下都是正确的。
Pi 上的操作系统是 ubuntu mate 16.04。 我可以在 Arduino IDE 中看到两个 arduino 的输出。
我用 3 个不同的 Teensies 试过这个,所以硬件应该不是问题。
有什么建议吗?
** ser.isOpen() 是真的
bytesToRead = ser.inWaiting() print(ser.read(bytesToRead)) 没有区别。
会不会有区别,因为teensy用micro usb连接pi,而UNO用A to B USB连接?
【问题讨论】:
-
删除这一行:
ser.baudrate=115200 -
在循环内执行
print(ser.isOpen())。 -
如果没有硬件打开程序,您将无法读取
teensy上的数据 可能的缺失点:handshake、additional data for open bus。转储总线数据,您将看到python和terminal数据不同。 -
Arduino 有低速
usb-ser但teensy(3.X)得到6Mb/s(我测试过)总线。一些高速设备在开始通信之前需要额外的数据。 -
不要这样做@MoritzSchmidt,单向通信是与设备通信最糟糕的事情。在
teensy速度定义Serial.begin(115200);或Serial.begin(0);或Serial.begin(12345678);不重要,因为如果使用本机端口,则得到12Mb/s连接。
标签: python arduino raspberry-pi