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.
E 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.
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!
Arduino – Sensor de temperatura Parte4 by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.