فهرست مطالب:

ارتباط سریال آردوینو: 5 مرحله
ارتباط سریال آردوینو: 5 مرحله

تصویری: ارتباط سریال آردوینو: 5 مرحله

تصویری: ارتباط سریال آردوینو: 5 مرحله
تصویری: Arduino- Serial communication & variable-part1-آآردوینو-ارتباط سریال- متغیر 2024, نوامبر
Anonim
ارتباط سریال آردوینو
ارتباط سریال آردوینو

بسیاری از پروژه های آردوینو بر انتقال داده ها بین چندین آردوینو متکی هستند.

این که آیا شما یک سرگرم کننده هستید که در حال ساخت یک ماشین RC ، یک هواپیمای RC ، یا طراحی یک ایستگاه هواشناسی با صفحه نمایش از راه دور هستید ، باید بدانید چگونه می توانید داده های سریال را به طور قابل اعتماد از یک آردوینو به دیگری منتقل کنید. متأسفانه ، برای علاقه مندان به سختی می توان ارتباط داده های سریال را در پروژه های خود کار کرد. این به این دلیل است که داده های سریال به عنوان یک جریان بایت ارسال می شود.

بدون هیچ گونه زمینه ای در جریان بایت ها ، تفسیر داده ها تقریباً غیرممکن است. بدون توانایی تفسیر داده ها ، Arduinos شما قادر به برقراری ارتباط قابل اعتماد نخواهد بود. نکته اصلی این است که با استفاده از یک طرح بسته استاندارد سری ، این داده های زمینه را به جریان بایت اضافه کنید.

طراحی بسته های سریال ، بسته بندی بسته ها و تجزیه بسته ها پیچیده است و دستیابی به آن دشوار است. خوشبختانه برای کاربران آردوینو ، کتابخانه هایی در دسترس هستند که می توانند تمام این منطق پیچیده را در پشت صحنه انجام دهند ، بنابراین شما می توانید بر کارکردن پروژه خود بدون سر و صدای اضافی تمرکز کنید. این دستورالعمل از کتابخانه SerialTransfer.h برای پردازش بسته های سری استفاده می کند.

به طور خلاصه: این دستورالعمل به این موضوع می پردازد که چگونه می توانید داده های سریال قوی را به راحتی در هر پروژه با استفاده از کتابخانه SerialTransfer.h پیاده سازی کنید. اگر می خواهید در مورد نظریه سطح پایین در مورد ارتباط سری قوی بیشتر بیاموزید ، این آموزش را ببینید.

تدارکات

  • 2 آردوینوس

    بسیار تشویق می شود که از آردوینوهایی استفاده کنید که دارای چندین UART سخت افزاری هستند (یعنی آردوینو مگا)

  • سیم اتصال
  • SerialTransfer.h را نصب کنید

    از طریق مدیر کتابخانه های Arduino IDE موجود است

مرحله 1: اتصالات فیزیکی

اتصالات فیزیکی
اتصالات فیزیکی

هنگام استفاده از ارتباط سریال ، چند نکته سیم کشی را باید در نظر داشت:

  • مطمئن شوید که همه زمینه ها به هم متصل هستند!
  • پین Arduino TX (Transmit) باید به پین RX (دریافت) دیگر Arduino متصل شود

مرحله 2: نحوه استفاده از کتابخانه

نحوه استفاده از کتابخانه
نحوه استفاده از کتابخانه

SerialTransfer.h به شما این امکان را می دهد تا به راحتی حجم زیادی از داده ها را با استفاده از یک پروتکل بسته سفارشی ارسال کنید. در زیر شرح همه ویژگی های کتابخانه است - که بسیاری از آنها را بعداً در این آموزش استفاده خواهیم کرد:

SerialTransfer.txBuff

این یک آرایه بایت است که در آن تمام داده های بار که باید از طریق سریال ارسال شوند قبل از ارسال بافر می شوند. می توانید این بافر را با بایت داده برای ارسال به آردوینو دیگر پر کنید.

