作者: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。
要求
- 安裝了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 。
- **步驟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
更多內容,歡迎關注我的公衆號。 微信掃一掃下方二維碼即可關注: