ARDUINO e PHP conexão via html, controle remoto do arduino, via servidor web!!

Postado 11:00 16/09/2016 por COMPARTILHAR

Fonte: https://ferpinheiro.wordpress.com/2011/08/18/arduino-e-php-controlando-seu-arduino-atraves-da-internet/

O post de hoje procura demonstrar de maneira fácil e rápida como é possível criar uma aplicação para controlar o arduino através de uma pagina web utilizando HTML e PHP. Como ainda não possuo o shield ethernet, farei um exemplo utilizando apenas a placa arduino. Os componentes para isso são:

– Um computador com o Ubuntu 10.10.
– Um Arduino.
– Alguns Leds.

Para criar a aplicação o usuário deverá ter o mínimo de conhecimento em :

– PHP.
– C/C++.
– Html.
– Linux.

Precisará também ter instalado o Apache e PHP para poder rodar os scripts em PHP. Caso não saiba como fazer isso veja o link  AQUI.

Figura ilustrado o processo que será criado através dos códigos e o arduino:

Inicialmente criaremos a pagina HTML contendo os botões responsáveis por acender os leds. Veja  as TAGS (“código”) abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<html>
<head>
<meta http-equiv="Content-Language" content="pt-br">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Controle de Leds com Arduino</title>
</head>
<body>
<div align="center">
    <table border="0" width="15%" cellpadding="0">
        <tr></tr><tr><td>
 
<!--------------POST DO BOTAO LIGAR AMARELO------------------------>
<form method="POST" action="arduino.php">
<p>
    <input type="hidden" value="Amarelo" name="estado" >
    <input type="submit" value="Ligar Led Amarelo" name="amarelo">
</p>
</form>
    </td></tr><tr>
 
<!--------------POST DO BOTAO LIGAR AZUL--------------------------->
 
<form method="POST" action="arduino.php">
 
    <input type="hidden" value="Azul" name="estado" >
    <td><input type="submit" value="    Ligar Led Azul    " name="azul">
</td>
</form>
        </tr><tr><td>
 
<!-------------POST DO BOTAO LIGAR LARANJA------------------------->
 
<form method="POST" action="arduino.php">
<p>
    <input type="hidden" value="Laranja" name="estado" >
    <input type="submit" value="  Ligar Led Laranja" name="laranja">
</p>
</form>
        </td></tr><tr>
 
<!------------POST DO BOTAO LIGAR VERDE--------------------------->
 
<form method="POST" action="arduino.php">
 
    <input type="hidden" value="Verde" name="estado" >
    <td><input type="submit" value="   Ligar Led Verde   " name="verde">
</td>
</form>
    </tr>
    </table>
</div>
</body>
</html>

Copie o código em um arquivo e salve com o nome de index.html

Vamos ao código PHP.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*********************************
Autor: Fernando Krein Pinheiro
Data: 18/08/2011
Linguagem: PHP
========= IMPORTANTE ===========
O código esta livre para usar,
citar e compartilhar desde que
mantida sua fonte e seu autor.
Obrigado.
********************************/
 
<?php
 
$port = fopen("/dev/ttyUSB0", "w");
if ($_POST['estado']=="Amarelo")
{
    echo "Ligou o Amarelo";
    fwrite($port, "a");
}
    if ($_POST['estado']=="Azul")
    {
        echo "Ligou o Azul";
        fwrite($port, "z");
    }
        if ($_POST['estado']=="Laranja")
        {
            echo "Ligou o Laranja";
            fwrite($port, "l");
        }
            if ($_POST['estado']=="Verde")
            {
                echo "Ligou o Verde";
                fwrite($port, "v");
            }
fclose($port);
?>

Copie o código em um arquivo e salve com o nome de arduino.php

Copie o codigo HTML e o PHP para o diretorio www para poder executa-los pelo browser.
Para isso você poderá usar o comando: cp index.html arduino.php /var/www
De permissão de execução para os arquivos: chmod 755 index.html arduino.php

E para finalizar criaremos o código do arduino.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*********************************
Autor: Fernando Krein Pinheiro
Data: 18/08/2011
Linguagem: C (Wiring)
========= IMPORTANTE ===========
O código esta livre para usar,
citar e compartilhar desde que
mantida sua fonte e seu autor.
Obrigado.
********************************/
 
