Falaremos neste artigo, como obter a temperatura da placa de Vídeo (GPU) NVIDIA.
Abordaremos o procedimento mais simples de integração, e leitura das informações da placa de vídeo, integrando com Lazarus.
A placa de vídeo, hoje é requisito obrigatório para qualquer computador realmente robusto.
Placas de vídeo com grande capacidade, por vezes precisam ser monitoradas para evitar super aquecimento .
Atualmente projetos de CASEMOD não seriam realmente case mode, se não lerem estas informações.
Pensando nisso a NVIDIA, lançou um conjunto de ferramentas que auxiliam o desenvolvedor na obtenção de forma fácil e assertiva, na leitura das informações da GPU.
O NVIDIA System Management Interface é um utilitário, baseado no NVML (NVIDIA MANAGEMENT Library) que gerencia e monitora dispositivos NVIDIA.
Este utilitário tambem administra por pesquisas por estado de dispositivo GPU , atribuindo privilegios , permitindo administradores modificares o estado da GPU.
NVIDIA-smi é embarcado com o driver para linux do NVIDIA GPU , e windows 64bits (WIN7/2008).
O NVIDIA-smi pode fornecer informações em formato XML ou em arquivo texto simples.
Este projeto, implementa uma camada, que permite ler as informações da BIOS do computador.
Com ela é possível acessar informações, como memória, temperatura, e tantas outras informações.
Um exemplo de uso, esta no projeto relógio, a função GetMemorySize lê a quantidade de memória disponível no seu PC.
function GetMemorySize : DWORD;
Var
SMBios : TSMBios;
LPhysicalMemArr : TPhysicalMemoryArrayInformation;
begin
SMBios:=TSMBios.Create;
try
if SMBios.HasPhysicalMemoryArrayInfo then
for LPhysicalMemArr in SMBios.PhysicalMemoryArrayInfo do
begin
if LPhysicalMemArr.RAWPhysicalMemoryArrayInformation^.MaximumCapacity<>$80000000 then
begin
result := LPhysicalMemArr.RAWPhysicalMemoryArrayInformation^.MaximumCapacity div 1024;
break;
end
else
begin
result :=LPhysicalMemArr.RAWPhysicalMemoryArrayInformation^.ExtendedMaximumCapacity div 1024;
break;
end;
end
else
result := 0;
finally
SMBios.Free;
end;
end;
Existem diversos exemplos de código nesta maravilhosa biblioteca, e vale a pena rever e estudar este código.
O Projeto do Relógio contem vários módulos, mas vc pode baixar os códigos do HMI, dentro da pasta Nextion
Exemplo de Código em Lazarus
Montei um pequeno exemplo em Lazarus que interage com o projeto do displaypc.HMI
Neste tópico vou falar um pouco sobre o programa que montei para testar.
O projeto esta dentro da pasta teste do git.
relogio\teste\lazarus
E pode ser chamado pelo Lazarus 2.0, conforme figura abaixo:
Neste pequeno exemplo faço a integração com lazarus do display Nextion, apresentando como o protocolo do mesmo funciona.
No fragmento abaixo, chamo a page com indice 1.
LazSerial1.WriteData(‘page 1’+#255+#255+#255);
Podemos perceber, que ao final, sempre será necessário incluir o FF FF FF, pois é padrão do protocolo.
Neste pequeno exemplo, fazemos a barra de progresso, sair de 0 ate 100%
procedure TForm1.Button5Click(Sender: TObject); var a : integer; begin for a:= 0 to 100 do begin LazSerial1.WriteData(‘val02.val=’+inttostr(a)+#255+#255+#255); LazSerial1.WriteData(‘prog02.val=’+inttostr(a)+#255+#255+#255); sleep(100); end; end;
Abaixo, vemos a tela, de status, onde aparece os componentes prog02 e val02.
Em breve falarei mais sobre o casemod, apresentando o exemplo do fonte.