使用pyserial

时间:2016-06-14 06:19:36

标签: python arduino pyserial

我从arduino发送整数值并使用pyserial在Python中读取它 arduino代码是:

Serial.write(integer)

而pyserial是:

ser=serial.Serial ('com3',9600,timeout =1)
X=ser.read(1)
print(X)

但除了空格外,它不会打印任何内容 有谁知道如何读取从Python中的arduino传递的这个整数?

3 个答案:

答案 0 :(得分:0)

您可能需要使用起始位。

问题可能是arduino在pyserial运行的时候已经写了整数?

所以写一个从pyserial到arduino的字符就像

那样开始信号
credit

一旦你得到这个起始位,就从arduino中写出整数。

答案 1 :(得分:0)

这是从Arduino读取Integer的正确方法。 Integer是32位类型,而您的串口将设置为 EIGHTBITS (pyserial和Arduino都有。如果我错了,请纠正我) in字节大小,因此您必须在通过串行端口传输时从Arduino写入Character Integer版本,因为Character只需要 EIGHBITS 这也是非常容易做到你需要的东西的便捷方式。

长话短说,在传输前将Integer转换为StringCharacter阵列。 (很可能有内置功能可用于转换)。

在旁注中,这是您更喜欢使用的正确python代码:

ser = serial.Serial(
        port='COM3',
        baudrate=9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS
    )
    #RxTx
    ser.isOpen()
while 1:
    out = ''
    while ser.inWaiting() > 0:
        out += ser.read(1)
    if out != '':
        print ">>Received String: %s" % out

答案 2 :(得分:0)

我测试的简单程序:

<强> Arduino的:

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

void loop() {
  int f1=123;
  // print out the value you read:
  Serial.println(f1);
  delay(1000);    
}

<强>的Python:

import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = 'COM5'

ser.open()
while True:
  h1=ser.readline() 
  if h1:
    g3=int(h1); #if you want to convert to float you can use "float" instead of "int"
    g3=g3+5;
    print(g3)