如何连接Arduino?


43

Arduino的网站总结起来作为

Arduino是一个基于灵活,易于使用的硬件和软件的开源电子原型平台。它适用于艺术家,设计师,业余爱好者以及对创建交互式对象或环境感兴趣的任何人。

它可以是一个不错的界面,用于控制伺服器并提供其许多可选屏蔽罩提供的其他连接性。

如何将一个连接到Raspberry Pi?如何设置通讯?

Answers:


38

Arduino通常显示为USB串行设备。当前的板使用内置在主微处理器中的USB串行驱动程序,但是较早的Arduino(和克隆)使用单独的第三方USB串​​行芯片。

为了简单地Serial.print从Arduino 接收Raspberry Pi上的数据,我使用GNU Screen程序作为基本终端:(screen [serial-port] [baud-rate]例如screen /dev/ttyACM0 9600)。

我测试了三种不同的Arduino,以及一种完全不同的克隆。较新的变体都作为/dev/ttyACM0端口出现,较旧的变体/dev/ttyUSB0。这是我在Raspbian下找到的:

Raspberry Pi可能无法提供足够的电源来驱动Arduino,因此您可能需要外部电源。为了完整起见,我还测试了Prolific PL2303,即使它不在我所知的任何Arduino上。它看起来很幸福/dev/ttyUSB0

对于与传感器的更复杂的通信,您可以考虑使用Firmata,“用于从主机计算机上的软件与微控制器通信的通用协议”。它具有Arduino的实现,以及可在Raspberry Pi端运行的Python库。

这是一个使用pyFirmata读取LM35并更改LED亮度的小示例:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# simple test of pyfirmata and Arduino; read from an LM35 on A0,
#                                       brighten an LED on D3 using PWM
# scruss, 2012-08-14 - tested on Arduino Uno & Raspberry Pi (Raspbian)

import pyfirmata

# Create a new board, specifying serial port
board = pyfirmata.Arduino('/dev/ttyACM0')

# start an iterator thread so that serial buffer doesn't overflow
it = pyfirmata.util.Iterator(board)
it.start()

# set up pins
pin0=board.get_pin('a:0:i')             # A0 Input      (LM35)
pin3=board.get_pin('d:3:p')             # D3 PWM Output (LED)

# IMPORTANT! discard first reads until A0 gets something valid
while pin0.read() is None:
    pass

for i in range(10):
    pin3.write(i/10.0)                  # set D3 to 0, 10%, 20%, ... brightness
    print "PWM: %d %% Temperature %.1f °C" % (i * 10, pin0.read() * 5 * 100)
    board.pass_time(1)                  # pause 1 second

pin3.write(0)                           # turn LED back off
board.exit()

使用pyFirmata时有一些警告:

  • 模拟读取和PWM写入被标准化为0..1范围,而不是标准Arduino 0..255和0..1023。
  • 您确实需要启动一个单独的迭代器线程来阻止旧的读数溢出串行缓冲区
  • 由于Arduino是异步读取的,因此在从端口读取之前,请确保pyFirmata连接已完全初始化。否则,将产生None值。

1
我还确认您可以在Raspberry Pi上运行Processing。这非常慢,但是我确实设法通过USB链接控制Arduino使用Processing从Raspberry Pi控制Arduino。我看看是否可以将其移植到Python /
tkinter

感谢您的回答,它非常有用。我正在使用python serial读取/ dev / ttyACM0,发现它非常不一致。我以为这是我的arduino没电的原因,但我已经将其连接到外部电源,但仍然有问题。有时数据格式不正确,有时会因为未找到/ dev / ttyACM0而引发异常(尽管随后的运行会找到它)。你有类似的问题吗?
安迪·史密斯

不,这与我的经验不符。
2012年

感谢您的回应-有趣,那一定是我做错了!
安迪·史密斯

也许在SE上问一个非Pi特定的问题,或者直接在Arduino论坛上问。串行通讯经常让我头疼...
scruss

13

