2011-05-18 40 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,如果沒有數據。