Seri iletişim, Arduino'nuzun diğer cihazlarla konuşmasını sağlar. Dört protokolden herhangi birini kullanarak bunları nasıl bağlayacağınızı ve kodlayacağınızı keşfedin.

Büyük Arduino projeleri üzerinde çalışırken, bileşenleri bağlamak için mevcut pinlerin tükenmesi oldukça yaygındır. Diyelim ki birden çok sensörü/aktüatörü bağlamak istiyorsunuz ve bunun için çok fazla iğneye aç bir ekran modülünü beslemek üzere fazladan pimleri korumaya acil ihtiyaç duyuyorsunuz.

Biraz sihir yapmadığınız sürece, tüm bu bağlantıları tek bir Arduino kartında halletmek bazen zordur - özellikle de yeriniz kısıtlı olduğu için daha küçük panolar kullanmaya karar verdiğinizde. İşte o zaman seri iletişim devreye giriyor.

Seri iletişimin ne olduğunu ve bunu dağıtılmış işleme ve genel entegrasyon gibi görevler için Arduino ile nasıl kurabileceğinizi keşfedelim.

Seri İletişim Nedir?

Seri iletişim, iki veya daha fazla elektronik cihaz arasında tek bir iletişim hattı üzerinden her seferinde bir bit olmak üzere veri gönderip alma yöntemidir. Adından da anlaşılacağı gibi, veriler "seri" olarak gönderiliyor".

instagram viewer

En sevdiğiniz Arduino kartına eskizleri yükleyebilmek bile USB üzerinden seri iletişim kullanır.

Arduino Üzerinde Seri İletişim Protokolleri

Arduino kartları inanılmaz derecede çok yönlüdür ve çok çeşitli cihazlarla iletişim kurabilir. Dört seri iletişim protokolünü desteklerler: Yumuşak Seri, SPI (Seri Çevresel Arayüz), standart UART (Evrensel Eşzamansız Alıcı-Verici) ve I2C (Entegre Devre). Daha fazla ayrıntı için kapsamlı kılavuzumuza göz atın. UART, SPI ve I2C seri iletişiminin nasıl çalıştığı.

Bu öğretici, çeşitli protokoller kullanarak iki Arduino Uno kartı arasında nasıl seri bağlantı kurabileceğinizi göstermek için temel çizimler kullanır. Kodu, özel gereksinimlerinizi karşılayacak şekilde uyarlayın.

SPI (Seri Çevresel Arayüz)

SPI, mikrodenetleyiciler ve çevresel cihazlar arasında yüksek hızlı iletişime izin veren senkron bir seri iletişim protokolüdür. Bu protokol, iletişim için dört kablo gerektirir: SCK (Seri Saat), MOSİ (Master Çıkış Köle Girişi), MİSO (Master Giriş Köle Çıkışı) ve SS (Köle Seçimi).

bu SPI.h kütüphane bu tür iletişim için çok kullanışlıdır ve çiziminizin en üstüne dahil edilmelidir.

#katmak

İşte Arduino Uno kartındaki SPI pinleri:

İşlev

Pin Numarası (Dijital)

Pin Numarası (ICSP Başlığı)

MOS

11

4

MİSO

12

1

SCK

13

3

SS

10 (Varsayılan)

1 (Alternatif)

Seri iletişimi başlattıktan sonra, iletişim pinlerini yapılandırmanız gerekecektir.

geçersizkurmak(){
SPI.başlamak(115200);
// SS, MOSI, MISO ve SCK için pin modlarını ayarlayın
pinModu(SS, ÇIKTI);
pinModu(MOSİ, ÇIKTI);
pinModu(MİSO, GİRİŞ);
pinModu(SCK, ÇIKTI);

// Köle cihazı devre dışı bırakmak için köle seçme (SS) pimini yükseğe ayarlayın
dijital Yazma(SS, YÜKSEK);
}

SS sinyali, bağımlı cihaza verilerin ne zaman aktarıldığını bildirmek için kullanılır.

// Köleyi seç
dijital Yazma(SS, DÜŞÜK);

// Köle cihaza veri gönder
SPI.Aktar(veri);

// Bağımlı aygıtın seçimini kaldırın
dijital Yazma(SS, YÜKSEK);

SPI kullanarak iki Arduino kartını nasıl bağlayacağınız aşağıda açıklanmıştır.

Ana kart için kod:

#katmak
sabitint slaveSelectPin = 10;
geçersizkurmak(){
SPI.başlamak(115200);
pinModu(slaveSelectPin, ÇIKTI);
}

