ติดต่อ Serial Port (ComPort) ง่าย ๆ ด้วย Python บน Windows

×

Error message

  • Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in book_prev() (line 775 of /data/wwwroot/modules/book/book.module).
  • Deprecated function: implode(): Passing glue string after array is deprecated. Swap the parameters in drupal_get_feeds() (line 394 of /data/wwwroot/includes/common.inc).

Python เป็นภาษาหนึ่งในการเขียนโปรแกรม ที่ผมว่าน่าจะครอบจักรวาลเลยก็ว่าได้
นอกจากจะเขียนง่ายแล้วยังทำได้เกือยทุกอย่าง อย่าตอนนี้ที่จะลองใช้กัน พอดีต้องเขียนโปรแกรม
เพื่อติดต่อกับ Serial Port หรือ Com Port นั่นเอง จริง ๆ อาจมีหลายภาษาที่ทำได้เหมือนกัน
แต่เราจะมาลองเขียนด้วย Python บน Windows กันครับ (จริง ๆ  Linux ก็น่าจะได้เหมือนกัน)

โปรแกรมที่ต้องใช้
1. Python 2.5 เป็นตัวแปลภาษาของ python ครับ ดาวน์โหลดได้จาก http://www.python.org/download/
2. PyWin32 เป็น extension สำหรับการติดต่อบน Windows ดาวน์โหลดได้จาก http://sourceforge.net/projects/pywin32/
3. PySerial เป็น extension สำหรับติดต่อกับ Serial Port พระเอกของเราในครั้งนี้ครับ ดาวน์โหลดได้จาก http://sourceforge.net/projects/pyserial/

เมื่อ โหลดมาแล้ว เราก็มาลองทดสอบกัน โดยที่ http://pyserial.sourceforge.net/ ก็มีตัวอย่างให้ครับ

#!C:/Python25/python.exe

import serial
ser = serial.Serial(0)   # เปิดพอร์ต serial พอร์ต 0 หรือพอร์ตแรก
print ser.isOpen()
ser.close()

 เมื่อลองรันดู ผมที่ได้คือ

>> True

หมายถึงพอร์ตเปิดแล้ว

ยังมีคำสั่งอื่น ๆ ให้ใช้อีกมากมายครับ เช่น

setRTS(level=1)         #set RTS line to specified logic level
setDTR(level=1) #set DTR line to specified logic level
getCTS() #return the state of the CTS line
getDSR() #return the state of the DSR line
getRI() #return the state of the RI line
getCD() #return the state of the CD line
สำหรับผม ใช้คำสั่ง setRTS() เพื่อกำหนดให้วงจรปิดเปิดไปทำงาน ตอนนี้ถือว่าใช้ได้เลยทีเดียว ง่ายและรวดเร็ว
ส่วน Front-End ก็อาจจะใช้ PyGTK ก็ได้ครับ

 

 

Comments

ได้ทดลองทำตามแล้วแต่มัน error แล้วแก้ไข ตอนนี้ใช้ python2.6.5
ถ้าใครมาอ่านและได้ทำตามหากเกิด error ลองแก้โค้ดจาก
ser = serial.Serial(0) เป็น
ser = serial.Serial("com6") # com6 ต้องแก้เป็น comport ที่ serial เราต่ออยู่ เช่น com1,com2 เป็นต้น
เท่านี้ถ้าใครติด error ลองแก้ดูก็จะรันได้ค่ะ

sake's picture

ขอบคุณสำหรับข้อมูลครับ อาจเป็นเพราะ python 2.5 และ 2.6 ต่างกัน หรือไม่ก็พอร์ตนั้น ๆ ไม่ว่างก็ได้ครับ