Arduino e PHP, controlando seu arduino através 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.

<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.

/*********************************
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.

/*********************************
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.

$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….

97 comentários em “Arduino e PHP, controlando seu arduino através da internet.

    • Sim FRESH, esse projeto pode ser aplicado a usuários do windows xp, vista e seven, basta instalar o servidor Wamp no windows (Windows + apache + mysql + php) e trocar o nome da porta serial que no caso será COM1, COM2 ou COM3.

      No codigo PHP esta assim: $port = fopen(“/dev/ttyUSB0″, “w”); Isso serve para Linux.
      No windows voce devera trocar por: $port = fopen (“COM1″, “w”);

      O resto do processo é o mesmo para Windows e Linux.

  1. hum, gostei, mas fui testar aqui em casa e nao deu certo, eu tenho um arduino mega1280, tento ligar um LED na porta 13, e quando clico em ligar led, o led apenas pisca e nao fica ligado, o que será?

    • Como esta seu código no Arduino? Você testou ele através da interface serial da própria IDE do Arduino?? Tente fazer isso!…

      Se quando você clicka no botão para ligar o led e ele pisca quer dizer que ele esta enviando algum dado, só é preciso conferir e/ou revisar o seu código! Qualquer coisa manda os códigos para meu email para dar uma revisada…. Você esta usando Windows ou Linux?

  2. Estou com um problema que nao consigo resolver faz tempo.
    O php nao esta a comunicar com as portas USB. Através do Terminar arduino consigo mandar as variáveis para acenderem os leds individualmente, mas atraves do php nao funciona, aparece so no browser a mensagem que aceudeu as luzes mas no arduino nao funciona. Testei em windows vista e no windows 7, tenho o wampserver instalado a correr bem.. o que poderá ser?

    • Olá FRESH, faça o seguinte: No terminal do Windows (cmd) envie um sinal direto para a porta que voce esta comunicando com o arduino. Esse sinal pode ser enviado atraves do comando ECHO, sua sintaxe no windows é a seguinte:

      echo 1 > COM1

      No Linux se usa assim: echo 1 > /dev/ttyUSB0

      Onde, echo é para enviar um sinal. O valor 1 é o sinal que se vai enviar. O caracter > é para redirecionar para a porta. E por fim a porta de destino que no seu caso será alguma das COMs.

      No codigo arduino faça ler um valor da serial e verifique se esse valor é o mesmo que voce esta mandando pelo ECHO, caso for igual faça ele acender o LED.

      Se desta forma ainda não funcionar então existe algum problema relacionado a porta que voce esta usando ou as permissoes dela. Peço que me mande seu código (PHP, Arduino ) para dar uma olhada. Mande para fernandotiunderground@gmail.com

      • Olá ferpinheiro, tive o mesmo problema…
        Porém quando executo pelo terminal (cmd), ou pelo Serial Monitor do Arduino, funciona..
        Como devo proceder ?
        Obrigado, fera!!
        Parabéns

  3. Pingback: Sistema de segurança pela internet usando Arduino « Compartilhar é preciso.

  4. Olá ferpinheiro

    O problema é o seguinte coloquei ambos os arquivos html e php no meu servidor da uol. Abro a pagina e quando clico no botão ele dá a página do php:

    PHP Warning: fopen(/dev/ttyUSB0) [function.fopen]: failed to open stream: No such file or directory in E:\home\yogus\Web\arduino\arduino.php on line 49
    PHP Warning: fwrite(): supplied argument is not a valid stream resource in E:\home\yogus\Web\arduino\arduino.php on line 65
    PHP Warning: fclose(): supplied argument is not a valid stream resource in E:\home\yogus\Web\arduino\arduino.php on line 133

    O que será que está havendo? parece que o php nao esta abrindo a porta serial. teria uma dica? Obrigado

  5. Ferpinheiro.. consegui resolver o problema. Agora estou com outro, como ligar o ubuntu com a porta serial com permissao já habilitada?

    • Olá Raul, pelo que entendi voce hospedou o arquivo.html e o arquivo.php em um servidor na internet (Servidor da UOL). Se foi isso mesmo voce não vai conseguir fazer nada em seu arduino, a não ser que ele esteja conectado na porta desse mesmo servidor. Note que essa solução do PHP é feita para rodar em uma maquina a qual estará conectada a sua placa arduino.

      Repare no tipo de erro que esta dando: PHP Warning: fopen(/dev/ttyUSB0) [function.fopen]: failed to open stream: No such file or directory in E:\home\yogus\Web\arduino\arduino.php on line 49. Esse erro (Warning) esta dizendo que falhou ao tentar abrir a porta (/dev/ttyUSB0) e que não foi encontrado diretorios ou arquivos com esse nome. Isso acontece porque se você esta rodando os códigos em um servidor da UOL provavelmente esse servidor não permitira executar esse tipo de operação, se for um servidor rodando LINUX. Se for um windows não existe nenhuma porta com esse nome, seria no caso COM1.

      Para você conseguir rodar essa aplicação pela web você deverá criar um servidor proprio na sua casa o qual estará conectado ao arduino, então sim poderá executar sem problemas.
      No tutorial que eu fiz para o blog todos os scripts estão rodando na minha propria maquina, através do localhost, caso eu quisesse acessar de fora, digamos do lugar onde eu trabalho deveria configurar minha maquina de modo a aceitar conexões externas.

      Espero que voce tenha entendido. Se caso eu não tenha entendido direito sua duvida por favor sinta-se a vontade para fazer qualquer pergunta!

      • Olá ferpinheiro, como faz para configurar meu ubuntu para aceitar conexões externas, e assim eu poder abrir meu portao da minha casa.

  6. Olá Loris. Cara é o seguinte, isso depende:

    1 – Que tipo de internet tem?
    2 – Possui IP fixo?
    3 – Sabe configurar um modem para receber conexões externas?
    4 – Caso não possua IP fixo, você conhece o serviço NO-IP ?
    5 – Pense em questões de segurança também, você não quer deixar seu computador aberto para qualquer um, ou quer?

    Não tem muito segredo se voce conhece um pouco sobre o assunto, procure no Google, existe uma enorme quantidade de artigos que mostram como configurar passo a passo um computador para aceitar conexões externas.

    Eu até poderia te ajudar mas precisaria saber que modem, internet etc… que voce usa. E tem outra, isso não é uma coisa que se explique com meia dúzia de linhas.

  7. Olá ferpinheiro. Segui seu tutorial direitinho mas usando o Windows 7. Parece que tem alguma conexão com a porta COM mas quando clico em qualquer dos botoes apenas pisca 1 vez o led(Estou testando só com 1 na entrada 13). Qual poderia ser o problema?
    Desde já, obrigado

  8. Olá! É o seguinte não tenho o led azul desta forma modifiquei o código da seguinte forma:

    int ledVerde = 13;
    int ledVermelho = 11;
    int ledAmarelo = 9;

    void setup() {
    Serial.begin(9600);
    pinMode(ledVerde, OUTPUT);
    pinMode(ledVermelho, OUTPUT);
    pinMode(ledAmarelo, OUTPUT);
    }

    void loop()
    {
    char caracter;
    caracter = Serial.read();
    if(caracter == ‘z’)
    {
    digitalWrite(ledVerde, HIGH);
    }
    else
    if(caracter == ‘x’)
    {
    digitalWrite(ledVermelho, HIGH);
    }
    else
    if(caracter == ‘c’)
    {
    digitalWrite(ledAmarelo, HIGH);
    }
    delay(1000);
    }

    Mas não consigo acender os leds, aliás, acendo-os respectivamente, mas via SerialMonitor, mas na aplicação PHP não!

    Código Html:

    Controle de Leds com Arduino

    Código PHP

    O que pode ter acontecido?

    • Você esta usando Windows ou Linux??….
      Conferiu se a porta que esta utilizando é a correta??

      Se estiver usando Linux verifique as permissões das portas.
      Se estiver usando Windows, modifique o código PHP e insira um intervalo de tempo usando o sleep().
      Teve um leitor do blog que estava com o mesmo problema que o seu e ele conseguiu resolver com o uso do sleep(1);

      O sleep() serve para dar uma pausa de ‘X’ tempo. Em algumas vezes isso é necessário devido a configuração das portas seriais e porque toda vez que você reinicia seu arduino a serial reinicia junto.

      E tem mais verifique se a luz RX na sua placa do arduino acende (pisca) quando você clica nos botões da pagina HTML, se acender quer dizer que os dados estão sendo enviados, caso
      nao acender então é porque não esta enviando.
      Tente isso!!

  9. Amigo deixa te mandar o codigo HTML:

    Controle de Leds com Arduino

    O código PHP

    Uso Linux e a porta está correta ttyACM0. Quanto as permissões das portas fiz como tá no seu tutor (sudo chmod a+rw /dev/ttyACM0). Quanto ao RX acende sim quando faço o upload. Cara será se vai dar certo agr? Aguardo retorno

    • Olá Cicero! Desculpe a demora para responder….

      Cara, eu não recebi o codigo em HTML que voce me mandou por email!! Aparece so os comentarios…
      Voce testou o seu código do arduino atrves do serial monitor na IDE ? Funcionou?

      Tente testar tambem atraves do terminal envinado algum comando atraves do comando echo:

      echo “1” > /dev/ttyACM0

      Verifique se dessa maneira funciona!! Se funcionar, verifique se voce deu as permissões corretas no arquivo PHP!
      Note que o arquivo PHP e a porta usada devem posuir permissoes de leitura e escrita para o usuario que voce esta usando na maquina….

      Se tudo estiver correto, permissões e codigos, deverá funcionar.
      Me mande todos os seus códigos anexados em um arquivo txt que eu dou uma olhada aqui!!!!

      • Fernando mandei um email pra vc com os código, gostaria só de modificar o que escrevei no email, é que agr mandando para o terminal consigo fazer as operações. Em resumo só não consigo diretamente na aplicação PHP, mas via terminal e serial monitor consigo. Aguarod seu contato.

  10. Tutorial muito bom. Parabens!
    Continue sempre postando mais assim que puder.
    em breve também estarei postando algumas experiencias com o Arduino.

    Precisava de algo que mais complexo um pouco.
    Estou querendo validar uma senha no proprio Arduino mesmo.
    Por ex: dado uma senha, ligar uma coisa. Dado outra desligue tal coisa.
    no proprio codigo arduino.
    Tem ideia de como fazer isso? A entrada é atraves de um teclado vendido para o arduino.

  11. Olá!

    Tentei realizar esta mesma experiência, porém encontrei algumas complicações, não consigo ligar os LEDs através do código PHP, somente pelo serial monitor.

    Como proceder?

  12. Gostaria de saber como faço para LER dados enviados para a porta serial via php. Tipo tenho um ldr que fica mostrando se uma lâmpada está acesa ou não gostaria de enviar esta informação para a página em php e desta forma decidir em apagar ou acendê-la!

    • Voce pode fazer da mesma forma que esta escrevendo um valor na porta!!
      Basta mudar a função fwrite($porta, caracter) para fread($porta, caracter)

      Apenas mude a funçao de escrita para a de leitura. É isso… Caso queira que a pagina fique atualizando de X em X tempo escreva uma função em javascript para isso. procure por reload() javascript no Google, la voce conseguira muita informação sobre isso…

    • Voce lembrou de modificar o codigo do Arduino?? Voce devera modificar o código do arduino para que este escreva um valor na saida serial, esse valor sera da lampada acesa ou não. Ex Lampada_Acesa = 0, Lamapada_Apagada = 1.

      Use a função Serial.print()!

      Haaa e tem mais uma coisa, voce conseguiu resolver o problema de ler e escrever pela porta serial seguindo o meu tutorial?? Lembrando que voce estava com dificuldades em coloca-lo em pratica!

      • Meu caro consegui sim! Agr deu certo, o seu tutorial foi fundamental depois de tantos réplicas e tréplicas consegui, porém, também tive outras fontes. Enfim, consegui colocar para rodar, o próximo passo é adaptar para ethernet shield. Como faço para deixá-lo na web? Você sabe como?

  13. Cara eu estou querendo fazer em vez de LED, fazer com um controlador de temperatura, queria uma ajuda pois esta dando muito erro ! =S

  14. usando esse mesmo código, mas no windows 7 (porta serial eh a COM8, mas já tentei mudar e o resultado foi o mesmo), não consigui fazer os leds ligarem…. acho que minha porta serial continua desabilitada pra leitura e escrita e não consegui mudar pois coloquei no arduino o comando
    if (Serial.available()>0)
    para testar se entrava no laço pra acender os leds e percebi que não entrava.

    poderia me ajudar? obrigada

  15. Olá ferpinheiro, gostaria de saber o seguinte:

    Caso eu tenha o shield de ethernet como ficaria o esquema de ligação e o que mudaria no código?
    Eu poderia usar um shield de blueetooth pra fazer isso também?

    Desde já obrigado.

  16. Primeiramente obrigado pelo POST.

    Realizei os procedimentos conforme indicado e “funcionou”.

    Ele realiza as operações de acender e apagar os LEDs (conteúdo feito a parte), porém ele só realiza tais opções se a primeira vez for gerado pelo SerialMonitor, caso contrario ele não executa.

    Teria como desenvolvê-lo sem esse “problema”?

    Uma vez inserido a atribuição pelo SerialMonitor quando executo a página PHP ela funciona normalmente (inclusive desligar). Gostaria de realizar sem a necessidade desse empurrãozinho.

    (Sistema Windows 7)

  17. tentei fazer esse projeto mas quando eu aperto nos botoes ele me da o seguinte erro Parse error: syntax error, unexpected ‘,’ in C:\wamp\www\teste\teste.php on line 5 to utilizando os meus codigos uzados estao ai agradeço des de ja a atençao

    HTML

    Controle de Leds com Arduino

    PHP

  18. Alguém sabe me dizer qual a porta que devo botar no mac?
    Sou novo no assunto estou modificando o código, fiz ele mandar a requisição via ajax e jquery, mas eu acho que a porta esta errada

  19. Boa tarde, segui o tutorial e não deu certo, estou usando o windows 7, quando clico no botão a luz rx pisca e só, tens alguma idéia? o código está igual o seu, se puderes ajudar… abraço

  20. Olá, to com um probleminha na comunicação do php com o serial, nao ta acendendo o led to usando o windows, como resovel o problema da comunicação serial?

  21. Boa tarde,

    Consegui fazer funcionar, mas gostaria de saber se é possível uma página PHP na WEB e não servidor local se comunicar com a porta USB.
    Se sim, poderia me auxiliar como?

    Obrigado,
    Marco Ostan

    • Como tu fez pra resolver o problema ? ”Boa tarde, segui o tutorial e não deu certo, estou usando o windows 7, quando clico no botão a luz rx pisca e só, tens alguma idéia? o código está igual o seu, se puderes ajudar… abraço”

      tenho esse mesmo problema ”

      vlw

  22. Olá, eu instalei o Wamp no meu computador ( Estou utilizando o Windows ) criei os arquivos certinho para pasta ” C:\wamp\www “, coloquei o codigo no arduino tudo certinho. Ai quando abro a pagina em .html esta tudo bem só que quando eu clico para acender um LED aparece um erro escrito : Parse error: syntax error, unexpected ‘,’ in C:\wamp\www\arduino.php on line 14

    Preciso liberar alguma porta algo assim ?!
    Sou novato sei bem pouco ….

    • É um erro de sintaxe, ele diz que o caracter “,” (virgula) nao é esperado. Verifique a maneira que voce digitou, essa virgula nao esta correta.
      O erro é na 14° linha do teu codigo….

  23. eai, cara esto usando o XAMMP no meu computador, windows 7. já alterei a porta COM8 , na qual meu arduino se encontra, e meu LED nao acende, nem mesmo pisca, no entanto, o RX pisca no momento em que eu mando o sinal atraves do PHP.

  24. Pingback: Acender leds pelo navegador

  25. tambem estou com o mesmo problema do JoaoGauer..

    Quando mando o comando para acender no WINDOWS pelo Serial Monitor do Arduino, ele acende normalmente e funciona bem.

    Quando mando ele pro servidor UBUNTU com PHP, ele pisca a luz rx e o led, e depois para.
    Ai mando o comando denovo, ele apenas pisca e para.

  26. Tenho um Arduino uno e uso o windons xp, gostaria de controlar, via internet, um “suite case” no arduino, voce acha que é possivel ?

  27. Ferpinheiro, não saco nada de PHP… mas conheço de java pra web.
    Queria tentar fazer por java…

    Como eu acesso a porta USB pelo java? sabe me dizer?
    e como eu saberia ao certo o endereçamento dela(porta)?

    e outra pergunta… esse script em c/c++ é compilado pra dentro da placa?
    pretendo usar windowns 7. abraço!

  28. Boa noite, alguem saberia como incluir nesse código o botão de push button, agradeço a colaboração de voces.

  29. O meu esta dando problema na comunicação com a porta, nesse tutorial ele funciona em qualquer porta? ou só COM1 o meu esta assim no php
    $port = fopen(“COM3”, “w”);

  30. 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.

  31. amigo, vc ja adquiriu a ethernet shield? oq muda , o quanto muda e como muda este projeto utilizando o shield ethernet, estou fazendo um prototipo para tcc da faculdade sobre automatização de residencia, e vou usar este shield, mas não tenho idéia de como fazer, embora seu blog esteja sendo de grande ajuda ! esse projeto de leds ai ja me iluminou a mente muita coisa !

  32. Boa Noite amigo,
    Meu codigo esta funcionando normal, quando tento pelo serial monitor do arduino acende os leds normalmente, mas no codigo WEB eles nao acendem. Chega a piscar o rx do arduino mas nao acende os LEDS, o que pode ser?

    Vou colocar meu codigo aqui embaixo.

  33. ola alguém pode me ajudar olha o que aparece no meu

    o codigo esta igualzinho ao do post mais não funciona aparece esse erro
    estou usando o win7 fiz a alteração com3 verifiquei se era a porta 3 e é
    alguem pode me ajudar

    estou usando o wamp

  34. Parceiro usando ubuntu apache e talz nao estou conseguindo manda por php somente por serial monitor funciona de boa noi serial mas quando passa pro php nao funciona a por eh ACM0 ja dei permissao e tentei por 777 tbm nada oq sera que acontece?

  35. Em vez de colocar os códigos php e html em um servidor local , nao pode colocar por em um servidor e acessar pelo celular a pagina por exemplo?

  36. Olá Feras ! tudo certo .. queria saber se alguém poderia me ajudar!
    Estou com um problema um tanto estrango..

    Consigo ler a serial do Arduino no php …o problema que vem tudo errado..
    Dai nao sei o que fazer.

    Exemplo.. estou usando dht11 e mostra la no serial monitor .. Temperatura = xx Umidade = xxx .

    No php , fica faltando letra, as vezes nao lê nada, as vezes so vem numeros errados !

    uma vez ou outra que vem certo .. !

    Estou usando Centos 6.4 64bits .

    segue o codigo php (

    Se alguem puder me ajudar.. agradeço …

  37. Consegui fazer no windows utilizando o sleep como comentado em alguns dos comentários.

    Apenas um porém que nao consegui entender o porque.
    Quando acende o led mandei imprimir a letra recebida…
    aih quando clico no serial monitor, ele da um bug e imprimi um caracter estranho e apaga o led.

    Teria noçao do porque disso?

    Abraço

  38. amigo testei sua aplicação tudo blz rodo legal, so que estou com um problema eu vejo que o arduino esta recebendo os dados pela serial pois o pino TX pisca quando eu aperto o botão no PHP, mais não acende os leds. Mais dai se eu iniciar pelo serial monitor e acender o primeiro led por ele em seguida fechar a pagina PHP começa a funcionar, creio eu q seja alguma falha na comunicação com arduino, pode me ajudar?

  39. Fernando , o seu blog ficou muito bom e você ajudou muita gente , parabéns pelo trabalho. Eu vi que você enviou para o Fabiano no dia 30/08/2013 como receber e como enviar dados do Arduíno para o PHP e do PHP para o Arduíno. Você poderia me enviar também ? Mais uma vez obrigado.

  40. Srs, o problema com o sinal não fixar, ou seja o led somente pisca, as vezes nem isso… também pode ser resolvido aumentando a taxa de bits da comunicação de 9600 para 115200…

  41. Olá,bom dia!
    Como faço para incluir mais botões?
    No seu projeto os leds só acendem,como faço para clicar e apagar os leds?
    Grato

  42. Olá fernando, parabens! excelente conteúdo.
    Tenho uma dúvida, meu arduino é um chines UNO nova versão em SMD
    Meu sistema operacional é o Ubuntu 14.04
    O problema é que quando clico no botão pelo navegador, demora 2 /s para ligar o led, agora quando clico em desligar, ele desliga instataneamente.
    Ou quando eu envio um comando via terminal do arduino ele responde imediatamente ao ligar e desligar.
    Porque somente ao clicar em ligar pelo navegador demora esse delay de 2 /s para ligar o led?

  43. Meus parabéns pelo tutorial, venho pesquisando a uns meses a melhor solução para meu tcc e o encontrei aqui!
    estou montando uma residencia controlada por android e agora php.
    agradeço muito a dedicação meu amigo!
    desejo todo o sucesso!

    meu projeto contem 6 leds, 2 servo motores, 1 LDR e 1 placa fotovoltaica para alimentação opcional.

    gostaria de saber o seguinte..
    qual seria a melhor forma de gerar relatórios de consumo baseado nos leds e na hora em que estão acesos??

    adoraria se a resposta fosse via email.
    atenciosamente

  44. Ola Fernando eu vou fazer um TCC DE AUTOMAÇÃO RESIDENCIAL E NÃO SEI FAZER A PROGRAMAÇÃO DO ARDUÍNO MEGA 2560 VIA ETHERNET SHIELD VOU ACENDER 10 LEDS, SENSOR DE TEMPERATURA,CÂMERA, FOTORESISTOR, 1 MOTOR SERVO,ALARME, VOCÊ PODERIA ME AJUDAR , SE PUDER MEU E-MAIL É edisondesouza95@gmail.com .

  45. Muito Show, estou testando o codigo e achei uma solução para fácil dos led piscando só alterar o codigo $port = fopen(“/dev/ttyUSB0”, “w”); trocando w por a.
    espero ajudar quem tiver problema

  46. Fiz alguns ajustes para que possa rodar no XP além de poder também desligar os LED.

    /*********************************
    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);
    }
    //agora vamos desligar

    if(caracter == ‘q’)
    {
    digitalWrite(ledPin13, LOW);
    }
    else
    //Se pressionado 2 liga o led azul
    if(caracter == ‘w’)
    {
    digitalWrite(ledPin11, LOW);
    }
    else
    //S pressionado “l” liga o led laranja
    if(caracter == ‘e’)
    {
    digitalWrite(ledPin9, LOW);
    }
    else
    //Se pressionado “a” liga o led amarelo
    if(caracter == ‘r’)
    {
    digitalWrite(ledPin7, LOW);
    }

    delay(1000);
    }

    Arquivo alterado arduino.php — Apontei para a COM21, vocês devem colocar a utilizada pelo arduino.

    /*********************************
    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.
    ********************************/

  47. Olá Fernando parabéns pelo conteúdo apresentado, está sendo muito útil para meu projeto, só tenho uma dúvida, as configurações funcionam se o servidor for configurado em nuvem?
    Grato Rui

  48. boa tarde! estou com um problema, alguem poderia me ajudar?
    tenho um sistema parecido com esse, mas na pagina php preciso enviar 1 caracter e mais 3 numeros, mas nao estou conseguindo fazer a leitura deles no arduino.
    por exemplo, a pagina php enviaria
    fwrite($port, “$selecionada1”);
    fwrite($port, “$selecionada2”);
    fwrite($port, “$selecionada3”);
    fwrite($port, “$selecionada4”);

    o primeiro um caracter, e o resto numero digitados pelo usuario na interface html
    grato desde ja

  49. Será que você ainda responde os comentários aqui? Irei tentar!
    Pois bem, queria fazer desse mesmo jeito, usando o Ethernet Shield. Li que tenho que usar sockets. É só mudar e irá funcionar ou teria que fazer mais algo?

  50. Meu amigo, você não teria por acaso um tutorial para efetuar a comunicação do Arduíno com um servidor web ai guardado ?
    Fiz um projeto um pouco complexo aqui que lê os dados de medidores de fluxos une todas as informações em um banco de dados MySQL e disponibiliza estar ao usuário pela rede WiFi. porem segui tutoriais na internet nesta arte de coletar os dados do arduino e escrevê-los no banco de dados… utilizei o método GET que pega os dados por meio da url no navegador… embora tenha funcionado.. eu nao posso dar continuidade no projeto utilizando esta forma de conexão.. poderia me ajudar com alguma alternativa menos complexa e menos susceptível a falha?

  51. Parabéns pelo excelente tutorial. Estou usando uma placa Orange Pi PC Plus, com o Ubuntu Xenial, e tive de usar um condensador de 10 uF entre os pinos RESET e GNR do Arduino Uno para conseguir acender os leds. Sem o condensador o Arduino fazia reset cada vez que enviava dados e não acendia os leds. Mas sempre que se pretende carregar um novo programa para o Arduino (ou fazer alterações) é essencial retirar o condensador, caso contrário sem o reset o programa não carrega.

  52. I feel that is one of the so much important info for me.
    And i’m satisfied studying your article.
    But want to observation on some normal things, The site style is great, the articles
    is actually great : D. Good task, cheers

Deixar mensagem para FRESH Cancelar resposta