Você está na página 1de 23

Delphi & Arduino Pág.

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.

Projeto Físico Arduino

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

Figura 01 – Imagem dos Componentes Acoplados a Controladora

Número Componente

1 Controladora Arduino Mega

2 Módulo Bluetooth HC-05

3 Relé

4 Leitor RFID Wiegan26

5 Cartão Plástico RFID Wiegand26

6 Protobord

7 Resistores 10k

8 Cabos Macho-Fêmea

Tabela 01 – Lista de Itens do Projeto Arduino

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.

- Controladora Arduino Mega

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

Alimentação 2 Fonte externa quando em produção.

Tabela 02

- Relé --> Controladora Arduino Mega

Relé Controladora Arduino mega

Pino VCC Pino 5V via Protobord.

Pino GND Pino GND via Protobord.

Pino IN Pino 5

A conexão com qualquer equipamento elétrico e o Relé fica por sua


Obs:
conta e escolha. Acender uma lampada por exemplo é clássico.

Tabela 03

- Leitor RFID Wiegand26 --> Controladora Arduino Mega

Leitor RFID Controladora Arduino mega

Alimentação Fonte externa.

Pino 2 Pino 2

Pino 3 Pino 3

GND Pino GND direto na Controladora Arduino Mega.

Obs: Consulte o Datasheet de sua leitora para distinguir os pinos.

Tabela 4
Delphi & Arduino Pág. 4 / 23
Controlando Dispositivos Via Bluetooth

- Módulo Bluetooth HC-05 --> Controladora Arduino Mega

Bluetooth HC-05 Controladora Arduino mega

Pino VCC 5V via protobord.

Pino GND GND via protobord.

Pino TXD Pino 10 (DX)

Pino RXD Na Protobord, especificamente no divisor de tensão entre os Resistores.

A opção pelo Módulo HC-05, deve-se ao fato de ele se comportar como


Obs: Escravo e ou Master., permitindo assim comunicação bidirecional.
Consulte a literatura para melhor entendimento.

Tabela 05

- Resistores 10k --> Controladora Arduino Mega

Resistor 10k Controladora Arduino mega

Primeiro Resistor Unido ao segundo Resistor.

Primeiro Resistor Em sua extremidade livre recebe o Pino 10 (um lógico de 5V)

Uma vez unido ao outro Resistor, é conectado em sua extremidade livre


Segundo Resistor
ao GND do Protobord.

O contato com o Módulo Bluetooth HC-05 faz parte das instruções da


Obs:
Tabela 05.

Tabela 06
Delphi & Arduino Pág. 5 / 23
Controlando Dispositivos Via Bluetooth

Projeto Lógico Arduino

Nesta parte do projeto implementaremos a lógica embarcada na Controladora Arduino Mega.


Carregaremos um programa que implementa os métodos necessários para reconhecimento e start do
Módulo Bluetooth HC-05,, definição dos pinos de comunicação com o Relé e um método de comunicação
com o mesmo, e por fim, métodos de start e comunicação com com o Leitor RFID Wiegand26.

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

35. String tag;


