Arduino nano как клавиатура HID

Я немного нуб в области Arduino, но я нашел Arduino nano, который я купил давным-давно, поэтому я решил, "почему бы не сделать проект". Я много играю в гоночные игры, поэтому хотел сделать с ним простую кнопку зажигания, но каждый раз, когда я пытался скомпилировать или проверить ее, она говорила:

Keyboard not found. Does your sketch include the line #include "Keyboard.h"

, 👍6

Обсуждение

Вы включили библиотеку клавиатуры из меню скетча?, @dandavis

@dandavis - это было бы невозможно или, по крайней мере, бессмысленно, так как нет такой библиотеки для нано., @Chris Stratton

@ChrisStratton: хорошая идея., @dandavis

В отличие от официального Arduino Uno, который использует перепрограммируемый ATmega16U2 для интерфейса USB-UART, Nano использует не перепрограммируемый чип FTDI., @gre_gor

Типичный Nano не имеет аппаратной поддержки для этого - так что вы можете сделать это только с помощью таких средств, как программное обеспечение-приблизительный USB, или путем добавления чипа интерфейса USB-устройства. Как следует из ответа, есть лучшие варианты платформы., @Chris Stratton

Может быть, этот вопрос поможет вам. https://arduinoprosto.ru/q/76557/how-can-i-make-my-arduino-uno-press-space-on-my-laptop-keyboard/76570#76570, @Dorian

Arduino Nano я не уверен. Но я уверен, что вы можете сделать это с помощью Arduino UNO. https://www.youtube.com/watch?v=tvqA-JcTQNg, @Yiming


3 ответа


14

Купите себе Arduino Leonardo, Micro или Pro Micro (или Due, Ноль, M0). Они могут имитировать клавиатуру.
Начните с чтения справочника Arduino Клавиатура Мышь.

Arduino Nano не может использовать библиотеку клавиатуры и мыши Arduino.

Уже много лет существует библиотека под названием "V-USB", которая требует некоторого дополнительного оборудования и позволяет микроконтроллеру ATmega328P выступать в качестве USB-устройства. Это не что - то для новичка.

Несколько лет назад Arduino изменил способ использования USB. Библиотека NicoHood HID использует новые возможности. Это позволяет, например, иметь расширенные функции для USB-клавиатуры, такие как мультимедийные клавиши.

Для обычной клавиатуры и мыши подойдет библиотека мыши с клавиатурой Arduino. Он идеально подойдет для кнопки зажигания. Но вы должны купить одну из этих плат (Леонардо и так далее).

,

или нано плата, @JoSSte


3

Решение получить плату со встроенной поддержкой USB не является предпочтительным для тех, кто просто хочет использовать уже имеющиеся платы. Можно использовать плату, которая может взаимодействовать с вашим компьютером по последовательному каналу, например Arduino Nano, для отправки данных в программу Python, которая затем может превратить ввод с Arduino в нажатия клавиш и т. Д.

Для такого подхода вам нужно будет знать python. Используемые библиотеки:

pyserial - связь с Arduino

pynput - управление клавиатурой компьютера

threading (поставляется с python) - позволяет pyserial и pynput работать одновременно

,

1

Вы можете обеспечить ввод с клавиатуры с помощью Arduino Nano, Uno или любой другой платы, выполнив следующие шаги:

  1. Отправка последовательных данных с помощью функции Serial.println() в скрипте Arduino. Демонстрационный скрипт приведён ниже:
#include <Arduino.h>

void setup() {
    Serial.begin(9600);  // Запустить последовательную связь
}

void loop() {
    int accelerator = analogRead(A0);
    int decelerator = analogRead(A1);
    int x = analogRead(A4);
    int y = analogRead(A5);

    if (accelerator > 15) {
        Serial.println("q"); // Отправляем 'q' по последовательному порту
        delay(10);
    }
    if (decelerator > 590) {
        Serial.println("z"); // Отправляем 'z' по последовательному порту
        delay(10);
    }
    if (x > 400) {
        Serial.println("i"); // Вперед
        delay(250);
    }
    if (x < 290) {
        Serial.println(","); // Назад
        delay(250);
    }
    if (y > 400) {
        Serial.println("j"); // Влево
        delay(250);
    }
    if (y < 290) {
        Serial.println("l"); // Вправо
        delay(250);
    }
}

Затем запустим скрипт Python ниже:

import serial
from pynput.keyboard import Controller

keyboard = Controller()
arduino = serial.Serial('/dev/ttyUSB0', 9600)  # Измените это в соответствии с портом вашего Arduino

while True:
    data = arduino.readline().decode().strip()
    if data:
        keyboard.press(data)
        keyboard.release(data)

Здесь измените '/dev/ttyUSB0' в соответствии с портом, который вы используете на плате Arduino.

,

Похоже на ChatGPT! Ты же понимаешь, что ChatGPT ворует чужие труды и не отдаёт им должное. К тому же, он слишком часто ошибается., @Rohit Gupta