Komunikasi serial memungkinkan Arduino Anda untuk berbicara dengan perangkat lain. Temukan cara menghubungkan dan mengkodekannya menggunakan salah satu dari empat protokol.
Saat mengerjakan proyek Arduino besar, cukup umum kehabisan pin yang tersedia untuk menghubungkan komponen. Katakanlah Anda ingin menghubungkan beberapa sensor/aktuator dengan kebutuhan mendesak untuk tetap menyimpan pin ekstra untuk memberi makan modul tampilan yang haus pin.
Kecuali jika Anda melakukan sihir, terkadang sulit untuk menangani semua koneksi ini pada satu papan Arduino — terutama ketika Anda memutuskan untuk menggunakan papan yang lebih kecil karena Anda terdesak ruang. Saat itulah komunikasi serial berperan.
Mari jelajahi apa itu komunikasi serial dan cara Anda mengaturnya dengan Arduino untuk tugas-tugas seperti pemrosesan terdistribusi dan integrasi umum.
Apa itu Komunikasi Serial?
Komunikasi serial adalah metode pengiriman dan penerimaan data antara dua atau lebih perangkat elektronik, satu bit pada satu waktu melalui satu jalur komunikasi. Seperti namanya, data dikirim dalam "series".
Bahkan hanya dengan mengunggah sketsa ke papan Arduino favorit Anda menggunakan komunikasi serial melalui USB.
Protokol Komunikasi Serial pada Arduino
Papan Arduino sangat serbaguna dan dapat berkomunikasi dengan berbagai perangkat. Mereka mendukung empat protokol komunikasi serial: Soft Serial, SPI (Serial Peripheral Interface), standar UART (Universal Asynchronous Receiver-Transmitter), dan I2C (Inter-Integrated Circuit). Untuk detail lebih lanjut, lihat panduan komprehensif kami di bagaimana komunikasi serial UART, SPI, dan I2C bekerja.
Tutorial ini menggunakan sketsa dasar untuk menunjukkan bagaimana Anda dapat mengatur koneksi serial antara dua papan Arduino Uno menggunakan berbagai protokol. Sesuaikan kode untuk memenuhi kebutuhan spesifik Anda.
SPI (Antarmuka Periferal Serial)
SPI adalah protokol komunikasi serial sinkron yang memungkinkan komunikasi berkecepatan tinggi antara mikrokontroler dan perangkat periferal. Protokol ini membutuhkan empat kabel untuk komunikasi: SCK (Jam Seri), MOSI (Kuasai Budak Masuk), SUP KEDELAI JEPANG (Master In Slave Out), dan SS (Pilih Budak).
Itu SPI.h perpustakaan sangat berguna untuk jenis komunikasi ini dan harus disertakan di bagian atas sketsa Anda.
#termasuk
Berikut adalah pin SPI pada board Arduino Uno:
Fungsi |
Nomor Pin (Digital) |
Nomor Pin (Tajuk ICSP) |
---|---|---|
MOS |
11 |
4 |
SUP KEDELAI JEPANG |
12 |
1 |
SCK |
13 |
3 |
SS |
10 (Bawaan) |
1 (Alternatif) |
Setelah menginisialisasi komunikasi serial, Anda harus mengonfigurasi pin komunikasi.
ruang kosongmempersiapkan(){
SPI.mulai(115200);
// Atur mode pin untuk SS, MOSI, MISO, dan SCK
pinMode(SS, KELUARAN);
pinMode(MOSI, KELUARAN);
pinMode(SUP KEDELAI JEPANG, MEMASUKKAN);
pinMode(SCK, KELUARAN);
// Tetapkan pin slave select (SS) tinggi untuk menonaktifkan perangkat slave
digitalWrite(SS, TINGGI);
}
Sinyal SS digunakan untuk memberi tahu perangkat budak saat data sedang ditransfer.
// Pilih budak
digitalWrite(SS, RENDAH);// Kirim data ke perangkat budak
SPI.transfer(data);
// Batalkan pilihan perangkat budak
digitalWrite(SS, TINGGI);
Berikut cara menghubungkan dua board Arduino menggunakan SPI.
Kode untuk papan utama:
#termasuk
constint slaveSelectPin = 10;
ruang kosongmempersiapkan(){
SPI.mulai(115200);
pinMode(slaveSelectPin, KELUARAN);
}
ruang kosonglingkaran(){
digitalWrite(slaveSelectPin, RENDAH);
SPI.transfer('H');
digitalWrite(slaveSelectPin, TINGGI);
menunda(1000);
}
Kode untuk papan budak:
#termasuk
constint slaveSelectPin = 10;
ruang kosongmempersiapkan(){
SPI.mulai(115200);
pinMode(slaveSelectPin, KELUARAN);
}
ruang kosonglingkaran(){
jika (digitalRead(slaveSelectPin) == RENDAH) {
arang Data yang diterima = SPI.transfer('L');
Serial.println(Data yang diterima);
}
}
Pastikan perangkat Anda memiliki landasan yang sama untuk konfigurasi yang tepat.
UART (Universal Asynchronous Receiver-Transmitter)
UART adalah protokol komunikasi serial asinkron yang memungkinkan komunikasi antar perangkat hanya menggunakan dua kabel: TX (Transmit) dan RX (Receive). UART biasa digunakan untuk komunikasi dengan perangkat seperti modul GPS, modul Bluetooth, dan mikrokontroler lainnya. Setiap papan Arduino dilengkapi dengan setidaknya satu port untuk UART.
Pin UART pada papan Arduino populer meliputi:
Papan |
Pin Seri |
Pin Seri1 |
Serial2 Pin |
Seri3 Pin |
---|---|---|---|---|
Uno, Nano, Mini |
0 (RX), 1 (TX) |
T/A |
T/A |
T/A |
Mega |
0 (RX), 1 (TX) |
19 (RX), 18 (TX) |
17 (RX), 16 (TX) |
15 (RX), 14 (TX) |
Anda bisa mendapatkan tabel lengkap dari Dokumentasi online Arduino tentang komunikasi serial.
Pertama, hubungkan papan Anda seperti ini:
Kemudian gunakan kode ini untuk papan pengirim:
ruang kosongmempersiapkan(){
Serial.mulai(9600);
}
ruang kosonglingkaran(){
// Kirim pesan melalui serial setiap detik
Serial.println("Halo dari papan pengirim!");
menunda(1000);
}
Kode untuk papan penerima:
ruang kosongmempersiapkan(){
Serial.mulai(9600);
}
ruang kosonglingkaran(){
// Periksa apakah ada data yang masuk
jika (Serial.tersedia() > 0) {
// Baca data yang masuk dan cetak ke monitor serial
Rangkaian Data masuk = Serial.readString();
Serial.println(Data masuk);
}
}
Arduino Uno beroperasi pada level logika 5V sementara port RS232 komputer menggunakan level logika +/-12V.
Menghubungkan Arduino Uno secara langsung ke port RS232 dapat dan akan merusak papan Anda.
I2C (Inter-Integrated Circuit)
I2C adalah protokol komunikasi serial sinkron yang memungkinkan komunikasi antara beberapa perangkat hanya menggunakan dua kabel: SDA (Serial Data) dan SCL (Serial Clock). I2C umumnya digunakan untuk komunikasi dengan sensor, EEPROM, dan perangkat lain yang perlu mentransfer data dalam jarak pendek.
Pin I2C pada Arduino Uno adalah SDA (A4) Dan SCL (A5).
Kami akan membuat program sederhana untuk membuat koneksi antara dua papan Arduino menggunakan komunikasi I2C. Tapi pertama-tama, hubungkan papan Anda seperti ini:
Kode untuk papan utama:
#termasuk
ruang kosongmempersiapkan(){
Kabel.mulai(); // bergabung dengan bus I2C sebagai master
Serial.mulai(9600);
}ruang kosonglingkaran(){
Kabel.beginTransmission(9); // kirim ke perangkat budak dengan alamat 9
Kabel.menulis('A'); // mengirim byte 'a' ke perangkat slave
Kabel.endTransmission(); // hentikan transmisi
menunda(500);
}
Kode untuk papan budak:
#termasuk
ruang kosongmempersiapkan(){
Kabel.mulai(9); // bergabung dengan bus I2C sebagai budak dengan alamat 9
Kabel.onReceive(menerimaAcara);
Serial.mulai(9600);
}ruang kosonglingkaran(){
menunda(100);
}
ruang kosongterimaAcara(int byte){
ketika(Kabel.tersedia()) { // mengulang semua byte yang diterima
arang menerimaByte = Kabel.membaca(); // baca setiap byte yang diterima
Serial.println(receivedByte); // cetak byte yang diterima pada monitor serial
}
}
Apa itu SoftwareSerial?
Perpustakaan Arduino SoftwareSerial dikembangkan untuk meniru komunikasi UART, memungkinkan komunikasi serial melalui dua pin digital pada papan Arduino. Ini berguna ketika perangkat keras UART sudah digunakan oleh perangkat lain.
Untuk menyiapkan SoftwareSerial, pertama-tama sertakan pustaka SoftwareSerial dalam sketsa.
#termasuk
Kemudian buat instance objek SoftwareSerial dengan menentukan RX Dan TX pin yang akan digunakan untuk komunikasi.
SoftwareSerialmySerial(2, 3); // Pin RX, TX
Berikut adalah contoh kode untuk Arduino yang menunjukkan penggunaan SoftwareSerial:
#termasuk
SoftwareSerialmySerial(2, 3); // Pin RX, TX
ruang kosongmempersiapkan(){
Serial.mulai(9600); // mulai serial perangkat keras
mySerial.mulai(9600); // mulai serial lunak
}
ruang kosonglingkaran(){
jika (mySerial.tersedia()) {
Serial.menulis(mySerial.membaca()); // kirim data yang diterima ke serial perangkat keras
}
jika (Serial.tersedia()) {
mySerial.menulis(Serial.membaca()); // mengirim data dari serial perangkat keras ke serial lunak
}
}
Perpustakaan Serial
Perpustakaan Serial adalah alat yang ampuh di Arduino yang memungkinkan komunikasi antara mikrokontroler dan komputer atau perangkat lain melalui koneksi serial. Beberapa fungsi umum meliputi:
Fungsi |
Keterangan |
---|---|
Serial.mulai (kecepatan) |
Menginisialisasi komunikasi serial dengan kecepatan data tertentu. |
Serial.print (data) |
Mengirim data ke port serial untuk ditransmisikan sebagai teks ASCII. |
Serial.tulis (data) |
Mengirim data biner mentah melalui port serial. |
Serial.tersedia() |
Mengembalikan jumlah byte yang tersedia untuk dibaca dari buffer serial. |
Serial.flush() |
Menunggu data serial keluar untuk menyelesaikan transmisi sebelum melanjutkan. |
Serial.baca() |
Membaca byte pertama dari data serial yang masuk dan mengembalikannya sebagai bilangan bulat. |
Baud Rate dan Format Data Serial
Baud rate mengacu pada kecepatan transfer data melalui koneksi serial. Ini mewakili jumlah bit yang ditransmisikan per detik. Kecepatan baud harus disetel sama pada perangkat pengirim dan penerima, jika tidak, komunikasi dapat kacau atau tidak berfungsi sama sekali. Tingkat baud umum untuk Arduino termasuk 9600, 19200, 38400, dan 115200.
Format data serial mengacu pada struktur data yang dikirim melalui koneksi serial. Ada tiga komponen utama untuk format data serial: bit awal, bit data, dan bit stop.
- Bit Data: Jumlah bit yang digunakan untuk mewakili satu byte data.
- Keseimbangan: Bit opsional yang digunakan untuk pemeriksaan kesalahan. Itu dapat diatur ke tidak ada, genap, atau paritas ganjil, tergantung pada persyaratan saluran komunikasi.
- Hentikan Bit: Jumlah bit yang digunakan untuk menandakan akhir dari sebuah byte data.
Format data harus sama pada perangkat pengirim dan penerima untuk memastikan komunikasi yang tepat. Berikut adalah contoh bagaimana Anda dapat mengatur format data tertentu:
ruang kosongmempersiapkan(){
// Siapkan komunikasi serial dengan 9600 baud rate, 8 bit data, tanpa paritas, dan 1 stop bit
Serial.mulai(9600, SERIAL_8N1);
}
Di Sini, SERIAL_8N1 mewakili format data dengan 8 bit data, tanpa paritas, dan 1 berhenti sedikit. Pilihan lain seperti SERIAL_7E1, SERIAL_8O2, dll., dapat digunakan tergantung pada kebutuhan spesifik proyek.
Obrolan Serial
Papan Arduino menyediakan berbagai opsi komunikasi serial yang memungkinkan pertukaran data yang efisien dan andal antar perangkat. Dengan memahami cara mengatur protokol komunikasi serial pada Arduino IDE, Anda dapat memanfaatkan kekuatan pemrosesan terdistribusi atau sangat mengurangi jumlah kabel yang digunakan dalam proyek Anda.