2014年8月23日 星期六

安裝 pySerial

您可以使用 pySerial 透過 COM port 與 Arduino 聯繫。

官網 http://pyserial.sourceforge.net/#


下載

切換至下載頁面 https://pypi.python.org/pypi/pyserial,點擊 pyserial-2.7-win32.exe (md5)。


安裝

雙擊  pyserial-2.7-win32.exe,然後依照視窗提示安裝即可。它會被安裝到 C:\Python27\Lib\site-packages\serial\ 這個位置。


開啟 COM4 並送出訊息

COM port 的編號是從 0 開始,所以  serial.Serial(3) 表開啟 COM4。

import serial
ser = serial.Serial(3)  # open COM4 port
print ser.name          # check which port was really used
ser.write("hello")      # write a string
ser.close()             # close port


以名稱方式開啟 COM port 並讀取訊息

超時設為 1 秒,讀取資料時如果時間超過 1 秒沒接收到資料就中斷接收。

import serial
ser = serial.Serial('COM4', 19200, timeout=1)
x = ser.read()          # read one byte
s = ser.read(10)        # read up to ten bytes (timeout)
line = ser.readline()   # read a '\n' terminated line
ser.close()


稍後才設定 COM 的參數

您不必一開始就指定某個特定的 COM port 必須使用多少鮑率等參數,而是可以隨著程式的進行隨時改變參數,方法如下所示:

>>> import serial
>>> ser = serial.Serial()
>>> ser.baudrate = 19200
>>> ser.port = 0
>>> ser
Serial<id=0xa81c10, open=False>(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0)
>>> ser.open()
>>> ser.isOpen()
True
>>> ser.close()
>>> ser.isOpen()
False


獲取可用的 COM port

import serial.tools.list_ports

coms=serial.tools.list_ports.comports()
for a in coms:
     print a



讓 Arduino 板子 pin 13 的 LED 閃爍

Python code:

import serial

def main():
    sp = serial.Serial()
    sp.port = 'COM4'
    sp.baudrate = 9600
    sp.timeout = 5

    sp.open()
    sp.readline() #to give the hardware handshake time to happen
    sp.write(chr(1))
    value = sp.readline()
    print value
    sp.write(chr(0))
    sp.close()

if __name__ == "__main__":

    main()


Arduino code:

const int ledPin = 13;

void setup(){
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
}

void loop(){
    while(Serial.available()){
        switch(Serial.read()) {
          case 0:
            digitalWrite(ledPin, LOW);
            break;
          case 1:
            digitalWrite(ledPin, HIGH);
            break;
        }  
        delay(20);
    }

}


您可能也喜歡

Arduino and Python
http://playground.arduino.cc/interfacing/python

pyFirmata
https://github.com/tino/pyFirmata

Python Arduino Prototyping API
https://github.com/vascop/Python-Arduino-Proto-API-v2


<Python Serial Port Extension>


1. wxTerminal.py
http://sourceforge.net/p/pyserial/code/HEAD/tree/trunk/pyserial/examples/wxTerminal.py


2. wxSerialConfigDialog.py
http://sourceforge.net/p/pyserial/code/HEAD/tree/trunk/pyserial/examples/wxSerialConfigDialog.py



沒有留言:

張貼留言