Arduino – Sensor de temperatura Parte4

O post 4 da série Sensor de temperatura utilizando Arduino era outra modalidade para manipular e armazenar o valor da temperatura porém recebi vários e-mails com problemas de obter o valor da temperatura usando Windows, como testei tudo em plataforma Linux e apenas a comunicação (TX) usei em Windows não realizei os demais testes e o leitor Arthur me enviou um e-mail reportando o erro, este final de semana fui realizar o teste e o mesmo erro foi apresentado, segue a tela do erro abaixo.

erroPHPPortSerialWindowsE se você atentar um pouco mais ao erro reportado ele esta dizendo que leitura da serial ainda não esta implementada para Windows, então acessei o arquivo do erro php_serial.class.php na linha do erro [504] e cheguei a seguinte função.

.
.
.
elseif ($this->_os === "windows")
{
/* Do nohting : not implented yet */

}

trigger_error("Reading serial port is not implemented for Windows", E_USER_WARNING);
return false;
.
.
.

Ok, não tem implementado em Windows isso ainda nessa lib.
Fiz alguns testes com comandos que funcionariam como o fgets(porta), e um sleep() antes de receber e funcionou, porém não temos um controle como na implementação para receber em Linux e fui estudar a readport() para Linux como funcionava, com o seguinte código:

.
.
.
$content = ""; $i = 0;

if ($count !== 0)
{
do {
if ($i > $count) $content .= fread($this->_dHandle, ($count - $i));
else $content .= fread($this->_dHandle, 128);
} while (($i += 128) === strlen($content));
}
else
{
do {
$content .= fread($this->_dHandle, 128);
} while (($i += 128) === strlen($content));
}

return $content;
.
.
.

E não vi nada que “amarrasse” esta função a plataforma Linux já que fread é do PHP strlen também, o fread esta lendo o _dHandle da conexão serial até 128 bytes.
Como não vi problemas de compatibilidade, inseri o código dentro da função para windows e testar e ver os erros e apenas copiei este código para dentro do elseif do windows, ficando como abaixo:

.
.
.
elseif ($this->_os === "windows")
{
/* Do nohting : not implented yet */
$content = ""; $i = 0;

if ($count !== 0)
{
do {
if ($i > $count) $content .= fread($this->_dHandle, ($count - $i));
else $content .= fread($this->_dHandle, 128);
} while (($i += 128) === strlen($content));
}
else
{
do {
$content .= fread($this->_dHandle, 128);
} while (($i += 128) === strlen($content));
}

return $content;

}

trigger_error("Reading serial port is not implemented for Windows", E_USER_WARNING);
return false;
.
.
.

Salvei. E fui testar.

SolucaoPHPPortSerialWindows

Realizei poucos testes, porém nenhum erro foi reportado, até poderia tirar aquele trigger_error(), mas é bom testar um pouco mais pra verificar a confiabilidade desta adaptação e o porque de não ter sido implementado, testei com Windows 7 e com sucesso.

Modifiquei o arquivo php_serial.class.php e subi o arquivo em paralelo ao original, para quem tiver problemas com o Windows, favor baixar este outro arquivo aqui.

Até a próxima!

Share Button

CC BY-NC-SA 4.0 Arduino – Sensor de temperatura Parte4 by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.