与 python 交流 Arduino
Communicate an Arduino with python
我正在尝试使用 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()
.
的行中
可能是什么问题?
您可以使用 if else 语句,而不是在主 while 循环内使用 while 循环。此外,要读取数据,您可以使用带有 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"
好的,您会收到 AttributeError: 'Serial' object has no attribute 'ser'
错误,因为实际上 ser
不存在于 arduinoData
对象中。这是我的错,因为我在想 class 我在我的程序中创建的包含 ser 的程序,它只是另一个串行对象。要解决此问题,只需将 arduinoData.ser
替换为 arduinoData
要补充一点,您可能应该在 while 循环之外声明 arduinoData
。你应该这样做,因为每次你创建一个串行对象时,它都需要时间来连接到 Arduino。为此,您的程序可能无法读取数据。
希望这个回答对您有所帮助。
你的代码结构很奇怪。通过在函数中创建 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() 函数并检查它是否包含数据。
希望对您有所帮助!
我正在尝试使用 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()
.
可能是什么问题?
您可以使用 if else 语句,而不是在主 while 循环内使用 while 循环。此外,要读取数据,您可以使用带有 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"
好的,您会收到 AttributeError: 'Serial' object has no attribute 'ser'
错误,因为实际上 ser
不存在于 arduinoData
对象中。这是我的错,因为我在想 class 我在我的程序中创建的包含 ser 的程序,它只是另一个串行对象。要解决此问题,只需将 arduinoData.ser
替换为 arduinoData
要补充一点,您可能应该在 while 循环之外声明 arduinoData
。你应该这样做,因为每次你创建一个串行对象时,它都需要时间来连接到 Arduino。为此,您的程序可能无法读取数据。
希望这个回答对您有所帮助。
你的代码结构很奇怪。通过在函数中创建 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() 函数并检查它是否包含数据。
希望对您有所帮助!