最近大多研究 Raspberry Pi 的GPIO或相關伺服器服務,撰寫的控制數位訊號的使用 Python語言,心想不知道是否可以透過 Python 語言來控制 Arduino?找了一些相關資料後,發現 Firmata 這個協定可以做到,以下就來研究一下如何透過 Python 控制 Arduino 接腳的電位。
市面上的各種微控制器中,以 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以上即可。
• 下載安裝 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 視窗,更改目錄路徑,執行安裝指令:
== 以下是 Linux 用戶的設定方式 ==
• 下載 pyserial 及 PyMata Library:
$ git clone https://github.com/pyserial/pyserial.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次。
[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 執行結果是成功的,請看影片:
請問 PIN0 PIN1 需要避開不用嗎?
回覆刪除不用避開,如需用到還是可以使用。
刪除想請問為什麼若是要支援步進馬達需要另外安裝 FirmataPlus for PyMata?
回覆刪除目前遇到問題是利用CNC V3 SHIELD用寫脈衝頻率的方式頻率不能太高,太高會丟步
跟這個原因有關嗎?
張貼留言