Escolar Documentos
Profissional Documentos
Cultura Documentos
1 / 23
Controlando Dispositivos Via Bluetooth
Vivemos a realidade denominada IoT (Internet Off Things), em bom português, Internet das Coisas. É muito
difícil definir IoT, não por ser algo complexo de entendimento, mas sua magnitude, abrangência e
principalmente o alcance que essa onda pode nos levar. Vou me esquivar do trabalho de apresentar um
resumo do que seja IoT, focando somente na proposta do artigo.
Entre tantas tecnologias, passando por software e hardware, que dão apoio ao desenvolvimento e
implementação de soluções para IoT, vou me deter a combinação fabulosa de Delphi e Arduino,
entendendo por Arduino, software e hardware.
Mesmo isolando essas duas tecnologias, Delphi e Arduino, ainda sim temos um número imensurável de
combinações possíveis a ser aplicado a uma solução onde se requer o controle de algum dispositivo, por
intermédio de software, embarcado ou não.
Para ter uma visão dessas possibilidades, aqui classificadas como imensurável, considerem a mais recente
incorporação tecnológica do ambiente Delphi, a possibilidade de compilarmos nossos aplicativos para
Linux. Linux tem grande presença em dispositivos não convencionais, logo, nosso leque de possibilidades
aumenta exponencialmente.
No tocante a Delphi, o utilizaremos para se desenvolver um aplicativo que irá controlar o processamento
das atividades capturadas pelas controladoras Arduino, mais precisamente, dos dispositivos por elas
controladas. Este sistema consiste em um aplicativo baseado em DataSnap, não necessariamente, mas
propício a permitir que o monitoramento transcenda a uma rede local, permitindo visibilidade e controle
via internet. Afinal, não é IoT?
Quanto a tecnologia Arduino, hardware e software, utilizaremos para embarcar a lógica que controla e
interage com os dispositivos a elas acoplados.
Bluetooth, naturalmente, é a tecnologia que adotaremos para fazer a comunicação entre o aplicativo Delphi
que controla o processo e as controladoras Arduino. Neste aspecto, haverá comunicação entre o aplicativo
Delphi enviando e recebendo informações de e para as controladoras Arduino. Existe uma gama de
possibilidades para estabelecermos comunicação entre processos na controladora Arduino e um aplicativo
de rede feito em Delphi. Podemos considerar UDP e TCP-IP via Ethernet ou WiFi, GSM entre outras formas.
Conexão Bluetooth, considerando eficiência no baixo consumo de energia, aderência aos ambientes
operacionais Widows e Linux, somados ao fato de as controladoras permitirem facilmente módulos
Bluetooth como canal de comunicação bidirecional faz desta tecnologia uma opção bastante adequada
para nosso cenário. Bom, se considerarmos o baixo custo de investimento nos módulos Bluetooth, não
teremos dificuldades em tomada de decisão.
Iniciaremos o detalhamento, apresentando o projeto físico Arduino, com seus Shields envolvidos bem como
itens necessários para implementarmos a captura do número da Tag (em formato Wiegan26), um Relé para
acionamento de um equipamento subjacente (um portão de garagem por exemplo) e naturalmente um
Leitor de Tags RFID padrão Wiegan26, todos interconectados a Controladora Arduino Mega.
Nota: O uso de uma Controladora Arduino Mega não é regra, poderíamos utilizar, por exemplo, uma UNO.
Delphi & Arduino Pág. 2 / 23
Controlando Dispositivos Via Bluetooth
Número Componente
3 Relé
6 Protobord
7 Resistores 10k
8 Cabos Macho-Fêmea
Algumas ponderações se fazem necessário aqui. Primeiro considere que alimentamos o Protobord com 5V
oriundos da Controladora Arduino Mega, consequentemente, os dispositivos que dela se alimentam.
Segundo, usamos dois resistores para um dos pinos do Módulo Bluetooth HC-05, já que tal pino não pode
receber 5V, logo, foi necessário proceder a redução de voltagem para 3,3V aproximadamente usando a
técnica de Divisores de Tensão Resistivo. Por último, considere alimentar o Leitor RFID Wiegand26 com
uma fonte externa.
Bom, junte todos os itens da Tabela 01 o proceda a montagem conforme indicado na Figura 01.
Delphi & Arduino Pág. 3 / 23
Controlando Dispositivos Via Bluetooth
Agora vamos detalhar cada elemento envolvido, e sua conexão com os outros itens do projeto.
Passo Descrição
Via cabo USB, que também servirá para carregar a lógica embarcada.
Alimentação 1
O cabo USB deve ser acoplado ao seu computador
Tabela 02
Pino IN Pino 5
Tabela 03
Pino 2 Pino 2
Pino 3 Pino 3
Tabela 4
Delphi & Arduino Pág. 4 / 23
Controlando Dispositivos Via Bluetooth
Tabela 05
Primeiro Resistor Em sua extremidade livre recebe o Pino 10 (um lógico de 5V)
Tabela 06
Delphi & Arduino Pág. 5 / 23
Controlando Dispositivos Via Bluetooth
Para os iniciantes pode soar como algo difícil, mas, acredite, não é. Caso esteja inseguro, aconselho assistir
a séries de vídeos sobre Arduino no canal do Victory Fernandes, MVP Embarcadero, onde de forma bem
conceitual e completa ele descreve Arduino no contexto hard e soft. Não deixe de assistir.
A primeira coisa a fazer, é instalar o aplicativo de desenvolvimento do programa Arduino. Para tanto,
acesso www.arduino.cc, indo naturalmente a opção Downloads. Este site também deve ser sua primeira
referência de estudo sobre Arduino, mas considere que existe uma infinidade de sites e blogs com
excelentes artigos e tutoriais. Uma vez procedido a instalação, executando o programa, terá como resposta
a imagem da Figura 02.
Figura 02
Na listagem abaixo, Listagem 01, temos todo o código necessário a implementação proposta. Para tanto,
aplique o texto desta listagem na área de edição da IDE do Arduino, vá no menu Arquivo e salve em um
diretório de sua escolha.
É importante configurar o ambiente para utilização do modelo de Controladora específica, bem como, em
qual porta a mesma está configurada. Siga o exemplo da Figura 03, observando o modelo Arduino Mega
2560 ou o modelo da sua controladora no menu Ferramentas. Ainda, nesta etapa, também no menu
Ferramentas escolha a porta liberada para esta instalação.
Delphi & Arduino Pág. 6 / 23
Controlando Dispositivos Via Bluetooth
Figura 03
A IDE do Arduino implementa uma janela para monitoramento dos comandos enviados a controladora,
permitindo interação para envio de comandos pela porta serial e retorno de dados pela porta serial. Para
tanto clique no ícone lupa no canto superior direito da IDE, tendo como resposta o monitor da imagem da
Figura 04.
Figura 04
Delphi & Arduino Pág. 7 / 23
Controlando Dispositivos Via Bluetooth
Estamos prontos para iniciar a tarefa de carregar o código na controladora. Copie o código da Listagem 01,
e proceda como informado anteriormente.
Listagem 01
Linha Instrução
1. #include <WiegandMega2560.h>
2. #include <SoftwareSerial.h>
3.
4. WIEGAND wg;
5. SoftwareSerial bluetooth(10, 11); // RX, TX
6. int Rele = 5;
7.
8. void setup() {
9. Serial.begin(9600);
10. wg.begin();
11. Serial.println("Wiegand iniciado com sucesso.");
12. Serial.println("");
13. bluetooth.begin(38400);
14. Serial.println("Bluetooth iniciado com sucesso.");
15. Serial.println("");
16. }
17.
18. void loop() {
19. ProcessaLeituraWiegand26();
20. delay(100);
21. ProcessaLeituraBluetooth();
22. delay(100);
23. }
24.
25. void EnviarDadoDispositivo (String DadoEnviar) {
26. bluetooth.println(DadoEnviar);
27. bluetooth.println("");
28. }
29.
30. void ProcessaLeituraWiegand26 () {
31. String leitoraNum;
32. String tagPart1;
33. String tagPart2;
34. String zeros;
Delphi & Arduino Pág. 8 / 23
Controlando Dispositivos Via Bluetooth
Tabela 07
Linha(s) Definição
1 Adiciona referência a biblioteca WiegandMega2560. Link para download no final deste artigo.
5 Define objeto Bluetooth que irá ler e escrever na porta serial, configurado nos pinos 10 e 11.
Delphi & Arduino Pág. 10 / 23
Controlando Dispositivos Via Bluetooth
6 Define variável do tipo inteiro, com valor inicia 5. Indica o Pino 5 como ativador do Relé.
Executa o método ProcessaLeituraBluetooth, responsável por ler entradas na porta serial indicada
21
para o módulo Bluetooth.
Imprime o dado passado por parâmetro na porta serial configurado para o Bluetooth. Esta
26 informação pode ser lido por um dispositivo pareado, seja ele um computador, um dispositivo
celular ou até outro módulo Bluetooth acoplado a outra controladora.
30 Inicia o método ProcessaLeituraWiegand26. Responsável por ler entradas no objeto Leitor RFID.
50 Obter valor que indica qual das três leitoras possíveis (Arduino Mega). Então, 0, 1 ou 2.
Preenche a variável com zeros, objetivando formatar o número de até três dígitos, obtidos do
53 a 55
número da Tag lida. Assim teremos o valor final formatado de 001 a 255.
Preenche a variável com zeros, objetivando formatar o número de até cinco dígitos, obtidos do
60 a 62
número da Tag lida. Assim teremos o valor final formatado de 00001 a 99999.
65 Chama o método EnviarDadoDispositivo, passando como valor para o parâmetro, a tag capturada.
66 a 69 Imprime informações na serial, possível de visualização em tempo real pelo Monitor serial.
73 Inicia o método hexToDec, que converte valores strings com dados Hexadecimal em Decimal.
89 Se carácter lido for igual a letra L (objetiva ligar o Relé via Pino 5).
Imprime "Rele ligado................" na serial associado ao Bluetooth. Pode ser lido por qualquer
92
dispositivo pareado.
Imprime linha em branco na serial associado ao Bluetooth. Pode ser lido por qualquer dispositivo
93
pareado.
95 Se carácter lido for igual a letra D (objetiva desligar o Relé via Pino 5).
Imprime "Rele desligado................" na serial associado ao Bluetooth. Pode ser lido por qualquer
98
dispositivo pareado.
Imprime linha em branco na serial associado ao Bluetooth. Pode ser lido por qualquer dispositivo
99
pareado.
Carregue este código (Sketch) na controladora, bastando para tanto, ir ao menu Sketch, optando por
Carregar (Crtl U). Repare no Monitor Serial o andamento, observando o sucesso como exibido na Figura 04.
Figura 04
Pronto, se todos procedimentos foram respeitados até aqui, sua Controladora Arduino mega, Leitora RFID
wiegand26 e o Módulo Bluetooth devem estar funcionando harmonicamente. Já podemos fazer um teste,
aproximando uma Tag da leitora, observando o Monitor Serial imprimindo seu valo. Confira como deverá
se parecer isso, observando a imagem da Figura 05, exibindo o dado no Monitor Serial.
Figura 05
Delphi & Arduino Pág. 13 / 23
Controlando Dispositivos Via Bluetooth
Visando prover as condições para configuração de seu Módulo Bluetooth HC-05, considere carregar sua
controladora com o código da Listagem 02, e em seguida, proceda com as instruções logo abaixo da Tabela
08.
A finalidade desta etapa, é permitir definir um nome para o Módulo Bluetooth (ainda que ele venha de
fábrica com um já definido), além de uma senha que será exigido para os dispositivos (computadores,
devices e outras controladoras) quando tetarem parear com o Bluetooth da controladora.
Listagem 02
Linha Código
1. #include <SoftwareSerial.h>
2. SoftwareSerial SerialBluetooth(10, 11); // RX, TX
3. String command = "";
4.
5. void setup()
6. {
7. Serial.begin(9600);
8. Serial.println("Digite um Comando AT e Clique no Botão Enviar");
9. SerialBluetooth.begin(38400);
10. }
11.
12. void loop()
13. {
14. if (SerialBluetooth.available())
15. {
16. while(SerialBluetooth.available())
17. {
18. command += (char)SerialBluetooth.read();
19. }
20. Serial.println(command);
21. command = "";
22. }
23.
24. if (Serial.available())
25. {
26. delay(10);
27. SerialBluetooth.write(Serial.read());
28. }
29. }
Delphi & Arduino Pág. 14 / 23
Controlando Dispositivos Via Bluetooth
Comandos AT Definição
Após carregar o programa de configuração do Módulo Bluetooth HC-05, digite individualmente as duas
instruções abaixo, clicando no botão Enviar no Monitor Serial.
Instrução 1: AT+NAME=CONTROLADORA_HC05_200
Instrução 2: AT+PSWD=1234
Pronto as etapas relativo a Controladora Arduino Mega e Leitor RFID Wiegand26 estão cumpridas. Agora
vamos desenvolver um aplicativo Mobile Android para se comunicar via Bluetooth com a controladora.
Delphi & Arduino Pág. 15 / 23
Controlando Dispositivos Via Bluetooth
Para testarmos a eficiência da comunicação Bluetooth entre dispositivos, vamos criar um aplicativo Delphi
Mobile Android que uma vez pareado com o Módulo Bluetooth da Controladora Arduino Mega, poderá
enviar comando para a mesma (no caso comando para ativar o Relé) e fazer leitura dos dados enviados a
porta serial do Módulo Bluetooth (a saber, os números de Tags reconhecidos pelo Leitor RFID Wiegand26).
Naturalmente não é propósito deste artigo o desenvolvimento de uma aplicativo profissional do ponto de
vista de design, mas, do ponto de vista do necessário para implementar interação entre dispositivos
pareados por Bluetooth, não deixaremos passar nenhum detalhe.
Importantíssimo ressaltar, que se pensarmos de forma mais ampla, pensando em um ambiente onde vários
dispositivos conectados por Bluetooth, a saber, várias controladoras, vários dispositivos mobile e
computadores de um ambiente, é salutar envolver um aplicativo de rede baseado em DataSnap,
possibilitando aplicação de regras de negócio, acesso a camada de dados, lógico, o mesmo, também
pareado por Bluetooth. Não se preocupe, do ponto de vista da conexão via Bluetooth, o mesmo código
aplicado ao App Delphi Mobile Android, pode ser portado na integra para o aplicativo DataSnap.
Passo 01
No ambiente Delphi, crie um projeto tipo Fire Monkey acessando o menu File|New|Other|Multi-Devices-
Projects|Blank Application. Salve o projeto em uma pasta de sua escolha, nomeando a unit do formulário
como U_FormBluetooth e o projeto como ProjetoBluettothArduino. Em tempo de projeto, nomeie o Form
como FormBluetooth.
Passo 02
Defina a largura do Form para Width = 350. Adicione ao Form um componente TooBar, e dentro de le um
componente Label. A propriedade Align do ToolBar deve ficar como Top, e a mesma propriedade do Label
como Client. Na propriedade Text do Label, remova o conteúdo, nomeando o mesmo para LabelConexao.
Passo 03
Coloque um outro Label ao Form definindo sua propriedade Align como Top, e sua propriedade Text com o
conteúdo “Selecione um Dispositivo Bluetooth”. Abaixo deste Label, coloque um ComboBox, com a
propriedade Align também em Top, nomeando-o como ComboBoxLista. Este apresentará a lista de
dispositivos Bluetooth pareados com seu dispositivo. Televisores, aparelhos de som, nosso Módulo
Bluetoot acoplado a Controladora Arduino mega entre outros ao redor.
Passo 04
Adicione 4 objetos Button, todos com a propriedade Align em Top. Utilize a propriedade Margin desses
componentes, inclusive os anteriores, para manter um espaço entre os mesmos. Mas não vamos nos
preocupar demasiadamente com design conforme havíamos informado.
Delphi & Arduino Pág. 16 / 23
Controlando Dispositivos Via Bluetooth
Passo 05
Defina os nomes dos botões e a propriedade Text conforme sequência:
Por fim, adicione um controle Memo ao fundo do Form, nomeando-o como MemoBluetooth.
Passo 06
Figura 06
Delphi & Arduino Pág. 17 / 23
Controlando Dispositivos Via Bluetooth
Passo 07
private
{ Private declarations }
BluetoothSocket : TBluetoothSocket;
const UUID = '{00001101-0000-1000-8000-00805F9B34FB}';
function ObterDevicePeloNome(pNomeDevice: String): TBluetoothDevice;
function ConectarControladoraBluetooth(pNomeDevice: String): boolean;
procedure ListarDispositivosPareadosNoCombo;
procedure AtivarReceberDados;
procedure DesativarReceberDados;
Passo 08
else
begin
LabelConecxao.Text := 'Desconectado';
end;
end
else
begin
ShowMessage('Selecione um dispositivo');
end;
end;
procedure TFormPrincipal.ListarDispositivosPareadosNoCombo;
var
lDevice: TBluetoothDevice;
begin
ComboBoxLista.Clear;
for lDevice in Bluetooth.PairedDevices do
begin
ComboBoxLista.Items.Add(lDevice.DeviceName);
end;
end;
procedure TFormPrincipal.AtivarReceberDados;
begin
MemoBluetooth.Lines.Clear;
TimerBluetooth.Enabled:=True;
ButtonAtivarReceberDadosControladora.Enabled:=False;
ButtonDesativarReceberDadosControladora.Enabled:=True;
end;
procedure TFormPrincipal.DesativarReceberDados;
begin
MemoBluetooth.Lines.Clear;
TimerBluetooth.Enabled:=False;
ButtonAtivarReceberDadosControladora.Enabled:=True;
ButtonDesativarReceberDadosControladora.Enabled:=False;
end;
Delphi & Arduino Pág. 19 / 23
Controlando Dispositivos Via Bluetooth
Passo 08
Crie procedimentos para eventos dos objetos abaixo, conforme indicado.
MemoBluetooth.Lines.Add('Enviado: D');
BluetoothSocket.SendData(TEncoding.UTF8.GetBytes('D'));
sleep(1000);
MemoBluetooth.Lines.Add('Recebido: ' +
Trim(TEncoding.ANSI.GetString(BluetoothSocket.ReceiveData)));
BluetoothSocket.Free;
end;
end;
Passo 09
Agora basta seguir as instruções abaixo, na sequência, fazer testes do aplicativo num todo.
- Parear seu dispositivo com o Módulo Bluetooth da Controladora Arduino, lógico, com ela ligada.
- Clicar no botão ButtonConectarBluetooth para conectar. Repare o Label na parte superior exibindo o
resultado.
Conclusão
Esse pequena colaboração, espero eu, sirva para motivar você conhecer Arduino, uma plataforma fantástica
para desenvolvimento de soluções IoT. Esse universo é muito amplo, negócios estão surgindo a cada
instante, numa velocidade nunca antes visto. É impensável para desenvolvedores Delphi ficarem fora deste
movimento, logo, buscar (como fiz neste artigo) integrar aplicativos e soluções Arduino com aplictivos
Delphi me parece um caminho sem volta.
Bom ressaltar aqui, que não necessariamente o uso de tecnologia mobile se faz necessário. Diria até, que
desenvolver um aplicativo DataSnap, gerenciando uma rede de Controladoras Arduino seria mais realista.
Um App como utilizamos aqui, normalmente, é parte integrante do todo, servindo mais como um
componente de comunicação intermediário que gerenciador dos processos.
Acompanhe meu canal no Yotube e também atualizações no facebbok, pois pretendo seguir com artigos
relacionados, assim, ajudando fomentar aplicativos Delphi e Arduino.
Delphi & Arduino Pág. 22 / 23
Controlando Dispositivos Via Bluetooth
Figura 07 Figura 08
Figura 09 Figura 10
Delphi & Arduino Pág. 23 / 23
Controlando Dispositivos Via Bluetooth
Links Relacionados
- https://www.arduino.cc/
- https://en.wikipedia.org/wiki/Wiegand_interface
- http://fritzing.org/home/
- https://www.visuino.com
- https://www.embarcadero.com/br/
- http://www.itsoluction.com.br
Trabalho com Delphi desde sua primeira versão, simultaneamente ministrando treinamento e
desenvolvendo soluções para negócios em geral. Também venho prestando consultoria nesta área em
paralelo a essas atividades.
Tenho participado como palestrante de eventos Embarcadero, fui cofundador de revistas especializadas em
Delphi, diversos artigos publicados nesta área e um longo tempo de atuação junto a comunidade Delphi.
Além de ter sido autor de um livro de Oracle, hoje dedico tempo ao estudo de integração soluções
desenvolvidas em Delphi com aplicativos e hardware Arduino. Por fim, sobre isso, ressalto minha
experiência no desenvolvimento e suporte a aplicativos de controle de acesso, usando Arduino e outras
controladoras comerciais.
Além da atividades relacionadas, hoje, em parte, atuo como consultor e desenvolvedor em uma provedora
de soluções para o setor lojista (farmácia), além claro da prazerosa atuação com Instrutor de Treinamentos
Oficiais Embarcadero..
Contatos
- laercio@itsoluction.com.br
- 54 21 99235 8440