Isi kandungan:

Komunikasi Bersiri Arduino: 5 Langkah
Komunikasi Bersiri Arduino: 5 Langkah

Video: Komunikasi Bersiri Arduino: 5 Langkah

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

Banyak projek Arduino bergantung pada penghantaran data antara beberapa Arduino.

Sama ada anda peminat yang membina kereta RC, kapal terbang RC, atau merancang stesen cuaca dengan paparan jauh, anda perlu mengetahui cara memindahkan data bersiri dari satu Arduino ke yang lain. Malangnya, sukar bagi penggemar untuk mendapatkan komunikasi data bersiri yang berfungsi dalam projek mereka sendiri. Ini kerana data bersiri dihantar sebagai aliran bait.

Tanpa jenis konteks dalam aliran bait, hampir mustahil untuk menafsirkan data. Tanpa dapat mentafsirkan data, Arduino anda tidak akan dapat berkomunikasi dengan pasti. Kuncinya adalah menambahkan data konteks ini ke aliran bait dengan menggunakan reka bentuk paket bersiri standard.

Reka bentuk paket bersiri, pemadatan paket, dan penghuraian paket adalah kompleks dan sukar dicapai. Nasib baik untuk pengguna Arduino, terdapat perpustakaan yang dapat melakukan semua logik kompleks ini di belakang tabir sehingga anda dapat memberi tumpuan untuk menjadikan projek anda berfungsi tanpa rasa gusar. Instructable ini akan menggunakan perpustakaan SerialTransfer.h untuk pemprosesan paket bersiri.

Ringkasnya: Instructable ini akan menerangkan bagaimana anda dapat melaksanakan data bersiri yang mantap dengan mudah dalam projek apa pun menggunakan perpustakaan SerialTransfer.h. Sekiranya anda ingin mengetahui lebih lanjut mengenai teori tahap rendah mengenai komunikasi bersiri yang mantap, lihat tutorial ini.

Bekalan

  • 2 Arduino

    Sangat digalakkan anda menggunakan Arduino yang mempunyai banyak UART perkakasan (iaitu Arduino Mega)

  • Kawat cangkuk
  • Pasang SerialTransfer.h

    Boleh didapati melalui Pengurus Perpustakaan Arduino IDE

Langkah 1: Sambungan Fizikal

Sambungan Fizikal
Sambungan Fizikal

Semasa menggunakan komunikasi bersiri, beberapa titik pendawaian perlu diingat:

  • Pastikan semua landasan dihubungkan!
  • Pin Arduino TX (Transmit) perlu disambungkan ke pin Arduino's RX (Terima) yang lain

Langkah 2: Cara Menggunakan Perpustakaan

Cara Menggunakan Perpustakaan
Cara Menggunakan Perpustakaan

SerialTransfer.h membolehkan anda menghantar sejumlah besar data dengan mudah menggunakan protokol paket khusus. Di bawah ini adalah penerangan mengenai semua ciri perpustakaan - banyak yang akan kami gunakan kemudian dalam tutorial ini:

SerialTransfer.txBuff

Ini adalah susunan bait di mana semua data muatan yang akan dihantar melalui siri disangga sebelum penghantaran. Anda boleh mengisi buffer ini dengan bait data untuk dihantar ke Arduino yang lain.

SerialTransfer.rxBuff

Ini adalah susunan bait di mana semua data muatan yang diterima dari Arduino yang lain disangga.

SerialTransfer.bytesRead

Jumlah bait muatan yang diterima oleh Arduino yang lain dan disimpan di SerialTransfer.rxBuff

SerialTransfer.begin (Strim & _port)

Memulakan contoh kelas perpustakaan. Anda boleh meneruskan objek kelas "Serial" sebagai parameter - malah objek kelas "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

Ini menjadikan Arduino anda menghantar "messageLen" bilangan bait dalam buffer transmisi ke Arduino yang lain. Contohnya, jika "messageLen" adalah 4, 4 bait pertama SerialTransfer.txBuff akan dihantar melalui siri ke Arduino yang lain.

SerialTransfer. Tersedia ()

Ini menjadikan Arduino anda menguraikan data bersiri yang diterima dari Arduino yang lain. Sekiranya fungsi ini mengembalikan boolean "true", ini bermaksud paket baru telah berjaya dihuraikan dan data paket yang baru diterima disimpan / tersedia di SerialTransfer.rxBuff.

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

Menyertakan "len" bilangan bait objek sewenang-wenang (byte, int, float, double, struct, etc …) ke dalam buffer transmit bermula dari indeks seperti yang ditentukan oleh argumen "indeks".

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

Membaca "len" bilangan bait dari buffer penerimaan (rxBuff) bermula dari indeks seperti yang ditentukan oleh argumen "indeks" menjadi objek sewenang-wenang (byte, int, float, double, struct, dll …).

CATATAN:

Cara termudah untuk menghantar data adalah dengan menentukan terlebih dahulu struktur yang mengandungi semua data yang ingin anda hantar. Arduino di hujung penerima harus mempunyai struktur yang sama.

Langkah 3: Hantar Data Asas

Sketsa berikut menghantar nilai ADC analogRead (0) dan nilai analogRead (0) ditukar kepada voltan ke Arduino # 2.

Muat naik lakaran berikut ke Arduino # 1:

#sertakan "SerialTransfer.h"

SerialTransfer myTransfer; struktur STRUCT {uint16_t adcVal; voltan apungan; } data; persediaan tidak sah () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Siri1); } gelung void () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); kelewatan (100); }

Langkah 4: Terima Data Asas

Kod berikut mencetak nilai ADC dan voltan yang diterima dari Arduino # 1.

Muat naik kod berikut ke Arduino # 2:

#sertakan "SerialTransfer.h"

SerialTransfer myTransfer; struktur STRUCT {uint16_t adcVal; voltan apungan; } data; persediaan tidak sah () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Siri1); } gelung void () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Cetakan bersiri (''); Serial.println (data.voltage); Bersiri.println (); } lain jika (myTransfer.status <0) {Serial.print ("ERROR:"); jika (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); lain jika (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); lain jika (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Langkah 5: Menguji

Setelah kedua sketsa diunggah ke Arduino masing-masing, anda boleh menggunakan Monitor Serial di Arduino # 2 untuk mengesahkan bahawa anda menerima data dari Arduino # 1!

Disyorkan: