جدول المحتويات:

الاتصالات التسلسلية من Arduino: 5 خطوات
الاتصالات التسلسلية من Arduino: 5 خطوات

فيديو: الاتصالات التسلسلية من Arduino: 5 خطوات

فيديو: الاتصالات التسلسلية من Arduino: 5 خطوات
فيديو: الدّرس السادس: ملاحظات أساسية حول لغة البرمجة / أساسيات واجهة الاتصال التسلسلي 2024, شهر نوفمبر
Anonim
اردوينو الاتصالات التسلسلية
اردوينو الاتصالات التسلسلية

تعتمد العديد من مشاريع Arduino على نقل البيانات بين العديد من Arduinos.

سواء كنت هاويًا تقوم ببناء سيارة RC ، أو طائرة RC ، أو تصمم محطة طقس مزودة بشاشة عرض عن بُعد ، فستحتاج إلى معرفة كيفية نقل البيانات التسلسلية بشكل موثوق من Arduino إلى آخر. لسوء الحظ ، يصعب على الهواة الحصول على اتصال بيانات تسلسلي يعمل في مشاريعهم الخاصة ، وذلك لأن البيانات التسلسلية تُرسل على شكل دفق من البايت.

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

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

باختصار: سوف يتطرق هذا Instructable إلى كيفية تنفيذ البيانات التسلسلية القوية بسهولة في أي مشروع باستخدام مكتبة SerialTransfer.h. إذا كنت تريد معرفة المزيد حول نظرية المستوى المنخفض حول الاتصال التسلسلي القوي ، فراجع هذا البرنامج التعليمي.

اللوازم

  • 2 اردوينوس

    يوصى بشدة باستخدام Arduinos الذي يحتوي على أجهزة UART متعددة (مثل Arduino Mega)

  • وصل الأسلاك
  • قم بتثبيت SerialTransfer.h

    متاح عبر مدير مكتبات Arduino IDE

الخطوة 1: التوصيلات المادية

التوصيلات المادية
التوصيلات المادية

عند استخدام الاتصال التسلسلي ، يجب مراعاة بعض نقاط التوصيل:

  • تأكد من أن جميع الأسباب متصلة!
  • يجب توصيل دبوس Arduino TX (الإرسال) بدبوس Arduino's RX (الاستقبال) الآخر

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

كيفية استخدام المكتبة
كيفية استخدام المكتبة

يتيح لك SerialTransfer.h إرسال كميات كبيرة من البيانات بسهولة باستخدام بروتوكول حزمة مخصص. يوجد أدناه وصف لجميع ميزات المكتبة - سنستخدم العديد منها لاحقًا في هذا البرنامج التعليمي:

SerialTransfer.txBuff

هذه مصفوفة بايت حيث يتم تخزين جميع بيانات الحمولة التي سيتم إرسالها عبر المسلسل مؤقتًا قبل الإرسال. يمكنك تعبئة هذا المخزن المؤقت ببايت من البيانات لإرساله إلى Arduino آخر.

SerialTransfer.rxBuff

هذه مصفوفة بايت حيث يتم تخزين جميع بيانات الحمولة المستلمة من Arduino الأخرى مؤقتًا.

SerialTransfer.bytesRead

عدد بايتات الحمولة المستلمة بواسطة Arduino الآخر والمخزنة في SerialTransfer.rxBuff

SerialTransfer.begin (البث و _ المنفذ)

يقوم بتهيئة مثيل لفئة المكتبة. يمكنك تمرير أي كائن فئة "Serial" كمعامل - حتى كائنات فئة "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

هذا يجعل Arduino يرسل عدد "messageLen" من البايت في مخزن الإرسال المؤقت إلى Arduino الآخر. على سبيل المثال ، إذا كانت قيمة "messageLen" تساوي 4 ، فسيتم إرسال أول 4 بايت من SerialTransfer.txBuff عبر المسلسل إلى Arduino الآخر.

SerialTransfer.available ()

هذا يجعل Arduino الخاص بك يحلل أي بيانات تسلسلية مستلمة من Arduino الأخرى. إذا أعادت هذه الوظيفة القيمة المنطقية "true" ، فهذا يعني أنه تم تحليل حزمة جديدة بنجاح وأن بيانات الحزمة المستلمة حديثًا مخزنة / متوفرة في SerialTransfer.rxBuff.

SerialTransfer.txObj (const T & val، const uint16_t & len، const uint16_t & index = 0)

حشوات "لين" عدد بايتات كائن عشوائي (بايت ، int ، عدد عشري ، مزدوج ، هيكل ، إلخ …) في المخزن المؤقت للإرسال بدءًا من الفهرس كما هو محدد بواسطة الوسيطة "index".

SerialTransfer.rxObj (const T & val، const uint16_t & len، const uint16_t & index = 0)

يقرأ "len" عدد البايتات من المخزن المؤقت للاستلام (rxBuff) بدءًا من الفهرس كما هو محدد بواسطة الوسيطة "index" في كائن عشوائي (بايت ، int ، عدد عشري ، مزدوج ، هيكل ، إلخ …).

ملاحظة:

أسهل طريقة لنقل البيانات هي أولاً تحديد بنية تحتوي على جميع البيانات التي تريد إرسالها. يجب أن يكون للأردوينو على الطرف المستلم بنية متطابقة محددة.

الخطوة 3: نقل البيانات الأساسية

ينقل الرسم التخطيطي التالي كلاً من قيمة ADC لـ analogRead (0) وقيمة analogRead (0) المحولة إلى الجهد إلى Arduino # 2.

قم بتحميل الرسم التخطيطي التالي على Arduino # 1:

# تضمين "SerialTransfer.h"

SerialTransfer myTransfer ؛ هيكل STRUCT {uint16_t adcVal؛ الجهد العائم } البيانات؛ إعداد باطل () {Serial.begin (115200) ؛ Serial1.begin (115200) ؛ myTransfer.begin (المسلسل 1) ؛ } حلقة فارغة () {data.adcVal = analogRead (0)؛ data.voltage = (data.adcVal * 5.0) / 1023.0 ؛ myTransfer.txObj (data، sizeof (data)) ؛ myTransfer.sendData (sizeof (data)) ؛ تأخير (100) ؛ }

الخطوة 4: استلام البيانات الأساسية

يطبع الكود التالي قيم ADC والجهد المستلم من Arduino # 1.

قم بتحميل الكود التالي إلى Arduino # 2:

# تضمين "SerialTransfer.h"

SerialTransfer myTransfer ؛ هيكل STRUCT {uint16_t adcVal؛ الجهد العائم } البيانات؛ إعداد باطل () {Serial.begin (115200) ؛ Serial1.begin (115200) ؛ myTransfer.begin (المسلسل 1) ، } حلقة باطلة () {if (myTransfer.available ()) {myTransfer.rxObj (data، sizeof (data))؛ Serial.print (data.adcVal) ؛ Serial.print ('') ؛ Serial.println (data.voltage) ؛ Serial.println () ، } else if (myTransfer.status <0) {Serial.print ("ERROR:")؛ إذا (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")) ؛ وإلا إذا (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")) ؛ وإلا إذا (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")) ؛ }}

الخطوة 5: الاختبار

بمجرد تحميل كلا المخططين إلى Arduinos الخاصين بهما ، يمكنك استخدام Serial Monitor على Arduino # 2 للتحقق من أنك تتلقى البيانات من Arduino # 1!

موصى به: