İçindekiler:

Arduino Seri Haberleşme: 5 Adım
Arduino Seri Haberleşme: 5 Adım

Video: Arduino Seri Haberleşme: 5 Adım

Video: Arduino Seri Haberleşme: 5 Adım
Video: MİKRODENETLEYİCİLER - Ders 11: Arduino Analog Giriş İşlemleri, Seri Haberleşme, Virtual Simulator 2024, Temmuz
Anonim
Arduino Seri Haberleşme
Arduino Seri Haberleşme

Birçok Arduino projesi, birkaç Arduino arasında veri aktarımına dayanır.

İster bir RC araba, bir RC uçak inşa ediyor, ister uzaktan kumandalı bir hava istasyonu tasarlıyor olun, seri verileri bir Arduino'dan diğerine nasıl güvenilir bir şekilde aktaracağınızı bilmeniz gerekir. Ne yazık ki hobicilerin kendi projelerinde seri veri iletişimini kurmaları zordur. Bunun nedeni, seri verilerin bir bayt akışı olarak gönderilmesidir.

Bayt akışı içinde herhangi bir bağlam olmadan, verileri yorumlamak neredeyse imkansızdır. Verileri yorumlayamadan Arduino'larınız güvenilir bir şekilde iletişim kuramaz. Anahtar, standart bir seri paket tasarımı kullanarak bu bağlam verilerini bayt akışına eklemektir.

Seri paket tasarımı, paket doldurma ve paket ayrıştırma karmaşıktır ve elde edilmesi zordur. Neyse ki Arduino kullanıcıları için, tüm bu karmaşık mantığı sahne arkasında yapabilen kütüphaneler var, böylece projenizi fazladan baş ağrısı olmadan çalışmaya odaklanabilirsiniz. Bu Eğitilebilir Tablo, seri paket işleme için SerialTransfer.h kitaplığını kullanacaktır.

Kısacası: bu Eğitilebilir Tablo, SerialTransfer.h kitaplığını kullanarak herhangi bir projede sağlam seri verileri nasıl kolayca uygulayabileceğinizi gözden geçirecektir. Sağlam seri iletişim üzerine düşük seviyeli teori hakkında daha fazla bilgi edinmek istiyorsanız, bu eğiticiye bakın.

Gereçler

  • 2 Arduino

    Birden fazla donanım UART'ına (yani Arduino Mega) sahip Arduino'ları kullanmanız şiddetle tavsiye edilir

  • Bağlantı teli
  • SerialTransfer.h'yi yükleyin

    Arduino IDE'nin Kütüphaneler Yöneticisi aracılığıyla erişilebilir

Adım 1: Fiziksel Bağlantılar

Fiziksel Bağlantılar
Fiziksel Bağlantılar

Seri iletişimi kullanırken, birkaç kablolama noktasının akılda tutulması gerekir:

  • Tüm topraklamaların bağlı olduğundan emin olun!
  • Arduino TX (İletim) pininin diğer Arduino'nun RX (Alma) pinine bağlanması gerekiyor

Adım 2: Kitaplık Nasıl Kullanılır

Kütüphane Nasıl Kullanılır
Kütüphane Nasıl Kullanılır

SerialTransfer.h, özel bir paket protokolü kullanarak büyük miktarda veriyi kolayca göndermenizi sağlar. Aşağıda, birçoğunu bu eğitimde daha sonra kullanacağımız kitaplığın tüm özelliklerinin bir açıklaması bulunmaktadır:

SeriTransfer.txBuff

Bu, seri üzerinden gönderilecek tüm yük verilerinin iletimden önce arabelleğe alındığı bir bayt dizisidir. Bu arabelleği başka bir Arduino'ya göndermek için bayt veri ile doldurabilirsiniz.

SeriTransfer.rxBuff

Bu, diğer Arduino'dan alınan tüm yük verilerinin arabelleğe alındığı bir bayt dizisidir.

SeriTransfer.bytesOkuma

Diğer Arduino tarafından alınan ve SerialTransfer.rxBuff'ta depolanan yük baytlarının sayısı

SerialTransfer.begin(Akış &_port)

Kitaplığın sınıfının bir örneğini başlatır. Herhangi bir "Serial" sınıf nesnesini parametre olarak iletebilirsiniz - hatta "SoftwareSerial" sınıf nesnelerini bile!

SerialTransfer.sendData(const uint16_t &messageLen)

Bu, Arduino'nuzun iletim arabelleğindeki "messageLen" bayt sayısını diğer Arduino'ya göndermesini sağlar. Örneğin, "messageLen" 4 ise, SerialTransfer.txBuff'ın ilk 4 baytı seri olarak diğer Arduino'ya gönderilecektir.

SeriTransfer.mevcut()

Bu, Arduino'nuzun diğer Arduino'dan alınan tüm seri verileri ayrıştırmasını sağlar. Bu işlev boolean "true" döndürürse, yeni bir paketin başarıyla çözümlendiği ve yeni alınan paketin verilerinin SerialTransfer.rxBuff'ta depolandığı/mevcut olduğu anlamına gelir.

SerialTransfer.txObj(const T &val, const uint16_t &len, const uint16_t &index=0)

İsteğe bağlı bir nesnenin (byte, int, float, double, struct, vb.) bayt sayısını "len" olarak "index" argümanı tarafından belirtilen dizinden başlayarak gönderme arabelleğine yerleştirir.

SerialTransfer.rxObj(const T &val, const uint16_t &len, const uint16_t &index=0)

"index" bağımsız değişkeni tarafından belirtilen dizinden başlayarak alma arabelleğinden (rxBuff) "len" bayt sayısını rastgele bir nesneye (byte, int, float, double, struct, vb…) okur.

NOT:

Veri iletmenin en kolay yolu, önce göndermek istediğiniz tüm verileri içeren bir yapı tanımlamaktır. Alıcı uçtaki Arduino, tanımlanmış aynı yapıya sahip olmalıdır.

Adım 3: Temel Verileri İletin

Aşağıdaki çizim hem analogRead(0)'ın ADC değerini hem de voltaja dönüştürülen analogRead(0) değerini Arduino #2'ye iletir.

Aşağıdaki çizimi Arduino #1'e yükleyin:

#include "SerialTransfer.h"

Seri Transfer myTransfer; struct STRUCT { uint16_t adcVal; şamandıra gerilimi; } veri; geçersiz kurulum() { Serial.begin(115200); Seri1.başlangıç(115200); myTransfer.begin(Serial1); } void loop() { data.adcVal = analogRead(0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj(veri, sizeof(veri)); myTransfer.sendData(sizeof(veri)); gecikme(100); }

4. Adım: Temel Verileri Alın

Aşağıdaki kod Arduino #1'den alınan ADC ve voltaj değerlerini yazdırır.

Aşağıdaki kodu Arduino #2'ye yükleyin:

#include "SerialTransfer.h"

Seri Transfer myTransfer; struct STRUCT { uint16_t adcVal; şamandıra gerilimi; } veri; geçersiz kurulum() { Serial.begin(115200); Seri1.başlangıç(115200); myTransfer.begin(Serial1); } void loop() { if(myTransfer.available()) { myTransfer.rxObj(veri, sizeof(veri)); Serial.print(data.adcVal); Seri.print(' '); Seri.println(veri.voltaj); Seri.println(); } else if(myTransfer.status < 0) { Serial.print("HATA: "); if(myTransfer.status == -1) Serial.println(F("CRC_ERROR")); else if(myTransfer.status == -2) Serial.println(F("PAYLOAD_ERROR")); else if(myTransfer.status == -3) Serial.println(F("STOP_BYTE_ERROR")); } }

Adım 5: Test Etme

Her iki çizim de kendi Arduino'larına yüklendikten sonra, Arduino #1'den veri aldığınızı doğrulamak için Arduino #2'deki Seri Monitörü kullanabilirsiniz!

Önerilen: