Você está na página 1de 23

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 1 / 23 Vivemos a realidade denominada IoT

Pág. 1

/

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 2 / 23 Figura 01 – Imagem dos

Pág. 2

/

23

Arduino Controlando Dispositivos Via Bluetooth Pág. 2 / 23 Figura 01 – Imagem dos Componentes Acoplados

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.

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 3 / 23 Agora vamos detalhar cada elemento

Pág. 3

/

23

Agora vamos detalhar cada elemento envolvido, e sua conexão com os outros itens do projeto.

- Controladora Arduino Mega

Passo

Descrição

Alimentação 1

Alimentação 2

Via cabo USB, que também servirá para carregar a lógica embarcada. O cabo USB deve ser acoplado ao seu computador

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 IN

Obs:

Pino GND via Protobord.

Pino 5

A conexão com qualquer equipamento elétrico e o Relé fica por sua 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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 4 / 23 - Módulo Bluetooth HC-05 -->

Pág. 4

/

23

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

Obs:

A opção pelo Módulo HC-05, deve-se ao fato de ele se comportar como 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

Primeiro Resistor

Segundo Resistor

Obs:

Unido ao segundo 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 ao GND do Protobord.

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

Tabela 06

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 5 / 23 Projeto Lógico Arduino Nesta parte

Pág. 5

/

23

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.

o programa, terá como resposta a imagem da Figura 02. Figura 02 Na listagem abaixo, Listagem

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 6 / 23 Figura 03 A IDE do

Pág. 6

/

23

Arduino Controlando Dispositivos Via Bluetooth Pág. 6 / 23 Figura 03 A IDE do Arduino implementa

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.

clique no ícone lupa no canto superior direito da IDE, tendo como resposta o monitor da

Figura 04

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 7 / 23 Estamos prontos para iniciar a

Pág. 7

/

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 8 / 23 35. String tag; 36. int

Pág. 8

/

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 9 / 23 74. long int decValue =

Pág. 9

/

23

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.

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 10 / 23 6 8 9 10 11

Pág. 10 /

23

6

8

9

10

11

12

13

14

15

16

18

19

20

21

22

23

25

26

27

28

30

31

37

38

45

46

47

48

a 36

a 44

Define variável do tipo inteiro, com valor inicia 5. Indica o Pino 5 como ativador do Relé.

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

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

Inicia o objeto Leitor Wiegand.

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

Imprime uma linha em branco na serial.

Inicia objeto Bluetooth com velocidade de leitura a 38400 Bunds.

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

Imprime uma linha em branco na serial.

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

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

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

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 para o módulo Bluetooth.

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

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

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

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.

Imprime uma linha em branco na porta serial do Bluetooth.

Fim do bloco do método EnviarDadoDispositivo.

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

Declara variáveis com seus tipos.

Enquanto houver dados a ser lido faça.

Declara variáveis com seus tipos.

Atribui valor a variável, convertendo o código capturado em hexa para String. wg.getCode() retorna o número da tag capturada.

Atribui a variável, os 3 primeiros dígitos da variável nroHex.

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

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

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 11 / 23 49 50 53 60 65

Pág. 11 /

23

49

50

53

60

65

66

71

73

84

85

87

88

89

90

91

92

a 55

a 62

a 69

93

94

95

96

97

98

99

102

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

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 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 número da Tag lida. Assim teremos o valor final formatado de 00001 a 99999.

Chama o método EnviarDadoDispositivo, passando como valor para o parâmetro, a tag capturada.

Imprime informações na serial, possível de visualização em tempo real pelo Monitor serial.

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

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

Retorna o valor convertido.

Fim do bloco do método hexToDec.

Inicia o método ProcessaLeituraBluetooth.

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

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

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

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

Imprime "Rele ligado dispositivo pareado.

"

na serial associado ao Bluetooth. Pode ser lido por qualquer

Imprime linha em branco na serial associado ao Bluetooth. Pode ser lido por qualquer dispositivo pareado.

Condição eles do if.

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

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

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

Imprime "Rele desligado dispositivo pareado.

"

na serial associado ao Bluetooth. Pode ser lido por qualquer

Imprime linha em branco na serial associado ao Bluetooth. Pode ser lido por qualquer dispositivo pareado.

Fim do bloco do método ProcessaLeituraBluetooth.

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 12 / 23 Carregue este código (Sketch) na

Pág. 12 /

23

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.

o andamento, observando o sucesso como exibido na Figura 04. Figura 04 Pronto, se todos procedimentos

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.

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.

Já podemos fazer um teste,

parecer isso, observando a imagem da Figura 05, exibindo o dado no Monitor Serial. Já podemos

Figura 05

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 13 / 23 Visando prover as condições para

Pág. 13 /

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 14 / 23 Comandos AT Definição AT+ORGL

Pág. 14 /

23

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.

AT+PSWD=1234

Define a senha do módulo mestre, que deve ser a mesma do módulo 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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 15 / 23 Projeto Delphi Mobile Android Para

Pág. 15 /

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 16 / 23 Passo 05 Defina os nomes

Pág. 16 /

23

Passo 05

Defina os nomes dos botões e a propriedade Text conforme sequência:

Propriedade Name ButtonConectarBluetooth ButtonEnviarDadosControladora ButtonAtivarReceberDadosControladora ButtonDesativarReceberDadosControladora

Propriedade Text Conectar Dispositivo Bluetooth Selecionado Enviar Dados a Controladora Via Bluetooth Ativar Receber Dados da Controladora 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.

False Bluetooth Name Bluetooth Repare como deve estar seu formulário, conferindo a Figura 05. Figura 06

Figura 06

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 17 / 23 Passo 07 Iniciando a codificação,

Pág. 17 /

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 18 / 23 else begin LabelConecxao.Text :=

Pág. 18 /

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 19 / 23 Passo 08 Crie procedimentos para

Pág. 19 /

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 20 / 23 MemoBluetooth.Lines.Add('Enviado: D');

Pág. 20 /

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 21 / 23 ComboBoxLista, evento onClosePopup begin

Pág. 21 /

23

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

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 22 / 23 Figura 07 Figura 08 Figura

Pág. 22 /

23

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 22 / 23 Figura 07 Figura 08 Figura

Figura 07

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 22 / 23 Figura 07 Figura 08 Figura

Figura 08

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 22 / 23 Figura 07 Figura 08 Figura

Figura 09

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 22 / 23 Figura 07 Figura 08 Figura

Figura 10

Delphi & Arduino

Controlando Dispositivos Via Bluetooth

Delphi & Arduino Controlando Dispositivos Via Bluetooth Pág. 23 / 23 Links Relacionados - https://www.arduino.cc/ -

Pág. 23 /

23

Links Relacionados

- https://www.arduino.cc/

- https://en.wikipedia.org/wiki/Wiegand_interface

- http://fritzing.org/home/

- https://www.visuino.com

- http://www.itsoluction.com.br

Laercio Guerço Rodrigues

- http://www.itsoluction.com.br Laercio Guerço Rodrigues Trabalho com Delphi desde sua primeira versão,

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

- 54 21 99235 8440