Setelah Anda mengunggah sketsa ke salah satu papan Arduino Anda, sulit untuk mengetahui persis apa yang menyebabkan kode sumber sketsa itu.
Memang, Anda dapat mengubah kode sumber sketsa di PC Anda tanpa memperbaruinya (dalam format biner) ke papan Anda.
Saya memiliki ide untuk menyiapkan semacam " repositori sketsa " yang akan diisi segera setelah saya mengunggah sketsa ke salah satu papan saya. Kemudian saya bisa mengambil, nanti, kode sumber untuk sketsa yang berjalan di salah satu papan saya.
Untuk repositori seperti itu, pertama-tama saya perlu memiliki " indeks " yang memungkinkan saya mengetahui papan kode sumber sketsa mana yang ditautkan.
Biasanya, indeks seperti itu harus unik untuk setiap papan Arduino tunggal.
Maka pertanyaan saya: bagaimana saya bisa mendapatkan ID unik untuk papan Arduino?
Edit:
Ini adalah daftar board saya saat ini (daftar miniumum yang didukung oleh pendekatan ID unik tunggal):
- UNO R3
- Mega 2560
- Yun
- Robot Arduino (harus terdiri dari 2 papan setara Leonardo)
Di masa depan, saya juga dapat membangun papan sendiri (Uno setara tetapi barebone, tanpa FTDI), maka jika pendekatan juga mendukung ini yang akan lebih baik.
sumber
Jawaban:
Ada sejumlah teknik yang bisa Anda gunakan di sini untuk mendapatkan ID unik.
Masalah dengan ini adalah bahwa tidak ada pilihan kecuali 5 yang akan bekerja di semua papan.
Jika solusi Anda akan menjadi yang umum, saya akan menyarankan bahwa menggunakan USB ID bukan jalan ke depan. Saya memiliki ~ 30 papan berbasis Arduino, dan hanya 5 di antaranya yang memiliki perangkat keras USB. Semua dari mereka membutuhkan kabel FTDI eksternal untuk diprogram. Ini berarti mereka semua akan memiliki ID yang sama.
sumber
Chip tidak memiliki ID unik apa pun sejauh yang saya tahu .... tetapi Anda dapat memprogram satu ke dalam EEPROM papan Anda.
Dokumentasi EEPROM
Anda akan menulis ke alamat tertentu dan kemudian sketsa di masa depan dapat membaca ID dan melakukan apa pun dengannya.
Anda juga dapat melihat ID atau alamat yang tidak sesuai pada sisi host. Saya tidak cukup tahu tentang perangkat USB untuk memberi tahu Anda lebih banyak, tetapi chip yang menangani komunikasi USB mungkin memiliki ID unik yang dapat Anda gunakan. Kode Arduino Anda tidak akan dapat menggunakan ini.
Atau, cukup gunakan pembuat label dan letakkan label di setiap papan.
sumber
Beberapa papan, saat terhubung ke komputer, menerbitkan nomor seri mereka. My Arduino Uno R3 berkata
Meskipun saya tidak yakin betapa uniknya itu.
sumber
Sepengetahuan saya, semua chip USB datang dengan nomor seri yang unik, setidaknya untuk chip FTDI. Di Linux Anda dapat dengan mudah menetapkan nama perangkat unik dari itu, periksa situs web saya .
Selain itu, apa yang Anda gambarkan adalah bentuk kontrol versi yang sederhana . Pastikan file sumber Anda memiliki nomor versi. Untuk mengidentifikasi Arduino Anda, Anda dapat membuatnya
Serial.Print();
nama dan versi kode selamasetup();
.sumber
__DATE__
dan__TIME__
. Jadi setidaknya Anda dapat secara otomatis menyimpan info itu di file .hex Anda @jfpoilpretSaya ragu bahwa antarmuka USB di Uno memberi Anda nomor seri yang unik. Angka apa pun akan menjadi bagian dari kode yang diunggah ke chip yang karenanya akan sama di antara banyak Unos.
Salah satu pendekatan adalah chip "Silicon Serial Number" DS2401 yang menggunakan antarmuka One-wire. Itu hanya akan memerlukan satu pin gratis, dan beberapa kode (kode akan menjadi masalah, mungkin).
Metode yang paling tidak mengganggu, dan mungkin yang paling dapat diandalkan, adalah dengan hanya membaca kembali kode dan menjumlahkannya. Itulah tepatnya yang saya lakukan dengan detektor tanda tangan chip saya . Namun itu hanya mendeteksi (seperti yang ditulis saat ini) tanda tangan bootloader. Perubahan yang cukup kecil dan bisa MD5-jumlah seluruh kode sketsa.
Contoh output:
Jumlah MD5 itu (baris terakhir) secara efektif merupakan tanda tangan dari bootloader tertentu. Faktanya, versi terbaru melihatnya dalam sebuah tabel:
Jadi yang dapat Anda lakukan adalah, saat mengunggah sketsa, menghasilkan jumlah MD5 dari kode hex. Ada beberapa cara sederhana untuk melakukan itu. Kemudian Anda bisa melakukan operasi "git tag" pada kode sumber Anda, dan kemudian (menggunakan beberapa proses otomatis atau manual) ingat bahwa jumlah MD5 tertentu dari kode hex mewakili kode sketsa pada saat tertentu.
Beberapa jenis database seperti:
Sekarang untuk mencari sumber dari papan, Anda menetapkan jumlah MD5 kode (dengan membacanya kembali dari papan) dan kemudian mencarinya di database Anda.
sumber
Saya menghubungkan sensor satu kawat temp yang masing-masing datang dengan saya yang unik. Semua sketsa membaca Aku akan boot dan menulis alamat pada setiap koneksi serial. Saya membuat perisai dengan semua perangkat keras yang saya butuhkan jadi jika saya perlu meningkatkan dari Uno ke Mega perangkat tetap unik saya akan.
sumber
Ada perpustakaan kecil untuk membaca dan menulis ID perangkat keras khusus Anda ke EEPROM. Anda dapat menggunakannya untuk menghindari mendorong sketsa yang salah ke Arduino Anda atau untuk mengidentifikasi perangkat untuk tujuan lain.
https://github.com/skoumalcz/arduino-id-guard
Penafian: Saya penulis perpustakaan :-)
sumber