geçersizdöngü(){
dijital Yazma(slaveSelectPin, DÜŞÜK);
SPI.Aktar('H');
dijital Yazma(slaveSelectPin, YÜKSEK);
gecikme(1000);
}

Bağımlı kartın kodu:

#katmak
sabitint slaveSelectPin = 10;
geçersizkurmak(){
SPI.başlamak(115200);
pinModu(slaveSelectPin, ÇIKTI);
}

geçersizdöngü(){
eğer (dijitalOkuma(slaveSelectPin) == DÜŞÜK) {
karakter alınanVeri = SPI.Aktar('L');
Seri.yazdır(Alınan veri);
}
}

Uygun konfigürasyon için cihazlarınızın ortak bir zemini paylaştığından emin olun.

UART (Evrensel Asenkron Alıcı-Verici)

UART, yalnızca iki kablo kullanan cihazlar arasında iletişime izin veren eşzamansız bir seri iletişim protokolüdür: TX (İletim) ve RX (Alım). UART, GPS modülleri, Bluetooth modülleri ve diğer mikrodenetleyiciler gibi cihazlarla iletişim için yaygın olarak kullanılır. Her Arduino kartı, UART için en az bir bağlantı noktası ile donatılmıştır.

Popüler Arduino kartlarındaki UART pinleri şunları içerir:

Pano

Seri Pinler

Seri1 Pinleri

Seri2 Pinleri

Seri3 Pinleri

Uno, Nano, Mini

0 (RX), 1 (TX)

Yok

Yok

Yok

Mega

0 (RX), 1 (TX)

19 (RX), 18 (TX)

17 (RX), 16 (TX)

15 (RX), 14 (TX)

Tablonun tamamına adresinden ulaşabilirsiniz. Arduino'nun çevrimiçi belgeleri Seri iletişim hakkında.

İlk olarak, panolarınızı şu şekilde bağlayın:

Ardından, gönderici panosu için bu kodu kullanın:

geçersizkurmak(){
Seri.başlamak(9600);
}

geçersizdöngü(){
// Saniyede bir seri üzerinden mesaj gönder
Seri.yazdır("Gönderici panosundan merhaba!");
gecikme(1000);
}

Alıcı kartı için kod:

geçersizkurmak(){
Seri.başlamak(9600);
}

geçersizdöngü(){
// Gelen veri olup olmadığını kontrol edin
eğer (Seri.mevcut() > 0) {
// Gelen datayı oku ve seri monitöre yazdır
Sicim gelenVeri = Seri.okuma dizesi();
Seri.yazdır(gelen Veriler);
}
}

Arduino Uno, 5V mantık seviyesinde çalışırken, bir bilgisayarın RS232 portu +/- 12V mantık seviyesi kullanır.

Bir Arduino Uno'yu doğrudan bir RS232 portuna bağlamak kartınıza zarar verebilir ve verecektir.

I2C (Entegre Devre)

I2C, yalnızca iki kablo kullanarak birden fazla cihaz arasında iletişime izin veren senkron bir seri iletişim protokolüdür: SDA (Seri Veri) ve SCL (Seri Saat). I2C, kısa mesafelerde veri aktarması gereken sensörler, EEPROM'lar ve diğer cihazlarla iletişim için yaygın olarak kullanılır.

Arduino Uno üzerindeki I2C pinleri SDA (A4) Ve SCL (A5).

I2C iletişimini kullanarak iki Arduino kartı arasında bağlantı kurmak için basit bir program oluşturacağız. Ama önce panolarınızı şu şekilde bağlayın:

Ana kart için kod:

#katmak
geçersizkurmak(){
Tel.başlamak(); // I2C veriyoluna ana olarak katılın
Seri.başlamak(9600);
}

geçersizdöngü(){
Tel.iletim başla(9); // 9 adresi ile bağımlı cihaza ilet
Tel.yazmak('A'); // bağımlı cihaza 'a' bayt gönderir
Tel.bitiş İletimi(); // iletimi durdur

gecikme(500);
}

Bağımlı kartın kodu:

#katmak
geçersizkurmak(){
Tel.başlamak(9); // I2C veriyoluna 9 adresi ile bağımlı olarak katılın
Tel.alındığında(alma Olayı);
Seri.başlamak(9600);
}

geçersizdöngü(){
gecikme(100);
}

geçersizalmaEtkinliği(int bayt){
sırasında(Tel.mevcut()) { // alınan tüm baytlarda döngü
karakter alınanByte = Tel.Okumak(); // alınan her baytı oku
Seri.yazdır(alınanByte); // alınan baytı seri monitörde yazdır
}
}

