USB HID olarak Arduino


25

Arduino uno kullanarak bir HID cihazı (klavye gibi) oluşturmak mümkün mü?

Şu anda, Arduino'da seri hattan çıktılar veren düğme girişleri var. Peki, mevcut bellenimi nasıl HID klavye gibi davranabilecek bir şeye dönüştürürüm?

  • Yeni bir pencere aygıtı sürücüsü yazayım mı?
  • Seri verilerimi alabilecek ve pencereleri HID girişi olarak okuyabilecek bir yazılım katmanı oluşturayım mı?
  • Mümkünse, bunu başarmanın daha iyi bir yolu var mı?

1
Yanılıyor olabilirim, ama bu gerçekten Arduino ile ilgili değil. Pencerenin yan aygıt sürücüsü gelişimi hakkında.
asheeshr

1
Google'da ilk cevap: mitchtech.net/arduino-usb-hid-keyboard ... ama hangi Arduino'yu belirtmediniz. Bir Leonardo'da yerleşiktir ve uygun sürücü zaten vardır (bkz. Arduino.cc/en/Reference/MouseKeyboard ).
FredP

Bir Uno kullanıyorum, ancak ne gönderdiğinize bakacağım çünkü DFU güncellemesini en son düşündüğümüz zaman, ancak bileşenler çoğu zaman olduğu gibi bölgemde hazır ve ucuz olmadığı için tuğladan korkuyoruz. yerler.
Anomali,

3
@AsheeshR Bu konu şu an meta üzerinde: meta.arduino.stackexchange.com/q/102/46
Ricardo

1
Arduino Uno, USB sürücü yongası olarak bir Atmega16u2 özelliğine sahip olduğu için, kullanıcı, aygıtı Arduino'nun HID klavyesi gibi davranmasını sağlayacak leonardo'lara yakın bir ürün yazılımı itmek için DFU veya ICSP flaşını kullanabilir. Herhangi bir pencere geliştirme söz konusu değildir, varsayılan olarak USB / HID aygıtları tanınırken oluşturulacak bir sürücü yoktur. yani bu soru tekrar açılmalıdır.
zmo

Yanıtlar:


14

Arduino uno kullanarak bir HID cihazı (klavye gibi) oluşturmak mümkün mü?

Evet öyle! Ve burada bunun nasıl yapılacağı konusunda harika bir eğitim var

Şu anda, Arduino'da seri hattan çıktılar veren düğme girişleri var. Peki, mevcut bellenimi nasıl HID klavye gibi davranabilecek bir şeye dönüştürürüm?

Eğitimin size gösterdiği gibi, ürün yazılımı kodunuzu dönüştürmeniz gerekir, böylece olayları yazdırmak yerine olayları tetiklersiniz. Yapmanız gereken, kodunuza eklemek:

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);
}

Burada yaptığınız şey, ana Arduino mikrodenetleyici olaylarınızdan seri hat üzerinden USB iletişimini yöneten daha küçük mikrodenetleyiciye göndermektir. Bu mikrodenetleyici bu "tampon" tuşlarını alacak ve USB HID Klavye tuşu USB üzerinden bastırdığında transfer edecektir.

Anahtar karakterin ( chrburadaki kodda), aslında USB HID sürücünüz tarafından yorumlanan ve ardından klavyeniz için ayarladığınız geçerli düzeni kullanarak gerçek bir karaktere dönüştüren USB üzerinden gönderilen bir anahtar kod olduğunu unutmayın.

modKarakteri, klavyeden (vardiya, kontrol, alt ...) üzerindeki değiştirici anahtarlarından biridir 0x00hiçbir değiştirici varlık.

  • Yeni bir pencere aygıtı sürücüsü yazayım mı?

Hayır, ihtiyacın yok! DFU yükseltmesiyle, arduino'nuz Windows tarafından bir USB klavye olarak görülecektir.

  • Seri verilerimi alabilecek ve pencereleri HID girişi olarak okuyabilecek bir yazılım katmanı oluşturayım mı?

