用python传达Arduino

时间:2016-04-20 00:30:28

标签: python arduino serial-port

我正在尝试使用python来传达Arduino。我能够使用serial模块连接它。这是代码:

import serial

while True:
  print "Opening port"
  arduinoData = serial.Serial("com7", 9600)
  print "The port is open"

  while (arduinoData.inWaiting()==0): #I wait for data
    print "There is no data"

  print "Reading data"
  arduinoString = arduinoData.readline()
  print arduinoString

当我想要读取数据时,似乎悬挂在arduinoString = arduino.readline()的行中。

可能是什么问题?

3 个答案:

答案 0 :(得分:1)

使用while循环内部的while循环,你可以使用if else语句。另外,要读取数据,您可以使用read函数和arduinoData.inWaiting()作为参数,如下所示:arduinoData.read(arduinoData.inWaiting())。我希望这段代码可以帮到你:

arduinoData = serial.Serial("com7", 9600)

while True:

    if arduinoData.inWaiting() > 0: # check if there is data available
        print "Reading data"
        arduinoString = arduinoData.read(arduinoData.inWaiting()) '''read and decode data'''
        print arduinoString

    else:
        print "There is no data"

答案 1 :(得分:1)

您的代码结构很奇怪。通过在函数中创建Serial对象而不使其全局化,我遇到了类似的问题。也许你应该将这一行放在循环之外:

  

arduinoData = serial.Serial(“com7”,9600)

此外,您的初始化似乎有点轻。我通常使用更多参数,但这取决于你的硬件。

ser = serial.Serial( 
    port = 'com4', \
    baudrate = 19200, \
    parity=serial.PARITY_NONE, \
    stopbits=serial.STOPBITS_ONE, \
    bytesize = serial.EIGHTBITS, \
    timeout = 0.25)

readline()问题的解决方法是使用 read()函数,并检查它是否包含数据。

希望它会有所帮助!

答案 2 :(得分:0)

好的,您收到了AttributeError: 'Serial' object has no attribute 'ser'错误,因为实际上ser对象中不存在arduinoData。这是我的错,因为我在考虑我在包含ser的程序中创建的类,它只是另一个串行对象。要解决此问题,只需将arduinoData.ser替换为arduinoData

即可

要添加,您应该在while循环之外声明arduinoData。你应该这样做,因为每次你创建一个串行对象时,连接到Arduino需要时间。为此,您的程序可能无法读取数据。

我希望这个答案可以帮到你。