SoftwareSerial nedir?

Arduino SoftwareSerial kitaplığı, UART iletişimini taklit etmek için geliştirildi ve Arduino kartlarındaki herhangi iki dijital pin aracılığıyla seri iletişime izin verdi. Donanım UART'ı zaten başka cihazlar tarafından kullanılıyorsa kullanışlıdır.

SoftwareSerial'ı ayarlamak için önce çizime SoftwareSerial kitaplığını dahil edin.

#katmak

Ardından, şunu belirterek SoftwareSerial nesnesinin bir örneğini oluşturun: RX Ve Teksas iletişim için kullanılacak pinler.

YazılımSeriserim(2, 3); // RX, TX pinleri

Arduino için SoftwareSerial kullanımını gösteren örnek bir kod:

#katmak
YazılımSeriserim(2, 3); // RX, TX pinleri
geçersizkurmak(){
Seri.başlamak(9600); // donanım serilerini başlat
serim.başlamak(9600); // yumuşak seriyi başlat
}

geçersizdöngü(){
eğer (Serilerim.mevcut()) {
Seri.yazmak(Serilerim.Okumak()); // alınan verileri donanım seri numarasına gönder
}
eğer (Seri.mevcut()) {
serim.yazmak(Seri.Okumak()); // donanım serisinden yazılım seriye veri gönder
}
}

Seri Kitaplık

Seri kütüphane, Arduino'da mikrodenetleyici ile bir bilgisayar veya diğer cihazlar arasında seri bağlantı yoluyla iletişime izin veren güçlü bir araçtır. Bazı yaygın işlevler şunları içerir:

İşlev

Tanım

Serial.begin (hız)

Belirli bir veri hızıyla seri iletişimi başlatır.

Serial.print (veri)

Verileri ASCII metni olarak iletilmek üzere seri bağlantı noktasına gönderir.

Serial.write (veri)

Seri port üzerinden ham ikili veri gönderir.

Seri.kullanılabilir()

Seri arabellekten okunabilecek bayt sayısını döndürür.

Seri.flush()

Devam etmeden önce giden seri verinin iletimi tamamlamasını bekler.

Serial.read()

Gelen seri verinin ilk baytını okur ve tamsayı olarak döndürür.

Baud Hızı ve Seri Veri Formatı

Baud hızı, verilerin seri bağlantı üzerinden aktarılma hızını ifade eder. Saniyede iletilen bit sayısını temsil eder. Baud hızı hem gönderici hem de alıcı cihazlarda aynı olarak ayarlanmalıdır, aksi takdirde iletişim bozulabilir veya hiç çalışmayabilir. Arduino için ortak baud hızları 9600, 19200, 38400 ve 115200'ü içerir.

Seri veri formatı, seri bağlantı üzerinden gönderilen verilerin yapısını ifade eder. Seri veri formatının üç ana bileşeni vardır: başlangıç ​​bitleri, veri bitleri ve durdurma bitleri.

  • Veri bitleri: Tek bir veri baytını temsil etmek için kullanılan bit sayısı.
  • parite: Hata denetimi için kullanılan isteğe bağlı bir bit. İletişim kanalının gereksinimlerine bağlı olarak hiçbiri, çift veya tek eşlik olarak ayarlanabilir.
  • Durdurma Bitleri: Bir veri baytının sonunu bildirmek için kullanılan bit sayısı.

Doğru iletişimi sağlamak için veri formatının hem verici hem de alıcı cihazlarda aynı olması gerekir. Aşağıda, belirli veri biçimlerini nasıl ayarlayabileceğinize bir örnek verilmiştir:

geçersizkurmak(){
// 9600 baud hızı, 8 veri biti, eşliksiz ve 1 durdurma biti ile seri iletişim kurun
Seri.başlamak(9600, SERİ_8N1);
}

Burada, SERİ_8N1 ile veri biçimini temsil eder 8 veri bitleri, eşlik yok ve 1 biraz dur gibi diğer seçenekler SERİ_7E1, SERİ_8O2, vb., projenin özel gereksinimlerine bağlı olarak kullanılabilir.

seri konuşma

Arduino kartları, cihazlar arasında verimli ve güvenilir veri alışverişine izin veren çeşitli seri iletişim seçenekleri sunar. Arduino IDE'de seri iletişim protokollerinin nasıl kurulacağını anlayarak, dağıtılmış işlemenin gücünden yararlanabilir veya projelerinizde kullanılan kablo sayısını büyük ölçüde azaltabilirsiniz.