2016/01/22

Arduino:在Windows裡使用Python語言經由Firmata協定控制Arduino開發板

Firmata是一套溝通協定,用於微控制器開發板(如Arduino)和主機電腦(如Windows、Linux、Mac OS X、Android、iOS)之間的溝通,採用MIDI訊息格式,但訊息內容的意義不同,藉由各種訊息來控制Arduino腳位、以及從Arduino回報狀態。

既然是套協定,溝通兩端都必須實作,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被點亮與熄滅。


參考資料:

12 comments:

  1. 請問它可以達到 Labview控制arduino主板一樣的功能嗎?

    ReplyDelete
  2. 感謝 葉難大大 拜讀網頁資訊 受益良多

    ReplyDelete
  3. 感謝您分享的知識.

    ReplyDelete
  4. 您好~我想要請問一下
    如果我不按照範例,那我python跟arduino要怎麼去做連接
    拜託幫忙一下~~~謝謝

    ReplyDelete
    Replies
    1. 呃,你想怎麼接?Python那一端是什麼裝置?
      有線、無線?要做什麼?

      Delete
    2. 我要做一個通訊模組,要從物聯網抓取資料告訴Arduino之後要做甚麼動作.....
      題目是無人自動搬運車 用python跟arduinov
      謝謝

      Delete

  5. 哈哈~~無法告知是嗎?

    ReplyDelete
    Replies
    1. 問題太大,不適合在留言區回答。

      Delete