Intel Edison Lab 03 – Oxímetro Bluetooth e LCD 16×2 em Python Tela teste inicial Neste Lab descreveremos o método utilizado para integrar um Oxímetro Bluetooth com tecnologia LE (Low Energy), um display de LCD de 16 colunas e 2 linhas (16×2) e o Intel Edison utilizando uma biblioteca escrita em Python. O Oxímetro utilizado neste Lab despensa apresentações pois já foi descrito no Lab 02, inclusive com o princípio de funcionamento e configurações. Um enfoque maior será dado ao display de LCD quanto ao método e a dinâmica da comunicação com o Intel Edison, por ser de fácil e constante uso de Hobistas, estudantes e Makers. Display de LCD 16×2 Displays de LCD são dispositivos comuns e baratos para uma interface com microcontroladores ou processadores como o Intel Edison, que não apresenta nenhum tipo de saída de vídeo (como a Raspberry Pi, BeagleBone Black entre outras). Controlador HD44780 A maioria dos displays de 16×2, 20×4 e outros derivados, são compatíveis com o controlador HD44780 da empresa Hitachi. Este controlador nos permite enviar os dados de duas maneiras: Enviando os 8 bits (8 bits = 1 byte) de uma só vez através dos pinos D0 a D7 ou enviando dois pacotes de 4 bits consecutivos (4 bits = 1 nibble) através dos pinos D4 a D7. A segunda opção (enviar dois pacotes de 4 bits) parece ser mais complicada, porém esta é frequentemente utilizada nos projetos que utilizam este display por economizar 4 pinos de comunicação do processador ou microcontrolador, logo, para comunicar com este display utilizaremos somente 6 pinos, sendo eles dois pinos de controle e 4 de dados. Comunicação modo 4 bits Todos os displays baseados no controlador HD44780 devem receber um startup de dados referente a configuração na qual o controlador deverá trabalhar. A pequena rotina descrita abaixo irá inicializar o display no modo em que desejamos neste Lab. [crayon-592b203b2c25b690564536/] Dinâmica de envio dos dados para o LCD Temos 8 bits em cada byte, porém enviaremos 4 bits de cada vez e, obrigatoriamente, enviar estes de acordo com as especificações de tempo descritas no datasheet do controlador. O grande segredo está em enviar os 4 bits mais significativos, alterar o estado do pino enable e novamente enviar os 4 bits menos significativos. Uma rotina para alterar o estado do pino enable, em Python, é descrita abaixo, onde a constante E_DELAY tem o valor 0,0005 (500 ns). [crayon-592b203b2c275178972320/] Os comandos de configuração e posicionamento do cursor são enviados utilizando o mesmo canal de dados (pinos D4 a D7). O controlador utiliza o terminal RS do display para distinguir o que é comando ou o que é dados. Se o pino RS estiver em nível baixo, qualquer bit enviado na linha de dados D4 a D7 será interpretado como comando e quando RS em nível alto, os bits serão aceitos pelo controlador HD44780 como um caractere. A rotina para enviar os bits para o LCD está descrita abaixo, onde o parâmetro mode, que é repassado ao pino RS, pode receber as constantes LCD_CHR = True para dados enviados como caractere ou LCD_CMD = False para dados em forma de comandos para o controlador do display. [crayon-592b203b2c281187350100/] Esquema e montagem O principal objetivo deste Lab é a integração do Oxímetro Bluetooth, o display de LCD de 16×2 e o Intel Edison, exibindo os dados enviados pelo Oxímetro na tela do display. Um esquema de ligação entre o Edison e o display de LCD, seguindo os mesmos modelos feitos para uma ligação com o Arduino, já que estamos utilizando o Breakout board, está ilustrado na figura abaixo. Esquema Overview Uma imagem da montagem real, feita em protoboard está indicada abaixo. Circuito montado E o esquema das ligações entre o Edison e o Bluetooth também está indicado na figura abaixo. Esquema de Ligação Programação e teste Optamos em elaborar um programa em Python para ser interpretado dentro do Intel Edison por ser de fácil entendimento e execução a partir do diretório root do Edison. O programa se encontra abaixo e foi elaborado para uma fácil interpretação do leitor. [crayon-592b203b2c290356100443/] Primeiramente, crie o script do programa no diretório root do Intel Edison utilizando o editor de textos de sua preferência. No nosso caso optamos por utilizar o nativo do Yocto Linux. Criação do arquivo utilizando o editor vi Insira o código apresentado anteriormente dentro do editor vi. A maneira mais fácil é copiando o script com a combinação control+c ou outro método e posicionar o mouse sobre a tela do editor vi e clicar com o botão direito do mouse. O script será colado, porém devemos conferir se o cabeçalho foi inserido corretamente (na grande maioria não é) e alguns endentamentos importantes para a linguagem Python. Se alguma mensagem de erro aparecer, basta abrir o script novamente e editar (aperte a tecla i primeiro) para corrigir. Edição e correção do script Corrija o cabeçalho, salve o script (ESC + :wq + ENTER) e digite os comandos para habilitar o controlador bluetooth, comando para acessar a biblioteca gatttool de qualquer diretório e execute o script descrito com o comando python edisonBluetoothOximeter.py. Comandos iniciais e confirmação Os dados enviados pelo Oxímetro serão mostrados na tela do display de LCD, assim como pode ser observado na figura abaixo. Funcionamento do display Observação: O procedimento de instalação do Gattool e o método de análise da comunicação entre o Oxímetro e o Intel Edison utilizando o Bluetooth já foram descritos no Lab 02. Conclusão Neste Lab descrevemos os métodos e a dinâmica de comunicação entre o Intel Edison e o display de LCD. Um script de código em linguagem Python também foi apresentado para conduzir a comunicação entre os dispositivos. Outras bibliotecas utilizando diversas linguagens também podem ser escritas afim de atender as preferências de programação de cada leitor.