如果不清楚,可以使用Raspbian Wheezy运行Arduino IDE,并在连接到Raspberry Pi的USB端口时将草图上传到Arduino。要在Raspbian上安装,只需键入shell(又名命令行):

sudo apt-get install arduino

它将下载并安装所有需要的软件包。我在Raspbian中有几张Arduino IDE的照片:

http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/03/review-of-raspberry-pi-images

(如上文其他人所述,Raspberry Pi也可以通过GPIO接头上的串行端口(UART)引脚对Arduino进行编程。在这种情况下,您不必“浪费” USB端口,但是需要其他配置)。

干杯,德鲁


我测试了带有RGB LED的Arduino Uno以及简单的褪色草图,并且Arduino Uno仅通过Raspberry Pi的USB端口供电。我没有任何问题,但是,当然是YMMV。
2012年

8

可以选择使用USB端口或GPIO引脚将RPI连接到arduino。可以使用Wiringpi在板之间进行通信。

当前,还有一座正在开发的桥叫做Ponte

这里可以找到基本的hello世界。


7

点菜模式

模式被Hack A Day 称为将Arduino放入Raspberry Pi的正确方法,单模模式Wyolum.com OSHW合作组织的Anool Mahidharia,Justin Shaw和Kevin Osborn设计的可堆叠Arduino克隆。Hack A Day描述如下

马上,AlaMode直接插入Raspberry Pi的GPIO引脚。从那里开始,与Arduino的ATMega进行通信,使您可以像使用Arduino一样发送和接收数据。有一个实时时钟,伺服接头,多种为电路板供电的方法,甚至还有一个[a] GPS模块的接口。

AlaMode消除了许多不必要的麻烦;没有USB端口,但是可以直接在Raspberry Pi的GPIO引脚上进行编程。非常简洁,我们迫不及待想要为我们的[Raspberry Pi]抢一台。

凯文在他的博客上提供了更多细节:

这些功能包括一些其他优点:

  • 灵活的力量。可以直接从Pi供电,也可以通过电池或壁式电源适配器或USB电源独立供电。如果您的屏蔽罩所消耗的功率超出了Pi所能提供的功率,或者您想取消屏蔽以进行独立操作,则这一点很重要。可通过GPIO引脚上的Pi的UART或FTDI USB串行适配器或ISP进行编程。
  • 用于连接Fastrax UP501 GPS的接头。DS3234实时时钟。Pi本身没有电池支持的RTC。您可以在AlaMode中设置程序以通过串行或I2C向Pi报告时间
  • Micro SD卡插槽。对于数据记录很有用,对于Arduino应用程序来说是大内存
  • 一排伺服接头连接到PWM引脚,具有可配置的电源和接地轨

有限测试版

董事会目前处于限量Beta版,但值得一提的是经过深思熟虑的克隆版本,该版本已由一个小组以以前的形式宣布。

参考文献

  1. 哈克一天的博客文章
  2. 凯文·奥斯本(Kevin Osborn)的博客文章
  3. Wyolum.com

4

如果您想要通用的硬件接口平台,则可以考虑使用现在基于Arduino的Gert板。优点之一是,有大量有关与RPi交互的文档。从8/8/12起可以从Element14预订。


0

有一个RaspberryPi HAT,其行为类似于Arduino,可以从任何浏览器通过其Web UI进行编程。名为CoPiino的项目。它完全随软件一起运行。只需在浏览器用户界面中输入Arduino Sketch,然后点击“编译并运行”即可。


1
鉴于您已经发布了至少两个推广CoPino的答案,我怀疑您已连接到该项目。任何连接都应在您的答案中注明,
Steve Robillard 2015年

是的,这是绝对正确的,我的评论完全涵盖了该主题。CoPiino板类似于已经提到的Ala模式板。CoPiino提供了一些不错的附加功能。从Pi编程Arduino的地方很容易-这是最初的问题。
tswaehn 2015年

四年过去了,您的从属关系仍然没有得到修改。请这样做。
乔恩·哈珀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.