Kas Arduino uno abil on võimalik HID-seadet (näiteks klaviatuuri) ehitada?
jah see on! Ja seal on suurepärane õpetus, kuidas seda teha siin
Praegu on mul Arduinos nuppude sisendid, mis annavad väljundeid jadajoonele. Niisiis, kuidas ma saan oma praeguse püsivara muuta selliseks, mis võib käituda nagu HID-klaviatuur?
Nagu õpetus näitab, peate oma püsivara koodi teisendama, nii et sündmuste printimise asemel peate tegelikult käivitavad sündmused. Peate oma koodile lisama:
void triggerKey (uint8_t mod, uint8_t chr) {uint8_t buf [8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // vajutage klahvi Serial.write (buf, 8); // jäljendada klahvivajutuse viivitust (10); buf [1] = 0x00; // vabastage võti Serial.write (buf, 8);}
Mis te siin teete, saadetakse teie peamistest Arduino mikrokontrolleri sündmustest üle jadaliini väiksemale mikrokontrollerile, mis haldab USB-d suhtlemine. See mikrokontroller võtab need võtme "puhvrid" ja edastab need, kui USB HID-klahviklahv vajutab USB-d.
Pidage meeles, et võtmemärk (siin olevas koodis chr
) on tegelikult võtmekood saatja USB, mida tõlgendab teie USB HID draiver, mis seejärel tõlgib selle tegelikuks tähemärgiks, kasutades praegust paigutust, mille olete oma klaviatuuri jaoks seadistanud.
Märk mod
on üks klaviatuuril olevad muutmisklahvid (tõstuklahv, juhtklahv, alt ...), 0x00
pole modifikaator.
- Kas kirjutan uue akna seadme draiver?
Ei, te ei vaja seda! DFU värskenduse korral nähakse teie arduino Windowsi USB-klaviatuurina.
- Kas peaksin looma tarkvarakihi, mis võiks minu seeriandmeid võtta ja lasta Windowsil neid HID-sisendina lugeda?
Teil pole seda vaja teha ja see on tegelikult väga halb idee mitmel põhjusel:
- teie lahendus ei oleks kaasaskantav ja seega peate iga kasutatava platvormi jaoks midagi häkkima,
- teie lahendus tähendaks palju uut koodi; mida rohkem koodi kirjutada, seda rohkem vigu on teie süsteemis tõenäoliselt,
- teie lahendus oleks tõepoolest häkkinud, kuna see käituks seadme draiverina (st kernel land ) võttes sisendit kasutajaprogrammist (st kasutaja maa ) ja tõenäoliselt ei tööta, olge paganama silumiseks ja altid turvaküsimustele ... Kui see on isegi võimalik!
Kasutan Unot, kuid vaatan, mida te postitasite, sest viimati kaalusime DFU värskendust, kuid me kardame üsna palju müüritise värke
Lõpuks on teil kommentaaris muret oma arduino müürimise pärast. Uskuge mind ja artikli autorit, et te ei saa oma püsivara välklambi kasutamist tellida:
MÄRKUS. Pole mingit võimalust selle meetodi abil seadme müüritamine. Arduino alglaaduri püsivara saab alati värskendada DFU-protokolli abil!
Juhul kui midagi läheb väga valesti ja teil on väikeses AVR-is (atmega8u2) alglaadija rikutud, saate selle siiski uuendada teise arduino abil või atmeli programmeerijaga, kasutades USB-pistiku kõrval asuvaid 6 tihvti.
Lõpuks teadke, et ainult AVR-i, seega ka Arduino, tellistamise viis on mängida kaitsmetega ja lähtestada programmeerimiskaitsmed. Ja isegi siis võite seadme salvestamiseks kasutada HVSP, kuigi sageli on uue kiibi võtmisega vähem probleeme.