domingo, 17 de fevereiro de 2013

Raspberry Pi - Controlar GPIO em PHP

Para controlar o GPIO do Raspberry Pi através do PHP é necessário efetuar algumas configurações.

1. Configuração da execução do gpio

Adicionar no final do ficheiro de sudoers para dar permissão a www-data de execução apenas do comando gpio.
$ whereis gpio
gpio: /usr/local/bin/gpio
$ sudo visudo
...
# GPIO
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/gpio


Em PHP depois é possível fazer a chamadas à ferramenta gpio com sudo.

2. Exemplo de ficheiro PHP para controlar LED

Seguindo o setup eletrónico feito aqui, é possível criar o ficheiro led.php que acende e apaga o led através do PHP.

Exemplo led.php:

if (isset($_GET['led'])&&$_GET['led']!=''){
  exec("sudo gpio -g mode 7 out"); // Iniciar o GPIO07 = pino 26
  if ($_GET['led']=='on'){
    exec("sudo gpio -g write 7 1"); // Acender LED
  }else{
    exec("sudo gpio -g write 7 0"); // Apagar LED
  }
}

Para verificar basta ter uma hiperligação ou inserir o URL que passe a variável led com o valor on para acender o LED e qualquer outro para o apagar.

Para acender:
http://rpi/led.php?led=on

Para apagar:
http://rpi/led.php?led=off

5 comentários:

  1. como faço para comunicar o raspberry pi com um microcontrolador via serial com gpio e ler os dados com php

    ResponderEliminar
  2. Viva,
    De facto até agora não precisei de trabalhar com a comunicação série.
    Por acaso já fiz algumas pesquisas sobre isso, no sentido de comunicar por exemplo com o arduino e existe informação sobre isso, mas nunca me debrucei sobre o assunto...

    Caso encontre algumas informações depois pode partilhar.

    Boa sorte!

    ResponderEliminar
  3. Olá amigo, nao estou tendo resultados tentando ligar os leds por meio de PHP. Consigo apenas utilizando comandos diretamente no terminal do raspberry. O que pode estar errado / faltando?

    ResponderEliminar
    Respostas
    1. Viva,
      Se o comando gpio funciona na linha de comandos a única questão que vejo é a execução do gpio através do PHP.
      Para que funcione é necessário garantir que o utilizador www-data (ou outro utilizador que esteja a correr o servidor web) esteja autorizado a executar o comando gpio com sudo.
      Por isso é necessário garantir o passo 1. que falo, seja:
      sudo visudo (para garantir que o comando gpio pode ser executado pelo utilizador www-data sem pedir password)
      www-data ALL=(ALL) NOPASSWD: /usr/local/bin/gpio
      Depois resta guardar e sair.

      Eliminar