Arduino是一个基于灵活,易于使用的硬件和软件的开源电子原型平台。它适用于艺术家,设计师,业余爱好者以及对创建交互式对象或环境感兴趣的任何人。
它是一个不错的界面,可以控制伺服器并提供其许多可选挡板提供的其他连接性。
如何将一个连接到Raspberry Pi?如何设置通讯?
#1 楼
Arduino通常以USB串行设备的形式出现。当前的主板使用内置在主微处理器中的USB串行驱动程序,但是较旧的Arduino(和克隆)使用单独的第三方USB串行芯片。要简单地从Raspberry Pi上接收
Serial.print
数据Arduino,我将GNU Screen程序用作基本终端:screen [serial-port] [baud-rate]
(例如screen /dev/ttyACM0 9600
)。 我测试了三个不同的Arduino,以及一个完全不同的克隆。较新的变体都显示为
/dev/ttyACM0
端口,较旧的变体/dev/ttyUSB0
。这是我在Raspbian下找到的:Duemilanove-串行芯片:FTDI FT232RL;串行端口:
/dev/ttyUSB0
Uno-串行芯片:Atmel ATmega16U2(或旧板上的8U2);串行端口:
/dev/ttyACM0
Leonardo-串行芯片:Atmel ATmega32U4(内置);串行端口:
/dev/ttyACM0
OMS Omega-328U-串行芯片:Silicon Labs CP210x;串行端口:
/dev/ttyUSB0
。Raspberry Pi可能无法提供足够的电源来驱动Arduino,因此您可能需要外部电源。为了完整起见,我也测试了Prolific PL2303,即使它不在我所知的任何Arduino上也是如此。它看起来像
/dev/ttyUSB0
一样令人高兴。要与传感器进行更复杂的通信,您可以考虑使用Firmata,“一种用于从主机上的软件与微控制器进行通信的通用协议”。它具有Arduino的实现,并且Python库可在Raspberry Pi一侧运行。
这是一个使用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
值。#2 楼
如果不清楚,可以使用Raspbian Wheezy运行Arduino IDE,并在连接到Raspberry Pi的USB端口时将草图上传到Arduino。要在Raspbian上安装,只需键入外壳程序(又名命令行):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。
–pdp7
2012年8月9日18:00
#3 楼
可以选择使用USB端口或GPIO引脚将RPI连接到arduino。可以使用Wiringpi在板之间进行通信。当前还有一座正在开发的桥叫做Ponte。
可以在这里找到基本的问候世界。
#4 楼
la>模式按Hack A Day的正确方式将Arduino放入Raspberry Pi中,
la模式是由Anool Mahidharia,Justin Shaw设计的可堆叠Arduino克隆和来自Wyolum.com OSHW的Kevin Osborn合作。 Hack A Day描述如下:
马上,AlaMode直接插入Raspberry Pi的GPIO引脚。从那里开始,启用与Arduino ATMega的通信,使您可以像使用Arduino一样发送和接收数据。有一个实时时钟,伺服接头,为板子供电的多种方法,甚至还有一个[a] GPS模块的接口。
AlaMode消除了很多不必要的麻烦;没有USB端口,但可以直接通过Raspberry Pi的GPIO引脚进行编程。非常整洁,我们迫不及待地想要为我们的[Raspberry Pi]抢一口气。其他一些优点:
灵活的电源。可以直接从Pi供电,也可以通过电池或壁式电源适配器或USB电源独立供电。如果您的屏蔽板所消耗的功率超过了Pi所能提供的功率,或者您想取消屏蔽来进行独立操作,则这一点很重要。 br />用于连接Fastrax UP501 GPS的接头。
DS3234实时时钟。 Pi本身没有电池支持的RTC。您可以在AlaMode中设置一个程序,以通过串行或I2C
Micro-SD卡插槽向Pi报告时间。对于数据记录很有用,并为Arduino应用程序提供大内存
通过可配置的电源和地线连接到PWM引脚的伺服接头排的行该板目前处于有限Beta版,但值得一提的是经过深思熟虑的克隆,该克隆已由一个小组以以前的形式宣布。
参考文献
Hack A Day的博客文章
凯文·奥斯本的博客文章
Wyolum.com
#5 楼
如果您想要通用的硬件接口平台,则可以考虑使用现在基于Arduino的Gert板。优点之一是,有大量有关与RPi交互的文档。从8/8/12起可以从Element14预订。#6 楼
有一个RaspberryPi HAT,其行为类似于Arduino,可以从任何浏览器通过其Web UI进行编程。名为CoPiino的项目。它完全随软件一起运行。只需在浏览器用户界面中输入Arduino Sketch,然后点击“编译并运行”即可。
评论
鉴于您已经发布了至少两个推广CoPino的答案,我怀疑您已连接到该项目。任何连接都应在您的答案中注明,
–史蒂夫·罗比拉德(Steve Robillard)
2015年10月11日23:59
是的,这是绝对正确的,我的评论完全涵盖了该主题。 CoPiino板类似于已经提到的Ala模式板。 CoPiino提供了一些不错的附加功能。从Pi编程Arduino的地方很容易-这是最初的问题。
–tswaehn
2015年10月12日21:52
四年过去了,您的从属关系仍然没有得到修改。请这样做。
–匿名
19-10-29在9:24
评论
我还确认您可以在Raspberry Pi上运行Processing。这非常慢,但是我确实设法通过USB链接控制Arduino:使用Processing从Raspberry Pi控制Arduino。我看看是否可以将其移植到Python / tkinter ...
–scruss
2012年8月13日在3:07
感谢您的回答,它非常有用。我正在使用python serial从/ dev / ttyACM0中读取,发现它非常不一致。我以为这是我的arduino没电的原因,但我已经将其连接到外部电源,但仍然有问题。有时数据格式不正确,有时会因为未找到/ dev / ttyACM0而引发异常(尽管随后的运行会找到它)。你有类似的问题吗?
–安迪·史密斯(Andy Smith)
2012年11月6日在22:13
不,这与我的经验不符。
–scruss
2012年11月7日,下午3:46
感谢您的回应-有趣,那一定是我做错了!
–安迪·史密斯(Andy Smith)
2012年11月7日,9:33
也许在SE上问一个非Pi特定的问题,或者直接在Arduino论坛上问。串行通讯经常让我头疼...
–scruss
2012年11月7日12:39