PDA

View Full Version : [C/C++, Processing, tutto fa brodo :D]Lettura sensori motherboard su sistemi windows


Pelletta
01-01-2010, 23:11
Salve a tutti, sto cercando un modo per leggere via software i valori letti dai sensori della scheda madre per poi inviarli dalla porta seriale del pc ad un arduino 2009. I valori da leggere sono ad esempio l'uso del processore, l'uso della ram, le varie temperature,... più o meno gli stessi dati di alcune utility di monitoraggio del pc. Ho sperimentato la cosa su un sistema linux (kubuntu) e devo finire di perfezionarlo. In pratica ho installato lm-sensors e dopo averlo configurato da terminale scrivo " sensors > /dev/ttyUSB0 ". In questo modo i valori restituiti vengono inviati sulla seriale di arduino (usa la comunicazione seriale anche se è usb). Successivamente arduino fa un parsing del dato ricevuto e gestisce le sue uscite. Questo per linux, ma su XP come si può fare? Cercando in rete ho trovato molti programmi che monitorizzano questi dati, ma non so proprio come poterli "intercettare" per poi inviarli ad arduino. A programmazione diciamo che sono messo piuttosto male, sto imparando adesso il linguaggio processing e C/C++, qua mi sa che si deve andare ad interagire con le API di windows. Un altro metodo che potrei usare è quello di andare a prendere i valori nei file di log del sistema, ci saranno da qualche parte ma proprio non ho idea di dove trovarli. Il secondo metodo credo sia piuttosto pesante per il sistema, se ad esempio ogni due secondi crea il file di log, poi lo apre, lo legge, ecc. Avete dei suggerimenti su come prendere questi dati via software su sistemi windows? Ogni suggerimento è ben accetto...

CwNd
02-01-2010, 11:08
Non so bene quali parametri ti servono ma so per certo che uso e cpu e occupazione ram sono supportati dalle WMI (probabilmente anche le tem, percui il mio suggerimento è di creare un windows service (in c# è abbastanza semplice e trovi parecchi tutorial) che periodicamente interroga il sistema interroga queste API e invia i dati sulla seriale.

esempio WMI (in 3 righe ti prendi quello che ti serve): http://stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c

Altro tool indispensabile per lavorare con le WMI: http://www.microsoft.com/downloads/details.aspx?FamilyID=6430f853-1120-48db-8cc5-f2abdc3ed314&DisplayLang=en

esempio windows service:
http://www.switchonthecode.com/tutorials/creating-a-simple-windows-service-in-csharp

(dentro ci piazzi un Timer che periodicamente esegue il codice per prendere i dati tramite le wmi e sei apposto)

sprik
02-01-2010, 23:19
Ti basterà ricavare il MIB (Managment Information Base) tramite protocollo SNMP (Simple Network Management Protocol).
In parole più comprensibili, il MIB è un vero e proprio messaggio composto dal gruppo di appartenenza, da un parametro univoco e da una descrizione. Tramite un agente SNMP possiamo intercettare questi messaggi e ricavare molte informazioni del sistema, come il numero di processi, la temperatura, la memoria libera, descrizione della macchina, ultimo riavvio, errori, configurazione della rete, ecc.