- Requisitos:
- Microcontrolador PIC de programação para comunicação Bluetooth:
- Diagrama de circuito e configuração de hardware:
- Controlando o LED usando o aplicativo móvel Bluetooth:
Neste tutorial, aprenderemos como fazer projetos PIC sem fio através da interface de um módulo Bluetooth (HC-06). Em nosso tutorial anterior, já aprendemos como usar o módulo USART em nosso microcontrolador PIC e estabelecemos a comunicação entre o PIC e o computador. Se você é um iniciante absoluto, verifique aqui todos os nossos tutoriais PIC, onde começamos do zero, como aprender MPLAB e XC8, interface de LED, LCD, usando temporizadores, ADC, PWM etc.
Aqui, usamos o popular módulo Bluetooth HC-06. Usando este módulo, podemos receber e enviar informações sem fio de nosso PIC MCU para um aplicativo móvel ou um computador. A comunicação entre o PIC e o HC-06 é estabelecida usando o módulo USART presente no microcontrolador PIC. Você também pode usar o HC-05. Operamos novamente no mesmo modo assíncrono de 8 bits, mas desta vez modificaremos nosso código um pouco para que funcione com o módulo Bluetooth. Portanto, aprender o tutorial UART de antemão é uma vantagem adicional para este projeto.
Neste tutorial, alternaremos um LED enviando um comando liga ou desliga de nosso smartphone. Usaremos um aplicativo Android chamado Terminal Bluetooth que pode enviar e receber dados por Bluetooth. Se enviarmos um caractere '1' do aplicativo, a luz se acenderá na placa PIC e receberemos um aviso de volta para o telefone de que a luz foi acesa. Da mesma forma, podemos enviar '0' do telefone para desligá-lo. Desta forma, podemos controlar a luz LED em nossa placa PIC, semelhante ao tutorial UART, mas agora sem fio. O Programa Completo e o Vídeo Detalhado são fornecidos no final deste tutorial.
O diagrama de blocos básico para a configuração é mostrado abaixo.
Requisitos:
Hardware:
- PIC16F877A Perf Board
- Módulo Bluetooth HC-05 ou HC-06
- Computador (para programação)
- Celular
- Programador PICkit 3
Programas:
- MPLABX
- Terminal Bluetooth (aplicativo móvel)
Módulo Bluetooth HC-06:
O Bluetooth pode operar nos dois modos a seguir:
- Modo de Comando
- Modo operacional
No modo de comando poderemos configurar as propriedades do Bluetooth como o nome do sinal do Bluetooth, sua senha, a taxa de transmissão de operação etc. O modo de operação é aquele em que poderemos enviar e receber dados entre o microcontrolador PIC e o módulo Bluetooth. Portanto, neste tutorial, vamos brincar apenas com o modo de operação. O modo Comando será deixado com as configurações padrão. O nome do dispositivo será HC-05 (estou usando HC-06) e a senha será 0000 ou 1234 e o mais importante, a taxa de transmissão padrão para todos os módulos Bluetooth será 9600.
O módulo funciona com alimentação de 5 V e os pinos de sinal operam com 3,3 V, portanto, um regulador de 3,3 V está presente no próprio módulo. Portanto, não precisamos nos preocupar com isso. Dos seis pinos, apenas quatro serão usados no modo operacional. A tabela de conexão de pinos é mostrada abaixo
S.Não |
Pin em HC-05 / HC-06 |
Nome do PIN no MCU |
Número do PIN no PIC |
1 |
Vcc |
Vdd |
31 r pino |
2 |
Vcc |
Gnd |
32 nd pino |
3 |
Tx |
RC6 / Tx / CK |
25 th pino |
4 |
Rx |
RC7 / Rx / DT |
26 th pino |
5 |
Estado |
NC |
NC |
6 |
EN (habilitar) |
NC |
NC |
Confira nossos outros projetos para saber mais sobre o módulo Bluetooth HC-05 com outros microcontroladores:
- Carro de brinquedo controlado por Bluetooth usando Arduino
- Sistema de automação residencial controlado por Bluetooth usando 8051
- Luzes controladas por voz usando Raspberry Pi
- Rádio FM controlado por telefone inteligente usando Arduino e processamento
- Carro robô controlado por telefone celular usando G-Sensor e Arduino
Microcontrolador PIC de programação para comunicação Bluetooth:
Como todos os módulos (ADC, Timer, PWM), também devemos inicializar nosso módulo Bluetooth. A inicialização será semelhante à inicialização UART, mas precisamos fazer algumas alterações para que o Bluetooth funcione perfeitamente com nosso MCU PIC16F877A. Vamos definir os bits de configuração e começar com a função de inicialização do Bluetooth.
Inicializando o Bluetooth:
Quase todos os módulos Bluetooth no mercado funcionam a uma taxa de transmissão de 9600, é muito importante definir a sua taxa de transmissão igual à dos módulos Bluetooth que operam a taxa de transmissão, aqui definimos SPBRG = 129, uma vez que estamos operando a uma frequência de relógio de 20Mhz com 9600 como taxa de transmissão. Portanto, a inicialização acima funcionará apenas para módulos Bluetooth operando na taxa de transmissão de 9600 baud. Também é obrigatório ter o bit de taxa de transmissão de alta velocidade BRGH habilitado. Isso ajudará a definir uma taxa de transmissão precisa.
// ****** Inicializar Bluetooth usando USART ******** // void Initialize_Bluetooth () {// Definir os pinos de RX e TX // TRISC6 = 1; TRISC7 = 1; // Defina a taxa de baud usando a tabela de consulta na folha de dados (pg114) // BRGH = 1; // Sempre use taxa de transmissão de alta velocidade com Bluetooth, caso contrário, não funcionará SPBRG = 129; // Ligue Asyc. Porta serial // SYNC = 0; SPEN = 1; // Define recepção e transmissão de 8 bits RX9 = 0; TX9 = 0; // Habilita transmissão e recepção // TXEN = 1; CREN = 1; // Habilite global e ph. interrupções // GIE = 1; PEIE = 1; // Habilita interrupções para Tx. e Rx.// RCIE = 1; TXIE = 1; } // ___________ BT inicializado _____________ //
Se você tiver um módulo BT que opera em uma taxa de transmissão diferente, você pode consultar a tabela de pesquisa abaixo para descobrir seu valor para o SPBRG.
Carregando dados no Bluetooth:
Uma vez que a função é inicializada, temos três funções em nosso programa para enviar e receber dados do Bluetooth. Ao contrário do UART, temos poucas coisas a considerar aqui antes de podermos transmitir ou receber dados. O módulo Bluetooth possui um buffer de transmissão e recepção, os dados enviados a ele serão armazenados no buffer Tx. Esses dados não serão transmitidos (enviados no ar), a menos que um retorno de carro seja enviado ao módulo. Portanto, para transmitir os dados, temos que carregar o buffer Rx de BT e então transmiti-lo usando o retorno de carro.
O trabalho acima pode ser facilmente alcançado usando as seguintes funções. A função abaixo pode ser usada quando temos que carregar apenas um caractere no buffer Rx. Carregamos os dados no registrador TXREG e esperamos até que sejam processados, verificando o sinalizador TXIF e TRMT usando loops while.
// Função para carregar o Bluetooth Rx. buffer com um char.// void BT_load_char (char byte) {TXREG = byte; while (! TXIF); enquanto (! TRMT); } // Fim da função //
A função abaixo é usada para carregar uma string no buffer Rx do módulo Bluetooth. A string é dividida em caracteres e cada caractere é enviado para a função BT_load_char () .
// Função para carregar Bluetooth Rx. buffer com string // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Fim da função /
Transmitindo dados por Bluetooth:
Até agora, acabamos de transmitir informações para o buffer Rx do módulo HC-05. Agora devemos instruí-lo a transmitir os dados pelo ar usando esta função.
// Função para transmitir dados de RX. buffer // void broadcast_BT () {TXREG = 13; __delay_ms (500); } // Fim da função //
Nesta função, enviamos um valor 13 para o registrador TXREG. Este valor 13 nada mais é do que o equivalente decimal para o carro (consulte o gráfico ASCII). Em seguida, um pequeno atraso é criado para o transmissor iniciar.
Lendo dados de Bluetooth:
Semelhante ao UART, a função abaixo é usada para ler dados do Bluetooth
// Função para obter um caractere de Rx.buffer de BT // char BT_get_char (void) {if (OERR) // verificar o erro de over run {CREN = 0; CREN = 1; // Reset CREN} if (RCIF == 1) // se o usuário enviou um char retornar o char (valor ASCII) {while (! RCIF); return RCREG; } else // se o usuário não enviou nenhuma mensagem, return 0 return 0; } // Fim da função /
Se o usuário enviou um dado, esta função retornará aquele dado particular que pode ser salvo em uma variável e processado. Se o usuário não enviou nada, a função retornará zero.
Função principal:
Usamos todas as funções explicadas acima dentro da função principal. Enviamos alguma mensagem introdutória e esperamos que o usuário envie alguns valores com base nos quais alternamos a luz led VERMELHA conectada ao pino RB3 em nossa placa Perf.
void main (void) {// Declarações de variáveis de escopo // int get_value; // Fim da declaração da variável // // Declarações de E / S // TRISB3 = 0; // Fim da declaração de I / O // Initialize_Bluetooth (); // vamos deixar nosso bluetooth pronto para a ação // Mostrar alguma mensagem introdutória assim que ligar // BT_load_string ("Bluetooth inicializado e pronto"); broadcast_BT (); BT_load_string ("Pressione 1 para ligar o LED"); broadcast_BT (); BT_load_string ("Pressione 0 para desligar o LED"); broadcast_BT (); // Fim da mensagem // enquanto (1) // O infinito lop {get_value = BT_get_char (); // Leia o char. recebido via BT // Se recebermos um '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED desligado"); broadcast_BT (); } // Se recebermos um '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED ligado"); broadcast_BT ();}}}
Verifique o programa completo na seção de código abaixo.
Diagrama de circuito e configuração de hardware:
Conexões do circuito para este projecto é muito simples, que simplesmente tem que poder-se o módulo Bluetooth e ligar o Tx para o 26 th pino de PIC e Rx a 25 th pino de PIC como mostrado no diagrama de circuito abaixo:
Agora, vamos prosseguir com o hardware. Assim que a conexão for feita, ela deve ser parecida com isto.
Controlando o LED usando o aplicativo móvel Bluetooth:
Agora vamos preparar nosso aplicativo Android. Baixe o aplicativo chamado Terminal Bluetooth na App store ou use este link. Assim que o aplicativo for baixado e instalado, ligue sua placa de desempenho PIC que estamos usando desde o início. A pequena luz LED no seu Módulo Bluetooth deve piscar para indicar que ele está ligado e procurando ativamente por um telefone para estabelecer uma conexão.
Agora entre nas configurações de Bluetooth do seu telefone e pesquise por um novo dispositivo Bluetooth. Você verá o nome HC-05 ou HC-06 com base no seu módulo. Estou usando o HC-06, portanto, meu telefone mostra a seguinte tela. Em seguida, tente parear com ele e ele pedirá uma senha. Digite a senha como 1234 (para alguns pode ser 0000) e clique em OK conforme mostrado abaixo.
Depois que o emparelhamento for bem-sucedido, abra o aplicativo Terminal Bluetooth que acabamos de instalar. Entre na opção de configurações e selecione “Conectar um dispositivo - Proteger” como mostrado abaixo. Isso abrirá uma caixa pop onde todos os nossos dispositivos emparelhados serão listados conforme mostrado abaixo. Selecione o módulo HC-05 ou HC-06.
Assim que a conexão for estabelecida, a luz no módulo Bluetooth que estava piscando até agora deve ter se tornado constante para indicar que ele se conectou com sucesso ao seu celular. E devemos receber a mensagem introdutória de nosso programa como mostrado abaixo.
Agora pressione '1' para ligar a luz LED e pressione '0' para desligar a luz. O trabalho completo será mostrado no Vídeo. A tela do seu celular será parecida com a mostrada abaixo.
Então é isso galera, nós aprendemos Como fazer a interface do módulo Bluetooth com nosso microcontrolador PIC, agora com a ajuda dele podemos tentar projetos wireless. Existem muitos projetos que usam Bluetooth, você pode experimentá-los ou ter sua própria ideia e compartilhá-los na seção de comentários. Verifique também nosso projeto anterior com o aplicativo de terminal Bluetooth e HC-05 como automação residencial controlada por telefone inteligente usando Arduino e bloqueio de código digital controlado por telefone inteligente usando Arduino.
Espero que este tutorial tenha ajudado você! Se você ficou preso em algum lugar, por favor, use a seção de comentários.