作者:Rishabh Jain
编译:Tony
尽管就其应用程序和结构而言,Raspberry Pi和Arduino是两种不同的硬件,但是它们都被认为是两个相互竞争的开源硬件平台。他们俩都有非常强大的社区和支持。今天,我们将稍作更改,并向您展示如何利用它们。如果您同时拥有Arduino和Raspberry pi板,那么本文将向您展示如何使用Raspberry pi和Python控制Arduino。
我们将使用PyFirmata固件通过Raspberry Pi python脚本向Arduino发送命令。PyFirmata基本上是python程序的预构建库包,可以将其安装在Arduino中,以允许任何计算机上的python脚本与Arduino之间进行串行通信。这个python包可以访问Arduino上的任何引脚。因此,这里我们将使用Raspberry pi在Arduino上运行python程序。
因此,在本教程中,我们将利用该库,并在Arduino开发板中使用它来通过Raspberry Pi控制Arduino。
在本教程中,我将通过HDMI电缆使用外部监视器与Raspberry Pi连接。如果没有监视器,则可以使用SSH客户端(Putty)或VNC服务器通过笔记本电脑或计算机连接到Raspberry pi。
要在Arduino中上传PyFirmata固件,我们必须在Raspberry Pi中安装Arduino IDE。请按照以下步骤进行安装:
sudo apt-get -y install arduino python-serial mercurial
等待几分钟,这将需要一些时间。该命令将在您的Raspberry Pi中安装Arduino IDE。
git clone https://github.com/tino/pyFirmata
然后运行以下命令:
cd pyFirmata
sudo python setup.py install
现在,使用USB电缆将Arduino开发板与Raspberry Pi连接,然后在终端窗口中键入arduino启动Arduino IDE 。
在Arduino IDE中,转到工具,然后选择板子和串行端口。
我们已经在Arduino板上成功安装了pyFirmata固件。现在,我们可以使用Raspberry Pi控制Arduino。
为了演示,我们将通过在Raspberry Pi中编写python代码来使Arduino上的LED闪烁和渐变。
对于编码部分,您应该阅读pyFirmata的文档以更好地理解,我们将使用pyFirmata函数编写代码。
在Raspberry Pi上打开您喜欢的文本编辑器,然后导入pyFirmata库。
import pyfirmata
在Arduino上定义引脚以连接LED
led_pin = 9
现在,我们必须使用pyfirmata.Arduino()函数编写连接Arduino板的串行端口名称,然后通过在板变量中分配端口来创建一个实例。
board = pyfirmata.Arduino("/dev/ttyACM0")
print "Code is running”
在while循环中,使用board.digital[].write()函数将led引脚设置为高电平和低电平,并使用board.pass_time函数提供延迟。
while True:
board.digital[led_pin].write(0)
board.pass_time(1)
board.digital[led_pin].write(1)
board.pass_time(1)
我们的代码已经准备好,通过以.py为扩展名的文件来保存该代码。
打开命令终端,然后键入python blink.py以在Arduino板上运行代码。确保使用USB连接线将Arduino开发板与Raspberry Pi开发板连接。
现在,您可以在Arduino板上看到LED闪烁。
现在,我们将编写用于使LED渐变的代码,以使您更加熟悉pyFirmata函数。此代码与上一个代码一样简单。您必须使用两个for循环,一个用于增加亮度,另一个用于降低亮度。
在此代码中,我们以不同的方式定义了引脚,例如led = board.get_pin(‘d:9:p’),其中d表示数字引脚。这是pyFirmata库的功能,部分代码如下:
led = board.get_pin('d:9:p')
while True:
# increase
for i in range(0, 10):
brightness = brightness + 0.1
print "Setting brightness to %s" % brightness
led.write(brightness)
board.pass_time(delay)
现在,您可以在系统中添加更多传感器,尝试使用Raspberry pi和python脚本构建它们。
附上完整代码:
#Python code for LED blink:
import pyfirmata
led_pin = 9
board = pyfirmata.Arduino("/dev/ttyACM0")
while True:
board.digital[led_pin].write(0)
board.pass_time(1)
board.digital[led_pin].write(1)
board.pass_time(1)
#Python code for Fading LED:
import time
import pyfirmata
delay = 0.3
brightness = 0
board = pyfirmata.Arduino("/dev/ttyACM0")
led = board.get_pin('d:9:p')
while True:
# increase
for i in range(0, 10):
brightness = brightness + 0.1
print "Setting brightness to %s" % brightness
led.write(brightness)
board.pass_time(delay)
# decrease
for i in range(0, 10):
print "Setting brightness to %s" % brightness
led.write(brightness)
brightness = brightness - 0.1
board.pass_time(delay)
关注微信公众号:TonyCode
Arduino学习交流群:868283450
更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注: