Arduino – Sensor de temperatura Parte3

Dando continuidade a série Sensor de temperatura, vamos agora visualizar a temperatura via web, resultado final abaixo:

PaginaArduinoWebTempCustomizada01

Antes de continuar é recomendado ler os dois primeiros posts sobre Sensor de temperatura caso contrário não irá entender alguns passos, ou não irá funcionar,  caso esteja acompanhando a série pule as duas linhas abaixo e prossiga.

Sensor de temperatura Parte1

Sensor de temperatura Parte2

O ambiente que estou utilizando é uma maquina virtual Linux Ubuntu com o VirtualBox, e como realizei este post em casa, a porta serial é uma COM do Windows e você terá que “mapear” no VirtualBox caso contrário irá ter problema, escrevi um post sobre como resolver isso Compartilhar porta serial do Windows para o Linux, se não estiver usando maquina virtual apenas prossiga com o post.

Chegando até aqui, imagino que a Parte1 e Parte2 foram compreendidas e implementadas e a porta serial esteja funcionando, seja utilizando uma maquina [virtual,física].

Para acessar nossa página via web e funcione, você precisara de um servidor web com PHP esteja rodando em sua máquina [virtual, física], como antes de escrever essa série eu vi todas as dificuldades e etapas eu fui antecipando os passos, também escrevi um post sobre como instalar um servidor web com PHP em Linux e Windows, segue os links abaixo:

Instalando um servidor web para o Linux

Instalando um servidor web para o Windows

Agora sim, estamos com nosso ambiente pronto e apto para começar. Então primeiramente crie um diretório chamado arduino no /var/www caso esteja utilizando Linux ou C:xampphtdocs caso esteja utilizando Windows, e dentro do diretório arduino crie um arquivo chamado index.php.

Para realizar o passo no Linux:

Agora utilize qualquer editor para HTML, PHP, CSS e demais no caso de Linux via terminal você pode usar vim ou nano e em ambiente gráfico pode utilizar Bluefish ou Gedit, no Windows pode utilizar notepad++, Bluefish ou qualquer outra ferramenta que você conheça, estarei utilizando vim e Bluefish.

Para comunicar via serial já sabemos que no Windows (COMx) e no Linux(ttySx) sendo x o número da serial, e para comunicar via web? No caso iremos utilizar o PHP para esta tarefa, e para facilitar a vida de todo mundo já tem uma biblioteca diria eu já implementada para esta tarefa, quem escreveu foi Rémy Sanchez, faça download no arquivo em um dos links abaixo, e salve num diretório dentro de arduino chamado includes.

http://www.phpclasses.org/package/3679-PHP-Communicate-with-a-serial-port.html

http://www.geekymedia.com/tech-articles/php-serial-class-for-osx/

https://code.google.com/p/php-serial/

Agora crie outro arquivo chamado porta_serial.php no diretório arduino, e nossa estrutura de arquivos e diretórios deve ficar como abaixo:

Abra o arquivo porta_serial.php e cole o código abaixo:

Você deve copiar este código e colar, alterando apenas o valor na linha 11 $serial—>deviceSet(“/dev/ttyS2”), leia os comentários que expliquei o máximo possível.

E a sacadinha esta $serial->sendMessage(“t”), que envia nosso carácter “t” que programamos no firmware do Arduino e em $ler_serial = $serial->readPort(), quando capturo a resposta do Arduino, sendo $ler_serial uma variável global do PHP que eu posso acessar de outro .php que incluir este arquivo, que é que vamos ver no próximo passo.

Agora edite o index.php e copie e cole código abaixo:

O código PHP é o que esta entre <?php ?> o resto é HTML, e olha temos pouquíssimas linhas, nos comentários expliquei o passo a passo única observação é o trim(), no caso ele remove espaços antes e depois do valor, é útil vai por mim, iremos usar no próximo post mas já adiantei aqui. Agora abra um navegador no seu computador ou em alguma maquina da rede e coloque http://127.0.0.1/arduino caso esteja executando local ou http://192.168.0.90/arduino para acessar via rede ou de uma maquina virtual como é o meu caso, lembre de mudar o IP 192.168.0.90 para o da sua maquina virtual ou da maquina que esta rodando o servidor web. PaginaArduinoWebTempBasica

Problema

Foi quando testando em outra VM Linux minha, no caso Mint 14 a seguinte pagina abriu sem nenhum erro reportado: PaginaArduinoWebTempBasicaProblema Cadê a temperatura? Pois é também assustei, como estou utilizando Linux, pensei bom vou executar o index.php direto no terminal e ver o que reporta no shell.

E para minha surpresa a temperatura é exibida, bom então esta funcionando, e porque via web não funciona?!?

Analisando o log do apache2 olha o que é reportando quando tento acessar:

Resumindo, não vou explicar detalhadamente senão este post vai ficar enorme, mas no popular pelo erro esta dizendo que não ter permissão, porque não consegue ler, e é exatamente isso via web o usuário que tenta fazer todo o acesso e execução é o www-data usuário/grupo do apache, e no /dev/ttyS2 www-data não tem acesso para ler quanto menos gravar.

Então com já passei por isso quando estava escrevendo um script para VoIP eu sabia resolver, foi adicionar o usuário www-date ao grupo dialout do Linux, segue o passo abaixo:

Solucionado este problema nosso acesso via web esta pronto, e você irá obter a temperatura através da web utilizando o Arduino, agora um pouco que “perfumaria” utilizando CSS conseguimos deixar nossa pagina um poucos melhorzinha e com alguns recursos amais, como nas imagens abaixo:

PaginaArduinoWebTempCustomizada01

PaginaArduinoWebTempCustomizada02

PaginaArduinoWebTempCustomizada03
.

