通過pyFirmata實現樹莓派控制Arduino

作者:Rishabh Jain
編譯:Tony

樹莓派控制Arduino

儘管就其應用程序和結構而言,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

要求

  • 安裝了Raspbian操作系統的Raspberry Pi
  • Arduino Uno或任何其他Arduino開發板
  • Arduino USB線
  • 發光二極管

在本教程中,我將通過HDMI電纜使用外部監視器與Raspberry Pi連接。如果沒有監視器,則可以使用SSH客戶端(Putty)或VNC服務器通過筆記本電腦或計算機連接到Raspberry pi。

使用Raspberry Pi在Arduino中安裝PyFirmata

要在Arduino中上傳PyFirmata固件,我們必須在Raspberry Pi中安裝Arduino IDE。請按照以下步驟進行安裝:

  • **步驟1:**將Raspberry Pi連接到互聯網。打開命令終端並鍵入以下命令,然後按Enter
sudo apt-get -y install arduino python-serial mercurial

等待幾分鐘,這將需要一些時間。該命令將在您的Raspberry Pi中安裝Arduino IDE。

  • **步驟2:**現在,我們將使用指定的github安裝pyFirmata文件:
git clone  https://github.com/tino/pyFirmata

然後運行以下命令:

cd pyFirmata 
sudo python setup.py install
  • 步驟3: 我們已經安裝了所有必需的文件和設置。

現在,使用USB電纜將Arduino開發板與Raspberry Pi連接,然後在終端窗口中鍵入arduino啓動Arduino IDE 。

啓動arduino

  • **步驟4:-**然後鍵入lsusb命令以檢查Arduino是否與樹莓派連接。

在Arduino IDE中,轉到工具,然後選擇板子和串行端口。

  • **步驟5:**通過單擊文件->示例->固件->標準固件,然後單擊上載按鈕,在Arduino上上傳PyFirmata固件,如下所示。

上傳固件

我們已經在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閃爍。

使用pyFirmata在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

更多內容,歡迎關注我的公衆號。 微信掃一掃下方二維碼即可關注:
掃碼加入微信公衆號:TonyCode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章