Mostrar mensagens com a etiqueta PHP. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta PHP. Mostrar todas as mensagens

domingo, 24 de fevereiro de 2013

Raspberry Pi - Ler valores do GPIO


A primeira experiência no âmbito da leitura de valores para o Raspberry Pi, é feita com base no tutorial proposto por Matthew Kirk aqui.

0. Material necessário

  • Raspberry Pi
  • Sensor Digital de temperatura DS18B20
  • Resistência 4,7 kΩ

1. Esquema para sensor de temperatura

O sensor de temperatura utilizado é um DS18B20, que permite efetuar leituras digitais (9-bits a 12-bist) do valor da temperatura (em Celsius).
Esquema do sensor de temperatura DS18B20
Neste esquema a ligação ao Raspberry Pi efetuou-se atravé do pin7 do Raspberry Pi, correspondendo ao GPIO04.
Esquema de ligações dos componentes

2. Implementação do circuito

Novamente, muito cuidado ao ligar o circuito para não danificar o Raspberry Pi.
Breadboard com o circuito implementado e conectado ao Rpi

3. Carregar módulos necessários

A leitura da temperatura deste sensor pressupõe alguns passos iniciais de configuração, pois por defeito o Raspberry Pi não carrega os módulos que permitem a "conversa" com outros componentes.
Assim, é necessário ativar estes dois módulos:
$ sudo modprobe w1-gpio
$ sudo modprobe w1_therm

Após este passo é necessário verificar qual o número de série carregado para o sensor de temperatura.
$ ls /sys/bus/w1/devices/
28-0000025d1522  w1_bus_master1

É através deste número de série (único para cada sensor) que será possível obter a informação da temperatura do sensor.

4. Obter a temperatura

Para obter a temperatura atual basta ver o conteúdo do ficheiro:
$ cat /sys/bus/w1/devices/28-0000025d1522/w1_slave 
5c 01 4b 46 7f ff 04 10 a1 : crc=a1 YES
5c 01 4b 46 7f ff 04 10 a1 t=21750

Para ficar apenas com o valor é possível:
$ tail -n 1 /sys/bus/w1/devices/28-0000025d1522/w1_slave | tail -c 6
21875

5. Integração com PHP

Em PHP é muito fácil aceder ao ficheiro anterior e obter valor pretendido:
      if (isset($_GET['temp'])&&$_GET['temp']!=''){
        exec("sudo gpio -g mode 4 in"); // Iniciar GPIO04 = pin 7
        if ($_GET['temp']=='on'){
          // Ler do ficheiro
          $filename = '/sys/bus/w1/devices/28-0000025d1522/w1_slave';
          $mode = "r";
          $file = fopen($filename, $mode);
          if ($file){
            fgets($file); // Ler primeira linha e descartar
            $buffer = fgets($file); // Ler linha da temperatura
            fclose($file);
            $temp = substr($buffer, -6); // Obter os últimos 6 caracteres com a temperatura
            echo ""+$temp/1000+"ºC
"; // Converter para as unidades corretas
          }
        }
      }


Para executar basta aceder ao URL do ficheiro PHP e adicionar a variável temp com o valor on:
http://rpi/temp.php?temp=on


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

Raspberry Pi - webserver

A instalação de um webserver no Raspberry Pi permitirá ter um webserver com muito baixo consumo energético.
Mais para a frente será pretendido ter o webserver a controlar o Raspberry Pi através de PHP.

Normalmente utiliza-se o apache2 como webserver e o mysql-server para base de dados, mas devido às limitações do Raspberry Pi, a utilização do lighttpd webserver deverá ser mais adequada.

Também o mysql-server revela-se muito voraz em RAM... Após a sua instalação a RAM livre passou de 210MB para apenas 96MB...

Assim, ainda se procuram alternativas... 

1. Instalar lighttpd + php5

Para fazer este setup basta:
$ sudo apt-get install lighttpd php5-cgi

2. Configurar o webserver

A configuração básica necessária implica apenas ativar e configurar o suporte para PHP.

Para ativar o suporte para PHP no lighttpd:
$ sudo lighty-enable-mod fastcgi-php

Depois é necessário localizar o binário do php5-cgi para indicar na configuração do lighttpd:
$ whereis php5-cgi
php5-cgi: /usr/bin/php5-cgi ... ...

$ sudo nano /etc/lighttpd/conf-enabled/15-fastcgi-php.conf 

Confirmar se a o binário está correto:
"bin-path" => "/usr/bin/php5-cgi",

Caso esteja tudo correto, carregar as definições:
$ sudo service lighttpd force-reload

3. Testar o funcionamento

Depois de instalado e configurado resta testar. Para tal basta criar um ficheiro .php, por exemplo:
$ sudo nano /var/www/info.php
<?php
phpinfo();
?>

Abrir um browser e introduzir http://a.b.c.d/info.php
Onde a.b.c.d é o IP do Raspberry Pi.