36. int i;
37. if (wg.available()) {
38. int cod;
39. int nro;
40. long p1Num;
41. long p2Num;
42. String nroHex;
43. String p1Hex;
44. String p2Hex;
45. nroHex = String(wg.getCode(), HEX);
46. p1Hex = nroHex.substring(0, 2);
47. p2Hex = nroHex.substring(2, 6);
48. p1Num=hexToDec(p1Hex);
49. p2Num=hexToDec(p2Hex);
50. leitoraNum = wg.getGateActive();
51. tagPart1 = String(p1Num);
52. zeros = "";
53. for (i=0; i < 3 - tagPart1.length(); i++) {
54. zeros.concat("0");
55. }
56. tag.concat(zeros);
57. tag.concat(tagPart1);
58. tagPart2 = String(p2Num);
59. zeros = "";
60. for (i=0; i < 5 - tagPart2.length(); i++) {
61. zeros.concat("0");
62. }
63. tag.concat(zeros);
64. tag.concat(tagPart2);
65. EnviarDadoDispositivo(tag);
66. Serial.print("Leitor--------> ");
67. Serial.println(leitoraNum);
68. Serial.print("Número--------> ");
69. Serial.println(tag);
70. }
71. }
72.
73. unsigned int hexToDec (String hexString) {
Delphi & Arduino Pág. 9 / 23
Controlando Dispositivos Via Bluetooth

74. long int decValue = 0;


75. int nextInt;
76. for (int i = 0; i < hexString.length(); i++) {
77. nextInt = int(hexString.charAt(i));
78. if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
79. if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
80. if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
81. nextInt = constrain(nextInt, 0, 15);
82. decValue = (decValue * 16) + nextInt;
83. }
84. return decValue;
85. }
86.
87. void ProcessaLeituraBluetooth () {
88. char caracter = bluetooth.read();
89. if(caracter == 'L') {
90. Serial.println("Ligado - L");
91. digitalWrite(Rele, HIGH);
92. bluetooth.println("Rele ligado................");
93. bluetooth.println("");
94. } else {
95. if(caracter == 'D') {
96. Serial.println("Desligado - D");
97. digitalWrite(Rele, LOW);
98. bluetooth.println("Rele desligado...........");
99. bluetooth.println("");
100. }
101. }
102. }

Tabela 07

Linha(s) Definição

1 Adiciona referência a biblioteca WiegandMega2560. Link para download no final deste artigo.

2 Adiciona referência a biblioteca SoftwareSerial. Já presente quando da instalação da ferramenta.

4 Define um objeto do tipo Wiegand. Representará nossa Leitora RFID Wiegand26.

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é.

8 Declara o método setup, executado na carga da controladora.

9 Define a velocidade de leitura da porta serial em 9600 Bunds.

10 Inicia o objeto Leitor Wiegand.

11 Imprime mensagem "Wiegand iniciado com sucesso." na serial, exibido no monitor.

12 Imprime uma linha em branco na serial.

13 Inicia objeto Bluetooth com velocidade de leitura a 38400 Bunds.

14 Imprime mensagem "Bluetooth iniciado com sucesso." na serial, exibido no monitor.

15 Imprime uma linha em branco na serial.

16 Fim do bloco de instruções do método setup.

18 Inicia o método loop. Método que ocorre em ciclos sucessivos a eterno.

19 Executa o método ProcessaLeituraWiegand26, responsável por ler entradas na Leitora RFID.

20 Provoca um delay de um décimo de segundo, parando o processamento por este tempo.

Executa o método ProcessaLeituraBluetooth, responsável por ler entradas na porta serial indicada
21
para o módulo Bluetooth.

22 Provoca um delay de um décimo de segundo, parando o processamento por este tempo.

23 Fim do bloco de instruções do método loop.

25 Inicia o método EnviarDadoDispositivo, que requer um parâmetro do tipo String.

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.

27 Imprime uma linha em branco na porta serial do Bluetooth.

28 Fim do bloco do método EnviarDadoDispositivo.

30 Inicia o método ProcessaLeituraWiegand26. Responsável por ler entradas no objeto Leitor RFID.

31 a 36 Declara variáveis com seus tipos.

37 Enquanto houver dados a ser lido faça.

38 a 44 Declara variáveis com seus tipos.


Atribui valor a variável, convertendo o código capturado em hexa para String. wg.getCode()
45
retorna o número da tag capturada.
46 Atribui a variável, os 3 primeiros dígitos da variável nroHex.

47 Atribui a variável, os 5 dígitos restantes da variável nroHex.

48 Converte valor de Hexa para Decimal, atribuindo a variável.


Delphi & Arduino Pág. 11 / 23
Controlando Dispositivos Via Bluetooth

49 Converte valor de Hexa para Decimal, atribuindo a variável.

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.

71 Encerra o bloco de código do método ProcessaLeituraWiegand26.

73 Inicia o método hexToDec, que converte valores strings com dados Hexadecimal em Decimal.

84 Retorna o valor convertido.

