في كثير من الأحيان ، للمبتدئين وليس للمطورين فقط أسئلة. كيفية التحكم مع اردوينو من جهاز كمبيوتر؟ وإذا كان الكمبيوتر ليس توت العليق بي ، ولكن جهاز كمبيوتر منزلي منتظم؟ وإذا كنت لا تريد أن تعاني مع ESP8266 وإدارتها عبر واجهة الويب؟ هل من الضروري حقًا فتح Arduino IDE في كل مرة وإرسال الأوامر من خلال
Port Monitor ؟ سأتحدث عن كيفية إنشاء تطبيق واجهة المستخدم الرسومية الخاص بي للتحكم في Arduino.
المعدات
حصلت مؤخرًا على لوحة مهمة جدًا:
Arduino SS Micro . هذه اللوحة ، التي تشبه Digispark Attiny 85 ، هي نسخة صينية من Arduino Micro ، مع مخرج USB.

أنا لا أتحدث عن ذلك بالتفصيل ، لأن مستخدم YouTube الذي يحمل الاسم المستعار
iomoio قد قام بذلك بالفعل ، ويمكن الاطلاع على مراجعته
هنا .
يبدو لي أن هذا الجهاز رائع ومريح للمشاريع المنزلية الصغيرة ، لأن الأسلاك لها خاصية فائقة: تضيع في أكثر اللحظات غير مناسبة.
تم استخدام MacBook Pro مع نظام التشغيل macOS Mojave كجهاز كمبيوتر للتحكم ، ولكن لا تغلق المقالة إذا كنت تستخدم نظام التشغيل Windows أو Linux - كل شيء تم وصفه في المقالة سيعمل بدون تغييرات على أي نظام تشغيل.
رسم لاردوينو
على سبيل المثال ، سيتم استخدام رسم يقوم بتشغيل وإيقاف تشغيل مؤشر LED ، من منفذ Serial.
تحذيرمصباح LED في Arduino SS Micro معلق على منفذ SS ، وبالتالي يتم إيقاف تشغيله تلقائيًا. على الرغم من ذلك ، فإن مثال
Blink القياسي هو مصباح LED الوامض.
char inChar; #define LED_PIN SS void setup() { pinMode(LED_PIN, OUTPUT);
إذا كنت ستستخدم Arduino آخر - لا تنس تغيير دبوس LED.
كود الكمبيوتر
واحدة من مزايا Python ، بالإضافة إلى منصة مشتركة ، هو وجود عدد كبير من المكتبات. سنحتاج:
- PySerial - مكتبة للعمل مع المنفذ التسلسلي
- PyQT5 - مكتبة لإنشاء واجهة رسومية
تركيب
لتثبيت ، استخدم مدير الحزم المدمج - نقطة.
pip install pyserial pyqt5
لتوفير الراحة لإنشاء واجهة المستخدم الرسومية ، يمكنك تثبيت برنامج QTDesigner.
واجهة
نظرًا لأن هذا البرنامج مصمم على الأرجح لإظهار القدرات ، يمكن للمستخدم اختيار المنفذ من المنافذ المقترحة ، بالإضافة إلى السرعة التي سيحدث بها الاتصال.

شفرة المصدر
كل العمل مع الجهاز بفضل مكتبة PySerial. ولكن هناك بعض الفروق الدقيقة. على سبيل المثال ، كيف تعرف المنفذ الذي يتصل به الجهاز؟
على موقع
stackoverflow المعروف بالكامل ، اقترح مستخدم يحمل الاسم المستعار
Thomas حلاً جاهزًا ، والذي استخدمته.
def serial_ports(): """ Lists serial port names :raises EnvironmentError: On unsupported or unknown platforms :returns: A list of the serial ports available on the system """ if sys.platform.startswith('win'): ports = ['COM%s' % (i + 1) for i in range(256)] elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
بالإضافة إلى ذلك ، يجب أن تحتفظ بقائمة السرعات المتاحة:
speeds = ['1200','2400', '4800', '9600', '19200', '38400', '57600', '115200']
الآن دعنا نجمع
التصميم (الذي تم إنشاؤه في QtDesigner وتم تحويله باستخدام الأداة المساعدة pyuic5 إلى ملف .py) ،
ووظائف مسح المنافذ ، ورمز البرنامج الرئيسي .
الفئة الرئيسية التي تحتوي على كل منطق البرنامج
class LedApp(QtWidgets.QMainWindow, design.Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.Port.addItems(serial_ports()) self.Speed.addItems(speeds) self.realport = None self.ConnectButton.clicked.connect(self.connect) self.EnableBtn.clicked.connect(self.send) def connect(self): try: self.realport = serial.Serial(self.Port.currentText(),int(self.Speed.currentText())) self.ConnectButton.setStyleSheet("background-color: green") self.ConnectButton.setText('') except Exception as e: print(e) def send(self): if self.realport: self.realport.write(b'b')
المتغيرات
self.Port و
self.Speed هي قوائم منسدلة تحتوي على قيم المنافذ والسرعات المتاحة.
عند النقر فوق الزر
self.ConnectButton ، يتم استدعاء وظيفة
الاتصال ، حيث يتم إجراء محاولة للاتصال بمنفذ محدد بسرعة معينة. في حالة نجاح الاتصال ، يتحول الزر إلى اللون الأخضر ويتغير الملصق.
ترسل وظيفة
الإرسال سلسلة بايت إلى منفذنا - مما يجبرنا على تشغيل وضع الوميض.
وبالتالي ، يمكنك التحكم في الأجهزة المختلفة المتصلة بـ USB.
هذه المقالة تمهيدية ونظرة عامة ، يمكن العثور على معلومات أكثر اكتمالا ، على سبيل المثال ، هنا:
يتم استضافة التعليمات البرمجية المصدر الكامل لكل من رسم Arduino والبرنامج على
GitHub .