آردوینو – قسمت ۳ – UART

UART چیست؟
ارتباط UART (Universal Asynchronous Receiver-Transmitter) یکی از پرکاربردترین روشهای ارتباط سریال در سیستمهای embedded است. در این مقاله، به بررسی اصول ارتباط UART، نحوه استفاده از آن در آردوینو، و اجرای یک پروژه ساده میپردازیم. UART یک پروتکل ارتباط سریال است که دادهها را به صورت بیتبهبیت بین دو دستگاه انتقال میدهد. در این روش:
- ارتباط غیرهمزمان: نیازی به سیگنال ساعت مشترک نیست و دستگاهها باید نرخ انتقال داده (Baud Rate) یکسانی داشته باشند.
تبادل داده از طریق دو خط: -
- TX (Transmit): برای ارسال داده.
- RX (Receive): برای دریافت داده.
- Single Point Communication: فقط دو دستگاه میتوانند به صورت مستقیم به یکدیگر متصل شوند.
ساختار داده: دادهها به صورت بیتبهبیت ارسال میشوند و معمولاً ساختار کلی یک فریم داده به صورت زیر است: -
- Start Bit: یک بیت که نشاندهنده شروع ارسال داده است.
- Data Bits: معمولاً بین ۵ تا ۹ بیت اطلاعات اصلی.
- Parity Bit (اختیاری): برای تشخیص خطای احتمالی.
- Stop Bit: برای پایان فریم داده (معمولاً ۱ یا ۲ بیت).
- نرخ انتقال داده (Baud Rate): سرعت انتقال داده، که به تعداد بیتهای ارسالشده در ثانیه اشاره دارد (مثلاً 9600bps).
دقت در طول کابل: -
- کابلهای طولانیتر ممکن است باعث کاهش کیفیت سیگنال شوند.
- معمولاً برای ارتباطهای کوتاه استفاده میشود.
فاصله انتقال محدود: حداکثر فاصله انتقال برای UART معمولاً چند متر است، مگر اینکه از مبدلهای خاصی مانند RS232 یا RS485 استفاده شود.
دوبلکس کامل (Full-Duplex):
- در ارتباطات معمولی، فرستنده و گیرنده میتوانند همزمان داده ارسال و دریافت کنند.
عدم تحمل نویز بالا: در محیطهای با نویز بالا، ممکن است خطا در انتقال داده رخ دهد.
سادگی در پیادهسازی: UART یکی از سادهترین پروتکلها برای پیادهسازی در سختافزار و نرمافزار است.
هماهنگی دستی: نیاز به تنظیم دستی پارامترهای ارتباطی (مانند Baud Rate، تعداد بیتهای داده و Stop Bit) بین دستگاهها.
مزایای UART
- پیادهسازی ساده و کمهزینه.
- استفاده گسترده در میکروکنترلرها و سیستمهای Embedded.
- نیازی به سیگنال کلاک مشترک ندارد.
معایب UART
- محدودیت در تعداد دستگاههای متصل (فقط دو دستگاه به صورت مستقیم).
- حساسیت به نویز و تداخل الکترومغناطیسی.
- محدودیت در سرعت انتقال داده در فواصل طولانی.
با این خصوصیات، پروتکل UART ابزاری قدرتمند و ساده برای ارتباطات سریال در پروژههای الکترونیکی است.

در اینجا نمونهای از کد برای ارسال و دریافت داده به صورت همزمان آورده شده است
void setup() {
Serial.begin(9600); // Initialize UART communication at a baud rate of 9600
}
void loop() {
// Sending data
Serial.println("Hello, UART!");
// Receiving data (if available)
if (Serial.available() > 0) { // Check if data is available in the receive buffer
String input = Serial.readString(); // Read the incoming data as a string
Serial.println("Received: " + input); // Print the received data back
}
delay(1000); // Wait for 1 second before sending the next message
}
توضیح خط به خط کد
-
تابع
setup
: این تابع فقط یکبار در ابتدای اجرای برنامه اجرا میشود. هدف آن مقداردهی اولیه تنظیمات آردوینو است.- در اینجا، ارتباط سریال با دستور
Serial.begin(9600)
مقداردهی میشود. نرخ انتقال داده ۹۶۰۰ بیت بر ثانیه تنظیم شده است که باید با دستگاه مقصد یکسان باشد.
- در اینجا، ارتباط سریال با دستور
-
تابع
loop
: این تابع به صورت مداوم اجرا میشود و وظایف اصلی برنامه را انجام میدهد. -
ارسال پیام با
Serial.println
: پیام “Hello, UART!” از طریق پین TX ارسال میشود. این دستور دادهها را به صورت سریال به دستگاه مقصد میفرستد و یک خط جدید نیز در انتهای پیام ایجاد میکند. -
بررسی داده دریافتی با
Serial.available
: این بخش از برنامه بررسی میکند که آیا دادهای برای دریافت در بافر سریال موجود است یا خیر. اگر مقدار بازگشتی بیشتر از صفر باشد، یعنی دادهای دریافت شده است. -
خواندن داده دریافتی با
Serial.readString
: دادههای موجود در بافر دریافت سریال (RX) خوانده میشود و به صورت یک رشته (String) ذخیره میگردد. -
نمایش داده دریافتی با
Serial.println
: دادهای که از دستگاه دیگر دریافت شده است، مجدداً از طریق پین TX ارسال و در مانیتور سریال نمایش داده میشود. این کار معمولاً برای تست ارتباط یا ارسال تأییدیه مفید است. -
تأخیر یک ثانیهای با
delay
: برنامه به مدت یک ثانیه متوقف میشود تا ارسال پیام بعدی با فاصله زمانی معین انجام شود.
نتیجه
این کد، ارتباط سریال دوطرفه (Full-Duplex) را بین آردوینو و دستگاه دیگر شبیهسازی میکند. آردوینو به طور مداوم پیام ارسال میکند و در صورت دریافت داده، آن را نمایش میدهد. این برنامه برای درک اصول اولیه ارتباط UART بسیار مناسب است.
دیدگاهتان را بنویسید