RaspberryPI - Lendo teclado matricial 4x4 com Python

Introdução

 

Em outros artigos, abordei como realizar leitura e escrita no GPIO do RaspberryPI utilizando Python, e, para isto, instalamos um módulo chamado RPi.GPIO, que pode ser conferido na primeira parte [1] sobre input e na segunda parte [2] sobre output.

 

Caso seja o primeiro contato com teclados matriciais, uma literatura recomendada é o artigo do Rodrigo Almeida [3] sobre Teclados Matriciais e varredura de teclas [4].

 

Agora vamos utilizar este mesmo módulo e implementar uma aplicação onde iremos ler um teclado matricial 4x4 via GPIO e utilizando a RPi.GPIO e desenvolver uma aplicação útil para este dispositivo. 

 

 

Configuração do ambiente host

 

  • Placa: Raspberry PI B;
  • Distribuição: Raspbian - Debian Wheezy (2014-01-07);
  • Kernel 3.12.22;
  • Python 2.7;
  • RPi.GPIO 0.5.6.

 

 

Teclado Matricial 4x4

 

Teclado matricial 4x4 com 16 teclas, com conector de 8 vias sendo 4 linhas x 4 colunas, a divisão pode ser visto na figura 1, onde baseado em leitura dos pinos é possível saber a tecla pressionada. Vamos ver logo abaixo como configurar os pinos para isso.

 

mebrana4x4PythonRaspberryPiEmbarcados.com.br
Figura 01 - Linhas e Colunas do Teclado Matricial 4x4

 

No caso, escolhemos entre linhas ou colunas e aplicamos uma tensão. Neste exemplo, escolhi a coluna e estou deixando como GND (0V), e as linhas estarão no modo INPUT e com Pull-Up habilitado, e o funcionamento se resume na figura 2.

 

tecladomebrana4x4PythonRaspberryPiEmbarcados.com.br
Figura 02 - Coluna 1 em GND e Linha 1 como Input

 

No momento que eu pressionar, no exemplo, a tecla 1 (L1) passará para 0V, como pode ser visto na figura 3.

 

tecladomebrana4x4PressKey1PythonRaspberryPiEmbarcados.com.br
Figura 03 - Tecla 1 pressionada e L1 passa a ser 0V

 

Então é isso que o código deverá fazer, Colunas (C1, C2, C3 e C4) como GND (0V) e Linhas (L1, L2, L3 e L4) como input e no caso modo pull-up.

 

 

Esquema de ligação

 

Na figura 4 o esquema de ligação do teclado matricial 4x4 com a Raspberry PI B.

 

GPIORaspberryPITeclado4x4Python
Figura 4 - Esquema de ligação Teclado Matricial 4x4 e GPIO RaspberryPI B

 

Para não ter erro, coloquei uma tabela com a relação Linha x Coluna e a ligação na GPIO da RaspberryPI B baseada em Board e BCM.

 

 

Preparando o ambiente

 

Para realizar a tarefa de ler a tecla pressionada, iremos utilizar Python e como nos demais artigos utilizaremos o modulo RPi.GPIO. Caso ainda não conheça, veja os artigos de GPIO input com Python [1]  e GPIO output com Python [2].

 

Caso ainda não tenha o RPi.GPIO, recomendo a leitura do artigo GPIO output com Python [2]. Lá irá encontrar todos os passos necessários para instalar este módulo. Caso já o possua instalado, prossiga com a leitura.

 

 

A aplicação

 

Encontrei vários exemplos de aplicações do teclado matricial 4x4 com a RaspberryPI e muitos com Python, mas não me agradou a forma que foi implementado. Caso tenha curiosidade, pesquise no por "RaspberryPI Python Matrix4x4" e vai ver o que estou falando. Muitos ficam em um loop lendo linhas e colunas e em um dado momento inverte um deles para testes, isso não me agradou isso.

 

Enfim, resolvi implementar um módulo baseado em tudo que já foi passado aqui com RPi.GPIO usando interrupções, detecção de bordas e outras particularidades da RPi.GPIO.

 

O módulo pode ser obtido em:

 

https://github.com/cleitonbueno/pykeypi

 

 