SerialTransfer.rxBuff

این یک آرایه بایت است که در آن تمام داده های بار دریافتی از آردوینو دیگر بافر می شوند.

SerialTransfer.bytesRead

تعداد بایت بارهای دریافت شده توسط آردوینو دیگر و ذخیره شده در SerialTransfer.rxBuff

SerialTransfer.begin (جریان و _پورت)

یک نمونه از کلاس کتابخانه را راه اندازی می کند. شما می توانید هر شیء "Serial" را به عنوان یک پارامتر - حتی اشیاء کلاس "SoftwareSerial" ارسال کنید!

SerialTransfer.sendData (const uint16_t & messageLen)

این باعث می شود که آردوینو شما تعداد "بایت" messageLen را در بافر انتقال به آردوینو دیگر ارسال کند. به عنوان مثال ، اگر "messageLen" 4 باشد ، 4 بایت اول SerialTransfer.txBuff از طریق سریال به آردوینو دیگر ارسال می شود.

SerialTransfer.available ()

این باعث می شود که Arduino شما داده های سریال دریافتی دیگر Arduino را تجزیه کند. اگر این تابع بولین "true" را برگرداند ، بدین معناست که یک بسته جدید با موفقیت تجزیه شده و داده های بسته تازه دریافت شده در SerialTransfer.rxBuff ذخیره/در دسترس است.

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

تعداد بایت های یک شیء دلخواه (بایت ، int ، float ، double ، struct و غیره …) را در بافر انتقال شروع می کند که از نمایه شروع می شود ، همانطور که توسط آرگومان "index" مشخص شده است.

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

تعداد بایت های "len" را از بافر دریافت (rxBuff) که از ایندکس شروع می شوند ، همانطور که توسط آرگومان "index" مشخص شده است ، در یک شیء دلخواه (بایت ، int ، float ، double ، struct و غیره …) می خواند.

توجه داشته باشید:

ساده ترین راه برای انتقال داده این است که ابتدا یک ساختار تعریف کنید که شامل تمام داده هایی است که می خواهید ارسال کنید. آردوینو در قسمت دریافت باید دارای ساختار یکسانی باشد.

مرحله 3: انتقال داده های اساسی

طرح زیر مقدار ADC analogRead (0) و مقدار analogRead (0) تبدیل شده به ولتاژ را به آردوینو شماره 2 منتقل می کند.

طرح زیر را در آردوینو شماره 1 بارگذاری کنید:

#شامل "SerialTransfer.h"

SerialTransfer myTransfer؛ struct STRUCT {uint16_t adcVal؛ ولتاژ شناور ؛ } داده ها؛ void setup () {Serial.begin (115200)؛ Serial1.begin (115200)؛ myTransfer.begin (Serial1)؛ } void loop () {data.adcVal = analogRead (0)؛ data.voltage = (data.adcVal * 5.0) / 1023.0 ؛ myTransfer.txObj (داده ، اندازه (داده)) ؛ myTransfer.sendData (sizeof (داده)) ؛ تأخیر (100) ؛ }

مرحله 4: دریافت داده های اساسی

کد زیر مقادیر ADC و ولتاژ دریافت شده از آردوینو شماره 1 را چاپ می کند.

کد زیر را در آردوینو شماره 2 بارگذاری کنید:

#شامل "SerialTransfer.h"

SerialTransfer myTransfer؛ struct STRUCT {uint16_t adcVal؛ ولتاژ شناور ؛ } داده ها؛ void setup () {Serial.begin (115200)؛ Serial1.begin (115200)؛ myTransfer.begin (Serial1)؛ } void loop () {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:")؛ if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")) ؛ else if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")) ؛ else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")) ؛ }}

مرحله 5: آزمایش

پس از بارگذاری هر دو طرح در Arduinos مربوطه ، می توانید از Serial Monitor در Arduino #2 برای تأیید دریافت داده های Arduino #1 استفاده کنید!

توصیه شده: