ارتباط سریال به آردوینو شما امکان می دهد با دستگاه های دیگر صحبت کند. نحوه اتصال و کدنویسی آنها را با استفاده از هر یک از چهار پروتکل کشف کنید.
هنگام کار بر روی پروژههای بزرگ آردوینو، کاملاً معمول است که پینهای موجود برای اتصال قطعات تمام شود. فرض کنید میخواهید چندین حسگر/عملگر را با نیاز فوری به حفظ پینهای اضافی برای تغذیه یک ماژول نمایشگر تشنه پین وصل کنید.
مگر اینکه شما کار جادویی انجام دهید، گاهی اوقات سخت است که همه این اتصالات را روی یک برد آردوینو انجام دهید – به خصوص زمانی که تصمیم می گیرید از بردهای کوچکتر استفاده کنید زیرا برای فضا تحت فشار هستید. آن وقت است که ارتباط سریال وارد عمل می شود.
بیایید بررسی کنیم که ارتباط سریال چیست و چگونه میتوانید آن را با آردوینو برای کارهایی مانند پردازش توزیع شده و ادغام عمومی تنظیم کنید.
ارتباط سریال چیست؟
ارتباط سریال روشی برای ارسال و دریافت داده بین دو یا چند دستگاه الکترونیکی، یک بیت در یک زمان از طریق یک خط ارتباطی واحد است. همانطور که از نام پیداست، داده ها به صورت “سری” ارسال می شوند.
حتی اگر بتوانید طرح ها را روی برد آردوینو مورد علاقه خود آپلود کنید، از ارتباط سریال از طریق USB استفاده می کند.
پروتکل های ارتباطی سریال در آردوینو
بردهای آردوینو فوق العاده همه کاره هستند و می توانند با طیف وسیعی از دستگاه ها ارتباط برقرار کنند. آنها از چهار پروتکل ارتباطی سریال پشتیبانی می کنند: سریال نرم، SPI (رابط محیطی سریال)، UART استاندارد (گیرنده-فرستنده ناهمزمان جهانی)، و I2C (مدار یکپارچه). برای جزئیات بیشتر، راهنمای جامع ما در مورد نحوه عملکرد ارتباطات سریال UART، SPI و I2C را بررسی کنید.
این آموزش از طرحهای اولیه استفاده میکند تا نشان دهد چگونه میتوانید با استفاده از پروتکلهای مختلف، یک اتصال سریال بین دو برد Arduino Uno برقرار کنید. کد را مطابق با نیازهای خاص خود تطبیق دهید.
SPI (رابط سریالی جانبی)
SPI یک پروتکل ارتباطی سریال همزمان است که امکان برقراری ارتباط با سرعت بالا بین میکروکنترلرها و دستگاه های جانبی را فراهم می کند. این پروتکل برای ارتباط به چهار سیم نیاز دارد: SCK (ساعت سریال)، MOSI (Master Out Slave In)، MISO (Master In Slave Out) و SS (Slave Select).
کتابخانه SPI.h برای این نوع ارتباط بسیار مفید است و باید در بالای طرح شما گنجانده شود.
#include <SPI.h>
در اینجا پین های SPI روی برد Arduino Uno آمده است:
تابع
شماره پین (دیجیتال)
شماره پین (سربرگ ICSP)
MOS
11
میسو
12
SCK
13
اس اس
10 (پیش فرض)
1 (جایگزین)
پس از راه اندازی ارتباط سریال، باید پین های ارتباطی را پیکربندی کنید.
void setup() {
SPI.begin(115200);
// Set pin modes for SS, MOSI, MISO, and SCK
pinMode(SS, OUTPUT);
pinMode(MOSI, OUTPUT);
pinMode(MISO, INPUT);
pinMode(SCK, OUTPUT);
// Set slave select (SS) pin high to disable the slave device
digitalWrite(SS, HIGH);
}
سیگنال SS برای اطلاع از زمان انتقال داده به دستگاه برده استفاده می شود.
// Select the slave
digitalWrite(SS, LOW);
// Send data to the slave device
SPI.transfer(data);
// Deselect the slave device
digitalWrite(SS, HIGH);
در اینجا نحوه اتصال دو برد آردوینو با استفاده از SPI آورده شده است.
کد برای تخته اصلی:
#include <SPI.h>
const int slaveSelectPin = 10;
void setup() {
SPI.begin(115200);
pinMode(slaveSelectPin, OUTPUT);
}
void loop() {
digitalWrite(slaveSelectPin, LOW);
SPI.transfer('H');
digitalWrite(slaveSelectPin, HIGH);
delay(1000);
}
کد برای برد برده:
#include <SPI.h>
const int slaveSelectPin = 10;
void setup() {
SPI.begin(115200);
pinMode(slaveSelectPin, OUTPUT);
}
void loop() {
if (digitalRead(slaveSelectPin) == LOW) {
char receivedData = SPI.transfer('L');
Serial.println(receivedData);
}
}
اطمینان حاصل کنید که دستگاه های شما برای پیکربندی مناسب دارای یک زمینه مشترک هستند.
UART (گیرنده-فرستنده ناهمزمان جهانی)
UART یک پروتکل ارتباطی سریال ناهمزمان است که امکان ارتباط بین دستگاهها را تنها با استفاده از دو سیم میدهد: TX (Transmit) و RX (دریافت). UART معمولاً برای ارتباط با دستگاه هایی مانند ماژول های GPS، ماژول های بلوتوث و سایر میکروکنترلرها استفاده می شود. هر برد آردوینو حداقل به یک پورت برای UART مجهز است.
پین های UART در بردهای محبوب آردوینو عبارتند از:
هیئت مدیره
پین های سریال
پین های سریال 1
پین سریال 2
پین سریال 3
اونو، نانو، مینی
0 (RX)، 1 (TX)
N/A
N/A
N/A
عظیم
0 (RX)، 1 (TX)
19 (RX)، 18 (TX)
17 (RX)، 16 (TX)
15 (RX)، 14 (TX)
می توانید جدول کامل را از مستندات آنلاین آردوینو در مورد ارتباط سریال دریافت کنید.
ابتدا بردهای خود را به این صورت وصل کنید:
سپس از این کد برای برد فرستنده استفاده کنید:
void setup() {
Serial.begin(9600);
}
void loop() {
// Send a message over serial every second
Serial.println("Hello from the sender board!");
delay(1000);
}
کد برای برد گیرنده:
void setup() {
Serial.begin(9600);
}
void loop() {
// Check if there is any incoming data
if (Serial.available() > 0) {
// Read the incoming data and print it to the serial monitor
String incomingData = Serial.readString();
Serial.println(incomingData);
}
}
Arduino Uno در سطح منطقی 5 ولت کار می کند در حالی که پورت RS232 رایانه از سطح منطقی +/-12 ولت استفاده می کند.
اتصال مستقیم Arduino Uno به پورت RS232 می تواند و به برد شما آسیب برساند.
I2C (مدار یکپارچه)
I2C یک پروتکل ارتباطی سریال همزمان است که امکان ارتباط بین چندین دستگاه را تنها با استفاده از دو سیم SDA (داده سریال) و SCL (ساعت سریال) می دهد. I2C معمولاً برای ارتباط با حسگرها، EEPROM ها و سایر دستگاه هایی که نیاز به انتقال داده در فواصل کوتاه دارند استفاده می شود.
پین های I2C در آردوینو Uno SDA (A4) و SCL (A5) هستند.
ما یک برنامه ساده برای برقراری ارتباط بین دو برد آردوینو با استفاده از ارتباط I2C ایجاد خواهیم کرد. اما ابتدا بردهای خود را به این صورت وصل کنید:
کد برای تخته اصلی:
#include <Wire.h>
void setup() {
Wire.begin(); // join I2C bus as master
Serial.begin(9600);
}
void loop() {
Wire.beginTransmission(9); // transmit to slave device with address 9
Wire.write('a'); // sends 'a' byte to slave device
Wire.endTransmission(); // stop transmitting
delay(500);
}
کد برای برد برده:
#include <Wire.h>
void setup() {
Wire.begin(9); // join I2C bus as a slave with address 9
Wire.onReceive(receiveEvent);
Serial.begin(9600);
}
void loop() {
delay(100);
}
void receiveEvent(int bytes) {
while(Wire.available()) { // loop through all received bytes
char receivedByte = Wire.read(); // read each byte received
Serial.println(receivedByte); // print received byte on serial monitor
}
}
SoftwareSerial چیست؟
کتابخانه نرم افزار سری آردوینو برای تقلید از ارتباطات UART ایجاد شده است که امکان ارتباط سریال از طریق هر دو پین دیجیتال روی بردهای آردوینو را فراهم می کند. هنگامی که سخت افزار UART در حال حاضر توسط دستگاه های دیگر استفاده می شود مفید است.
برای راه اندازی SoftwareSerial، ابتدا کتابخانه SoftwareSerial را در طرح قرار دهید.
#include <SoftwareSerial.h>
سپس یک نمونه از شی SoftwareSerial را با تعیین پین های RX و TX ایجاد کنید تا برای ارتباط استفاده شود.
SoftwareSerial mySerial(2, 3); // RX, TX pins
در اینجا یک کد مثال برای آردوینو آمده است که استفاده از SoftwareSerial را نشان می دهد:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX pins
void setup() {
Serial.begin(9600); // start hardware serial
mySerial.begin(9600); // start soft serial
}
void loop() {
if (mySerial.available()) {
Serial.write(mySerial.read()); // send received data to hardware serial
}
if (Serial.available()) {
mySerial.write(Serial.read()); // send data from hardware serial to soft serial
}
}
کتابخانه سریال
Serial library یک ابزار قدرتمند در آردوینو است که امکان ارتباط بین میکروکنترلر و کامپیوتر یا دستگاه های دیگر را از طریق اتصال سریال فراهم می کند. برخی از توابع رایج عبارتند از:
تابع
شرح
Serial.begin (سرعت)
ارتباط سریال را با نرخ داده مشخص شده راه اندازی می کند.
Serial.print (داده)
داده ها را برای انتقال به صورت متن ASCII به پورت سریال می فرستد.
Serial.write (داده)
داده های باینری خام را روی پورت سریال ارسال می کند.
Serial.available()
تعداد بایت های موجود برای خواندن از بافر سریال را برمی گرداند.
Serial.flush()
قبل از ادامه، منتظر می ماند تا داده های سریال خروجی کامل شود.
Serial.read()
اولین بایت داده سریال ورودی را می خواند و آن را به صورت یک عدد صحیح برمی گرداند.
نرخ باود و فرمت داده سریال
نرخ باود به سرعت انتقال داده از طریق اتصال سریال اشاره دارد. نشان دهنده تعداد بیت هایی است که در هر ثانیه ارسال می شود. نرخ باود باید در هر دو دستگاه فرستنده و گیرنده یکسان تنظیم شود، در غیر این صورت ممکن است ارتباط مختل شود یا اصلاً کار نکند. نرخ باود رایج برای آردوینو شامل 9600، 19200، 38400 و 115200 است.
فرمت داده سریال به ساختار داده هایی که از طریق اتصال سریال ارسال می شود اشاره دارد. سه جزء اصلی برای قالب داده سریال وجود دارد: بیت های شروع، بیت های داده و بیت های پایان.
- بیت های داده: تعداد بیت هایی که برای نمایش یک بایت داده استفاده می شود.
- Parity: یک بیت اختیاری که برای بررسی خطا استفاده می شود. بسته به نیاز کانال ارتباطی می توان آن را روی هیچ، زوج یا برابری فرد تنظیم کرد.
- Stop Bit: تعداد بیت هایی که برای علامت دادن به پایان یک بایت داده استفاده می شود.
فرمت داده باید در هر دو دستگاه فرستنده و گیرنده یکسان باشد تا از ارتباط مناسب اطمینان حاصل شود. در اینجا مثالی از نحوه تنظیم فرمت های داده خاص آورده شده است:
void setup() {
// Set up serial communication with 9600 baud rate, 8 data bits, no parity, and 1 stop bit
Serial.begin(9600, SERIAL_8N1);
}
در اینجا، SERIAL_8N1 فرمت داده را با 8 بیت داده، بدون برابری و 1 بیت توقف نشان می دهد. بسته به نیازهای خاص پروژه می توان از گزینه های دیگری مانند SERIAL_7E1، SERIAL_8O2 و غیره استفاده کرد.
گفتگوی سریالی
بردهای آردوینو گزینههای ارتباط سریالی مختلفی را ارائه میکنند که امکان تبادل دادههای کارآمد و قابل اعتماد بین دستگاهها را فراهم میکند. با درک نحوه تنظیم پروتکل های ارتباطی سریال در Arduino IDE، می توانید از قدرت پردازش توزیع شده استفاده کنید یا تعداد سیم های مورد استفاده در پروژه های خود را به میزان زیادی کاهش دهید.