WakeMeUP

luca 02/05/2015 0

Oggi mi è stato chiesto se fosse possibile accendere o riattivare da uno stato di standby o di ibernazione un PC ad una data ora… è bastato unire un Arduino Pro Micro ad un modulo RTC ed ecco nato il progetto WakeMeUP

Descrizione

WakeMeUP è un dispositivo USB che invia il segnale di wake al PC a cui è collegato ad un istante configurabile. Tutta la configurazione avviene tramite il collegamento seriale: l’Arduino utilizzato (Pro Micro) è infatti in grado di presentarsi al PC come device composito, che implementa:

  • una porta seriale virtuale (CDC)
  • un device di tipo human interface (HID), come tastiera o mouse

Ad Arduino Pro Micro ho affiancato un modulo realtime clock (RTC) di SparkFun. Tale modulo è basato sul chip DS1307, collegato ad Arduino via bus I2C.

Ho realizzato il tutto su basetta millefori, inserendo sia l’Arduino che il modulo RTC in un unico zoccolo per circuiti stampati:

wmu-2 wmu-3

Wake e System Power States

Un computer può essere in diversi stati, codificati da un codice ACPI:

  • S0 (working), stato di utilizzo normale
  • S1-S2-S3 (sleeping), differenti stati di sleep (il PC è sospeso in memoria RAM)
  • S4 (hyberntion), il PC sembra spento, il suo stato è memorizzato su disco fisso
  • S5 (soft off), il PC è spento, solo alcuni componenti (scheda di rete, periferiche USB…) sono alimentate
  • G3 (mechanical off), il PC è spento tramite interruttore fisico, nulla è alimentato

Normalmente tutte le schede madri supportano il wake dagli stati S1-S2-S3, mentre soltanto alcuni supportano anche il wake da S4-S5 (il wake da G3 è ovviamente impossibile non essendo alimentato il dispositivo USB).

Alcune schede madri consentono di effettuare il power on by mouse or keyboard ma tali dispositivi devono essere PS2 e non USB.

La configurazione di questa feature avviene tramite il BIOS della scheda madre, dove è anche possibile decidere di alimentare le periferiche USB nei vari stati (è spesso utilizzata per poter ricaricare dei dispositivi via USB anche a PC spento):

wake-bios1 wake-bios2

E’ importante verificare nelle proprietà del dispositivo HID che sia flaggata l’opzione allow this device to wake the computer

wake-key

Arduino

Lo sketch per Arduino è disponibile nel mio repository su Github.

Perché Arduino sia in grado di inviare il segnale di wake al PC, è necessario sostituire la libreria USB che viene fornita con l’IDE con una versione modificata dall’utente Mike T e resa disponibile sul forum ufficiale.

Lo zip (che potete scaricare anche qui) contiene 4 files, che vanno salvati (sostituendo gli esistenti) in \hardware\arduino\avr\cores\arduino (all’interno della cartella principale dove avete installato l’IDE).

Ho verificato la compatibilità di questa versione modificata della libreria USB con l’ultima versione disponibile (1.6.3) dell’IDE al momento della scrittura di questo articolo. Ricordatevi sempre di effettuare un backup dei files esistenti.

Lo sketch utilizza anche la libreria RTCLib di Adafruit per dialogare con il modulo RTC: per la sua installazione potete sfruttare il nuovo Library Manager.

WakeMeUP supporta due semplici comandi, inviati via seriale:

  • T, visualizza l’ora corrente, letta dal modulo RTC
  • Whhmm, imposta (e memorizza nella EEPROM) l’orario in cui inviare il segnale di wake

wake-serial
La versione modificata della libreria USB consente di inviare il segnale di wake con un semplice comando:

USBDevice.wakeupHost();

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi