[Vietnamese only] Giao tiếp serial trên Linux

Để giao tiếp với cổng com, có thể dùng cutecom, hoặc chính bản thân terminal. Nếu dùng cutecom thì cũng tương tự với các chương trình khác. Ví dụ với terminal thôi:
Code:

#Thiết lập com /dev/ttyUSB0 với baudrate cần thiết, 
stty -F /dev/ttyUSB0 speed 115200 raw #raw tức là hiển thị tất cả, không dấu thứ gì

#Dùng lệnh cat để đưa chuỗi nhận được ra stdout (tức là màn hình terminal)
cat /dev/ttyUSB0

#Nếu muốn có thể cho chuỗi này vào một file định sẵn
cat /dev/ttyUSB0 > filename.txt

Với dữ liệu nhận được, để vẽ đồ thị theo thời gian thực thì cũng đơn giản với linux. Hãy dùng python. Trước đây mình dùng matplotlib nhưng cảm thấy matplotlib châm, không đáp ứng được yêu cầu thời gian thực, nên mình dùng thư viện pyqtgraph, download ở đây pyqtgraph.org

Code:

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import serial
import numpy as np
ser=serial.Serial('/dev/ttyUSB1',115200)

win=pg.GraphicsWindow()
win.setWindowTitle('DC motor speed display using PyQtGraph')

p1=win.addPlot()
p2=win.addPlot()
data1=[]
curve1=p1.plot(data1,pen=(255,255,0),name='Speed (RPM)')
curve2=p2.plot(data1,pen=(0,255,255))
ptr1=0
def update():
	global data1, curve1, ptr1
	speed=float(ser.readline())
	data1.append(speed)
	ptr1+=1
	curve1.setData(data1)
	curve2.setData(data1)
	curve2.setPos(ptr1,0)
	if ptr1>50:
		del data1[0]

timer=pg.QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)

## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

Trong code python này mình dùng 2 plot để thử vẽ 2 đồ thị cùng một lúc, tuy nhiên luồng data thì chỉ có 1, chưa có thời gian làm nữa. Các bạn thử xem. Do chỉ có một luồng data cần vẽ biểu đồ nên khi gửi lên python không cần xử lý chuỗi nữa. Nếu có cần xử lý chuỗi trên python cũng không có gì phức tạp.

Đây là đồ thị thời gian thực, đáp ứng rất nhanh theo thực tế ở mạch điều khiển. Code python trên nếu chiu khó tinh chỉnh sẽ cho ra đồ thị đẹp và chuyên nghiệp hơn. Nếu muốn đẹp hơn nữa thì matplotlib, nhưng matplotlib khá chậm, không đáp ứng được yêu cầu thời gian thực.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s