Разбудить компьютер из Uno

Я хочу разбудить компьютер через подключенный через USB Arduino Arduino. При использовании Pro Micro (Leonardo) я могу это сделать, поскольку его HID-интерфейс может разбудить компьютер. То есть в диспетчере устройств в разделе «Клавиатуры» для соответствующего HID-устройства в разделе «Управление питанием» установлен флажок «Разрешить этому устройству пробуждать компьютер».

Однако для этого проекта мне нужно использовать Uno. Есть хак (см. ссылку ниже), который позволяет использовать ATMega16U2 на Uno в качестве HID-клавиатуры. Она работает нормально, но на этой HID-клавиатуре на прошитом Uno НЕТ флажка «Разрешить этому устройству пробуждать компьютер», т. е. я не могу разбудить свой компьютер. Пробовал, комп не просыпается. Я знаю, что могу использовать экран Ethernet на Arduino для отправки пакета пробуждения по локальной сети, но я не хочу добавлять какие-либо экраны, если в этом нет необходимости. Есть совет, как это сделать?

РЕДАКТИРОВАНИЕ: мне указали на две библиотеки, NicoHood и LUFA (ссылки ниже), чтобы закодировать HID-клавиатуру для ATMega16U2 на Arduino Uno. Проблема в том, что знакомство с предметом и (любой) библиотекой займет несколько дней, поэтому я предпочитаю найти уже скомпилированное простое HID-устройство, которое делает то, что я хочу. Если я не могу его найти, у меня есть «тупое» решение: поскольку Леонардо может разбудить компьютер, я могу подключить его к ПК, отключить Uno (с моим кодом) от Леонардо, связать один цифровой контакт между Uno и Leonardo, чтобы Uno мог инициировать нажатие USB-клавиши на Leonardo. Это неуклюже, поскольку Леонардо используется только для отправки одного нажатия клавиши USB, чтобы разбудить компьютер, но это сработает.

LUFA

API клавиатуры NicoHook

HoodLoader

Соответствующие ссылки:

Arduino Uno как интерфейс USB HID

Вывод сенсорного экрана из режима сна с помощью Pro Micro

, 👍1

Обсуждение

Я не думаю, что это так просто. Я думаю, что в драйвере устройства должна быть закодирована возможность пробуждения, то есть иметь возможность отправлять соответствующее сообщение., @MrSparkly

Библиотека HID от NicoHood использует специальный загрузчик в 16U2, https://github.com/NicoHood/HID. Он может отправлять мультимедийные ключи и клавишу питания., @Jot

Спасибо. Я постараюсь связаться с автором, так как не знаю, какой будет минимальная необходимая настройка., @MrSparkly

Попробуйте другой USB-порт., @Gerben

Можете ли вы объяснить причину, по которой вам нужно использовать UNO?, @MichaelT

Мне нужно использовать щит, который подходит только для Uno., @MrSparkly


2 ответа


1

Заработало: мой Uno теперь может выводить ПК из спящего режима. Я следовал вики HoodLoader и использовал скетчи HID-Bridge (ниже). Это заняло около 2-3 часов.

HoodLoader

HID-мост

,

0

Я потратил слишком много времени, пытаясь заставить это работать в Arduino IDE. Ни одна из настроек ОС не помогла. Тогда я попробовал использовать CircuitPython от Adafruit. Полагаю, HID-библиотека CircuitPython включает в себя нужный механизм, позволяющий движению мыши выводить компьютер из спящего режима. Ничего не меняя в ОС (Windows и Ubuntu), всё заработало.

Вам нужно будет добавить библиотеку adafruit_hid в папку библиотеки usb CIRCUITPY.

Таким образом, код становится довольно простым: пир подключен к источнику питания 3 В, а вывод датчика — к D10.

# перемещайте мышь, когда пир обнаруживает движение
# мигать светодиодом и двигать мышью
#это будит компьютер, когда я вхожу в комнату
#может захотеть немного поспать после пробуждения, чтобы мышь не двигалась постоянно... 

import time
import board
import usb_hid
 
from digitalio import DigitalInOut, Direction
from adafruit_hid.mouse import Mouse

led = DigitalInOut(board.LED_INVERTED) 
led.direction = Direction.OUTPUT
sensor_pin = DigitalInOut(board.D10)
sensor_pin.direction = Direction.INPUT
mouse = Mouse(usb_hid.devices)

while True:

    led.value = False
    time.sleep(0.5)

    if sensor_pin.value is True:
        mouse.move(x=10,y=10)
        led.value = True
        time.sleep(0.5)
,