Para baixar todos os arquivos do sistema web, clique aqui.

Arduino – Sensor de temperatura Parte4 [Correção de leitura da serial no Windows]

Até a próxima!

Share Button

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

  • Como você esta usando Windows, você mudou a linha
    $serial->deviceSet(“/dev/ttyS2”);
    Do porta_serial.php para no lugar de /dev/ttyS2 você inserir a porta serial que o Windows usa? Algo como COM1 ou COM2 por exemplo?

    • Valeu pela dica!

      Consegui corrigir um dos problemas, mas ainda existe outro erro:

      Notice: Undefined variable: ler_serial in C:wampwwwarduinoindex.php on line 34

      Não consigo identificar onde existe erro nessa variável, se souber fico grato.

      Atenciosamente,

      • No arquivo porta_serial.php temos a seguinte linha:

        global $ler_serial;
        $ler_serial = $serial->readPort();

        E no index.php temos o require(“porta_serial.php”)
        e na linha 34
        $temperatura = trim($ler_serial);

        Ou seja como eu “pedi para anexar” o arquivo porta_serial e claro todas as funções lá tenho o $ler_serial como variável global, irei acessar de qualquer outro local e ter acesso ao que chegar pela serial.
        O trim() é só para remover os espaços em branco.

        Estranho que a impressão que tenho é que parece que o arquivo porta_serial não esta no mesmo lugar.

      • Foi corrigido um erro na class utilizada que impediria o readport() em Windows, segue o link do post que explico a correção para Windows.

        http://cleitonbueno.wordpress.com/2013/05/19/arduino-sensor-de-temperatura-parte4/

  • tiago valete

    Amigo você conseguiu utilizar isso no Windows tbm? eu troquei /dev/ttyS2 por COM3 mais ta dando pau, você poderia me ajudar estou desesperado, ja faz 3 meses que estou tentando e nao consigo fazer funcionar a captura de dados.

  • Olá Amigo .. boa tarde!

    Queria pedir uma ajuda..

    Tentei .. usar esses códigos para conectar com a porta serial do arduino e mostrar a temperatura e umidade do ar .Mais nao consegui exito.

    Agora no windows com o Xampp instalado , conseguir tranquilo .. o meu problema e que meu server ! e um Linux Com CENTOS 6.4 ,

    Bem dai pesquisando e vi que nao tinha muito mistério.
    Consegui ler o que se passava na porta serial com esse código.

    Meu problema é que as vezes aparece faltando letra, as vezes some tudo .. as vezes aparece só o nome ( temperatura ) as vezes so aparece o valor ..
    Nao sei o que fazer… tentei varias formas de conexão para ver se dar certo .. para ver se consegui ler .. mais nao obtive muito sucesso .. agora sera que e por causa do CentOS … alguma outra … sabe la o que é …

    Se puder me dar ajudar encontra uma luz..
    no meu ultimo caso ( e formata o Server ) :|

    Estou usando o sensor DHT11 . com o código básico onde imprime na serial os valores Temperatura e Umidade do Ar.


    Desculpe pelo tamanho do texto.

    Desde ja agradeço .. abraços.

  • joao

    Olá Amigo Cleiton,

    Sou um seguir dos seus posts e quero deixar uma mensagem de agradecimento por tudo o que tem ajudado o pessoal.

    No meu caso estava seguindo todos os passos que você aqui falou e tudo estava dando certo até esta parte 3. Acontece que eu estou usando um MAC, e fiz tudo exactamente como você disse, mas quando vou no meu browser e coloco o meu IP tem a mensagem de erro dizendo “Fatal error: Class ‘phpSerial’ not found in /Users/joao/Sites/mbed/porta_serial.php on line 9” . Eu sei o que significa mas eu tenho a pasta includes com o documento php_serial.class.php para MAC.

    Já lhe aconteceu alguma vez?

    Muito Obrigado

    • Os caminhos conferem? O includes esta dentro do mbed? De Windows/Linux eu consigo testar agora SO Mac não consigo não possuo Mac aqui, imagino que o tratamento do device da serial igual do Linux, pode ser algo com permissão, tente setar a permissão do /dev da USBSerial para 777, isso é um chute :)

  • juliano

    ola
    parabens pelo tutorial, deu tudo certo no windows
    eu gostaria de usar o exemplo e ao inves de enviar a temperatura
    enviar um update para o sqlite, como faço isso ? sei pouco sobre .php
    grato
    Juliano

  • Williams Dantas

    Boa noite cleiton estou usando sensor DHT11 MAS NÃO DA CERTO AQUI VC PODERIA VER O ESTA ERRADO NO MONITOR SERIA FICA ASSIM valor temp

    496.58

  • Williams Dantas

    sera que tenho que usar so o lm35 pra este codigo

  • Williams Dantas

    vc poderia manda codigo com dht11 ou lm35 completo

    • O código fornecido é utilizando o sensor LM35 Williams, não implementei com DHT11, tanto que um é analógico e outro digital.

      Abraço.

      • Williams Dantas

        OBRIGADO CLEITON CONSEGUI FAZER AQUI UTILIZANDO AQUELE QUE VC DISPONIBILIZA COMO A PASTA E DOCS ARQUIVO PHP, MAS O CHAMADO ARDUINO- ESTE EUCONSEGUI ,

        TO TENTANDO FAZER AGORA O TEMPUINO MAS ABRE A PAGINA BONITINHA MAS NÃO MOSRA A TEMPERATURA- DIFERENTE DO ARDUINO SE TIVER ALGUMA DICA EU AGRADEÇO

      • Williams Dantas

        QUAL É O CODIGO QUE VC USA PARA TEMPUINO É O MESMO QUE O ARDUINO?