در این نوشته با هم یاد میگیریم که چطور اطلاعات دریافتی از پورت سریال رو در کامپوترمون و به شکل یک فایل متنی ساده ذخیره کنیم.
چه چیزهایی لازم داریم؟
سختافزار: مبدل 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
نویسنده: محمد حسین سالاری.
۲ دیدگاه
عالییی
خیلی کمک بزرگی بهم کردی ان شاء الله خداوند کمک خیلی بزرگتری بهت کنه
حوشحال شدم که شنیدم تونستم به کسی کمک کنم.