Páginas

sexta-feira, 27 de agosto de 2010

Programando o Arduino com PHP. (Parte1 de 2)

Olá!
Em uma de muitas viagens pelo mundo da net, encontrei uma reportagem interessante sobre como editar os códigos no arduino com a linguagem "PHP". como programador sempre fui "Louco" em aprender uma linguagem nova, por isso estou postando buscando aprender e tirar as dúvidas que apareçam.
então vamos ao assunto!
O PHP é uma linguagem muito versátil, utilizada sobretudo em aplicações Web. É uma das linguagens que estou aprendendo e está sendo sem dúvida a minha preferida. Quando se tem uma base, é relativamente fácil aprender qualquer linguagem. Para mais informações, vejam os "Links" no final deste artigo.
Neste artigo não irei ensinar PHP, eu recomendado um conhecimento prévio e básico desta linguagem. De qualquer forma, pode ser um ponto de parida para aprender uma nova linguagem de programação. Vou tentar ser o mais explicativo possível, mas se tiverem dúvidas, não hesitem em colocá-las nos comentários deste artigo.
Além disto, apesar deste tutorial ser uma implementação do PHP no Arduino, funcionará
(com as devidas alterações) com qualquer outra linguagem que faça comunicação pela porta Serial.

Chega de conversa, vamos pôr mãos à obra. Este artigo está dividido em duas partes:
  • Aprender a comunicar com o Arduino usando o PHP
  • Pôr Arduino a comunicar com o PHP e vice-versa

Início:
Normalmente não podemos comunicar directamente com dispositivos USB como fazemos para enviar dados para uma impressora ou porta COM. Para a maioria dos dispositivos é necessário um driver especial. Felizmente, os designes do Arduino fizeram a ligação por USB um pouco diferente. O Arduino se conecta através de um controlador Serial por USB, isso significa que podemos abrir uma porta USB e enviar dados directamente para o Arduino, da mesma forma como fazemos com a porta LPT ou COM. É exactamente isso que vamos fazer: enviar dados do PHP para o Arduino e processá-los sem a necessidade de qualquer driver. Bom demais; então vamos a obra!


 Vou então explicar como se envia dados para uma porta USB através do PHP. O nosso Arduino corresponde a uma porta COM. Para saber o número dessa porta, basta abrir o Gestor de Tarefas, no Painel de Controle.

Procurar por um "USB Serial Port" (O meu XP está em Inglês) - é o teu Arduino - tem uma COMX, onde X é o número da porta COM.

Agora vamos ao código PHP utilizado para enviar dados pela porta COM. Reparem no código a seguir:

$fp = fopen("com5", "w");

fwrite($fp, chr(1));

flose($fp); Primeiro usaremos a função fopen para abrir ligação com a porta onde declaramos a função fp, usando o comando W, o que indica no PHP que vamos escrever (Write, em inglês).

De seguida, usaremos a função fwrite. Como já devem ter percebido é usada para enviar os dados. Dentro da função indicaremos a ligação (definida na variável fp) e enviamos o caracter "1". Reparem na função chr() - não podemos apenas enviar o valor inteiro, temos de o encriptar em ASCII, que é o que faz a função chr().

 No final fechamos a ligação. É muito importante que fechemos a ligação no final de enviarmos os dados que queremos.

 Resumindo:
  1. Abrimos ligação para a porta COM do Arduino
  2. Enviamos os dados
  3. Fechamos a ligação
Espero que estejam gostando!
Eis então o código!!!


Agora vamos à programação do Arduino. O que vou mostrar aqui é uma forma de testar se a ligação está correcta. Vamos fazer um programa simples: se o valor inteiro for 1, irá piscar 1 vez, se for 2, irá piscar 2 vezes. Fácil como a água. rsrsrsrs

int ledPin = 13;

int usbnumber = 0;

void setup() {

pinMode(ledPin, OUTPUT);

Serial.begin(9600);

}

void loop() {

if (Serial.available() > 0) {

usbnumber = Serial.read();

}

if (usbnumber > 0) {

if (usbnumber == 1){

digitalWrite(ledPin, HIGH);

delay(300);

digitalWrite(ledPin, LOW);

delay(300);

}

if (usbnumber == 2){

digitalWrite(ledPin, HIGH);

delay(300);

digitalWrite(ledPin, LOW);

delay(300);

digitalWrite(ledPin, HIGH);

delay(300);

digitalWrite(ledPin, LOW);

delay(300); }

}

usbnumber = 0;

}

}

Vamos por parte. Não se deixem intimidar pela extensão do código.

Antes do setup definimos que vamos usar o pino 13 do Arduino para ligar o LED.
E depois iniciaremos a variável que vai "carregar" o número lido pela USB.

No setup definimos que o pino do LED vai ser um output e iniciamos a ligação Serial.

No loop, o Arduino verifica se há algum dado novo recebido. Se houver, vamos passar esse dado para a nossa variável usbnumber. Depois vemos se a variável é maior que zero; se for, sabemos que recebeu algum dado. Segue-se uma simples condição.

Até agora temos o código do Arduino. Agora Vamos contruír o código PHP!


$fp =fopen("com5", "w");

while (true){

$i = 1;

echo "Enviado o valor 1 - o LED deve piscar 1 vez \r\n";

fwrite($fp, chr($i));

sleep(3);

$i = 2;

echo "Enviado o valor 2 - o LED deve piscar 2 vezes \r\n";

fwrite($fp, chr($i));

sleep(3);

}

fclose($fp);

Nada de novo. Tal e qual como no exemplo anterior. A nova parte é o loop, que contém o número que enviamos pela Serial.

O código é simples: vai alternando o valor da variável entre 1 e 2. Depois escreve alguma informação no console, espera 3 segundos e volta a repetir o Loop.

Os últimos bits

1.Fazer upload do código do Arduino para o Arduino

2.Correr o código PHP

Penso que quanto ao primeiro passo não há dúvidas.

Apenas no segundo pode ocorrer algumas dúvidas, mas vou tentar explicar como fazê-lo. Vamos supor que eu fiz o download do PHP para o Windows e fiz unzip para C:/php. Entro na linha de comandos do Windows, mudo a directorio para c:/php e escrevo o comando

php c:/path/to/usb/php/script.php

Feito! basta olhar o LED do Arduino e repara na informação da Janela do Console.

Meus caros Boa sorte e Bom aprendizado!

 Gosto de saber a vossa opinião sobre o que escrevo, então deixem comentários.

Até Marcelo Bacana.:

7 comentários:

  1. Prezados,

    Acredito que o importante não é saber quem criou o código, mas sim enriquecer o código... As bibliotecas são open-source!!

    ResponderExcluir
  2. Acho legal este site que apesar de copiar esta divugando uma plataforma open source, caso não tenham lido no início aqui pode copiar de tudo. rsrsrs adorei!

    ResponderExcluir
  3. Valeu pelo post...
    Tava com problemas no código PHP, pois em todo lugar o povo mandava dentro do fwrite() apenas o valor.. sem usar chr... tava apanhando disso a uma semana rsrsrs

    obg

    ResponderExcluir
  4. estou usando Windows com WAMP server e placa arduino UNO..
    e não tem maneira do LED ligar..

    com isso funciona??

    ResponderExcluir
  5. Também estou com problemas, segui passo a passo o tutorial, mas o Arduíno não parece não reconhecer o código, a luz de recebimento de dados rx ate pisca informando que o comando chegou no Arduíno, mais o código enviado não se encaixa em nenhuma condição if. estou usando o o EasyPHP no Windows 7. alguém pode me ajudar, preciso terminar isso pois é um projeto de conclusão de curso.

    quem puder ajudar meu Email é: caio_fr_sp@hotmail.com

    ResponderExcluir
  6. tente isso que funciona !

    ResponderExcluir
  7. Olá a todos do blog,
    para terminar meu projeto usando o arduino e programação PHP como o exemplo do Bruno, estou precisando fazer com que no arduino eu envie bits de retorno para o PHP e no PHP receba esses bits para que possa determina-los para qual pagina vai ser mandado, ex: enviando o bit 0001 ou 0010 etc... do arduino para o PHP o PHP identifica qual bit recebeu e executa a função determinada, pq fazendo assim irei consegui dizer qual led esta aceso ou apagado.

    abraço.

    ResponderExcluir

teste comentario