ذخیره اطلاعات دریافتی از پورت سریال کامپوتر در یک فایل متنی

در این نوشته با هم یاد می‌گیریم که چطور اطلاعات دریافتی از پورت سریال رو در کامپوترمون و به شکل یک فایل متنی ساده ذخیره کنیم.

چه چیزهایی لازم داریم؟

سخت‌افزار: مبدل USB به سریال

نرم‌افزار: پایتون ۳، ماژول pySerial

به چه دردمون می‌خوره!؟

این سناریو رو در نظر بگیرید:

برای دیباگ یا شاید کارهای دیگه می‌خوایم اطلاعات پورت سریال رو بخونیم، مثلا پروژه‌‌ای داریم که لازمه هر پنج دقیقه اطلاعات کنتور برق رو بخونیم.

کنتور رو وصل کردیم به یک آردوینو، آردیونو ارتباط با کنتور رو انجام می ده و اطلاعات رو به شکل سریال ارسال می‌کنه، خیلی معقوله قبل از این که وارد مرحله‌ی بعد کار بشیم بیایم و برای تست سه روز سیستم رو روشن بذاریم داده‌ها رو جمع‌آوری کنیم، تا مطمعن شیم این وسط اطلاعاتی رو از دست ندادیم و … .

دو تا راه داریم، یا یک سریال مانیتور باز کنیم و اطلاعات رو اونجا ببینیم [که ممکنه برق بره و یا به هر دلیل دیگه سیستم خاموش شه … و پوف! همه‌چیز از دست رفت!] یا می‌تونیم اطلاعات پورت سریال رو با پایتون بخونیم و به شکل یک فایل متی در حافظه‌ی دائم سیستم ذخیره کنیم.

[اگر نمی دونید چطور با پورت سریال در اوبونتو کار کنید اینجا توضیح دادم: استفاده از مبدل USB به سریال در اوبونتو]

کتابخانه کار با پورت سریال در پایتون:

فرض رو بر این قرار می‌دم که پایتون ۳ و pip 3رو روی سیستم خودتون دارید [اگر نه در چندخط اول +این نوشته در مورد نصب پایتون توضیح دادم.]

برای این که بتونیم با پورت سریال کار کنیم باید pySerial رو نصب کنیم، با دستور زیر:

python3 -m pip install pyserial

بد نیست توضیحاتی که خود سازنده‌های PySerial در مورد این ماژول نوشتن رو اینجا بیارم:

“This module encapsulates the access for the serial port. It provides backends for Python running on Windows, OSX, Linux, BSD (possibly any POSIX compliant system) and IronPython.”

با کمک دوست‌هامون که ماژول بالا رو ساختن بقیه‌ی کار فوق‌العاده ساده‌ می‌شه. ابتدا کد کامل برنامه رو میارم و بعد خط به خط توضیح می‌دم:

کد برنامه:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# build-in imports
import serial

serial_port = '/dev/ttyACM0'; # Serial port you want to monitor
baud_rate = 115200; # Serial Baud Rate
write_to_file_path = "output.txt"; # Name and Path of where to store the file

output_file = open(write_to_file_path, "w+")
serial_data = serial.Serial(serial_port, baud_rate)

if __name__ == '__main__':
    while True:
        line = serial_data.readline();
        line = line.decode("utf-8") #serial_data.readline returns a binary, convert to string
        print(line);
        output_file.write(line);

در خط ۴ ماژول pySerial رو فرا خوانده‌ایم [!:)]

در خط ۶اوم اون پورت سریالی که می‌خوایم اطلاعاتش رو ببینم معرفی می‌کنیم.

خط ۷ نرخ انتقال ارتباط سریال رو مشخص کردیم.

خط ۸ جایی هست که محل ذخیره رو مشخص می‌کنیم.

اگر می‌خواید از این کد استفاده کنید بیشتر از این رو لازم نداریم، کپی/پیست می‌کنیم و فقط همین نرخ انتقال و آدرس پورت سریال رو تغییر می‌دیم 🙂

اما خط‌های ۱۰ و ۱۱ پورت سریال و فایلی که می‌خوایم توی اون اطلاعات ذخیره شه رو باز می‌کنیم.

و در انتها خط‌های ۱۴ تا ۱۸ یک حلقه‌ی بی‌نهایت داریم که هر اطلاعات سریال جدید دریافتی رو چاپ و سپس ذخیره می‌کنه.

 

منابع:

http://pyserial.readthedocs.io/en/latest/pyserial.html

https://electronics.stackexchange.com/questions/54/saving-arduino-sensor-data-to-a-text-file

 


نویسنده: محمد حسین سالاری.

موارد مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *