2011-05-18 160 views
5

我在Arduino和Python之间进行通信时遇到了问题。我有几个问题希望能够得到解答,但首先也是最重要的是,我需要简单地建立一个连接。使用Mac OS X的Python + Arduino

对于Windows来说,显然这个解决方案相当方便,但是在Mac OS X上,我显然需要访问一些系统文件(这是我不熟悉的)。 Python的文档指向我的具体职位Re: Can Python do serial port stuff?,但我认为这不符合我的目的。

在这一点上,试图只看到通信的证据,我试过这个。

的Arduino:

void setup(){ 
    Serial.begin(9600); 
} 

void loop() 
{ 
    int d = Serial.read(); 
    Serial.println(d,BYTE); 
} 

的Python:(自提链接几乎...)

#!usr/bin/python 
import os, fcntl, termios, sys 

serialPath = '/dev/tty.usbmodemfa141' 

ser= os.open(serialPath, 0) 
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc] = range(7) 
settings = termios.tcgetattr(ser) 
settings[ospeed] = termios.B9600 
settings[ispeed] = termios.B0 
print 2 

如这里证明的,我真不明白我在导入模块正确地做。在阅读文档时,我没有看到通过串行发送数据的明显方式。所以我正确地猜测,无论这个程序的输出是什么,它都会自动发送出去。

回答

13

在Python中与Arduino(或任何带有串行的微控制器)通信的最简单方法是使用pySerial

下面是一个例子:

import serial 
s = serial.Serial(port='/dev/tty.usbmodemfa141', baudrate=9600) 

s.write('text') 
s.read() 
s.readline() 

PS:如果你使用Python 3,你应该发送的字节而不是字符串(即b'text')。

+3

这是迄今为止最简单的,+1 – nicolaskruchten 2011-05-18 03:01:55

+0

我的印象是pyserial不能在osx上工作......我错了吗? – danem 2011-05-18 03:03:38

+0

它适用于OSX。我只有Windows 64位下的pyserial有问题 – JBernardo 2011-05-18 03:08:24

1

我已经在Linux下使用Perl完成了这项工作,但没有使用Python或Mac的经验。我可以给你一些指示来寻找。

首先,在您的Python程序中,您需要将正确的设备地址放在serialPath的USB端口中,否则您的数据将无法到达Arduino。在Linux中,我在连接电路板并从中找到设备名称后做了一个lsusb。

在你的Arduino代码,将其更改为

void loop() 
{ 
    if(Serial.available() > 0) 
    { 
     d = Serial.read(); 
     Serial.println(d,BYTE); 
    } 
} 

否则你会被倾倒了一堆-1s,如果没有数据。