Bunu yapmanıza gerek yok ve aslında birçok nedenden dolayı çok kötü bir fikir:

  • çözümünüz taşınabilir olmayacak ve bu nedenle kullanabileceğiniz her platform için bir şeyler kırmanız gerekecek,
  • çözümünüz çok sayıda yeni kod anlamına gelir; Bir kod ne kadar çok yazarsa, sisteminizde o kadar çok hata olabilir.
  • çözümünüz , bir kullanıcı programından (yani, kullanıcı ülkesi ) girdi alan bir aygıt sürücüsü (yani çekirdek alanı alanı ) gibi davranacağından ve çalışmaması, hata ayıklaması ve güvenlik sorunlarına yatkın olması muhtemel olduğu için son derece yıkıcı olacaktır . .. Bunu yapmak mümkün olsa bile!

Bir Uno kullanıyorum, ancak ne gönderdiğine bakacağım çünkü DFU güncellemesini en son düşündüğümüz zaman, ancak tuğla işlerinden korktuk

Sonunda, bir yorumda, arduino'nuzu örmekle ilgili endişeleriniz var. Beni ve yazarı Lütfen inan makalesinde bunu olamaz tuğla senin arduino bir firmware flaş yapıyor:

NOT: Bu yöntemi kullanarak cihazı 'tuğlalama' olasılığı yoktur. Arduino bootloader üretici yazılımı DFU protokolü kullanılarak her zaman güncellenebilir!

Bir şeylerin gerçekten kötü bir şekilde yanlış gitmesi ve küçük AVR'de (atmega8u2) bir bootloader bozulması olması durumunda , USB fişinin yanındaki 6 pini kullanarak başka bir arduino veya bir atmel programcısı kullanarak onu tekrar kaldırabilirsiniz .

Sonunda, bir AVR'yi, dolayısıyla bir Arduino'yu tuğlalamanın tek yolunun sigortalarla oynamak ve programlama sigortalarını sıfırlamak olduğunu biliyorum . Ve o zaman bile, cihazınızı kurtarmak için HVSP kullanabilirsiniz , ancak yeni çip almak genellikle daha az sıkıntı olur.


1
Tüm faydalı bilgiler için teşekkürler, bunu başardık.
Anomali

Bir AVR'yi tuğlalamanın uygun yolu aşırı akım / aşırı voltajdır. Sonra kızartılmış olacak ...
user2973

Ama o zaman buna tuğla denmiyor, kızartıyor veya kızartma dediğiniz gibi. MCU'ya 15amp koyun ve bahse girerim odanın içinden atladığını görürsünüz ;-)
zmo

Belirli bir anahtar nasıl serbest bırakılır? HOLD anahtarına öykünmek ve sonra serbest bırakmak istiyorum. Ve ayrıca bağlantıda, karakter [2] dizisine gider, burada [1] konumuna gider. Niye ya?
5argon

Benim örneğimde gösterildiği gibi, iki adımda yapın, önce tuşa basın, sonra gecikme olur, sonra bırakın. Öyleyse, donanım klavyesi uygulamasının nasıl çalıştığı, doğal değil ve dizinin her değerinin bir anlamı olduğu konusunda kendinize ders vermeniz gerekir. ATM'yi paylaşacak bir bağlantınız olmadığı için afedersiniz, ama ne zaman web’de arama yapan bir şey bulursanız, lütfen yeni bir yorum gönderin ☺
zmo

6

Arduino Bootloader'ın tamamen yerini alan bir proje yarattım. Eskizleri yükleyebilir ve HID olarak kullanabilirsiniz. Github'daki HID Projesi'ne bakınız: https://github.com/NicoHood/HID


4
Arduino SE'ye hoş geldiniz! Kütüphanenizi nasıl kullanacağınız hakkında biraz ekler misiniz? Teşekkürler!
Anonim Penguen

2
Beni oku ve örnekleri dene? Hepsi orada, burada her şeyi mahvetmeye gerek yok.

Üzgünüm dostum, güzel bir kütüphane gibi görünüyor, ancak belgeleriniz çok eksik. Söyleyebileceğim kadarıyla gerçek bir kurulum talimatı yok ve wiki'nizdeki tüm başlıklar sadece "TODO" (sadece gamepad konusu tamamen boş). : - /
BrainSlugs83

1
Aslında burada temel bir tanım sunma ihtiyacı vardır: cevapların ölen dış bağlantı olmadan bile anlamlı olması gerekir. Ve bu değil.
Chris Stratton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.