使用FirmATA操做硬件

 

在Arduino使用FirmATA(http://firmata.org/)通用固件,而後在PC上使用Python經過串口通信能夠直接操做硬件(http://playground.arduino.cc/Interfacing/Python)。尤爲是與"樹莓派+Linux"的結合,能夠將樹莓派擴展爲物理操做控制中心,對物聯網、無人機、機器人等應用提供通用的支持。固然,FirmATA只是一個基於串口的API接口,與ATA接口相似,可使用任何編程語言訪問。python

利用FirmATA抽象化硬件,首先須要創建測試環境。首先要用成熟的PC應用來測試固件,而後用固件配合開發Android類庫和應用。在鏈接到移動設備以前,我習慣採用Python來測試MiniKit。git

 Firmata for Python

現有兩個Python Firmata庫:github

pyduino:http://code.google.com/p/pyduino/(依賴於pySerial,實現v2.0)編程

pyFirmata:https://github.com/tino/pyFirmata(依賴pySerial,實現v2.1,支持Python3)編程語言

目測了二者代碼。pyduino的庫pyduino.py只有10KB,最近更新時間爲2009年(能夠做爲重要的參考)。更像MCU開發者編寫的。測試

而pyFirmata更加完整一些,最近更新時間爲2013年,彷佛使用了一些高級Python技巧。好比自動測試一類的。並能夠定製BOARDS參數。更加適合咱們測試使用。由於LPC812MiniKit能夠支持多個Profile。ui

二者都定義了Arduino類,不過咱們能夠參考pyFirmata實現GAPmini類。雖然Firmata的確是爲Arduino定製的。可是若是拓展到其餘平臺的話,應該起一個獨立性強一些的名稱。google

 pyFirmata的使用

 在boards.py和__init__.py中增長LPC812Min/LPC812Max/LPC812MixMin幾種電路板配置(Profile)。spa

 感謝pyFirmata的做者Tino(荷蘭籍)提供了幾種測試程序。code

最基本的測試程序LPC812_Firmata_Blink.py:

from pyfirmata import LPC812Min, util
from pyfirmata import BOARDS
import time

print '>>>> 5 second delay for firmata initial'
print '>>>> Press reset to go'
board = LPC812Min('COM27', baudrate=115200)
print '>>>>',str(board)

board.sp.setDTR(1) # set LOWtime.sleep(0.1)
board.sp.setDTR(0) # set HIGH, LOW to High to reset

layout = BOARDS['lpc812_min']
print ">>>> Board layout"
print str(layout)

board.setup_layout(layout)
(major,minor) = board.get_firmata_version()
print ">>>> Version: %d.%d"%(major,minor)
print ">>>> Firmware name: %s"%(board.firmware)

pin17 = board.get_pin('d:17:o')
while True:
   try:
          pin17.write(1)
          board.pass_time(2)
          pin17.write(0)
          board.pass_time(2)
    except KeyboardInterrupt:
          print ">>>> User interrupt."
board.exit()
print 'Exit it.'

目前已經測試經過基本的Firmata通信。測試完畢後,會上傳到Github,並請求原做者合併。

 【更新】

已經完成基本的Digital In(可用於鍵盤處理)和Digital Out(用於LED閃爍)。PWM輸出(如LED亮度和顏色變化)和模擬輸入(如ADC採樣)須要再更新固件支持。

相關文章
相關標籤/搜索