آردوینو آموزش آردوینو

آموزش آردوینو بخش چهاردهم – ارتباط communication در آردوینو

arduino-basic-tutorial-part-fourteen-communication-digispark
نوشته شده توسط پریسا پوربلورچیان

پروتکل های ارتباطی در آردوینو نقش اساسی در ارتباط و ارسال دیتا را برعهده دارند. به واسطه پروتکل های ارتباطی افزایش سرعت در ارسال، کاهش سیم کشی در مدار را داریم که نقاط قوت محسوب می‌شوند. در این آموزش به بررسی دو ارتباط Serial و Stream در آردوینو میپردازیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


ارتباط Serial


برای ارتباط برد آردوینو با سایر دستگاه ها و دیوایس ها بهترین راه حل استفاده از ارتباط سریال Serial است. تمامی بردهای آردوینو حداقل یک پورت سریال را دارند و برای شروع ارتباط هیچ مانعی بر سر راه ما وجود ندارد. البته بردهایی مانند آردوینو Arduino Mega2560 از چندین پورت سریال استفاده می‌کنند. پایه های سریال در بردهای آردوینو ARDUINO با RX , TX مشخص شده است.

جدول ارتباط Serial بردهای آردوینو - دیجی اسپارک

 

    • برد آردوینو UNO , NANO , MINI دارای یک پورت سریال است.
    • برد آردوینو MEGA دارای ۴ پورت سریال است.
    • برد آردوینو LEONARDO, MICRO, YUN دارای یک پورت سربال است.
    • برد آردوینو DUE دارای ۴ پورت سریال است.

 

با اتصال هر دیوایس به پایه های RX, TX بردهای آردوینو برقراری ارتباط انجام شده و امکان ارسال دیتا بین دو دستگاه آغاز می‌شود. همچنین نرم افزار IDE ARDUINO از طریق سریال مانیتور ارتباط سریال با برد آردوینو را برای ما فراهم کرده است.

پین های سریال RX, TX در ارتباط سریال از لاجیک لول TTL بسته به نوع آردوینو بین ۳٫۳ تا ۵ ولت استفاده می‌کنند. دقت کنید پایه ها را به صورت مستقیم به پورت RS232 متصل نکنید. برای اتصال مستقیم پایه های سریال کامپیوتر بایستی از مبدل های USB TO TLL استفاده کنید. برای اتصال پایه های RX , TX به مبدل USB TO SERIAL به روش زیر عمل کنید.

  • پایه TX برد آردوینو را به پایه RX دیوایس مورد استفاده وصل کنید.
  • پایه RX برد آردوینو را به پایه TX دیوایس مورد استفاده وصل کنید.
  • پایه های تغذیه همانند جاپ روی بردها انجام شود.

 

بررسی چند دستور مهم


if(Serial)


برای تشخیص پورت سریال و آماده بودن پورت از این تابع در ارتباط سریال استفاده می‌شود. به عبارتی پس از اتصال native usb به بردها مشخص می‌شود پورت USB فعال شده است یا خیر و در سریال مشخص می‌شود.  برای تست این دستور از آردوینو DUE که دارای پورت NATIVE USB است، استفاده می‌کنیم. پورت NATIVE USB که از ارتباط سریال CDC پشتیبانی می‌کند به صورت مستقیم با MCU SAM3X متصل می‌شود.

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB
  }
}

void loop() {
  //proceed normally
}

 


Serial.available()


توسط تابع SERIAL. AVAILABLE یک عدد بایت کاراکتری را از سریال مانیتور میخواند که در بافر ذخیره شده است. برای تست این دستور کد زیر را در آردوینو کپی کرده و سپس اجرا کنید. برای اجرا سریال مانیتور را باز کرده و سپس عدد ۱ را وارد و اینتر را بزنید. در سریال مانیتور عدد ۱ به عدد ۴۹ تبدیل شده که بر حسب DEC است.

int incomingByte = 0; // for incoming serial data

void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {
  // reply only when you receive data:
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte, DEC);
  }
}

 

تابع SERIAL. AVAILABLE در برنامه نویسی آردوینو - دیجی اسپارک

 

کارکرد سریال مانیتور آردوینو با تابع SERIAL. AVAILABLE - دیجی اسپارک

 

نمایش اعداد در سریال مانیتور آردوینو - دیجی اسپارک

 


Serial.availableForWrite()


تعداد بایت (کاراکتر) موجود برای نوشتن در بافر سریال را بدون مسدود کردن عملیات نوشتن دریافت می‌شود.

روش فراخوانی

Serial.availableForWrite()

 


Serial.begin()


 برای مشخص شدن بادریت در سریتال مانیتور از این دستور استفاده می‌شود.
Serial.begin(speed)
Serial.begin(speed, config)

 


Serial.end()


برای قطع ارتباط سریال از این دستور استفاده می‌شود.
Serial.end()

 


Serial.find()


 برای خواندن دیتا از سریال بافر از دستور FIND استفاده می‌شود.
Serial.find(target)
Serial.find(target, length)

 


Serial.print()


برای چاپ و نمایش دیتا در سریال مانیتور از دستور PRINT استفاده می‌شود.
Serial.print(78) gives "78"

Serial.print(1.23456) gives "1.23"

Serial.print('N') gives "N"

Serial.print("Hello world.") gives "Hello world."

 

Serial.print(78, BIN) gives "1001110"

Serial.print(78, OCT) gives "116"

Serial.print(78, DEC) gives "78"

Serial.print(78, HEX) gives "4E"

Serial.print(1.23456, 0) gives "1"

Serial.print(1.23456, 2) gives "1.23"

Serial.print(1.23456, 4) gives "1.2345"

 

روش فراخوانی

Serial.print(val)
Serial.print(val, format)

/*
  Uses a for loop to print numbers in various formats.
*/
void setup() {
  Serial.begin(9600); // open the serial port at 9600 bps:
}

void loop() {
  // print labels
  Serial.print("NO FORMAT");  // prints a label
  Serial.print("\t");         // prints a tab

  Serial.print("DEC");
  Serial.print("\t");

  Serial.print("HEX");
  Serial.print("\t");

  Serial.print("OCT");
  Serial.print("\t");

  Serial.print("BIN");
  Serial.println();        // carriage return after the last label

  for (int x = 0; x < 64; x++) { // only part of the ASCII chart, change to suit
    // print it out in many formats:
    Serial.print(x);       // print as an ASCII-encoded decimal - same as "DEC"
    Serial.print("\t\t");  // prints two tabs to accomodate the label lenght

    Serial.print(x, DEC);  // print as an ASCII-encoded decimal
    Serial.print("\t");    // prints a tab

    Serial.print(x, HEX);  // print as an ASCII-encoded hexadecimal
    Serial.print("\t");    // prints a tab

    Serial.print(x, OCT);  // print as an ASCII-encoded octal
    Serial.print("\t");    // prints a tab

    Serial.println(x, BIN);  // print as an ASCII-encoded binary
    // then adds the carriage return with "println"
    delay(200);            // delay 200 milliseconds
  }
  Serial.println();        // prints another carriage return
}

 

 برای تست برنامه کد را کپی و در نرم افزار آردوینو کپی کنید. سپس سریال مانیتور را باز کنید.
/*
  Uses a for loop to print numbers in various formats.
*/
void setup() {
  Serial.begin(9600); // open the serial port at 9600 bps:
}

void loop() {
  // print labels
  Serial.print("NO FORMAT");  // prints a label
  Serial.print("\t");         // prints a tab

  Serial.print("DEC");
  Serial.print("\t");

  Serial.print("HEX");
  Serial.print("\t");

  Serial.print("OCT");
  Serial.print("\t");

  Serial.print("BIN");
  Serial.println();        // carriage return after the last label

  for (int x = 0; x < 64; x++) { // only part of the ASCII chart, change to suit
    // print it out in many formats:
    Serial.print(x);       // print as an ASCII-encoded decimal - same as "DEC"
    Serial.print("\t\t");  // prints two tabs to accomodate the label lenght

    Serial.print(x, DEC);  // print as an ASCII-encoded decimal
    Serial.print("\t");    // prints a tab

    Serial.print(x, HEX);  // print as an ASCII-encoded hexadecimal
    Serial.print("\t");    // prints a tab

    Serial.print(x, OCT);  // print as an ASCII-encoded octal
    Serial.print("\t");    // prints a tab

    Serial.println(x, BIN);  // print as an ASCII-encoded binary
    // then adds the carriage return with "println"
    delay(200);            // delay 200 milliseconds
  }
  Serial.println();        // prints another carriage return
}

 

چاپ و نمایش انواع اعداد در سریال مانیتور آردوینو - دیجی اسپارک

ارتباط STREAM


از Stream برای داده های کاراکتری و باینری استفاده می‌شود. این ارتباط به صورت مستقیم در برنامه نویسی فراخوانی نمی‌شود و فقط در زمان هایی که به آن نیاز است استفاده می‌شود. توسط این تابع جریان عملکردهای خواندن را در آردوینو تعریف می شود. هنگام استفاده از هرگونه عملکرد اصلی که از متد read () یا روش مشابه استفاده می کند ، می توانید با خیال راحت فرض کنید که در کلاس Stream فراخوانی می شود. کتابخانه هایی که از stream استفاده می‌کنند به صورت زیر است.

  • Serial
  • Wire
  • Ethernet
  • SD

 


وسایل مورد نیاز


آردوینو 

همین!

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۲ دیدگاه