Arduino x PHP - trabalham juntos ?


#1

Sou desenvolvedor web há alguns anos e comprei minha casa recentemente, gostaria de trabalhar algumas automatizações simples à princípio, utilizando a minha rede interna e PHP.

Como o Arduino trabalha com esta linguagem ?


#2

Olá alcabox,

Você pode fazer a interação entre arduino e PHP se comunicando através de socket.

Eu já utilizo e funciona muito bem.


#3

Também sou desenvolvedor web, e gostaria de fazer alguma aplicação que funcionasse utilizando PHP, alguém conhece um projeto open source que tenha utilizado a linguagem como base? Um exemplo seria excelente para tomar como base.


#4

Trabalham sim juntos, mesmo que não se utilize shields de conexão com a internet como o ETHERNET.

Basta que se consiga fazer a comunicação entre porta serial do Arduíno e o arquivo PHP em questão.

Um exemplo bem básico que utilizei e funcionou está logo abaixo:
obs1.: Eu achei o código em algum vídeo na internet, e funcionou muito bem. E para rodá-lo salvei em um servidor local.

obs2: Eu usei dois arquivos php, um com o código em html e o outro em php, mas pode ser usado tudo em um único arquivo, e claro pode adicionar estilização com o CSS e funções com javascript.

Parte do PHP:

Parte do Arduíno:

espero que isso ajude de início pelo menos,

nesse tópico tem mais informações sobre o assunto


#5

Olha eu também estou procurando fazer essa integração. A algum tempo atras eu fiz um curso de PHP + OO e o professor comentou que ele e um amigo tinham montado uma aplicação de arduino + PHP + Apache em um linux, logo basta procurar o caminho das pedras na net.

Caso obtenha novas informações eu volto pra postar aqui no forum.


#6

ola,
na parte do PHP, logo no final da primeira linha, NÃO é botoes.css, seria botoes.php,

e logo abaixo no arquivo em PHP tem um erro, no switch, ao invés de “lampada” coloque “led”

só corrigindo o erro

att.


#7

Estou fazendo alguns experimentos relacionados a integração de sensores e atuadores com a Internet. Não estou usando PHP e sim Nodejs. Estou com um ensaio inicial com a seguinte configuração:
Hardware:

  • Arduino Uno
  • Ethernet Shield
  • Sensor de umidade e temperatura DTH11

Software:

  • Servidor desenvolvido em Nodejs
  • API Rest no Nodejs para atualizar aquisições no servidor e ler os dados referentes a umidade e temperatura
  • Firmware para arduino que faz um Get para enviar a temperatura e umidade obtidos no sensor para o servidor.
  • Página contendo javascript e chamada a API google gauge para exibição gráfica.

O servidor poderia rodar localmente mas preferi disponibilizar na Internet então fiz o deploy usando o Openshift.
Sobre o hardware tem um post no meu blog.
Que quiser dar uma olhada, pode acompanhar a temperatura e umidade da minha sala online nessa página.
Se tiver interessados posso fazer um tutorial completo.


#8

Uma opção interessante para combinar PHP e arduino é o Arduino Yún, que combina na mesma placa um processador rodando Linux (baseado em OpenWrt) e o arduino “Leonardo”. É possível instalar o PHP diretamente no arduino, e com a vantagem de suportar a rede via Wifi nativamente…


Comande seu Arduino pelo celular, tablet ou web
#9

Pessoal, vcs estão tentando fazer a interface entre o php e as saidas analõgicas do arduino, pq não utilizar um raspberry pi rodando LAMP e controlar as GPIO do próprio raspbberry?


#10

Rapaz estou em um projeto RFID com controle de aceso via PHP, sou iniciante e li sobre essa comunicação via socket, vc tem um exemplo de utilização? Um código para pegar de base?

Att

Felipe


#11

Segue um exemplo básico para ligar/desligar e checar estado de um led (via Inthernet Shield):

PHP:

<?
// Endereco do arduino:
$host = '192.168.0.128';
$port = 99;

$package = "9"; // Número ou código definido para checar o estado.

// Função que checa o estado
function checkState2 ($package, $host, $port)
    {
    $timeout =1;

    $socket  = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
    socket_connect($socket, $host, $port);
    
    $ts = microtime(true);
    socket_send($socket, $package, strLen($package), 0);
    
    
    $buf = 'This is my buffer.';
    if (false !== ($bytes = socket_read($socket, 2048))) {
        $estado = $bytes;
    } else {
        echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n";
        }
        
    return $estado;    

    
    socket_close($socket);
    
}



$estado = checkState2 ($package,$host,$port);


if ($estado == 'ON'){ ?>
    
        <form action='arduino/altera.php'  method='post'>
        <input type="hidden" name="status" value="off" />
        <input id='botledoff' type='submit' name='submit' value="Desligar LED" />
        </form>                     
        <?php }
    else if ($estado == 'OFF') { ?>
        <form action='arduino/altera.php'  method='post'>
        <input type="hidden" name="status" value="on" />
        <input id='botledoff' type='submit' name='submit' value="Ligar LED" />
        </form>
        
        <?php
        }
    else {
        echo "Erro no recebimento do estado";
    }



// Alterar estado:

