Mac OS X下的Python与Arduino

7 投票
3 回答
20339 浏览
提问于 2025-04-16 17:51

我在尝试让我的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 个回答

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。

2

我这边解决了在OSX上出现的串口错误,使用了sudo命令。我觉得在OSX系统上,你需要获得管理员权限,才能通过/dev/cu.usbmodem14101这个路径与串口进行通信,尤其是在安装了某些库之后。

17

在Python中和Arduino(或者任何带串口的微控制器)沟通最简单的方法是使用 pySerial 这个库。

下面是一个例子:

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

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

注意:如果你使用的是Python 3,发送数据时应该用字节而不是字符串,也就是说要用 b'text' 这种形式。

撰写回答