Apakah mungkin untuk membangun perangkat HID (seperti keyboard) menggunakan Arduino uno?
ya itu! Dan ada tutorial yang bagus tentang bagaimana melakukannya di sini
Saat ini, saya memiliki input tombol pada Arduino yang memberikan output pada baris serial. Jadi, bagaimana saya bisa mengubah firmware saya saat ini menjadi sesuatu yang dapat berperilaku seperti keyboard HID?
Seperti yang ditunjukkan oleh tutorial, Anda perlu mengubah kode firmware sehingga alih-alih mencetak acara, Anda malah memicu peristiwa. Yang perlu Anda lakukan, adalah menambahkan kode Anda:
void triggerKey(uint8_t mod, uint8_t chr) {
uint8_t buf[8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// press key
Serial.write(buf, 8);
// emulate key press delay
delay(10);
buf[1] = 0x00;
// release key
Serial.write(buf, 8);
}
Apa yang Anda lakukan di sini, adalah mengirim dari peristiwa mikrokontroler Arduino utama Anda melalui saluran serial ke mikrokontroler yang lebih kecil yang menangani komunikasi USB. Mikrokontroler itu akan mengambil "buffer" kunci itu dan mentransfernya saat tombol Keyboard HID USB ditekan melalui USB.
Hati-hati dengan karakter kunci ( chr
dalam kode di sini), sebenarnya kode kunci yang dikirim melalui USB yang ditafsirkan oleh driver USB HID Anda, yang kemudian menerjemahkannya menjadi karakter nyata menggunakan tata letak saat ini yang telah Anda siapkan untuk keyboard Anda.
The mod
karakter salah satu kunci pengubah Anda miliki di keyboard (shift, kontrol, alt ...), 0x00
yang tidak ada modifier.
- Haruskah saya menulis driver perangkat jendela baru?
Tidak, kamu tidak perlu! Dengan pemutakhiran DFU, arduino Anda akan dianggap sebagai keyboard USB oleh windows.
- Haruskah saya membuat lapisan perangkat lunak yang dapat mengambil data serial saya dan meminta windows membacanya sebagai input HID?
Anda tidak perlu melakukan itu, dan itu sebenarnya ide yang sangat buruk karena berbagai alasan:
- solusi Anda tidak akan portabel, dan karenanya Anda perlu meretas sesuatu untuk setiap platform yang Anda gunakan,
- solusi Anda akan menyiratkan banyak kode baru; semakin banyak kode yang ditulis, semakin banyak bug yang mungkin ada di sistem Anda,
- solusi Anda akan benar-benar retas, karena akan berperilaku sebagai driver perangkat (yaitu lahan kernel ) mengambil input dari program pengguna (yaitu tanah pengguna ) dan cenderung tidak berfungsi, menjadi neraka untuk di-debug, dan cenderung untuk masalah keamanan. .. Jika itu bahkan mungkin dilakukan!
Saya menggunakan Uno, tetapi saya akan melihat apa yang Anda poskan karena terakhir kali kami mempertimbangkan pembaruan DFU tetapi kami agak takut dengan hal-hal yang membingungkan
Akhirnya, Anda memiliki masalah, dalam komentar, tentang melapisi arduino Anda. Tolong percayalah kepada saya dan penulis artikel bahwa Anda tidak dapat menghapus arduino Anda dengan melakukan flash firmware:
CATATAN: Tidak ada kemungkinan 'bricking' perangkat menggunakan metode ini. Firmware bootloader Arduino selalu dapat diperbarui menggunakan protokol DFU!
Seandainya ada sesuatu yang sangat salah, dan Anda mendapatkan bootloader rusak di AVR kecil (atmega8u2), Anda masih dapat mem-reflash-nya menggunakan arduino lain atau
pemrogram atmel menggunakan 6 pin di sebelah colokan USB.
Pada akhirnya, ketahuilah bahwa satu - satunya cara untuk memblokir AVR, demikian juga Arduino, adalah dengan bermain dengan sekering dan mengatur ulang sekering pemrograman. Dan bahkan kemudian, Anda dapat menggunakan
HVSP untuk menyimpan perangkat Anda, meskipun seringkali lebih sulit untuk mengambil chip baru.