//The $package variable is what gets sent to the arduino
if ($_POST["status"] == "on")
    {
    $package = "1";
    changeState($package, $host, $port);
    echo '<script language="javascript" type="text/javascript">
                window.history.go(-1) 
                </script>'; //Apenas um link para retornar 
    }
if ($_POST["status"] == "off")
    {
    $package = "0";
    changeState($package, $host, $port);
    echo '<script language="javascript" type="text/javascript">
                window.history.go(-1)
                </script>'; //Apenas um link para retornar 


function changeState ($package, $host, $port)
    {
    //The rest of this code sends the package variable to the arduino
    $timeout =1;

    $socket  = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
    socket_connect($socket, $host, $port);
    $ts = microtime(true);
    socket_send($socket, $package, strLen($package), 0);
    socket_close($socket);

    }

?>

No arduino:

#include <SPI.h>
#include <Ethernet.h>

// Dados da rede
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
byte ip[] = { 192, 168, 0, 128 }; // Ip do arduino
byte gateway[] = { 196,168, 0, 1 };
byte subnet[] = {255, 255, 255, 0};


EthernetServer server(99); // Porta do arduino

void setup() 
{   
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  delay(1000);
  Serial.println("Setup complete");
  
  pinMode(7, OUTPUT);
  digitalWrite(7, LOW);
  
}

void loop ()
{

EthernetClient client = server.available();

if (client) {
  Serial.println("Cliente conectado");
  
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
        
        //Execute code based on the package the server sent
        if (c == '1')
        {
         Serial.println("ON");
         digitalWrite(7, HIGH);
        }
        if (c == '0')
        {
         Serial.println("OFF");
         digitalWrite(7, LOW);
        }
        if (c == '9')//Check the state of Pin 7 and send that to the connected clent
        {
         Serial.println("CHECKSTATUS");
         if (digitalRead(7)== LOW)
           {server.write("OFF");}
         if (digitalRead(7)== HIGH)
           {server.write("ON");}
        }
      }
    }
    
    // give the web browser time to receive the data
    delay(1);
    
    // close the connection:
    client.stop();
    Serial.println("Cliente Desconectado");
  }
}

A partir deste exemplo pode ser modificado o código para outras aplicações.

Este projeto para RFID me interessa, se precisar de ajuda e/ou se puder compartilhar no forum o andamento do mesmo agradecemos.

Abraço


#12

Opa vou compartilhar sim!!! Este é um Projeto de Iniciação Cientifica, de qualquer forma vai ficar aberto rsrsrs. Estamos usando:

1 Arduino UNO
1 Ethernet Shield
1 Leitor de Cartões MFRC522-AN
1 Cartão de Mamória

Software

WAMP
PHP
MySQL
IDE Arduino 1.0.5

Até agora conseguimos integrar todas as shield’s usando a comunicação SPI, queremos trabalhar com dois bancos, o proprio MySQL e o cartao de memória que funcionaria mais como uma banco de segurança caso a comunicação via ethernet nao funcionasse. Pois bem ainda nao conseguimos trazer informções do Banco de Dados. Agora vou tentar usar a socket caso de certo, ja posto aqui no forum!!

Muito Obrigado.

Att.

Felipe


#13

bom dia estou utilizando um codigo php com um botão do tipo submit, e um do tipo formulário hidden (que ate onde eu li sever para manda informaçoes embutidas para um pagina ou programa via php, porem se ele envia através do botao submit ele vai para a pagina.

coloquei um refresh q mantei na mesma pagina porem da uma piscada

tem como manda comando e permanecer na pagina sem que pisque (efeito causado pelo refresh)
obs.: sou leigo em web designer

segue o codigo que estou utilizando

html

Controle portas arduino



php

if ($_POST[‘estado’]==“B”)
{

fwrite($port, "B");

}

if ($_POST[‘estado’]==“c”)
{

fwrite($port, “c”);
}

if ($_POST['estado']=="C")

{

fwrite($port, "C");

}

//Fecha a porta serial

?>


#14

Boa tarde, pessoal eu estou fazendo um projeto de monitoramento de gás metano estou utilizando:
Arduino Mega 2560;
Ethernet Shield W5100,
DHT-11;
MQ-5 (Gás Metano ou Butano)
Cartão de Memória.

Tenho uma página web desenvolvido em : HTML5, PHP, JAVASCRIPT e Mysql. Com isso vou vou coletar os dados da temperatura e do gás, gerar um gráfico e um relatório de cada semana do mês. Na parte de Mysql não terminei essa parte de banco de dados, enfim queria saber se tem algum código parecido com meu medir temperatura do ambiente e do gás usando php socket, com isso termino a parte web, só falta terminar a parte de banco de dados. Preciso de ajuda nessa parte de monitoramento de gás metano. Eu aceito qualquer coisa tipo dica de sites, apostilas, trabalhos parecidos e vídeos. Muito obrigado e espero a sua resposta de volta.


#15

Boa noite.
Estou a desenvolver um mini sistema de automação residencial.
A minha duvida é como fazer o arduino trabalhar em conjunto com o RPi.
Ex: Ter os botões e desenhos em HMTL alojado no RPi e quando der os comandos, o RPi transfere para o Arduino.
O arduino por sua vez comanda todos os módulos que estão espalhado pela casa.

Obrigado e aguardo resposta