Mudanças entre as edições de "Oficina 2 de App Inventor - Arduino"
Linha 37: | Linha 37: | ||
− | Os delimitadores e os | + | Os delimitadores e os campos da mensagem desse protocolo são descritos abaixo: |
'''Delimitadores de Mensagem''' | '''Delimitadores de Mensagem''' | ||
− | ''' | + | '''identificador de inicio de mensagem - '*' (1 Byte )''' |
− | Caracter da tabela ASCII que indica início de mensagem. Quando transmitido | + | Caracter da tabela ASCII que indica início de mensagem. Quando transmitido para o servidor, este inicia a recepção dos dados enviado. |
− | ''' | + | '''Identificador de fim da mensagem - '#' (1 Byte )''' |
− | Caracter da tabela ASCII que indica fim de mensagem. | + | Caracter da tabela ASCII que indica fim de mensagem. Quando transmitido para o servidor, este termina a recepção dos dados. |
'''Divisor de Campos da Mensagem''' | '''Divisor de Campos da Mensagem''' | ||
− | '''DIV_MSG '|' (1 Byte )''' | + | '''DIV_MSG - '|' (1 Byte )''' |
Caracter da tabela ASCII definido como separador dos campos da mensagem. | Caracter da tabela ASCII definido como separador dos campos da mensagem. | ||
+ | |||
+ | ''' Tipo_msg - (numero indicando o tipo da mensagem) ''' | ||
+ | |||
+ | Número que determina o tipo de mensagem. Os tipos possíveis são: Digitalwrite, Digitalread, PWMwrite, Analogicoread e Resposta | ||
+ | |||
+ | '''Id-Xbee - (1 ou 2) ''' | ||
+ | |||
+ | Identifica o controlador para qual a mensagem deverá ser enviada. | ||
+ | |||
+ | '''Porta - (um número correspondente a uma porta do Arduino) ''' | ||
+ | |||
+ | Identifica a porta a ser lida ou escrita. | ||
+ | |||
+ | |||
'''Tipos de Mensagem - Tipo_msg''' | '''Tipos de Mensagem - Tipo_msg''' |
Edição das 10h33min de 9 de dezembro de 2015
Comunicação entre o APP e os controladores
Na estrutura App Inventor- Arduinos preparada para desenvolvimento do projeto, existem três Arduinos. Apenas um deles se comunicará com o APP instalado no celular, chamaremos esse Arduino de servidor. Os outros dois Arduinos controlarão os dispositivos eletroeletrônicos ligados em suas portas e farão a comunicação com o Arduino Servidor. Chamaremos esses dois Arduinos de controladores.
Antes de iniciarmos a oficina de hoje precisamos entender como foi estruturada a comunicação entre o APP e os dispositivos eletrônicos conectados aos controladores.
A comunicação do APP será sempre com o Arduino servidor. Este por sua vez repassará a informação para os Arduinos controladores. Entre o servidor e o APP a comunicação é via Bluetooth. Entre o servidor e os controladores usamos a tecnologia Xbee para fazer a comunicação. O APP é sempre o responsável pelo início da comunicação. Para mudar o estado de qualquer uma das portas (digitais ou PWM) o pedido tem origem no APP. Do mesmo modo, para verificar o estado de uma das portas (Digital ou Analógica) o comando tem origem no APP. Na figura abaixo estão indicadas as posições das portas digitais, PWMs e Analógicas do Arduino. Na estrutura montada, com Arduino servidor e Arduinos controladores, só teremos acesso as portas dos Arduinos controladores.

A figura que segue relaciona possíveis eletroeletrônicos que podem ser acionados/monitorados pelas portas do Arduino, com seus respectivos tipos de sinal usados.

