Daftar Isi:

Komunikasi Serial Arduino: 5 Langkah
Komunikasi Serial Arduino: 5 Langkah

Video: Komunikasi Serial Arduino: 5 Langkah

Video: Komunikasi Serial Arduino: 5 Langkah
Video: Trik Mudah Komunikasi Serial Arduino dengan Nodemcu ESP8266 2024, Juli
Anonim
Komunikasi Serial Arduino
Komunikasi Serial Arduino

Banyak proyek Arduino mengandalkan transmisi data antara beberapa Arduino.

Baik Anda hobi membuat mobil RC, pesawat RC, atau merancang stasiun cuaca dengan tampilan jarak jauh, Anda perlu mengetahui cara mentransfer data serial dari satu Arduino ke Arduino lainnya dengan andal. Sayangnya, sulit bagi penghobi untuk mendapatkan komunikasi data serial yang bekerja di proyek mereka sendiri. Ini karena data serial dikirim sebagai aliran byte.

Tanpa konteks apa pun dalam aliran byte, hampir tidak mungkin untuk menafsirkan data. Tanpa dapat menafsirkan data, Arduino Anda tidak akan dapat berkomunikasi dengan andal. Kuncinya adalah menambahkan data konteks ini ke aliran byte dengan menggunakan desain paket serial standar.

Desain paket serial, isian paket, dan penguraian paket rumit dan sulit dicapai. Beruntung bagi pengguna Arduino, ada perpustakaan yang tersedia yang dapat melakukan semua logika rumit ini di belakang layar sehingga Anda dapat fokus untuk membuat proyek Anda bekerja tanpa kesulitan ekstra. Instruksi ini akan menggunakan perpustakaan SerialTransfer.h untuk pemrosesan paket serial.

Singkatnya: Instruksi ini akan membahas bagaimana Anda dapat mengimplementasikan data serial yang kuat dengan mudah di proyek apa pun menggunakan perpustakaan SerialTransfer.h. Jika Anda ingin mempelajari lebih lanjut tentang teori tingkat rendah tentang komunikasi serial yang kuat, lihat tutorial ini.

Perlengkapan

  • 2 Arduino

    Sangat disarankan agar Anda menggunakan Arduino yang memiliki banyak UART perangkat keras (yaitu Arduino Mega)

  • Kawat penghubung
  • Instal SerialTransfer.h

    Tersedia melalui Manajer Perpustakaan Arduino IDE

Langkah 1: Koneksi Fisik

Koneksi Fisik
Koneksi Fisik

Saat menggunakan komunikasi serial, beberapa titik pengkabelan perlu diingat:

  • Pastikan semua ground terhubung!
  • Pin Arduino TX (Transmit) perlu dihubungkan ke pin RX (Receive) Arduino lainnya

Langkah 2: Cara Menggunakan Perpustakaan

Cara Menggunakan Perpustakaan
Cara Menggunakan Perpustakaan

SerialTransfer.h memungkinkan Anda mengirim data dalam jumlah besar dengan mudah menggunakan protokol paket khusus. Di bawah ini adalah deskripsi semua fitur perpustakaan - banyak di antaranya akan kita gunakan nanti dalam tutorial ini:

SerialTransfer.txBuff

Ini adalah array byte di mana semua data muatan yang akan dikirim melalui serial di-buffer sebelum transmisi. Anda dapat mengisi buffer ini dengan byte data untuk dikirim ke Arduino lain.

SerialTransfer.rxBuff

Ini adalah array byte di mana semua data payload yang diterima dari Arduino lain di-buffer.

SerialTransfer.bytesBaca

Jumlah byte payload yang diterima oleh Arduino lain dan disimpan di SerialTransfer.rxBuff

SerialTransfer.begin(Aliran &_port)

Menginisialisasi instance dari kelas perpustakaan. Anda dapat melewatkan objek kelas "Serial" sebagai parameter - bahkan objek kelas "SoftwareSerial"!

SerialTransfer.sendData(const uint16_t &messageLen)

Ini membuat Arduino Anda mengirim "messageLen" sejumlah byte di buffer transmisi ke Arduino lain. Misalnya, jika "messageLen" adalah 4, 4 byte pertama dari SerialTransfer.txBuff akan dikirim melalui serial ke Arduino lainnya.

SerialTransfer.tersedia()

Ini membuat Arduino Anda mem-parsing data serial yang diterima dari Arduino lain. Jika fungsi ini mengembalikan boolean "true", itu berarti paket baru telah berhasil diurai dan data paket yang baru diterima disimpan/tersedia di SerialTransfer.rxBuff.

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

Masukkan "len" jumlah byte dari objek arbitrer (byte, int, float, double, struct, dll…) ke dalam buffer transmisi mulai dari indeks seperti yang ditentukan oleh argumen "index".

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

Membaca "len" jumlah byte dari buffer penerima (rxBuff) mulai dari indeks seperti yang ditentukan oleh argumen "index" menjadi objek arbitrer (byte, int, float, double, struct, dll…).

CATATAN:

Cara termudah untuk mengirimkan data adalah dengan terlebih dahulu menentukan struct yang berisi semua data yang ingin Anda kirim. Arduino di sisi penerima harus memiliki struct identik yang ditentukan.

Langkah 3: Mengirimkan Data Dasar

Sketsa berikut mentransmisikan nilai ADC dari analogRead(0) dan nilai analogRead(0) yang dikonversi menjadi tegangan ke Arduino #2.

Unggah sketsa berikut ke Arduino #1:

#sertakan "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUKTUR { uint16_t adcVal; tegangan mengambang; } data; void setup() { Serial.begin(115200); Serial1.begin(115200); myTransfer.begin(Serial1); } void loop() { data.adcVal = analogRead(0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj(data, ukuran(data)); myTransfer.sendData(ukuran(data)); penundaan(100); }

Langkah 4: Terima Data Dasar

Kode berikut mencetak nilai ADC dan tegangan yang diterima dari Arduino #1.

Unggah kode berikut ke Arduino #2:

#sertakan "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUKTUR { uint16_t adcVal; tegangan mengambang; } data; void setup() { Serial.begin(115200); Serial1.begin(115200); myTransfer.begin(Serial1); } void loop() { if(myTransfer.available()) { myTransfer.rxObj(data, sizeof(data)); Serial.print(data.adcVal); Serial.print(' '); Serial.println(data.voltage); Serial.println(); } else if(myTransfer.status < 0) { Serial.print("ERROR: "); 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")); } }

Langkah 5: Pengujian

Setelah kedua sketsa diunggah ke Arduino masing-masing, Anda dapat menggunakan Serial Monitor di Arduino #2 untuk memverifikasi bahwa Anda menerima data dari Arduino #1!

Direkomendasikan: