Python + Arduino在Mac OS X下的使用

7
我在Arduino和Python之间的通信上遇到了麻烦。我有几个问题希望能得到解答,但首先并且最重要的是,我需要简单地建立连接。
对于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

作为证据,我真的不明白我正在导入的模块到底在做什么。在阅读文档时,我没有看到明显的方法来通过串口发送数据。所以,我猜测无论这个程序的输出是什么,它都会自动发送出去?
3个回答

17

使用pySerial是Python与Arduino(或任何带有串口的微控制器)通信的最简单方式。

下面是一个示例:

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

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

提示:如果您正在使用Python 3,则应发送字节而不是字符串(即,b'text')。


3
这绝对是最简单的,+1。 - nicolaskruchten
我一直以为pyserial在OSX上无法工作... 我错了吗? - danem
它在OSX上运行良好。我只在Windows 64位下使用pyserial时遇到了问题。 - JBernardo
哦,好的。嘿。我刚刚安装了它,似乎正常工作...那这是关于什么的呢?只是出于好奇...http://docs.python.org/faq/library.html#how-do-i-access-the-serial-rs232-port。我最初打算使用pyserial,但我认为这意味着它不能在OSX上运行.... D: - danem
我不知道,但OSX是基于BSD的系统,所以你不必担心第二个URL。 - JBernardo
它在OSX上不喜欢我:AttributeError: 'module' object has no attribute 'Serial'。经过更深入的调查,发现我已经从其他地方将serial引入了我的命名空间中。 - David Johnston

2

在我的电脑上,我使用sudo命令解决了OSX上的串行错误。我认为在OSX上,您需要获取管理员权限才能通过/dev/cu.usbmodem14101与串行通信。

注意:在使用pip安装后执行此操作。

原始答案:Original Answer


1

我已经使用Linux下的Perl完成了这个任务,但是对Python或Mac没有任何经验。我可以给你一些指针来寻找。

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

在您的Arduino代码中进行更改即可。

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

否则,如果没有数据,你将会输出一堆-1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接