Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] RaspiLPR O RaspiLPR pode ser usado como um sistema stand alone, que lê placas de carros e toma autonomamente decisões, ou em conjunto com um PC, como parte de um sistema mais complexo. A abertura de uma cancela pode ser acionada através de um dos GPIOs da placa. Para informar qual a placa lida, a comunicação com um eventual PC é feita através do TCP/IP e porta serial. O sistema é configurável através do próprio website interno. Autor: Stefano Benamati 1 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Características técnicas: • Velocidade (com placa na imagem): ~700ms* • Velocidade (sem placa na imagem): ~150ms* • Países: Brasil, Itália, França, República Checa. • Output: HTML, RS232, TCP/IP (síncrono e assíncrono) • Configuração via HTML • Funcionalidade GPIO para dar sinal de abertura porta • DHCP (passivo) • Output vídeo • Leitura contemporânea de mais placas na mesma imagem • Traqueamento, filtragem e interpolação * Na configuração padrão e com Raspberry Pi 1. Se pode aumentar a velocidade com uma escolha apropriada dos parâmetros. Instalação Baixar a imagem do cartão SD A imagem binária do cartão SD se encontra no site do produtor nesse endereço; http://www.gloveapp.com.br/lpr.html Descomprimir a imagem Para diminuir o tempo de download a imagem é comprimida, então é preciso descomprimir a mesma antes de gravar no cartão. Cópia da imagem no cartão de memoria As informações que seguem são a tradução das paginas de instalação do Raspberry que se encontram aqui: http://www.raspberrypi.org/documentation/installation/installing-images/README.md A imagem é para um cartão de memoria de 8GB; antes de gravar conferir se o seu cartão possui este tamanho. Autor: Stefano Benamati 2 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Windows • Inserir o cartão de memoria no leitor e anotar a letra de driver (por exemplo G:). Se pode ver isso facilmente na coluna esquerda do windows explorer. • Baixar o Win32DiskImager. Se trata de um arquivo comprimido que pode ser encontrado aqui: http://sourceforge.net/projects/win32diskimager/ • Descomprimir o arquivo e executar o programa Win32DiskImager; poderá ser necessário rodar esse programa como administrador, e então clicar com o botão direito e selecionar Run as administrator. • Selecionar a imagem que você deseja copiar no cartão de memoria. A imagem do cartão que você baixou é um arquivo comprimido, então é necessário descomprimir antes de copiar. • Selecione a letra de drive correspondente ao leitor do cartão. Fique muito atento nesta seleção porque se você selecionar o driver errado você poderá cancelar todo o conteúdo do seu HD. • Se você tiver um leitor de cartões integrado no computador pode acontecer que o mesmo não seja visto como driver; se isso acontecer poderá usar um adaptador USB. • Clicar Write e esperar que a transferência de dados termine. • Fechar o programa e retirar o cartão. Agora o cartão está pronto para ser inserido no Raspberry. Linux Atenção: o uso do comando dd é potencialmente desastroso se você errar o dispositivo. • Sem o cartão inserido digitar df -h para ver quais são os dispositivos atualmente montados. • Inserir o cartão de memoria no leitor. • Digitar novamente df -h. Um novo item aparecerá na lista. A coluna esquerda informará o nome do dispositivo; O cartão de memoria será listado com um nome parecido com /dev/mmcblk0p1 ou /dev/sdd1, podendo variar a Autor: Stefano Benamati 3 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] ultima parte. • A parte final, no exemplo acima (p1 ou 1) indica a partição, mas o objetivo é escrever o cartão inteiro e não apenas uma partição. Assim, é preciso remover a parte inicial do nome. No exemplo acima será então: /dev/mmcblk0 ou /dev/sdd. Isso identifica o cartão inteiro. • Nota que, dependendo do numero de partições, o cartão de memoria poderá ser listado mais do que uma vez no output do comando df, mas em todas as linhas a parte inicial do nome, a qual identifica o cartão, será sempre a mesma. • Anote o nome identificativo do cartão e desmonte todas as suas partições com o comando sudo umount /dev/XXX, substituindo XXX com o nome de todas as partições do seu cartão. Vamos supor que o resultado do comando df -h seja o seguinte: /dev/mapper/mintvgroot 684G 501G 149G 78% / none 4,0K 0 4,0K 0% /sys/fs/cgroup udev 2,0G 4,0K 2,0G 1% /dev tmpfs 404M 1,4M 402M 1% /run none 5,0M 0 5,0M 0% /run/lock none 2,0G 76K 2,0G 1% /run/shm none 100M 32K 100M 1% /run/user /dev/sda1 236M 44M 180M 20% /boot /dev/sdd1 236M 44M 180M 20% /media/part1 /dev/sdd2 236M 44M 180M 20% /media/part2 e que o cartão de memoria seja /dev/sdd; para desmontar as partições digitar os seguintes comandos: umount /dev/sdd1 umount /dev/add2 ou seja: o nome completo das partições e não o nome do cartão, que neste exemplo é /dev/sdd. • No terminal escrever o cartão com o comando abaixo, substituindo o argumento do parâmetro if= com a imagem do RaspiLPR decomprimida, e o argumento do parâmetro of com o nome do cartão. É muito importante não errar o nome do cartão, pois se digitar o nome errado poderá deletar o seu HD inteiro. Autor: Stefano Benamati 4 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] O nome do cartão é aquele sem o número da partição, como você anotou anteriormente. • sudo dd bs=4M if=imagem_raspilpr of=nome_do_cartao • O parâmetro bs=4M funciona a maioria das vezes; se não funcionar baixar o valor para 1M, mas isso aumentará o tempo de transferência. • O comando dd não fornece informações sobre o progresso da cópia e o terminal aparecerá travado. Poderá demorar entre 5 a 10 minutos para finalizar. Se quiser ver o progresso abrir um novo terminal e digitar: sudo pkill -USR1 -n -x dd o progresso será mostrado no terminal onde você deu o comando de cópia. O progresso poderá não ser mostrado imediatamente por causa do buffering. • Ao término da transferência dar um sync (sudo sync), para ter certeza que todos os dados sejam escritos, e desmonte o cartão. Agora o cartão está pronto para ser inserido no Raspberry. Conexão rede O RaspiLPR está instruído para se conectar a uma rede com DHCP, e oferece os serviços de SSH e HTTP. Para descobrir qual endereço IP foi assinalado ao dispositivo tem varias opções: Monitor O Endereço IP é mostrado na tela se você conecta um monitor HDMI. Áudio Ao término do boot o RaspiLPR fala com voz sintetizada (em inglês) o endereço IP que foi assinalado. É só inserir um fone de ouvido no jack áudio e escutar. Se for conectado o botao1 (ver o capitulo sobre os botoes) o endereço é lido a cada pressão deste botão. Roteador O roteador pode ser configurado para dar sempre o mesmo endereço IP ao RaspiL PR. Esta é a solução melhor caso o objetivo seja montar o RaspiLPR como parte de um produto que necessita de interação com outros módulos. Conferir no manual do Autor: Stefano Benamati 5 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] roteador como fazer. nmap O nmap é uma ferramenta de analise de rede que pode ser usada para achar todos os computadores conectados a mesma rede. A sintaxe é simples: nmap -sP endereço_rede/numbits onde endereço_rede é um qualquer endereço que pertence a rede que você queira analisar (pode usar o seu endereço), e numbits indica quais bits são para considerar fixos e quais vão variar durante a pesquisa. Para a maioria das redes este valor é 24. Segue um exemplo: $ nmap -sP 10.42.0.1/24 Starting Nmap 6.40 ( http://nmap.org ) at 20150321 23:30 BRT Nmap scan report for 10.42.0.1 Host is up (0.00054s latency). Nmap scan report for 10.42.0.79 Host is up (0.0062s latency). Nmap done: 256 IP addresses (2 hosts up) scanned in 3.03 seconds foram encontrados dois hosts: 10.42.0.1 e 10.42.0.79 e como sabemos que o nosso endereço é 10.42.0.1 o outro deve ser do RaspiLPR. Interface SSH O sistema pode ser acessado para administração, configuração o customização diretamente via SSH: usuário = pi senha = raspberry o usuário tá na lista dos sudoers e não precisa de senha, assim é possível lançar co mandos como root usando o sudo. Autor: Stefano Benamati 6 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Para mudar o usuário de pi para root é só digitar sudo su Interface HTTP O RaspiLPR oferece toda a ferramenta de configuração através do próprio site interno. O site é protegido por uma senha: usuário = admin senha = admin Se aconselha a mudança da senha, a fim de evitar intrusões no sistema, se isso for conectado a rede ou se tiver como um terceiro conectar um cabo de rede. Info A página info, que é a página principal que se abre ao acessar o site, resume os indicadores principais para conhecimento da saúde do sistema. Entre eles o tempo em que o leitor de placas está rodando, o uso da memória, o uso do disco, e a porcentagem de CPU usada. Dois indicadores importantes são a temperatura da CPU e da GPU, que ajudam a identificar se o sistema foi instalado num lugar apropriado ou se precisa de ventilação. Os itens Button estão conectados aos botões predefinidos do sistema, que podem ser programados para executar qualquer coisa que o programador quiser. Se apertar um destes botões a linha correspondente mostrará a escrita “pressed”. Isso serve para confirmar se a conexão do botão ao próprio GPIO foi feita de forma correta. Toda a informação é atualizada a cada dois segundos, para não sobrecarregar o sistema. Autor: Stefano Benamati 7 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Log A página log mostra a atividade do sistema relativa aos últimos 30 eventos. Isso serve principalmente para entender qual é o problema se o sistema não funcionar. Quando o sistema funcionar regularmente será apresentada periodicamente uma estatística de funcionamento, com o tempo de processamento e o numero de frame processados. A informação é atualizada a cada dois segundos para não sobrecarregar o sistema. Video Esta pagina mostra a imagem sendo processada pelo LPR. A moldura preta mostra a resolução da câmera, a velocidade global em frame por segundo e, entre parêntese, a velocidade de processamento pura, ou seja sem levar em consideração o tempo de aquisição da imagem. As placas lidas são sobrepostas a imagem original. Como a taxa de atualização não é muito alta haverá um certo atraso de tempo entre a imagem sendo processada e a imagem visuali zada. As duas barras azuis no fundo da imagem mostram graficamente a largura mínima e máxima das placas que o LPR deve considerar. Esses valores podem ser impostaAutor: Stefano Benamati 8 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] dos na página de configuração. Admin A página de administração serve apenas para mudar a senha que da acesso ao servidor web. É aconselhado mudar a senha se o sistema for conectado a uma rede, ou se for possível para um terceiro ter acesso físico ao sistema. Setting Nesta página se define quais são os parâmetros de funcionamento do LPR: Camera resolution: é a resolução da câmera. Virtualmente poderia ser qualquer resolução suportada pela câmera, mas como o Raspberry não é um hardware muito performante aconselha-se que seja usada uma resolução baixa, como por exemplo 320x240. Com o novo Raspberry PI 2 provavelmente se poderá processar em tempo real também imagens maiores. Se a câmera não suportar a resolução escolhida será utilizada a resolução padrão 640x480. Camera source: origem das imagens; se esse campo é setado com o valor -1 será escolhida a primeira câmera disponível no sistema, com preferência pela Raspicam, se for disponível. Qualquer outro valor numérico positivo indica qual câmera usar: 0 = primeira câmera, 1 a se gunda, e assim por diante. Esse campo aceita também URL de câmeras IP ou até vídeos gravados no HD, por exemplo: http://mycameraip.com.br:8080/image.mjpg. O campo Camera resolution não tem efeito se for usada uma câmera IP, porque esta impostação é feita localmente na câmera mesmo. Se for usar a câmera IP e decidir usar o protocolo UDP, deve-se atentar ao configurar a câmera, de forma que o I-fraAutor: Stefano Benamati 9 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] mes não seja maior do que o tamanho máximo do pacote UDP, que é 64KiB. Na duvida usar o protocolo TCP. ROI: Region Of Interest; esse campo serve para dizer ao LPR para analisar apenas uma porção da imagem, para que o processamento seja mais rápido. Se esse campo não for definido será processada a imagem inteira. O ROI é muito útil quando se sabe com antecedência que a placa aparecerá apenas numa área da imagem. A sintaxe é a seguinte: x y largura altura, ou seja, se o objetivo for processar apenas um retângulo, cujo ângulo superior esquerdo esteja na posição (50, 80), de largura 200 e altura 100, deve-se inserir no campo o seguinte: 50 80 200 100. Plate min/max width: esses valores indicam a dimensão mínima e máxima aproximada com que a placa se apresentará na imagem. Esses valores ajudam a reduzir muito o tempo de processamento, porque cortarão o tempo gasto procurando placas pequenas ou grandes demais. Serial device: um dos canais para disponibilizar o resultado da leitura das placas é a porta serial. O Serial device indica qual porta serial deve ser usada para comunica ção. O Raspberry já vem com uma porta serial instalada, que é /dev/ttyAMA0; se for instalada uma nova serial via USB o nome do device mudará; provavelmente será /dev/ttyUSB0. Para conferir qual é o nome do dispositivo basta se conectar via ssh e olhar na pasta /dev. O motivo pelo qual se poderia querer instalar uma serial via USB é explicado na sec ção serial. Deixando em branco esse campo desativará a saída das placas pela serial. Serial params: são os parâmetros de configuração da serial na forma velocidade databitsparitystopbits por exemplo: 19200 8N1. Rescale Factor: este parâmetro ajuda a diminuir o tempo de processamento no modulo que localiza a placa. O valor ideal é 1, mas se pode selecionar também 2 se a placa a ser procurada for grande. Median filter size: para eliminar eventuais erros transitórios na leitura da placa o sistema opera um filtro mediano, analisando um certo número de imagens passadas. Esse parâmetro indica quanto tempo no passado o filtro deve analisar. O valor de default é um bom valor. Se não quiser usar o filtro mediano colocar zero nesse campo. Validation: indica qual nível de validação deve ter um candidato placa para ser promovido ao passo sucessivo, ou seja a leitura. A validação permite cortar o processamento evitando que áreas que não contenham placas sejam processadas. Tem 4 diferentes níveis de validação: • Level 0: nenhuma validação; o sistema processa todos os retângulos que o localizador de placas retorna. Se um retângulo não for placa será detectado depois de muito processamento ao termino do OCR. • Level 1: opera um controle morfológico da área, retornando um indicador de probabilidade que essa área seja uma placa. Esse tipo de validação é muito rápido e consegue cortar pela metade os falsos positivos, sem eliminar as pla- Autor: Stefano Benamati 10 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] cas reais detectadas. No caso geral este nível de validação é o melhor, por isso é selecionado como default. • Level 2: usa o controle morfológico do Level 1 e também um algoritmo probabilístico. É um pouco mais lento do que o Level 1 e consegue cortar um pouco mais de falsos positivos, ao preço de eliminar também um pouco de placas reais. • Level 3: usa apenas o algoritmo probabilístico. É mais lenta do que os níveis anteriores. Consegue cortar quase todos os falsos positivos, mas corta também 25% das placas reais. A única vantagem desse método é que ele refina a posição da placa, e isso ajuda o passo sucessivo. Para todos os níveis existem situações em que seja oportuno usá-los, mas no caso geral aconselha-se usar o Level 1. Use interpolation: por vezes pode acontecer que em um frame a placa não seja detectada; se esse parâmetro é true a posição da placa que falta é calculada na base da sua posição nos frames anteriores, e apresentada na tela (numa cor diferente) como se tivesse calculada. Headless: se selecionar true não será apresentada nenhuma imagem no monitor; isso serve para economizar CPU quando nenhum monitor estiver conectado. Web show: se selecionar true será apresentada na pagina video a imagem processada pelo sistema. Country: seleciona o país. Use multithread: indica se o processamento deve ser distribuído nos núcleos do processador. Isso aumenta a velocidade do sistema. Activate Esta é a pagina de ativação do produto. Sem ativação o sistema roda em modalidade demo, que tem o 100% das funcionalidades de leitura placas mas não fornece em output a string com as placas lidas. O output é mostrado apenas no monitor e na pagina Video. Com a ativação o resultado será disponível via porta serial e via TCP/IP. Autor: Stefano Benamati 11 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Saídas de dados O RaspiLPR tem 3 métodos para disponibilizar as leituras: a interface serial e dois servidores TCP: um assíncrono e outro síncrono. Cada placa lida gera a escritura de uma linha em cada um destes meios; se o RaspiLPR estiver ativado será escrita a placa, se não, a escrita será “DEMO PLATE”. Essa é a única diferença entre a modalidade demo e a modalidade ativada. Interface serial O Raspberry tem uma interface serial que é mapeada em /dev/ttyAMA0 e que tem conexão física nos pins 8 e 10. Na conexão com o PC não esquecer de conectar o RX do Raspberry com o TX do PC e vice-versa. Como a maioria dos PC atuais não tem mais a porta serial, para se conectar ao Raspberry é Pins da porta serial necessário que o PC use um adaptador USBserial, que é um pequeno dispositivo que providencia um conector RS232. Esses adaptadores são muito baratos e podem ser encontrados com facilidade em qualquer loja de material informático. Adaptador USB serial Adaptador USB serial especifico para Raspberry Ao invés do serial do Raspberry pode-se usar um adaptador USB-serial conectado numa das portas USB do Raspberry; nesse caso o nome do dispositivo não será /dev/ttyAMA0, mas algo tipo /dev/ttyUSB0. Conferir isso na pasta /dev. Autor: Stefano Benamati 12 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] A configuração da comunicação serial é feita na pagina setting do servidor interno do RaspiLPR. Atenção: o sinal elétrico que o Raspberry espera nos pins RX e TX é 3.3v, mas alguns adaptadores USB-serial usam 5v. Fique muito atento na escolha do adaptador porque se usar um de 5v de saída vai ter muitos erros de transmissão e pode até queimar o UART do Raspberry. Para evitar perda de tempo na escolha sugere-se a compra de adaptadores específicos para o Raspberry, que tem o mesmo preço e, além de ter a saída de 3.3v, tem plugs que encaixam diretamente nos pins da placa, sem necessidade de montar outros conectores. Atenção: qualquer que seja a serial utilizado não esquecer de conectar o RX de um lado com o TX do outro, e vice-versa. Autor: Stefano Benamati 13 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Interface TCP Quando o LPR rodar estarão disponíveis duas portas onde os dados serão enviados: porta 20000: o servidor que responde nesta porta envia todas as placas lidas desde a última conexão, para um máximo de 100 placas. E depois termina a conexão. A sintaxe das mensagens enviadas é a seguinte: AAA 1234 , 7 AAA 1234 , 7 AAA 1234 , 7 BBB 5678 , 2 BBB 5678 , 1 BBB 5678 , 1 onde o número depois da virgula indica a idade em segundos da leitura, ou seja quanto tempo atrás foi feita. Isso é necessário porque a leitura na porta 20000 pode ser feita em qualquer momento, e é preciso um mecanismo para saber se a última placa mostrada se refere a situação atual ou não. A conexão com a porta 20000 finalizará sempre, mesmo que não tenham placas, ou seja; o processo que faz a conexão tem certeza que a leitura não é bloqueante. Esse servidor é útil para fazer polling. porta 20001: o servidor que responde nessa porta mantém a conexão com o client e fornece as placas assim que estiverem disponíveis. Nesse caso a saída é apenas a placa lida, sem a idade, porque assim que sair a leitura esta é enviada ao client imediatamente; então, a idade será sempre zero. Um client que conectar a essa porta e fizer uma leitura ficará bloqueado até que pelo menos uma placa esteja disponível. Esse servidor é útil quando se deseja parar o sistema e acordar quando uma placa estiver disponível. Só pode se conectar um client por vez nesta porta. Para testar o sistema pode-se usar o comando telnet: telnet endereço_raspi 20000 (ou 20001) Autor: Stefano Benamati 14 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Nota: os dados disponibilizados pelos servidores são organizados assim: uma linha por cada placa. Se utilizar o telnet para testar o sistema, e estiver no Windows, pode ser que a visualização seja um pouco bagunçada, como no exemplo abaixo: AAA 1234 AAA 1234 AAA 1234 AAA 1234 AAA 1234 Isso acontece porque o Windows não usa o caractere terminal de linha LF, mas a dupla CR+LF. Esta escolha deriva das velhas impressoras onde os comandos tinham um significado físico: CR causava a cabeça de escritura voltar no inicio da linha, e LF avançava de uma linha o papel. Isso hoje em dia não faz mais sentido, mas o Windows por motivos históricos continua com esta notação. Embora o telnet para Windows não opere esta conversão, o sistema estará funcionando perfeitamente se for possível ver as placas saindo. GPIO O Raspberry disponibiliza uma serie de GPIO (General Purpose Input Output), que permite ao sistema se comunicar com dispositivos externos. Podem ser usados quaisquer GPIOs, desde que não seja usado por outros dispositivos. Por exemplo: o GPIO14 e o GPIO15 são usados pela porta serial, então, a não ser que não precise desta porta, não se pode usá-los. O RaspiLPR reservou para seu próprio funcionamento 4 saídas marcadas como Led e 4 entradas marcadas como Btn. Os outros estão livres para uso. Nos GPIOs usados como saídas pode-se conectar leds ou reles. Se conectar um led é preciso limitar a corrente absorvida colocando em serie um pequeno resistor, como na imagem ao lado. Se for usar um GPIO como entrada e quiser conectar um botão, a conexão deve ser feita utilizando um dos dois esquemas abaixo (pull down ou pull up): Esquema de conexao led Autor: Stefano Benamati 15 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Esquemas pull down e pull up para botões Para escrever ou ler os GPIO, conectar-se ao RaspiLPR via SSH e lançar o seguinte comando: gpio read|write gpio [on|off] exemplos: gpio read 18 (pra ler o GPIO 18) gpio write 4 on (para mandar o sinal alto ao GPIO 4) gpio write 4 off (para mandar o sinal baixo ao GPIO 4) Atenção para não confundir o número de pin com o número do GPIO; por exemplo, o GPIO17 está no pin 11, e não no 17. Autor: Stefano Benamati 16 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Conector do Raspberry PI mod B GPIOs predefinidos O RaspiLPR reservou 8 GPIOs para o próprio funcionamento. Não são todos utilizados e podem ser reaproveitados pelo usuário. Os GPIO designados como Led são saídas, e não necessariamente devem ser conectados aos leds; podem por exemplo ser conectados a um rele para comandar uma cancela. Led1 (GPIO4): liga quando o boot é terminado Led2 (GPIO17): liga quando o LPR estiver rodando. Se o led estiver desligado ou piscante significa que o leitor de placas não está funcionando (ou que o led queimou). Conferir o estado na pagina principal. Led3 (GPIO27): não usado Led4 (GPIO22): não usado Os GPIO designados como Btn são entradas, e não necessariamente devem ser coAutor: Stefano Benamati 17 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] nectados a botões. Btn1 (GPIO18): se esse botão for clicado uma mensagem vocal sintetizada informa (em inglês) o endereço IP do sistema. Btn2 (GPIO23): se este botão for clicado uma mensagem vocal sintetizada informa que o botão 2 foi clicado. Btn3 (GPIO24): se este botão for clicado uma mensagem vocal sintetizada informa que o botão 3 foi clicado. Btn4 (GPIO25): se este botão for clicado uma mensagem vocal sintetizada informa que o botão 4 foi clicado. O comportamento do sistema quanto ao clique dos botões pode ser definido no ar quivo /home/pi/app/etc/gpio.config. A sintaxe é muito simples: Led1 = 4 : on Led2 = 17 : off Led3 = 27 : off Led4 = 22 : off Btn1 = 18 : /home/pi/app/etc/button1 Btn2 = 23 : /home/pi/app/etc/button2 Btn3 = 24 : /home/pi/app/etc/button3 Btn4 = 25 : /home/pi/app/etc/button4 pollingInterval = 200 nome convencional = número gpio : ação para executar No caso de led a ação é executada uma vez ao término do boot e pode ser on ou off, para decidir se o led será ligado ou desligado. Para os botões o estado é lido a cada pollingInterval millisegundos. E se o botão for clicado o script definido como ação será executado. Autor: Stefano Benamati 18 Av. N.Sra de Copacabana 152/24 – Copacabana – Rio de Janeiro http://www.gloveapp.com.br [email protected] Ativação Até ser ativado o LPR funciona em modalidade demo, que tem 100% das funcionalidades de leitura placas mas não fornece em output a string com as placas lidas. O output é mostrado apenas no monitor e na página Video. Com a ativação o resultado será disponível via porta serial e via TCP/IP. Autor: Stefano Benamati 19