PySerial: التعامل مع المنافذ التسلسلية (COM, USB) في بايثون

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة

لا يزال التعامل مع المنافذ التسلسلية (Serial Ports) أمرًا حيويًا في الأنظمة الصناعية، وإنترنت الأشياء (IoT)، والروبوتات، والأنظمة القائمة على المتحكمات الدقيقة. التحكم في الأجهزة عبر منافذ COM (RS-232/RS-485/USB-Serial) يتطلب أداة مستقرة، متعددة المنصات، ومرنة. في لغة بايثون، الحل الأمثل هو مكتبة PySerial.

توفر PySerial واجهة بسيطة وقوية لتوصيل وتكوين وتبادل البيانات عبر الخطوط التسلسلية. تُستخدم للتواصل مع Arduino، Raspberry Pi، أجهزة المودم، مستقبلات GPS، المتحكمات، الحساسات، والعديد من الأجهزة الأخرى.

عن مكتبة PySerial

PySerial هي مكتبة بايثون متعددة المنصات للتعامل مع المنافذ التسلسلية. طورها Chris Liechti، وأصبحت المعيار الفعلي للاتصالات التسلسلية في نظام بايثون البيئي. تدعم المكتبة أنظمة Windows، Linux، macOS، والعديد من أنظمة التشغيل الأخرى.

الميزات الرئيسية لـ PySerial

توفر المكتبة واجهة برمجة تطبيقات (API) موحدة للعمل مع أنواع مختلفة من الاتصالات التسلسلية. تقوم تلقائيًا بمعالجة الخصائص الخاصة بكل منصة عند التعامل مع المنافذ، وتوفر للمطور واجهة بسيطة.

تدعم PySerial ليس فقط منافذ COM الفعلية، بل أيضًا الاتصالات الافتراضية، بما في ذلك محولات USB-to-Serial، وملف تعريف المنفذ التسلسلي للبلوتوث (Bluetooth Serial Port Profile)، وحتى الاتصالات الشبكية عبر بروتوكول RFC2217.

التثبيت والاستيراد

يتم تثبيت المكتبة عبر مدير الحزم pip:

pip install pyserial

لاستيراد المكتبة في كود بايثون، نستخدم الأمر التالي:

import serial

الهيكل الأساسي للعمل

دورة حياة الاتصال

العمل النموذجي مع PySerial يتبع مخططًا بسيطًا:

  1. إنشاء كائن Serial — تهيئة الاتصال مع معاملات المنفذ
  2. فتح الاتصال — إنشاء رابط مع الجهاز
  3. تبادل البيانات — إرسال الأوامر وقراءة الردود
  4. إغلاق الاتصال — إنهاء العمل بشكل صحيح
ser = serial.Serial('COM3', baudrate=9600, timeout=1)
ser.write(b'command')
data = ser.readline()
ser.close()

المعاملات الأساسية للتكوين

عند إنشاء كائن Serial، يمكن ضبط العديد من المعاملات:

  • port — اسم الجهاز (COM1، /dev/ttyUSB0، /dev/ttyAMA0)
  • baudrate — سرعة نقل البيانات (عادة 9600، 38400، 115200)
  • bytesize — حجم الحرف بالبت (5، 6، 7، 8)
  • parity — التحقق من التكافؤ (PARITY_NONE، PARITY_EVEN، PARITY_ODD)
  • stopbits — عدد بتات التوقف (1، 1.5، 2)
  • timeout — مهلة عمليات القراءة بالثواني

طرق قراءة البيانات

الطرق الأساسية للقراءة

توفر PySerial عدة طرق لقراءة البيانات من المنفذ:

Serial.read(size=1) — يقرأ عددًا محددًا من البايتات. إذا كانت البيانات غير كافية، يتم حظر الطريقة حتى استلام جميع البايتات أو انتهاء المهلة.

data = ser.read(10)  # قراءة 10 بايتات

Serial.readline() — يقرأ البيانات حتى رمز السطر الجديد (\n). الطريقة الأكثر شيوعًا للبروتوكولات النصية.

line = ser.readline().decode('utf-8').strip()

Serial.read_all() — يقرأ جميع البيانات المتاحة من المخزن المؤقت للإدخال فورًا.

all_data = ser.read_all()

طرق القراءة المتقدمة

Serial.read_until(expected) — يقرأ البيانات حتى الوصول إلى تسلسل محدد.

توصيات