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.

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:

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:

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.

  • Arthur Lima

    Opa, vou testar, qualquer coisa posto um feedback aqui. vlw!

  • Valeu, também vou testar aqui e incrementar ainda mais.

    Obrigado!

  • Alexandre Yoshikawa

    Cleiton, bom dia.

    Já tem um tempo que acompanho seu blog e gostaria de dizer que aprendi muito.
    Parabéns por compartilhar seu conhecimento.

    Gostaria de uma opinião sua ou de quem quiser opinar a respeito.

    Estou montando um projeto de automação para nova casa que vou construir então já estou fazendo alguns testes para tal.

    A dúvida é referente a interface que vai conversar com o Arduíno.

    Alguns teste que realizei:

    1-Interface em html no código Arduíno
    Inserir junto com o código do arduíno alguns botões em html para que o browser interprete e mostre alguns botões na tela.
    Funciona porém depois de um tempo (Em torno de uma semana) o arduíno deixa de responder tendo que dar reset na placa.

    2-Interface em PHP
    Achei bacana a interface com PHP porém como não quero deixar um micro rodando em casa ou teria que deixar em um servidor fora.
    O problema é a questão da segurança.
    Mesmo colocando uma senha na aplicação não sei se seria seguro, tipo vai que meu vizinho hacker consiga quebrar a senha e abra o portão automático…rs.

    3-Interface em HTML dentro do cartão SD (W5100)
    Este estou montando e ver no que vai dar.

    Sabe me dizer se existe algum programa (para interface) para instalar no micro que converse com o arduíno?

    Qual interface na sua opinião mais robusta para se trbalhar?

    E o Raspberry Pi, já começou a “brincar” com a criança?
    Estava pensando em comprar um.

    Abs.

    • Opa, que bom que o blog ajudou você.
      Então interagir web Arduino é muito legal e traz facilidades porém eu mesmo no meu TCC não consegui trabalhar com nada web no Arduino + EthernetShield como você mesmo diz “segurança”.

      Linguagens como PHP, Python, Ruby esquece porque necessita de um framework para funciona Arduino é apenas HTML/CSS no máximo um JavaScript.
      Eu recomendaria o levantamento de requisitos e repensar um servidor web para tal tarefa, local ou remoto, já que hoje em dia esta bem fácil alugar serviços de hospedagem em maquinas virtuais na web.

  • Bom dia!

    Com esse novo arquivo tudo está funcionando corretamente, valeu pela dica e parabéns pelas publicações!

    Atenciosamente,

    Kennedy Sampaio
    GP – LG Sistemas

  • bruno

    Cara eu pretendo fazer um trabalho na facul, que constite em ler a deformação de uma material, quando se apleca-se uma carga sobre ele, pra isso vou utilizar extensometros colados no material e que variam a sua resistencia de acordo com a deformação, vou colocar os extensometro em uma ponte de wheatstone, aplcar um tensão conhecida e mediar a tensão ‘dentro” da ponte da forma que quando não tiver nenhuma carga ou seja deformação zero, e tensão de saida vai ser zero, e se tiver alguma carga havera deformação e o sinal de saida será deiferente de zero, porém eu queria fazer com que esse sinal de saida “enrasse” no computador de modo que e possa converter ele em força apos uma calibração, o arduino pode ser aplicavel nesse cado porem nunca mexi nisso, tem como vc me dizer que tipo de arduino eu presciso ter, e programas tenho que ter tbm, acabei de baixar o labview, mas soh porinquanto,

    • Interessante seu trabalho, não tenho conhecimentos em Labview, você não me falou o numero de extensômetros que você irá ter no material isso influencia, pois no Arduino UNO e Arduino Nano que acho que são dois ótimos para você iniciar possuem 6 portas analógicas (A0 – A5) com resolução de 10bits o ADC, e creio que sirva pra realizar a maioria das tarefas que esse perfil de I/O’s sirvam.
      Porém caso precisar de mais portas analógicas que são as portas que você irá utilizar para o sensor extensômetros (0 – 5V ) | (0 – 20mA) você deverá utilizar o Arduino Mega que possui 16 portas analógicas (A0 – A15).
      Então minha dica seria:

      a) Verifica qual os Arduino atende sua necessidade, referente as entradas analogicas
      b) 10bits de resolução ta bom? Ou vai ficar cego em certas mudanças?
      c) No Arduino voce irá fazer o firmware, no computador o software que irá enviar/receber dados que pode ser feito em qualquer linguagem e software que comunique serial.
      d) Vi que citou sobre quando não haver carga, então pense em trabalho com resistores em pull-down para não ter problemas com ruídos indesejáveis e se o cabo for longo utilize os blindados.

  • Sérgio Cipriano

    O usei a php_serial.class.php alterada para windows e os seus respetivos ficheiros para abrir a Porta COM2, porem dá-me vários erros como por exemplo: Warning: Specified serial port is not valid in C:wampwwwincludesphp_serial.class.php on line 111.

    Pelo o que tive oportunidade de ler, o erro parece ser commum a muita gente por esses fóruns fora… Vi neste fórum: http://labdegaragem.com/forum/topics/acesso-a-porta-serial-em-php-no-windows-xp?id=6223006%3ATopic%3A286080&page=1#comments
    a necessidade de se instalar uma extensão php_com_dotnet.dll.

    Neste seu exemplo, tem esta extensão instalada para gestão da porta COM?

    • Vou tentar lhe ajudar Sergio.
      Acabei de subir minha VM Windows aqui e fiz o teste e esta funcionando seguindo o arquivo que fiz neste post.
      No caso estou utilizando a COM3.

      $serial->deviceSet(‘COM3’);
      $serial->confBaudRate(9600); //Taxa de transmissao
      $serial->confParity(“none”); //Paridade
      $serial->confCharacterLength(8); //Comprimento
      $serial->confStopBits(1); //Bits de paragem
      $serial->confFlowControl(“none”);//Controle
      $serial->deviceOpen();

      E meu php_serial.class.php esta igual deste POST.
      O que ele não esta conseguindo é conectar na COM especificada.

      1) Esta correta a COM, verifiquei caso possua mais de uma no computador.
      2) Ela já não consta aberta por outra aplicação?

      Qualquer coisa reporte o que modificou e como esta seu ambiente que tentarei ajudar.
      Abraço.

    • Ola Sergio, acabei desconhecendo este erro pois não conheço, porém em diversos testes eu vi a mesma mensagem de erro quando ocorreu o seguinte caso.

      Eu deixei uma aplicação desktop conectado com a serial COM3 aberta e comunicando com o Arduino, eu esqueci e tentei abrir a aplicação web, e o mesmo erro é reportado, então pode ser que outra aplicação esteja utilizando a porta ou o Windows não conseguiu fechá-la.
      Depois que encerrei a aplicação, desconectei e conectei o Arduino a aplicação web voltou a funcionar.

  • Guilherme Rosario

    Boa tarde ,

    Estou passando pelo seguinte problema, funcion a apenas quando o serial monitor esta aberto, caso contrario ele nao funciona

    • Isso não é para ocorrer, algo esta errado.
      Verifique a porta especificada, vi alguns problemas que disseram que reinstalando o driver do FTDI resolveu.
      Porém isso que foi dito não tem sentido outra aplicação conectar e ela funcionar dessa maneira, já que seria “file descriptor” diferente então creio que não daria certo, revise o post e tente novamente, e caso persistir cole o código do erro que é mais fácil de ajudar.

  • Olá Amigo queria Parabenizar pelos Post… Gostei de mais !!

    Queria ver se podes me tira uma duvida !

    Tem como colocar dois ou 3 sensores de temperatura no arduino e mostra as informações no display Nokia 5110, Busquei na net achei vários tutorias.,, mais sempre mostrando uma leitura somente.. e porque quero colocar os sensores em ambientes diferentes, dai queria a leitura de cada um deles mostrando no display e via web com fez aqui que por sinal ficou muito bom ! ..
    se puder me ajudar esclarecer … obrigado

    • Olá Andre, tudo bom?
      Sobre utilizar 3 sensores, sem problemas é possível, sobre o display Nokia nunca utilizei, tive contato apelas com Display LCD 16×2 e 20×4.
      Mas se vai utilizar 3 sensores no Arduino, como você irá coloca-los em ambientes diferentes? Pois não se pode ter o comprimento entre sensor e Arduino o suficiente para mudar o ambiente, ou não sei como será o seu cenário para isso.

  • Nuno Fonseca

    Olá Cleiton, antes de mais parabens pelos execelentes trabalhos que tens partilhado.
    Estou trabalhando em ambiente windows, com o Bitnami WAAP stack, baixei os arquivos com a correção feita para o windows, mudei a porta COM, mas não consigo visualizar a temperatura.
    Quando abro a Serial Monitor e envio “t” vejo a temperatura. Agradeço qualquer ajuda, abraço

  • Nuno Fonseca

    Olá cleiton, no logs de erro e reportado:

    Specified serial port is not valid in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 111
    the device is either not set or opened in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 204
    Unable to set parity : the device is either not set or opened in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 254
    Unable to set length of a character : the device is either not set or opened in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 298
    Unable to set the length of a stop bit : the device is either not set or opened in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 335
    Unable to set flow control mode : the device is either not set or opened in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 376
    he device must be set before to be open in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 137
    Device must be opened in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 559
    Device must be opened to read it in C:\Bitnami\wappstack-5.4.30-0\apache2\htdocs\Arduino\includes\php_serial.class.php on line 474

    • Opa, Nuno belezinha?

      Eu subi minha VM aqui rapidinho e relembrei como funciona :), não uso Windows para isso!

      E testei com:

      $serial->deviceSet(‘COM5′);
      $serial->confBaudRate(9600); //Taxa de transmissao
      $serial->confParity(“none”); //Paridade
      $serial->confCharacterLength(8); //Comprimento
      $serial->confStopBits(1); //Bits de paragem
      $serial->confFlowControl(“none”);//Controle
      $serial->deviceOpen();

      No meu caso minha porta serial no Windows é a COM5, você esta usando a COM correta? Se tiver mais de uma terá que confirmar a correta, me parece que não esta conseguindo abrir a porta.

      E eu nunca usei WAPP Stack :(

      • Nuno Fonseca

        obrigado pelo feedback. Minha porta serial é COM28, confirmei mas continua dando o mesmo erro.

  • Nuno Fonseca

    consegui vizualizar a temperatura. o erro está na linha 7 do arquivo porta_serial.php, a especificação do caminho “require(“includes/php_serial.class.php”);” mudei para ” require(“includesphp_serial.class.php”);. Agora ta tudo certo. valeu

    • Humm, legal que descobriu. E que estranho ter sido isso será alguma particularidade do SO que esta usando ou do WAPP Stack? Qual versão do Windows esta usando?

      • Nuno Fonseca

        Tenho o windows7, mas instalei o WAMP Server. Depois vou fazer os teste com o WAPP server, uma vez que pretendo fazer um trabalho com o Postgresql. Abraç e obridado

  • Nuno Fonseca

    Olá Cleiton,
    Queria saber se dá para acrescentar um sensor de humidade no projecto, e assim vizualizar a temperatura e a humidade ma pagina web? Abraço

    • Opa, sim da sim. A ideia em si era um chute-inicial para através de um Arduino com sensor você poder armazenar os dados e visualizar via web, mas nada impedi em adicionar mais sensores, mudar a comunicação de USB para Ethernet, Wifi o custo disso será programação.

      Tenho em mente em breve publicar a mesma ideia da seria com comunicação Ethernet, usar um DHT11 (Temperatura e umidade) e plotar gráficos que são duas coisas que sempre recebo e-mails e o uso de Ethernet seria um extra ;)

      • Nuno Fonseca

        Valeu;)