Descrição do Protocolo de Comunicação
Protocolo APP/Servidor
As mensagens enviadas do APP para o servidor tem o formato de Strings (sequência de caracteres).
Essas Strings contém delimitadores de início e fim, campos que definem o tipo de mensagem, o Arduino controlador de destino, o pino do Arduino que será controlado ou lido, e o valor referente ao controle do pino.
Entre os campos e delimitadores há um caracter separador.
As mensagens de retorno do Servidor para o APP contém um número menor de dados, assim, a estrutura do pacote é simplificada.
Na figura abaixo são mostradas as estruturas desses pacotes.
Os delimitadores e os campos da mensagem desse protocolo são descritos abaixo:
Delimitadores de Mensagem
identificador de inicio de mensagem - '*' (1 Byte )
Caracter da tabela ASCII que indica início de mensagem. Quando transmitido para o servidor, este inicia a recepção dos dados enviado.
Identificador de fim da mensagem - '#' (1 Byte )
Caracter da tabela ASCII que indica fim de mensagem. Quando transmitido para o servidor, este termina a recepção dos dados.
Divisor de Campos da Mensagem
DIV_MSG - '|' (1 Byte )
Caracter da tabela ASCII definido como separador dos campos da mensagem.
Tipo_msg - (numero indicando o tipo da mensagem)
Número que determina o tipo de mensagem. Os tipos possíveis são: Digitalwrite, Digitalread, PWMwrite, Analogicoread e Resposta
Id-Xbee - (1 ou 2)
Identifica o controlador para qual a mensagem deverá ser enviada.
Porta - (um número correspondente a uma porta do Arduino)
Identifica a porta a ser lida ou escrita.
Tipos de Mensagem - Tipo_msg
Como exemplo, se o programa receber na variável APP_command o tipo de mensagem MSG_DIGITALWRITE com valor 10 e na variável pin_num o valor 1, o subsistema de Gerenciamento de comando App executa o comando solicitado no pino digital 2 (primeiro pino digital após pinos 0 e 1, RX e TX). Se o programa receber na variável APP_command o tipo de mensagem MSG_DIGITALWRITE com valor 10 e na variável pin_num o valor 2, o subsistema de Gerenciamento de comando App executa o comando solicitado no pino digital 4 (segundo pino digital após pinos 0 e 1, RX e TX).
De maneira semelhante, a função processa o valor correto dos pinos digitais PWM e dos pinos analógicos.
Com o valor correto da porta definido pela função anterior, os comandos são executados conforme os parâmetros recebidos.
Se o controlador receber corretamente a mensagem do servidor e executar os comandos conforme solicitado, é montada e enviada em seguida uma mensagem de retorno para confirmar o recebimento da mensagem ou enviar valores de retorno.
MSG_DIGITALWRITE 10 (1 Byte )
Valor com tamanho igual a 1 byte enviado como decimal. Define o tipo de mensagem para que o microcontrolador ligado ao dispositivo final execute um comando de acionamento ou desligamento de um dos seus pinos digitais. Após o envio desse tipo de mensagem é aguardado mensagem de confirmação do tipo 12.
Os pinos reservados para acionamento digita na placa Arduinol, ou seja, com valores 0 ou 1 são os pinos:
D2, D4, D7, D8, D12, D13.
MSG_ANALOGWRITE 11 (1 Byte )
Valor com tamanho igual a 1 byte enviado como decimal. Define tipo de mensagem para que o microcontrolador ligado ao dispositivo final execute um acionamento de um dos pinos digitais com PWM. Após o envio desse tipo de mensagem é aguardado mensagem de confirmação do tipo 12.
Os pinos reservados para acionamento digital com PWM, ou seja, com valores que podem variar entre 0 e 255 são os pinos:
D3, D5, D6, D9, D10, D11.
RSP_COMANDO 12 (1 Byte )
Valor com tamanho igual a 1 byte enviado como decimal. Tipo de mensagem que confirma a execução de um comando após uma mensagem do tipo 10 ou 11.
MSG_DIGITALREAD 13 (1 Byte )
Valor com tamanho igual a 1 byte enviado como decimal. Define mensagem de pedido de leitura de uma das portas digitais seguintes:
D2, D4, D7, D8, D12, D13.
Após o envio desse tipo de mensagem é aguardado mensagem de resposta do tipo 15, com o valor solicitado (0 ou 1) num de seus campos.
RSP_LEITURA 15 (1 Byte )
Valor com tamanho igual a 1 byte enviado como decimal. Tipo de mensagem de resposta que define o valor de leitura da porta digital PWM solicitada em mensagens do tipo 13 e 14.
MSG_STATUS 16 (1 Byte )
Valor com tamanho igual a 1 byte enviado como decimal. Define mensagem de pedido de leitura de uma das portas analógicas do microcontrolador. As portas analógicas do microcontrolador que permitem essa leitura são as seguintes:
A0, A1, A2, A3, A4, A5.
RSP_STATUS 17 (1 Byte )
Valor com tamanho igual a 1 byte enviado como decimal. Tipo de mensagem de resposta que define o valor de leitura da porta analógica solicitada em mensagem do tipo 16.
Identificador do Controlaor - Id XBee
Valor com tamanho igual a 1 byte enviado como decimal. Pode assumir os valores 1 ou 2, referente ao Controlador do ambiente.
Porta
Valor com tamanho igual a 1 byte enviado como decimal. Pode assumir valores de 1 a 6 e indicam a porta onde o eletroeletrônico está ligado no Controlador.
Valor
Valor com tamanho igual a 1 byte enviado como decimal. Assume valores entre 0 e 255 e indicam o estado do eletroeletrônico ou o valor de ajuste.
OFICINA - Atuação sobre a placa controladora usando sinais digitais e PWM
Para atingir os objetivos desta oficina é necessário utilizar os códigos já realizados na oficina anterior onde se realizou a seleção do servidor de automação para a comunicação com os controladores. A partir desse ponto é lançada as seguintes tarefas:
- Fique atento as explicações dos professores a respeito de como é estruturada e endereçada as mensagens para os controladores;
- Em um protoboard monte um circuito simples de LEDs que serão alimentados pelas portas digitais e PWM; Siga as instruções e cuidados orientados pelos professores;
- Elabore um código para acender um LED em qualquer porta digital através do botão liga/desliga criado no layout da oficina anterior;
- Agora faça com que o led ligue e desligue alternadamente cada ve que se aperta o mesmo botão;
- Crie Um pisca pisca-pisca usando um timer;
- Crie um novo comando usando um slider e use uma das portas PWM para controlar a luminosidade do led desde apagado até acesso por completo.