在Arduino使用FirmATA(http://firmata.org/)通用固件,而後在PC上使用Python經過串口通信能夠直接操做硬件(http://playground.arduino.cc/Interfacing/Python)。尤爲是與"樹莓派+Linux"的結合,能夠將樹莓派擴展爲物理操做控制中心,對物聯網、無人機、機器人等應用提供通用的支持。固然,FirmATA只是一個基於串口的API接口,與ATA接口相似,可使用任何編程語言訪問。python
利用FirmATA抽象化硬件,首先須要創建測試環境。首先要用成熟的PC應用來測試固件,而後用固件配合開發Android類庫和應用。在鏈接到移動設備以前,我習慣採用Python來測試MiniKit。git
現有兩個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
在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採樣)須要再更新固件支持。