int ledPin13 =  13;
int ledPin11 =  11;
int ledPin9  =  9;
int ledPin7  =  7;
 
void setup()   {
 
  Serial.begin(9600);
 
  pinMode(ledPin13, OUTPUT);
  pinMode(ledPin11, OUTPUT);
  pinMode(ledPin9, OUTPUT);
  pinMode(ledPin7, OUTPUT);
 
}
 
void loop()
{
  char caracter;
  caracter = Serial.read();
  //se pressionado "v" liga o led verde
  if(caracter == 'v')
  {
      digitalWrite(ledPin13, HIGH);
  }
  else
    //Se pressionado "z" liga o led azul
    if(caracter == 'z')
    {
         digitalWrite(ledPin11, HIGH);
    }
    else
      //S pressionado "l" liga o led laranja
      if(caracter == 'l')
      {
         digitalWrite(ledPin9, HIGH);
      }
      else
        //Se pressionado "a" liga o led amarelo
        if(caracter == 'a')
        {
            digitalWrite(ledPin7, HIGH);
        }
 
  delay(1000);
}

Uma breve explicação sobre a porta serial no Linux.
Os dispositivos como portas seriais, usb, mouse, teclado etc…, são representados através de arquivos, logo é possível que o programador possa manipula-los de uma forma “rudimentar” utilizando funções para manipulação de arquivos encontradas nas linguagens de programação como PHP e C/C++.

As duas linguagens possuem a função fopen() que serve para a manipulação de arquivos, então torna-se possível abrir a porta serial, ler e escrever na mesma utilizando essa função. Veja no código PHP abaixo.

1
$port = fopen("/dev/ttyUSB0", "w");

Existe uma variável chamada $port que recebe o retorno da função fopen().
A função fopen() recebe como parâmetro o caminho da porta “/dev/ttyUSB0” e ainda o parâmetro “w” que significa write (escrever).
Dessa maneira abrimos a porta serial e avisamos há ela que será escrito algum tipo de dado.

Concluída a parte de códigos, vamos ao esquema de montagem dos leds no Arduino.

Faça o upload do código para o arduino.

Com tudo pronto só nos resta testar os códigos para ver se ocorreu tudo conforme o esperado. Mas antes disso vamos dar permissão de leitura e escrita na porta serial, para isso acesse o terminal do ubuntu como root e digite o comando:

sudo chmod a+rw /dev/ttyUSB0

Um erro muito comum para quem esta começando a manipular a porta serial é esquecer de dar as permissões necessárias para leitura e escrita, por isso nunca esqueça de dar a permissão acima antes de executar seu projeto.

Após isso abra um browser e acesse seu localhost. VOce deverá ver uma tela como essa:

Teste os botões e veja o resultado… Confira o vídeo de demonstração:

Download dos códigos comentados e esquema de hardware do arduino.

Bem então é isso, qualquer duvida entre em contato!!

OBSERVAÇÃO:

Muitas pessoas reportam um erro comum quando usam essa solução. O erro parece ser mais comum em usuários Windows.

O que ocorre é que ao tentarem ligar os leds através da pagina HTML+PHP o led apenas pisca e não se mantém ligado como mostrado no vídeo, isso ocorre devido ao modo com que a porta serial (USB) está configurada. Quando um sinal é enviado para o arduino através do PHP o mesmo é resetado e volta ao seu estado inicial, ou seja apenas pisca e fica apagado.

Um dos leitores do blog encontrou uma solução simples e que foi testada por ele mesmo, mostrando-se eficaz na correção desse problema. Segue um trecho do email enviado por ele:

” O Windows (e somente alguns unix) envia um sinal para dar um reset no Arduino pela comunicação serial. Existe um método que você desabilita configurando o sistema operacional, na configuração da porta, ou então, você desabilita esse reset no próprio Arduino via hardware. O que eu tive que fazer foi ligar um resistor de 110 ohms entre o pino reset e o vcc do arduino. Agora o meu código esta funcionando normalmente sem o reset!

“PABLO DUTRA”

A solução em negrito foi testada por mais um leitor que usou um resitor com resistência diferente a 110 ? e obteve o mesmo resultado….

Fonte: https://ferpinheiro.wordpress.com/2011/08/18/arduino-e-php-controlando-seu-arduino-atraves-da-internet/

Comentários