85 Fim do bloco do método hexToDec.

87 Inicia o método ProcessaLeituraBluetooth.

88 Atribui valor a variável, lido na porta serial do objeto Bluettoth.

89 Se carácter lido for igual a letra L (objetiva ligar o Relé via Pino 5).

90 Imprime "Ligado - L" na porta serial. O Monitor Serial irá exibir.

91 Aciona o Relé, via Pino 5, com um pulso auto (HIGH(.

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.

94 Condição eles do if.

95 Se carácter lido for igual a letra D (objetiva desligar o Relé via Pino 5).

96 Imprime "Desligado - D" na porta serial. O Monitor Serial irá exibir.

97 Aciona o Relé, via Pino 5, com um pulso baixo (LOW).

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.

102 Fim do bloco do método ProcessaLeituraBluetooth.


Delphi & Arduino Pág. 12 / 23
Controlando Dispositivos Via Bluetooth

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

AT+ORGL “Resetar” o módulo para a configuração padrão.

AT+UART=38400,0,0 Configura o BaudRate para 38400.

AT+NAME=CONTROLADORA_HC05_200 Altera o nome de exibição.

AT+RMAAD Remove dispositivos anteriormente pareados.

AT+ADDR Ver endereço padrão.

AT+VERSION Ver versão.

AT+ROLE=1 Define o modo de operação do módulo como MASTER.

AT+CMODE=1 Permite a conexão a qualquer endereço.

AT+INQM=0,5,10 Procura por 5 dispositivos ou para a varredura após 10 segundos.

Define a senha do módulo mestre, que deve ser a mesma do módulo


AT+PSWD=1234
slave/escravo.

AT+INIT Inicializa o perfil para transmissão/recepção.

AT+INQ Inicializa a varredura por dispositivos bluetooth.

AT+RESET Reset do módulo após a definição do modo de operação.

AT+STATE Retorna o estado do módulo.


Tabela 08

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

Projeto Delphi Mobile Android

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.

Para simplificar, siga os passos descritos abaixo para criarmos o aplicativo.

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:

Propriedade Name Propriedade Text


ButtonConectarBluetooth Conectar Dispositivo Bluetooth Selecionado
ButtonEnviarDadosControladora Enviar Dados a Controladora Via Bluetooth
ButtonAtivarReceberDadosControladora Ativar Receber Dados da Controladora
ButtonDesativarReceberDadosControladora Dasativar Receber Dados da Controladora

A propriedade Enabled do botão ButtonDesativarReceberDadosControladora, deverá estar com valor False.

Por fim, adicione um controle Memo ao fundo do Form, nomeando-o como MemoBluetooth.

Passo 06

Adicione um componente Timer e um componente Bluetooth, definindo suas propriedades conforme


abaixo.

Componente Propriedade Valor


Timer Name Timer
Enabled False
Bluetooth Name Bluetooth

Repare como deve estar seu formulário, conferindo a Figura 05.

Figura 06
Delphi & Arduino Pág. 17 / 23
Controlando Dispositivos Via Bluetooth

Passo 07

Iniciando a codificação, coloque o código abaixo na sessão Private do Form.

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

Implemente os métodos assinados na sessão Private conforme abaixo.

function TFormPrincipal.ObterDevicePeloNome(pNomeDevice: String): TBluetoothDevice;


var
lDevice: TBluetoothDevice;
begin
Result := nil;
for lDevice in Bluetooth.PairedDevices do
begin
if lDevice.DeviceName = pNomeDevice then
begin
Result := lDevice;
end;
end;
end;

procedure TFormPrincipal.ButtonConectarBluetoothClick(Sender: TObject);


begin
LabelConecxao.Text := '';
if (ComboBoxLista.Selected <> nil) and (ComboBoxLista.Selected.Text <> '') then
begin
if ConectarControladoraBluetooth(ComboBoxLista.Selected.Text) then
begin
LabelConecxao.Text := 'Conectado';
end
Delphi & Arduino Pág. 18 / 23
Controlando Dispositivos Via Bluetooth

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.

FormPrincipal., evento onShow.


begin
ListarDispositivosPareadosNoCombo;
end;

ButtonConectarBluetooth, evento onClick


begin
LabelConecxao.Text := '';
if (ComboBoxLista.Selected <> nil) and (ComboBoxLista.Selected.Text <> '') then
begin
if ConectarControladoraBluetooth(ComboBoxLista.Selected.Text) then
begin
LabelConecxao.Text := 'Conectado';
end
else
begin
LabelConecxao.Text := 'Desconectado';
end;
end
else
begin
ShowMessage('Selecione um dispositivo');
end;
end;

ButtonEnviarDadosControladora, evento onClick


begin
DesativarReceberDados;
Bluetooth.Enabled:=True;
if (BluetoothSocket = nil) or (not BluetoothSocket.Connected) then
ConectarControladoraBluetooth(ComboBoxLista.Selected.Text);
if (BluetoothSocket <> nil) and (BluetoothSocket.Connected) then
begin
MemoBluetooth.Lines.Clear;
MemoBluetooth.Lines.Add(DateTimeToStr(Now));
BluetoothSocket.SendData(TEncoding.UTF8.GetBytes('L'));
MemoBluetooth.Lines.Add('Enviado: L');
sleep(1000);
MemoBluetooth.Lines.Add('Recebido: ' +
Trim(TEncoding.ANSI.GetString(BluetoothSocket.ReceiveData)));
Delphi & Arduino Pág. 20 / 23
Controlando Dispositivos Via Bluetooth

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;

ButtonAtivarReceberDadosControladora, evento onClick


begin
AtivarReceberDados;
end;

ButtonDesativarReceberDadosControladora, evento onClick


begin
DesativarReceberDados;
end;

FormPrincipal.TimerBluetooth, evento onTimer


var
DadoRecebido : System.TArray<System.Byte>;
begin
Bluetooth.Enabled:=True;
if (BluetoothSocket = nil) or (not BluetoothSocket.Connected) then
ConectarControladoraBluetooth(ComboBoxLista.Selected.Text);
if (BluetoothSocket <> nil) and (BluetoothSocket.Connected) then
begin
DadoRecebido:=BluetoothSocket.ReceiveData;
if length(DadoRecebido) > 0 then
begin
DadoRecebido:=DadoRecebido + BluetoothSocket.ReceiveData;
MemoBluetooth.Lines.Clear;
MemoBluetooth.Lines.Add(DateTimeToStr(Now));
MemoBluetooth.Lines.Add('Dado Recebido: ' +
Trim(TEncoding.ANSI.GetString(DadoRecebido)));
end;
Application.ProcessMessages;
end;
DadoRecebido:=nil;
end;
Delphi & Arduino Pág. 21 / 23
Controlando Dispositivos Via Bluetooth

ComboBoxLista, evento onClosePopup


begin
LabelConecxao.Text := '';
end;

Passo 09

Agora basta seguir as instruções abaixo, na sequência, fazer testes do aplicativo num todo.

- Dar permissão ao seu dispositivo Android para utilizar Bluetooth.

- Parear seu dispositivo com o Módulo Bluetooth da Controladora Arduino, lógico, com ela ligada.

- Compilar e em seguida executar o aplicativo para testes no dispositivo.

- Clicar no ComboBox ComboBoxLista, escolhendo nosso Módulo Bluetooth já pareado.

- Clicar no botão ButtonConectarBluetooth para conectar. Repare o Label na parte superior exibindo o
resultado.

- Clicar no botão ButtonEnviarDadosControladora, observando o Relé sendo acionado na controladora, bem


como o resultado de retorno listado no componente MemoBluetooth na parte inferior do Form.

- Clique no componente ButtonAtivarReceberDadosControladora, objetivando fazer leitura no Módulo


Bluetooth, naturalmente, aproxime a Tag do Leitor RFID para obter sucesso neste teste.

As figuras 07, 08, 09 e 10, exibem o aplicativo em pleno funcionamento.

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

Laercio Guerço Rodrigues

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