1. 程式人生 > >用Python控制Arduino實現Blink

用Python控制Arduino實現Blink

第一種方法:用pyFirmata實現

1.安裝pyFirmata包

    執行命令:pip install pyFirmata

   在python2.7或python3.X下都可以執行。

   pyFirmata包實現了python對Arduino進行控制的功能,它與Arduino之間通訊遵循的是Firmata協議

   如果pyton下執行from pyfirmata import Arduino不報錯,證明安裝成功

2.在Arduino IDE中為Arduino寫入程式Standard Firmata.

3. 在Python IDEL中編寫下面的程式

from pyfirmata import Arduino, util  
import time
board = Arduino('COM8')                #Arduino所在串列埠是COM8,這是windows下的表示

while 1:
     board.digital[13].write(0)           #向埠13寫入0
     time.sleep(1)
     board.digital[13].write(1)          #向埠13寫入1
     time.sleep(1)

執行程式,可見13引腳led閃爍。

pyFirmata程式的說明文件    https://github.com/tino/pyFirmata

第二種方法:用pymata_aio來實現

 pymata_aio功能更強,它可以實現對舵機,超聲模組的控制

1,安裝pymata_aio

   pymata_aio在python3上能順利執行,在python2上不能順利安裝

   執行命令:  pip3 install pymata_aio

  安裝完成後,在python命令列下執行from pymata_aio.pymata3 import PyMata3,如果不報錯,說明安裝成功。

  2,上傳程式firmataplus.ino到Arduino

 3,   串列埠連線電腦和Arduno

4,  例項程式

from pymata_aio.pymata3 import PyMata3
from pymata_aio.constants import Constants

BOARD_LED = 13
board = PyMata3(com_port="/dev/ttyACM0")            #連線串列埠

def setup():
    board.set_pin_mode(BOARD_LED, Constants.OUTPUT)      #宣告引腳為輸出
    #board.enable_analog_reporting(0)
    board.set_pin_mode(0,Constants.ANALOG)                          #設定A0, 讀模擬訊號

def loop():

    try:
        print("LED On")
        board.digital_write(BOARD_LED, 1)                                        #寫為數字1
        board.sleep(1.0)                                                                       #等待1秒
        print("LED Off")
        board.digital_write(BOARD_LED, 0)                                        #寫為數字0
        board.sleep(1.0)

    
        print( board.analog_read(0) )                                                    #讀A0,結果為0-1023的一個數

   except:

       board.shutdown()                                                                      #關閉連線, 很有必要

if __name__ == "__main__":
    setup()
    while True:
        loop()
 

5, pymata_aio網址: