يمكّن الاتصال التسلسلي Arduino الخاص بك من التحدث إلى الأجهزة الأخرى. اكتشف كيفية الاتصال بها ورمزها باستخدام أي من البروتوكولات الأربعة.

عند العمل في مشاريع Arduino الكبيرة ، من الشائع جدًا نفاد المسامير المتاحة لتوصيل المكونات. لنفترض أنك تريد توصيل أجهزة استشعار / مشغلات متعددة مع الحاجة الملحة إلى الاحتفاظ بمسامير إضافية لتغذية وحدة عرض متعطشة للدبابيس.

ما لم تكن تقوم ببعض السحر ، يكون من الصعب أحيانًا التعامل مع كل هذه الاتصالات على لوحة Arduino واحدة - خاصة عندما تقرر استخدام لوحات أصغر لأنك مضغوط للحصول على مساحة. وهنا يأتي دور الاتصال التسلسلي.

دعنا نستكشف ماهية الاتصال التسلسلي والطرق التي يمكنك من خلالها إعداده باستخدام Arduino لمهام مثل المعالجة الموزعة والتكامل العام.

ما هو الاتصال التسلسلي؟

الاتصال التسلسلي هو طريقة لإرسال واستقبال البيانات بين جهازين إلكترونيين أو أكثر ، بتة واحدة في كل مرة عبر خط اتصال واحد. كما يوحي الاسم ، يتم إرسال البيانات في "سلسلة"".

حتى مجرد القدرة على تحميل الرسومات على لوحة Arduino المفضلة لديك تستخدم الاتصال التسلسلي عبر USB.

بروتوكولات الاتصال التسلسلي على Arduino

instagram viewer

لوحات Arduino متعددة الاستخدامات بشكل لا يصدق ويمكنها التواصل مع مجموعة واسعة من الأجهزة. وهي تدعم أربعة بروتوكولات اتصال تسلسلية: Soft Serial و SPI (واجهة محيطية تسلسلية) و UART (جهاز استقبال - مرسل عالمي غير متزامن) و I2C (دائرة متكاملة). لمزيد من التفاصيل ، راجع دليلنا الشامل على كيف تعمل الاتصالات التسلسلية UART و SPI و I2C.

يستخدم هذا البرنامج التعليمي الرسومات الأساسية لإظهار كيف يمكنك إعداد اتصال تسلسلي بين لوحتين من Arduino Uno باستخدام بروتوكولات مختلفة. قم بتكييف الكود لتلبية متطلباتك المحددة.

SPI (الواجهة الطرفية التسلسلية)

SPI هو بروتوكول اتصال تسلسلي متزامن يسمح بالاتصال عالي السرعة بين المتحكمات الدقيقة والأجهزة الطرفية. يتطلب هذا البروتوكول أربعة أسلاك للاتصال: SCK (الساعة التسلسلية) ، MOSI (سيد Out Slave In) ، ميسو (سيد في العبودية) ، و SS (تحديد الرقيق).

ال SPI.h المكتبة مفيدة جدًا لهذا النوع من الاتصالات ويجب تضمينها في الجزء العلوي من الرسم التخطيطي الخاص بك.

#يشمل

فيما يلي دبابيس SPI على لوحة Arduino Uno:

وظيفة

رقم التعريف الشخصي (رقمي)

رقم التعريف الشخصي (رأس ICSP)

موس

11

4

ميسو

12

1

SCK

13

3

SS

10 (افتراضي)

1 (بديل)

بعد تهيئة الاتصال التسلسلي ، ستحتاج إلى تكوين دبابيس الاتصال.

فارغيثبت(){
SPI.يبدأ(115200);
// تعيين أوضاع الدبوس لـ SS و MOSI و MISO و SCK
pinMode(SS ، انتاج);
pinMode(موسي ، انتاج);
pinMode(ميسو ، مدخل);
pinMode(SCK ، انتاج);

/ / قم بتعيين دبوس تحديد الرقيق (SS) عاليًا لتعطيل جهاز الرقيق
الكتابة الرقمية(SS ، عالي);
}

تُستخدم إشارة SS لإخبار الجهاز التابع عند نقل البيانات.

// اختر العبد
الكتابة الرقمية(SS ، قليل);

// إرسال البيانات إلى الجهاز التابع
SPI.تحويل(بيانات)؛

// قم بإلغاء تحديد الجهاز التابع
الكتابة الرقمية(SS ، عالي);

فيما يلي كيفية توصيل لوحين من Arduino باستخدام SPI.

كود المجلس الرئيسي:

#يشمل
مقدار ثابتint slaveSelectPin = 10;
فارغيثبت(){
SPI.يبدأ(115200);
pinMode(slaveSelectPin ، انتاج);
}

فارغحلقة(){
الكتابة الرقمية(slaveSelectPin ، قليل);
SPI.تحويل("ح");
الكتابة الرقمية(slaveSelectPin ، عالي);
تأخير(1000);
}

رمز لوحة الرقيق:

#يشمل
مقدار ثابتint slaveSelectPin = 10;
فارغيثبت(){
SPI.يبدأ(115200);
pinMode(slaveSelectPin ، انتاج);
}

فارغحلقة(){
لو (ديجيتال ريد(slaveSelectPin) == قليل) {
شار ReceivedData = SPI.تحويل("L");
مسلسل.println(البيانات التي وردت)؛
}
}

تأكد من أن أجهزتك تشترك في أرضية مشتركة للتهيئة الصحيحة.

UART (جهاز استقبال - مرسل عالمي غير متزامن)

UART هو بروتوكول اتصال تسلسلي غير متزامن يسمح بالاتصال بين الأجهزة باستخدام سلكين فقط: TX (إرسال) و RX (استقبال). يستخدم UART بشكل شائع للاتصال بأجهزة مثل وحدات GPS ووحدات Bluetooth ووحدات التحكم الدقيقة الأخرى. تأتي كل لوحة Arduino مزودة بمنفذ واحد على الأقل لـ UART.

تتضمن دبابيس UART الموجودة على لوحات Arduino الشهيرة ما يلي:

سبورة

دبابيس تسلسلية

المسلسل 1 دبابيس

المسلسل 2 دبابيس

المسلسل 3 دبابيس

أونو ، نانو ، ميني

0 (RX) ، 1 (TX)

غير متاح

غير متاح

غير متاح

ميجا

0 (RX) ، 1 (TX)

19 (RX) ، 18 (تكساس)

17 (RX) ، 16 (تكساس)

15 (RX) ، 14 (تكساس)

يمكنك الحصول على الجدول الكامل من وثائق Arduino عبر الإنترنت حول الاتصال التسلسلي.

أولاً ، قم بتوصيل اللوحات الخاصة بك على النحو التالي:

ثم استخدم هذا الرمز للوحة المرسل:

فارغيثبت(){
مسلسل.يبدأ(9600);
}

فارغحلقة(){
// أرسل رسالة عبر المسلسل كل ثانية
مسلسل.println("مرحبًا من لوحة المرسل!");
تأخير(1000);
}

كود لوحة الاستقبال:

فارغيثبت(){
مسلسل.يبدأ(9600);
}

فارغحلقة(){
// تحقق مما إذا كان هناك أي بيانات واردة
لو (مسلسل.متاح() > 0) {
// اقرأ البيانات الواردة واطبعها على الشاشة التسلسلية
خيط واردة البيانات = مسلسل.readString();
مسلسل.println(البيانات الواردة) ؛
}
}

يعمل Arduino Uno على مستوى منطق 5 فولت بينما يستخدم منفذ RS232 بجهاز الكمبيوتر مستوى منطقي +/- 12 فولت.

يمكن أن يؤدي توصيل Arduino Uno بمنفذ RS232 مباشرة إلى إتلاف اللوحة الخاصة بك.

I2C (الدائرة المتكاملة)

I2C هو بروتوكول اتصال تسلسلي متزامن يسمح بالاتصال بين أجهزة متعددة باستخدام سلكين فقط: SDA (البيانات التسلسلية) و SCL (الساعة التسلسلية). يستخدم I2C بشكل شائع للتواصل مع المستشعرات و EEPROMs والأجهزة الأخرى التي تحتاج إلى نقل البيانات عبر مسافات قصيرة.

دبابيس I2C على Arduino Uno هي SDA (A4) و SCL (A5).

سننشئ برنامجًا بسيطًا لإنشاء اتصال بين لوحتين من Arduino باستخدام اتصال I2C. لكن أولاً ، قم بتوصيل اللوحات الخاصة بك على النحو التالي:

كود المجلس الرئيسي:

#يشمل
فارغيثبت(){
الأسلاك.يبدأ(); // انضم إلى حافلة I2C كسيد
مسلسل.يبدأ(9600);
}

فارغحلقة(){
الأسلاك.يبدأ الإرسال(9); // الإرسال إلى الجهاز التابع بالعنوان 9
الأسلاك.يكتب('أ'); // يرسل "a" بايت إلى الجهاز التابع
الأسلاك.نهاية الإرسال(); // توقف عن الإرسال

تأخير(500);
}

رمز لوحة الرقيق:

#يشمل
فارغيثبت(){
الأسلاك.يبدأ(9); // انضم إلى حافلة I2C كعبد بالعنوان 9
الأسلاك.عند الاستلام(استقبال الحدث) ؛
مسلسل.يبدأ(9600);
}

فارغحلقة(){
تأخير(100);
}

فارغاستقبل الحدث(int بايت){
بينما(الأسلاك.متاح()) { // حلقة خلال جميع البايت المتلقاة
شار تلقى بايت = الأسلاك.يقرأ(); // قراءة كل بايت وردت
مسلسل.println(مستلم بايت) ؛ // طباعة مستلمة على الشاشة التسلسلية
}
}

ما هو SoftwareSerial؟

تم تطوير مكتبة Arduino SoftwareSerial لمحاكاة اتصال UART ، مما يسمح بالاتصال التسلسلي من خلال أي دبابيس رقمية على لوحات Arduino. يكون مفيدًا عندما يكون الجهاز UART قيد الاستخدام بالفعل من قبل أجهزة أخرى.

لإعداد SoftwareSerial ، قم أولاً بتضمين مكتبة SoftwareSerial في المخطط.

#يشمل

ثم قم بإنشاء مثيل لكائن SoftwareSerial بتحديد RX و تكساس دبابيس لاستخدامها في الاتصال.

البرامجmySerial(2, 3); // دبابيس RX ، TX

فيما يلي مثال على رمز Arduino يوضح استخدام SoftwareSerial:

#يشمل
البرامجmySerial(2, 3); // دبابيس RX ، TX
فارغيثبت(){
مسلسل.يبدأ(9600); // بدء المسلسل للأجهزة
mySerial.يبدأ(9600); // ابدأ المسلسل الناعم
}

فارغحلقة(){
لو (mySerial.متاح()) {
مسلسل.يكتب(mySerial.يقرأ()); // إرسال البيانات المستلمة إلى مسلسل الأجهزة
}
لو (مسلسل.متاح()) {
mySerial.يكتب(مسلسل.يقرأ()); // إرسال البيانات من المسلسل للأجهزة إلى المسلسل الناعم
}
}

المكتبة التسلسلية

المكتبة التسلسلية هي أداة قوية في Arduino تسمح بالاتصال بين وحدة التحكم الدقيقة وجهاز كمبيوتر أو أجهزة أخرى عبر اتصال تسلسلي. تتضمن بعض الوظائف الشائعة ما يلي:

وظيفة

وصف

Serial.begin (السرعة)

يقوم بتهيئة الاتصال التسلسلي بمعدل بيانات محدد.

Serial.print (بيانات)

يرسل البيانات إلى المنفذ التسلسلي للإرسال كنص ASCII.

Serial.write (بيانات)

يرسل البيانات الثنائية الأولية عبر المنفذ التسلسلي.

Serial.available ()

إرجاع عدد البايت المتاح للقراءة من المخزن المؤقت التسلسلي.

Serial.flush ()

ينتظر البيانات التسلسلية الصادرة لإكمال الإرسال قبل المتابعة.

المسلسل. قراءة ()

يقرأ البايت الأول من البيانات التسلسلية الواردة ويعيدها كعدد صحيح.

معدل الباود وتنسيق البيانات التسلسلية

يشير معدل الباود إلى السرعة التي يتم بها نقل البيانات عبر الاتصال التسلسلي. يمثل عدد البتات التي يتم إرسالها في الثانية. يجب ضبط سرعة البث بالباود على كل من أجهزة المرسل والمستقبل ، وإلا فقد يكون الاتصال مشوهًا أو لا يعمل على الإطلاق. تشمل معدلات الباود الشائعة في Arduino 9600 و 19200 و 38400 و 115200.

يشير تنسيق البيانات التسلسلية إلى بنية البيانات التي يتم إرسالها عبر الاتصال التسلسلي. هناك ثلاثة مكونات رئيسية لتنسيق البيانات التسلسلية: بتات البداية ، وبتات البيانات ، وبتات التوقف.

  • بتات البيانات: عدد البتات المستخدمة لتمثيل بايت واحد من البيانات.
  • التكافؤ: بت اختياري يُستخدم لفحص الأخطاء. يمكن ضبطه على لا شيء ، حتى أو تكافؤ فردي ، اعتمادًا على متطلبات قناة الاتصال.
  • نقطة التوقف: عدد البتات المستخدمة للإشارة إلى نهاية بايت البيانات.

يجب أن يكون تنسيق البيانات هو نفسه على كل من أجهزة الإرسال والاستقبال لضمان الاتصال المناسب. فيما يلي مثال على كيفية تعيين تنسيقات بيانات محددة:

فارغيثبت(){
// قم بإعداد اتصال تسلسلي بمعدل 9600 باود ، و 8 بتات بيانات ، وبدون تماثل ، وبت توقف واحد
مسلسل.يبدأ(9600، SERIAL_8N1) ؛
}

هنا، SERIAL_8N1 يمثل تنسيق البيانات مع 8 بتات البيانات ، بدون تكافؤ ، و 1 توقف قليلا. خيارات أخرى مثل SERIAL_7E1, SERIAL_8O2، إلخ ، اعتمادًا على المتطلبات المحددة للمشروع.

مسلسل نقاش

توفر لوحات Arduino العديد من خيارات الاتصال التسلسلي التي تسمح بتبادل فعال وموثوق للبيانات بين الأجهزة. من خلال فهم كيفية إعداد بروتوكولات الاتصال التسلسلي على Arduino IDE ، يمكنك الاستفادة من قوة المعالجة الموزعة أو تقليل عدد الأسلاك المستخدمة في مشاريعك بشكل كبير.