Arduino筆記(13):使用Firmata 協定,Arduino 也可以執行 Python

最近大多研究 Raspberry Pi 的GPIO或相關伺服器服務,撰寫的控制數位訊號的使用 Python語言,心想不知道是否可以透過 Python 語言來控制 Arduino?找了一些相關資料後,發現 Firmata 這個協定可以做到,以下就來研究一下如何透過 Python 控制 Arduino 接腳的電位。


 [Firmata]

Firmata 是一個微控制器通信的協議,透過該協定,可以讓電腦或手持式裝置進行控制。只要任何微控制器裝了適當的 Firmata 程式,就可以讓不同電腦或手持式裝置搭配的軟體使用,而這些軟體使用的語言包括 python、Perl、Java、.NET及 iOS 等,均可透過安裝 Library 的方式,使用該協定控制各種不同微控制器。

市面上的各種微控制器中,以 Arduino 對於 Firmata 的整合度最高,而 Arduino 的 IDE內也內建多個 Farmata 的應用,可以讓使用者快速撰寫不同語言來控制 Arduino。

Python 如要控制 Arduino 有以下幾個 Library 可使用:
 https://github.com/firmata/pyduino
 https://github.com/lupeke/python-firmata
 https://github.com/tino/pyFirmata
 https://github.com/MrYsLab/PyMata
 https://github.com/MrYsLab/pymata-aio

以上各Library 以 pyduino和 python-firmata發展較早,pyFirmata 對於 I2C的支援沒有 Pymata 好,而 Pymata如要支援步進馬達、 感測類裝置(如 HC-SRO4) 等需要另外安裝 FirmataPlus for PyMata。

pymata-aio 是新一代的 PyMata,除了容易使用外,同時核心使用 Python asyncio library,可得到最佳的效能。如果要使用 pymata-aio Library,需先安裝 Python 3.5版以上。而 PyMata 就只需安裝 Python 2.7以上即可。

[安裝 pyMata]

• 下載安裝 Python,至少需要 2.7.6 之後的版本
• 下載安裝 pySerial,PyMata 跟 Arduino 的通訊是透過串列連結的方式,pySerial library 可以提供所需的通訊支援。 首先到 github.com/pyserial ,檔點擊右方綠色 [Close or Download] ➜ [Download ZIP],將下載的 Zip 檔 pyserial-master.zip 解壓縮到某個目錄。

 GitHub MrYsLab PyMata  點擊右方綠色 [Close or Download] ➜ [Download ZIP],將下載的 Zip 檔 pyfirmata-master.zip 解壓縮到某個目錄。


== 以下是 Windows 用戶的設定方式 ==
 在Windows 設定 Python Scripts 執行路徑:

   [Windows] ➜ [控制台] ➜ [系統及安全性] ➜ [系統] ➜ [進階系統設定] ➜ [環境變數]

   將安裝 Python的路徑(如 C:\Python27\Scripts)加到 PATH變數最後面:

• 開啟 CMD 視窗,更改目錄路徑,執行安裝指令:
D:\> cd \py
D:\Py> easy_install pyserial-master 
D:\Py> easy_install PyMata-master
就可看到以下畫面:

== 以下是 Linux 用戶的設定方式 ==
 下載 pyserial 及 PyMata Library:

$ git clone https://github.com/pyserial/pyserial.git
$ git clone https://github.com/MrYsLab/PyMata.git 

 執行安裝
$ cd  pyserial
$ sudo python setup.py install
$ cd  ../PyMata
$ sudo python setup.py install
============================

 驗證是否安裝成功,進入Python,Import 安裝的兩個 Library

 上傳F程式到 Arduino,先開啟 Arduino IDE,設定正確的開發板及序列埠。開啟範例程式:[檔案][範例][Firmata][StandardFirmata],然後將程式編譯上傳至 Arduino。

• 執行測試程式:在 PyMata/examples 目錄下有一個 LED閃爍的測試程式,可以執行以下指令,看看 Arduino 板上的 LED燈是否會閃爍 10次。
$ python pymata_blink.py
如果要在 Windows 環境下執行 pymata_blink.py ,需修改連接 Port 的位置,從 /dev/ttyACM0 改成 COM3。我用 Raspberry Pi 執行結果是成功的,請看影片:



[參考資料]



3 留言

  1. 請問 PIN0 PIN1 需要避開不用嗎?

    回覆刪除
    回覆
    1. 不用避開,如需用到還是可以使用。

      刪除
  2. 想請問為什麼若是要支援步進馬達需要另外安裝 FirmataPlus for PyMata?
    目前遇到問題是利用CNC V3 SHIELD用寫脈衝頻率的方式頻率不能太高,太高會丟步
    跟這個原因有關嗎?

    回覆刪除

張貼留言

較新的 較舊