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

domingo, 21 de maio de 2017

Scanner de rede com o Raspberry Pi

Instalar software

# apt-get update
# apt-get install sane

Testar funcionamento do scanner no servidor

Abrir shell como utilizador saned
# su saned -s /bin/sh

Mostrar os grupos do utilizador saned
$ groups
saned scanner

$ sane-find-scanner
[...]
found USB scanner (vendor=0x03f0 [HP], product=0xc111 [Deskjet 1510 series]) at libusb:001:004
[...]

$ scanimage -L
device `hpaio:/usb/Deskjet_1510_series?serial=CN39219N8W05YR' is a Hewlett-Packard Deskjet_1510_series all-in-one

NOTA: Caso os dois comandos anteriores não funcionem, teste-os como root ou com sudo. Se funcionarem convém verificar as permissões de:

# ls /dev/bus/usb/001/ -la
total 0
drwxr-xr-x  2 root root    120 Jan  1  1970 .
drwxr-xr-x  3 root root     60 Jan  1  1970 ..
crw-rw-r--  1 root root 189, 0 May 21 20:39 001
crw-rw-r--  1 root root 189, 1 May 21 20:39 002
crw-rw-r--  1 root root 189, 2 May 21 20:39 003
crw-rw-r--+ 1 root lp   189, 3 May 21 20:54 004

Adicionar o utilizador saned ao grupo lp
# adduser saned lp

Configurar servidor

Editar e ativar o daemon RUN=yes
# nano /etc/default/saned
[...]
RUN=yes

Editar  /etc/sane.d/saned.conf e acrescentar rede:
[...]
## Access list
192.168.1.0/24

E descomentar
data_portrange = 10000 - 10100

Arrancar o servidor SANE
# systemctl start saned.socket

Ativar o arranque automático do serviço aquando do arranque da máquina
# systemctl enable saned.socket

Verificar o estado do serviço
# systemctl status saned.socket
● saned.socket - saned incoming socket
   Loaded: loaded (/lib/systemd/system/saned.socket; enabled)
   Active: active (listening) 
   Listen: [::]:6566 (Stream)
 Accepted: 0; Connected: 0

Configurar o cliente

No cliente existem várias soluções. A normal será o xsane ou o simple-scan (que vem instalado por defeito no Linux Mint).

Editar o ficheiro
$ sudo nano /etc/sane.d/net.conf

E acrescentar o IP ou hostname do servidor
[...]
## saned hosts
192.168.1.103
[...]

De seguida resta iniciar a aplicação de digitalização e o scanner de rede deverá ser detetado.
Caso não seja detetado pode ser necessário adicionar o utilizador ao grupo scanner
sudo adduser utilizador scanner

Após isto é necessário terminar sessão e voltar a entrar.

Referências

[] - https://samhobbs.co.uk/2014/07/raspberry-pi-print-scanner-server
[] - https://wiki.debian.org/SaneOverNetwork

sábado, 22 de outubro de 2016

Servidor de Impressão Raspberry Pi

Utilização de um Raspberry Pi 2B como servidor de impressão de uma impressora HP Deskjet 1510 PSC (Print Scan Copy).

A partir de uma imagem Raspbian Jessie Lite é possível configurar todo o sistema remotamente por SSH e browser.

Há muitas informações úteis na página do projeto debian [1] permitem perceber melhor o funcionamento.

Instalação e Configuração do CUPS

sudo apt-get install cups hplip

Para configuração remota via web é necessário ativar o acesso à interface web através da alteração da configuração Listen e acrescentar os endereços que têm acesso à mesma (neste caso a rede 192.168.0.*):
sudo nano /etc/cups/cupsd.conf
(...)
ServerAlias *
Listen *:631
(...)
# Restrict access to the server...
<Location />
  Order allow,deny
  Allow 192.168.0.*
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow 192.168.0.*
</Location>

Atualização: A diretiva ServerAlias * permite aceder ao servidor CUPS através do IP ou do nome.

Por defeito o CUPS permite a autenticação a utilizadores do SystemGroup [2] e o utilizador pi não pertence a nenhum destes grupos.

Adicionar pi ao grupo lpadmin.
sudo usermod -a -G lpadmin pi

Para confirmar os grupos do utilizador:
groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio lpadmin

Para reiniciar o serviço após alterações às configurações é necessário:
sudo systemctl restart cups.service 

A partir daqui é possível configurar uma nova impressora via browser acedendo a:
http://raspberrypi:631

Ao adicionar uma impressora é reconhecida a impressora e de seguida é necessário escolher o driver da lista muito numerosa, neste caso:
HP PSC 1510 Series, hpcups 3.14.6

É necessário ativar a partilha da impressora aquando da instalação ou então mais tarde na configuração CUPS (Share printers connected to this system)

A partir daqui qualquer máquina na rede com o CUPS (normalmente qualquer Linux com sistema de impressão, por exemplo, ubuntu, Mint, etc) vai ver a impressora sem ser necessário qualquer instalação.

Resolução de Problemas

1. Ao aceder através do nome do servidor na porta 631 dá erro Bad Request
É necessário utilizar a diretiva ServerAlias *, que permite aceder ao servidor CUPS através do IP ou do nome.

2. Quando se manda imprimir o trabalho não é enviado
Confirmar se a impressora não está parada ou com erro através da página de administração: https://raspberrypi:631/printers

3. Debug
Pode ajudar alterar a diretiva LogLevel de warn para debug de forma a ter mais detalhes nos logs:
sudo less /var/log/cups/error_log

Referências

domingo, 8 de novembro de 2015

RF24 - Utilizar o nRF24L01+ para comunicações com Raspberry Pi e Arduino

O chip nRF24L01+ permite a comunicação sem fios na faixa dos 2.4GHz de forma económica [1] (menos de 1 euro, é questão de se procurar nos diversos sites).

Com dois desses chips é possível efetuar comunicações entre dois dispositivos eletrónicos, neste caso um Raspberry Pi 2 B e um arduino uno.

A primeira questão são so drivers necessários para ambas as plataformas. Existem diversas implementações, aqui será utilizada a RF24, fornecida por TMRh20 [2].

Ligações

nRF24L01+ possui oito pinos mas apenas se utilizam os primeiros 7.

pinnRF24L01+arduino
UNO
RPi
pin
RPi
GPIO
1GNDGND25GND
2VCC3.3V173v3
3CED715GPIO22
4CSND824GPIO8
5SCKLD1323SCKL
6MOSID1119MOSI
7MISOD1221MISO

É necessário efetuar as ligações de um nRF24L01+ ao arduino UNO e de outro nRF24L01+ ao Raspberry Pi.

Instalação do Software

arduino
Abrir o arduino IDE e ativar a biblioteca RF24 (testado em 1.6.5):
Sketch > Include Library > Manage Libraries...
Pesquisar por RF24 e clicar em Install

Obter o exemplo [3] fazer o upload para o arduino e abrir a consola CTRL+SHIFT+M, introduzir T para começar a enviar pings.

Raspberry Pi
No Raspbian garantir que o sistema está atualizado:
sudo apt-get update
sudo apt-get upgrade

Ativar o SPI
sudo raspi-config
Advanced > enable the SPI kernel module

Instalar as bibliotecas RF24 do TMRH20 [4]:
wget http://tmrh20.github.io/RF24Installer/RPi/install.sh
chmod +x install.sh
./install.sh

Depois resta entrar no diretório de exemplos para o RPi e experimentar:
cd rf24libs/RF24/examples_RPi
make
sudo ./gettingstarted

Depois é necessário pressionr 0 (zero) para receber os pings do arduino.

Referências

[1] - http://www.aliexpress.com/w/wholesale-nrf24l01.html
[2] - http://tmrh20.github.io/RF24/index.html
[3] - http://tmrh20.github.io/RF24/GettingStarted_8ino-example.html
[4] - http://tmrh20.github.io/RF24/RPi.html
[5] - Projeto com comunicação entre o Raspberry Pi e o arduino (em inglês): https://www.coconauts.net/blog/2014/09/03/send-readings-from-arduino-to-raspberry-via-radio/
[6] - Referências para o arduino e o nRF24L01+ (em inglês): http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
[7] - Projeto mais antigo para comunicação entre o Raspberry Pi e o arduino (em inglês): http://blog.the-jedi.co.uk/2013/10/07/nrf24l01-and-raspberry-pi/

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

WiringPi - GPIO na linha de comandos

Já foi visto um método que permite aceder ao GPIO do Rpi através de python, aqui.

Outra forma de interação com o GPIO é através do wiringPi que implementa uma ferramenta para a linha de comandos que pode ser invocada de várias formas.
Diretamente pelo utilizador, dentro de shell scripts, em PHP através de exec(), etc.

Esta ferramenta é da autoria de Gordon Henderson e para instalar basta seguir os passos daqui.
O manual da mesma encontra-se aqui ou na linha de comandos: man gpio.

1. Instalar o wiringPi

Instalar o git-clone:
$ sudo apt-get install git-clone

Obter o código:
$ git clone git://git.drogon.net/wiringPi

Instalar:
$ cd wiringPi
$ ./build

A partir daqui é possível utilizar a ferramenta wiringPi.

2. Utilizar o wiringPi

Implementando este circuito é possível através da linha de comandos efetuar o ligar e desligar do led.
Neste caso é indicado 7 para o GPIO07, ou seja, o pino 26. Depois escreve-se 1 para ligar ou 0 para desligar o led.
$ gpio -g mode 7 out
$ gpio -g write 7 1
$ gpio -g write 7 0

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.

Eletrónica e Raspberry Pi

Para além da excelente vertente relativa ao Sistema Operativo e demais software possível de correr no Raspberry Pi, existe a Eletrónica.

1. Interface Eletrónica do Rpi

O Raspberry Pi possui uma interface com esta finalidade que se designa de GPIO (General Purpose Input Output).
Esta interface possui 26 pinos que podem ser: 5V, 3V3, GND ou de Input/Output.

Consoante o modelo do Rpi existem diferentes layouts destes pinos.

Uma boa fonte de informação sobre isto está no Raspberry Pi Spy (http://www.raspberrypi-spy.co.uk/2012/06/simple-guide-to-the-rpi-gpio-header-and-pins/).

GPIO Revision 2

2. Esquema para Pisca-Pisca controlado pelo Rpi

Atenção!
Algumas das chamadas de atenção existentes em diversos lados são relativas ao cuidado no desenho e, principalmente, implementação dos circuitos de forma a não "queimar" o Raspberry Pi, pois os pinos de IO do GPIO estão ligados diretamente ao chip da CPU.
Por isso, deve verificar-se sempre o circuito que se vai implementar!

A partir do site indicado anteriormente é possível aceder a inúmeros artigos de interesse.
Um dos mais interessantes para quem se inicia nestas lides é o relativo ao led Pisca-Pisca controlado pelo Raspberry Pi, que se encontra aqui.

Aquando da implementação do circuito numa breadboard convém confirmar tudo. Assim, convém confirmar as ligações do transistor T1 (neste caso um BC547C).

3. Implementação do circuito

Breadboard com o circuito ligado ao Rpi e LED aceso
  • O LED deve ser ligado com o pino mais comprido à resistência R1 e o mais curto ao pino 1 do transistor T1.
  • A resistência R2 deverá ser ligada ao pino 2 do transistor T1.
  • O pino 3 do transistor T1 deverá ser ligado ao GND do Rpi (pino 6).
  • A resistência R1 deve ligar também ao Rpi, neste caso no pino 1 (+3V3).
  • A resistência R2 deve ligar também ao Rpi, neste caso no pino 26 (IO).


4. Python e o GPIO

Para se poder controlar o input e output dos pinos do GPIO através de código python é necessário instalar uma biblioteca, por exemplo: raspberry-gpio-python, disponível para download aqui.

Para saber qual a versão a utilizar é possível executar no terminal do Rpi:
$ python --version
Python 2.7.3

Neste caso será necessário descarregar a biblioteca para a versão 2.

Depois de descarregado o ficheiro, é necessário instalá-lo com:
$ sudo dpkg -i python-rpi.gpio_0.4.2a-1_armhf.deb

Após esta instalação é possível importar para o python a biblioteca que interage com o GPIO.

5. Código Pisca-Pisca em Python

Para testar resta agora criar um ficheiro, por exemplo led.py com o conteúdo:
import RPi.GPIO as GPIO
import time

# Use physical pin numbers
GPIO.setmode(GPIO.BOARD)
# Set up header pin 26 (GPIO7) as an input
pin=26
print "Setup Pin %i" % (pin)
GPIO.setup(pin, GPIO.OUT)

var=1
print "Start loop"
while var==1 :
  print "Set Output False"
  GPIO.output(pin, False)
  time.sleep(1)
  print "Set Output True"
  GPIO.output(pin, True)
  time.sleep(1)

Como o código tem que interagir com o GPIO, é necessário executá-lo com privilégios de root, ou seja:
$ sudo python led.py

Portátil com acesso ao Rpi por SSH e execução do código led.py


quarta-feira, 19 de dezembro de 2012

Raspbian - Rpi

Raspbian é um sistema operativo baseado na versão wheezy do Debian GNU/Linux e especialmente adaptado ao Raspberry Pi.

1. Instalação

1.1. Obter a imagem do Raspbian

É possível obter a imagem a partir do site do Raspberry: http://www.raspberrypi.org/downloads

1.2. Gravar a imagem Raspbian num cartão SD

Neste caso foi utilizado um cartão SDHC Samsung 8GB Categoria 6.
O processo de gravação da imagem é relativamente rápido, menos de 5 minutos.
dd bs=4M if=2012-12-16-wheezy-raspbian.img of=/dev/sdb

Tue Dec 18 16:22:03 WET 2012
462+1 records in 462+1 records out 1939865600 bytes (1.9 GB) copied, 286.539 s, 6.8 MB/s
Tue Dec 18 16:26:49 WET 2012

2. Utilização

Depois de introduzir o SD no Raspberry Pi basta arrancar o mesmo e realizar os passos de configuração inicial que permitirão definir as opções mais comuns, incluindo o arranque automático do ambiente gráfico.

2.1. Autenticação

Os dados de acesso por defeito são:
utilizador: pi
palavra-passe: raspberry

3. Resolução de Problemas

3.1. Problemas com a deteção do teclado

Apesar da na instalação o teclado Logitech K400 ter sido detetado corretamente, nos arranques normais nem sempre era detetado (75% das vezes).

A resolução do problema passa por desligar/ligar o recetor USB do Rpi.

Para uma solução permanente sem esta necessidade, basta seguir os passos do Jan Karger aqui.

Editar o ficheiro /etc/rc.local
sudo nano /etc/rc.local

E acrescentar a seguinte linha antes do exit 0
sleep 5
rmmod hid-logitch-dj
modprobe hid-logitech-dj

3.2. Problemas com o layout do teclado

Apesar de corretamente definido no sistema, no ambiente gráfico LXDE o layout não era reconhecido.
A solução passa por editar o ficheiro /etc/xdg/lxsession/LXDE/autosatart e no final acrescentar a linha:
setxkbmap -layout "pt"