O módulo pykeypi abstrai toda configuração, mecanismo de leitura do usuário e a sua aplicação. O que deve ser seguido à risca é a sequência e ordem de conexão do teclado matricial ao GPIO do RaspberryPI. Ainda não possui modularização para alterar esta ordem, será implementado em uma próxima versão.

 

Algumas funções que podem ser utilizadas e o que fazem:

 

pykeypi.keypad(): É a primeira função a ser chamada, é a classe do módulo e que cria o objeto, para inicializar as configurações e checar alguns requisitos do sistema.

 

pykeypi.info(): Imprime na tela informações de versão do módulo, e a revisão da RaspberryPI e versão da RPi.GPIO.

 

pykeypi.last_key(): Irá armazenar o valor da última teclado que foi realizada leitura, útil para ler apenas uma tecla.

 

pykeypi.get_key(): Função principal que faz leitura das teclas, útil para ler várias combinações em um loop, por exemplo.

 

pykeypi.exit(): Encerra o módulo pykeypi, o qual deve ser chamado, pois é o que garante limpar as configurações feitas no RPi.GPIO.

 

pykeypi.print_msg(Mensagem): Utilizando uma estrutura pré-definida na função para um print customizado na tela, passando uma mensagem e/ou frase como parâmetro, será impresso na tela da maneira que foi customizado no módulo.

 

E vamos a um exemplo básico:

 

Executando a aplicação:

 

Ops, faltou o sudo. Mas ele irá avisar que precisa utilizar permissão de super-usuário e vimos que a parte de checagem do módulo esta ok para esta parte.

 

Simplesmente crio um objeto tecla_pressionada com teclado.keypad(), imprimo uma mensagem na tela e entro em um loop infinito que ficara checando o retorno de tecla_pressionada.get_key(). No momento que retornar algo ele para o loop e logo em seguida imprime na tela o valor da última tecla pressionada, que pode ser obtido no retorno da função tecla_pressionada.last_key().

 

Agora um exemplo mais elaborado e que entra mais no uso real. Vamos criar uma aplicação que deverá ficar em um loop e aguardar digitar 5 caracteres, após isso imprime na tela e sai da aplicação.

 

 

 Executando a aplicação:

 

Poderia estender a aplicação e fazer uma checagem desta senha digitada, usar um LCD e mostrar se a senha está correta, ou até mesmo realizar conexão com um banco de dados e fazer qualquer operação, uma consulta ou uma gravação no mesmo. Para isso o Python não tem limite e pode ser facilmente ampliado para tudo isso e sua aplicação ficar ainda mais robusta. 

 

 

Conclusão

 

Novamente vimos o poder do Python para criar aplicações e desta vez um módulo que foi criado para esta tarefa. A pykeypi passará por atualizações e será agregado mais funções e automações para facilitar o uso da mesma. Quer contribuir com o projeto? Possui dicas para melhorar a aplicação? Entre em contato, será um prazer discutir sobre e dar commits.

 

O teclado matricial 4x4 pode ser adquirido pela internet mesmo na loja FilipeFlop [5].

 

 

Referências

 

[1] https://www.embarcados.com.br/raspberry-pi-gpio-input-com-python/

[2] https://www.embarcados.com.br/raspberry-pi-gpio-output-com-python/

[3] https://www.embarcados.com.br/author/rmaalmeida/

[4] https://www.embarcados.com.br/teclado-matricial-e-varredura-de-teclas/

[5] http://www.filipeflop.com/pd-6b55a-teclado-matricial-de-membrana.html

Proprietário da B2Open onde oferecemos consultoria, treinamentos e desenvolvimento em Sistemas Embarcados. Entusiasta a filosofia open-source, mais de 10 anos de experiências em Linux e FOSS. Em sistemas embarcado do firmware baremetal ao Linux Embedded, e há aproximadamente 8 anos desenvolvendo em (C, Python, Qt e muito Shell Script), além de profiling, hardening e tuning para targets com Linux Embarcado. Graduado em Engenharia da Computação pela UNICEP com ênfase em robótica e sistemas embarcados.

Deixe um comentário

2 Comentários em "RaspberryPI - Lendo teclado matricial 4x4 com Python"

Notificar
avatar
 
Ordenar por:   recentes | antigos | mais votados
EverPi
Visitante
EverPi

Muito bom! Parabéns!

wpDiscuz