پروتکل های ارتباطی در آردوینو نقش اساسی در ارتباط و ارسال دیتا را برعهده دارند. به واسطه پروتکل های ارتباطی افزایش سرعت در ارسال، کاهش سیم کشی در مدار را داریم که نقاط قوت محسوب میشوند. در این آموزش به بررسی دو ارتباط Serial و Stream در آردوینو میپردازیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ارتباط Serial
برای ارتباط برد آردوینو با سایر دستگاه ها و دیوایس ها بهترین راه حل استفاده از ارتباط سریال Serial است. تمامی بردهای آردوینو حداقل یک پورت سریال را دارند و برای شروع ارتباط هیچ مانعی بر سر راه ما وجود ندارد. البته بردهایی مانند آردوینو Arduino Mega2560 از چندین پورت سریال استفاده میکنند. پایه های سریال در بردهای آردوینو ARDUINO با RX , TX مشخص شده است.
-
- برد آردوینو 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.availableForWrite()
روش فراخوانی
Serial.availableForWrite()
Serial.begin()
Serial.begin(speed) Serial.begin(speed, config)
Serial.end()
Serial.end()
Serial.find()
Serial.find(target) Serial.find(target, length)
Serial.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
وسایل مورد نیاز
همین!
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام
بابت این آموزش از شما ممنونم خیلی کامل و دقیق
با سلام
سپاس از همراهی شما کاربر گرامی
خسته نباشید ولی از کجا بفهمیم کدام سنسور i2c و spi است>
با سلام
دیتاشیت سنسورها و پایه های سنسور پروتکل ارتباطی را مشخص میکند.
قدم به قدم کامله واقعا ممنونم
با سلام
کاربر گرامی سپاس از همراهی شما
لطفا آموزش های سریال را کاملتر کنید
با سلام
در این خصوص طی چندین سال گذشته آموزش های جامعی در سایت منتشر شده است. از طریق لینک زیر بررسی کنید.
آموزش ارتباط سریال آردوینو
سلام و خسته نباشید
خیلی کامل و دقیق نوشتید.
با سلام
کاربر گرامی سپاس از همراهی شما
امیدوارم مفید واقع شده باشد.
با سلام مهندس آیا رشته آموزش های کاملتری برای درک عمیق سریال در سایت موجود است؟
با سلام
بله در این خصوص آموزش های زیر را مطالعه کنید.
بخش اول
بخش دوم
بخش سوم
بخش چهارم
بخش پنجم
سلام
برای بررسی داده ها در سریال مانیتور از کلاس های سریال میشه استفاده کرد؟
با سلام
سوال شما شفاف نیست. اما میتوانید داده ها در سریال مانیتور رصد کنید.
ممنونم مهندس پریسا
با سلام
کاربر گرامی سپاس از همراهی شما
سلام
چه زمانی از SERIAL. AVAILABLE استفاده میشه؟
با سلام
توسط تابع SERIAL. AVAILABLE یک عدد بایت کاراکتری را از سریال مانیتور میخواند که در بافر ذخیره شده است
سلام
برای استفاده از ماژول ESP با آردوینو باید از سریال استفاده کنیم؟
با سلام
بله بایستی از سریال استفاده کنید.
سلام
ارتباط سریال برای ماژل های وای فای استفاده میشه ؟
با سلام
بله یکی از قابلیت ها امکان برقراری ارتباط با ماژول های وای فای از طریق ارتباط سریال است.