Saya sedang mengerjakan proyek yang melibatkan sedikit komunikasi data yang baik antara remote Arduino dan komputer. Koneksi nirkabel melalui sepasang XBees, jadi kami memiliki tautan RS232 antara Arduino dan komputer. Untuk sejumlah kecil data, cukup mudah untuk menyatukan beberapa protokol komunikasi sederhana. Namun, untuk proyek yang lebih besar, apa saja protokol komunikasi sederhana yang bagus?
Saya telah melihat MODBUS, yang sepertinya merupakan opsi yang layak, tetapi saya ingin melihat apakah ada opsi lain yang lebih baik.
serial
communication
xbee
protocol
Komputeris
sumber
sumber
Jawaban:
OP meminta protokol serial untuk situasi di mana " tidak banyak [data] dan kecepatan bukanlah masalah besar ". MODBUS disebutkan dalam OP MODBUS melalui RS-485 bukan protokol cepat. Meskipun ini bukan spec, ini memberikan gambaran tentang niche tersebut.
Saya hanya bisa memikirkan dua protokol standar umum untuk ceruk ini:
Sangat sering, ketika programmer tertanam dalam situasi seperti OP, mereka merancang protokol komunikasi serial mereka sendiri dari awal.
sumber
Beberapa protokol sistem tertanam, beberapa di antaranya sangat sederhana, terdaftar di Embedded Systems: Common Protocols , termasuk:
Mungkin salah satu dari protokol ini akan memadai untuk aplikasi Anda apa adanya, atau hanya dengan sedikit penyesuaian.
sumber
Saya akan memilih roll Anda sendiri, dan membuatnya sesederhana mungkin.
Saya telah berurusan dengan banyak protokol serial untuk berbagai aplikasi kontrol, dan beberapa hal yang saya dapat merekomendasikan Anda sertakan adalah:
Sebagai contoh yang sangat mendasar, Anda dapat mengonversi data Anda ke karakter ASCII dan menempelnya di dalam karakter start / stop seperti ini:
Untuk mengirim nilai byte 0x7A, data yang dikirim adalah (7A), di mana () adalah karakter start / stop yang dipilih dan 7 dan A adalah dua karakter ascii. OK itu menambahkan banyak overhead, tetapi itu berarti Anda dapat men-debug dengan perangkat lunak terminal dasar.
sumber
Jika data Anda melalui XBees, Anda harus meletakkan modul ke mode API dengan karakter escape, membagi data Anda ke dalam paket logis, dan mengambil keuntungan dari kenyataan bahwa dalam mode API paket yang diberikan kepada XBee akan tiba utuh atau tidak semuanya. Rancang protokol Anda di sekitar pengiriman potongan 1-255 byte, dan biarkan modul XBee khawatir tentang cara mengirimkan data dalam setiap potongan. Jangan khawatir tentang menjaga integritas masing-masing paket atau subdivisi di antara mereka. Modul Digi akan melakukan pekerjaan dengan baik untuk mengurusnya. Hal terbesar yang perlu Anda khawatirkan adalah kenyataan bahwa bahkan jika node yang mentransmisikan sebuah paket percaya itu tidak dikirimkan dan mengirimkan pengganti, penerima mungkin akhirnya mendapatkannya - mungkin bahkan setelah mendapat penggantian. Hal-hal mungkin paling mudah jika Anda mendesain protokol Anda sehingga satu sisi adalah "master"; jika master meminta sepotong data, budak harus mengirimnya sekali dan tidak khawatir tentang apakah master mendapatkannya. Jika master tidak mendapatkan data yang diinginkan, master dapat memintanya lagi.
Budak harus menetapkan semacam nomor urut untuk data, dan master harus menetapkan nomor urut untuk permintaan bahwa kondisi perubahan budak. Jika permintaan master adalah dalam bentuk "kirim item pertama yang nomor urutnya lebih besar dari XXX", dan setiap potongan item data oleh budak menyertakan nomor urutnya sendiri dan item sebelumnya (jika tidak diberi nomor secara berurutan) ), paket yang datang terlambat dapat menyebabkan budak mengirim data secara berlebihan ke master, tetapi master tidak akan mengalami kesulitan untuk mengabaikan tanggapan yang datang terlambat. Jika budak menerima permintaan perubahan-negara yang nomor urutnya di bawah permintaan sebelumnya, ia harus mengabaikan permintaan itu, karena permintaan itu digantikan bahkan sebelum diterima.
sumber
Bagaimana dengan Firmata ? Ini memiliki dukungan untuk berbagai sistem operasi dan bahasa pemrograman. Sisi pengontrol Arduino dan PICduino didukung, tetapi seharusnya tidak terlalu sulit untuk port ke mikrokontroler telanjang.
sumber
Saya punya pertanyaan serupa dengan ini dan tidak pernah menemukan sesuatu yang sederhana dan cukup kecil untuk AVR kecil dll. Jadi saya menggulung sesuatu yang terinspirasi oleh CAN. Ini disebut MIN (Microcontroller Interconnect Network):
https://github.com/min-protocol/min
Saya sudah membuat blog tentang hal ini di sini:
https://kentindell.wordpress.com/2015/02/18/micrcontroller-interconnect-network-min-version-1-0/
Ada kait di sana untuk blok data, tetapi sebagian besar ditujukan pada sinyal untuk sensor / aktuator. Saya telah mendefinisikan format JSON untuk menggambarkan sinyal dan pengemasannya dalam bingkai MIN dan berharap mendapatkan pembangkang Wireshark yang menggunakannya.
sumber