Python + Arduino与Mac OS X.

问题描述 投票:6回答:3

我在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

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

python macos serial-port arduino
3个回答
14
投票

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

这是一个例子:

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

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

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


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);
   }
}

否则,如果没有数据,你将倾倒一堆-1。


0
投票

在我这边,我使用sudo命令解决了OSX上的串行错误;我认为在OSX上你必须获得管理员权限,在pip安装后与serial一起传递throw /dev/cu.usbmodem14101。

© www.soinside.com 2019 - 2024. All rights reserved.