既然是套協定,溝通兩端都必須實作,Arduino端的實作已包含在Arduino IDE裡,並且有範例程式;至於主機端的實作,有各種程式語言的版本,此處採用Python語言的模組pyFirmata。
這一篇僅是簡單試用,主機端是Windows XP(以及Cygwin),在Python shell下,使用模組pyFirmata,經由序列埠介面,控制Arduino UNO板內建的LED(腳位13);但不會介紹Firmata程式庫與模組的任何API。
首先是Arduino端,Arduino IDE已包含Firmata程式庫,我們要做的事是燒錄範例草稿碼StandardFirmata,位於選單「檔案」-「範例」-「Firmata」-「StandardFirmata」,開啟後燒錄進Arduino開發板,這支草稿碼能夠接受從主機端傳來的Firmata訊息,解析其中的指令,操控腳位。
然後是主機端, 我的Windows已安裝Python 2.7與pip,以底下指令安裝模組pyFirmata:
$ pip install pyFirmata
然後進入Python shell,匯入模組:
$ python
>>> from pyfirmata import Arduino, util
傳入埠號,開啟序列埠裝置。從Arduino IDE的選單裡,可看到我的UNO板連接到電腦的COM3,若是在Windows的命令提示字元底下,應傳入'COM3';而若是在Cygwin裡,會被命名為裝置/dev/ttyS2:
>>> board = Arduino('COM3')
然後運用API,傳出Firmata訊息,控制腳位13(LED):
>>> board.digital[13].write(1)
>>> board.digital[13].write(0)
便可看到LED被點亮與熄滅。
參考資料:
- firmata/protocol: Documentation of the Firmata protocol.,Firmata協定的文件。
- Arduino - Firmata,Arduino端的Firmata程式庫實作。
- tino/pyFirmata - Python interface for the Firmata protocol,Python模組pyFirmata。
- Host Software Download - Firmata,主機端的實作。
- Arduino UNO with Firmata。
- Control arduino outputs via C++ programs。
- Cooper Maa: Android-Firmata 與 Amarino 簡介。
請問它可以達到 Labview控制arduino主板一樣的功能嗎?
ReplyDelete問題太大了。
Delete感謝 葉難大大 拜讀網頁資訊 受益良多
ReplyDelete感謝您分享的知識.
ReplyDelete您好~我想要請問一下
ReplyDelete如果我不按照範例,那我python跟arduino要怎麼去做連接
拜託幫忙一下~~~謝謝
呃,你想怎麼接?Python那一端是什麼裝置?
Delete有線、無線?要做什麼?
我要做一個通訊模組,要從物聯網抓取資料告訴Arduino之後要做甚麼動作.....
Delete題目是無人自動搬運車 用python跟arduinov
謝謝
加油。
Delete
ReplyDelete哈哈~~無法告知是嗎?
問題太大,不適合在留言區回答。
Delete好的 感謝你
Delete