Você está na página 1de 23

Fonte: Usinainfo (2020)

ESP32: Carrinho de controle


remoto controlado via
bluetooth
16/12/2020

PET - Tecnologia em Eletrônica e Computação


Itajubá, Minas Gerais
1

Objetivo
Desenvolver um carrinho de controle remoto, controlado por celular via bluetooth,
utilizando o microcontrolador ESP32 para controle, um Chassi Arduíno 2WD para estrutura
do carro e um módulo Driver Ponte H para facilitar a manipulação dos motores.

Microprocessador ESP32
ESP32 é uma série de chips microcontroladores de desenvolvimento IoT, de baixo
custo, desenvolvido pela ESPRESSIF, lançada em 2016, como uma substituta da ESP8266.
Com uma frequência de 160MHz e um processador dual-core, essa série apresenta uma
grande evolução em relação ao seu antecessor (Blog da Curto, 2018).
Com um baixo custo energético, a ESP32 consegue oferecer em um único chip
conexão do tipo WiFi e Bluetooth (Clássico e Low Energy), sendo útil para diferentes
aplicações (ESPRESSIF, 2019). Nesse projeto trabalharemos especificamente com a
ESP-WROOM-32 (ou ESP32-DevKit), uma placa que, além do chip, inclui circuitos integrados
e impressos que facilitam o uso do chip para desenvolvimento.
No total, a ESP-WROOM-32 possui 34 portas configuráveis entre entrada e saída
(GPIO), dessa forma, é possível a conexão de vários dispositivos ao mesmo tempo ao chip.
A Figura 1 a seguir mostra a distribuição dos pinos deste modelo específico.
2

Figura 1 - Pinout ESP32 WROOM32


Fonte: Circuits4you (2020)

Quando configurados como saída, cada pino pode assumir valores de VCC (3.3V) ou
GND, possibilitando o controle de outros dispositivos a partir dessas saídas. Além disso,
percebe-se que além de entrada e saída, é possível configurar cada pino para outras
funções, como sensibilidade ao toque, gerador de clock ou conversor Digital-Analógico ou
Analógico-Digital.
A principal diferença entre a série ESP32 e sua antecessora ESP8266 se deve a
inclusão do Bluetooth, que será base para o projeto descrito nesse tutorial e, portanto,
será explicado melhor na seção seguinte.

Bluetooth
A tecnologia de comunicação Bluetooth surgiu em 1998, a partir de uma parceria
entre grandes empresas, buscando estabelecer conexão entre dispositivos, de forma
rápida e barata, sem a utilização de cabos (LOPES e OLIVEIRA, 2013). Nessa época, crescia o
uso e a produção de aparelhos de comunicação sem fio, como os telefones móveis, que
desde 1992 vinham evoluindo, ganhando diferentes funções além das tradicionais ligações
telefônicas. Assim, a possibilidade de se conectar diferentes dispositivos próximos de
forma rápida sem a utilização de fio despertou interesse de empresas como Ericsson,
3

Nokia e IBM, grandes produtoras de dispositivos na época, que investiram para o


desenvolvimento da tecnologia. (LOPES e OLIVEIRA, 2013).
Assim, surgiu o padrão de comunicação Bluetooth, permitindo uma transmissão por
radiofrequência de baixo custo energético, se comparada a outras tecnologias. Essa
tecnologia permite que um dispositivo estabeleça conexão e troque informações com um
dispositivo próximo (atualmente, dispositivos mais comuns permitem a comunicação com
até 40 metros de distância). Vale ressaltar também a evolução da velocidade de
transferência de dados conforme as versões, que passaram de 721 Kb/s, nas primeiras
versões, para até 50 Mb/s nas mais novas. (Infowester)
A faixa de frequência de uma transmissão bluetooth pode variar entre 2.4 e 2,5GHz,
conforme o país, porém a transmissão geralmente usa de uma tecnologia de saltos de
frequência, isto é, muda frequentemente o canal de frequência utilizado para evitar
interferências.
Existem várias versões de transmissão bluetooth e a ESP32 faz uso da versão 4.2
(ESPRESSIF, 2019), podendo atingir uma velocidade de transmissão de até 24Mb/s e com
suporte ao IPv6, o modelo mais atual de transmissão por internet, o que torna a placa
ainda mais eficiente para aplicações IoT. (Infowester)
Para esse projeto, o bluetooth será utilizado para estabelecer a conexão entre o
carrinho e o celular que irá controlá-lo. Dessa forma, não será necessário utilizar-se ao
máximo das funcionalidades bluetooth do chip, uma vez que o fluxo de dados se resume a
pequenas mensagens seriais de controle. Nesse projeto estabeleceremos uma conexão
serial entre a placa e o celular, de forma que o celular possa enviar mensagens de forma
serial, isto é, será enviado um bit por vez e, ao receber toda a mensagem, o chip
reconhecerá e realizar o tratamento adequado para o comando recebido, como acelerar o
carrinho, por exemplo. A conexão entre a placa e o aparelho celular é dada a partir do
momento em que os dois dispositivos estão pareados. Nas seções seguintes serão
mostrados os passos para se chegar a essa conexão.

Módulo Driver Ponte H


O módulo Ponte H, Figura 2, é um dispositivo que facilita a utilização dos motores.
Com ele pode-se controlar facilmente os motores, manipulando, inclusive, o sentido de
rotação de cada um deles.
4

Figura 2 - Módulo Ponte H l298n


Fonte: Eletrogate (2020)

O circuito básico da Ponte H funciona a partir da manipulação de 4 chaves,


conforme Figura 3. De modo que, com as chaves S1 e S4 fechadas e S2 e S3 abertas, o
motor rotaciona em um determinado sentido, para frente, por exemplo. Mas, ao inverter
essa configuração, isto é, abrir S1 e S4 e fechar as conexões S2 e S3, tem-se uma rotação
no sentido contrário, neste caso, para trás.

Figura 3 - Circuito de funcionamento Ponte H


Fonte: wiki.ifsc.edu.br (2020)

Algumas características deste módulo são:


● Tensão de Operação: ​4.5V 46V
● Motores controlados:​ Dois motores DC
● Corrente de Operação máxima: ​2A por canal ou 4A total
● Limites de Temperatura:​ -20 a +135 °C
● Potência Máxima:​ 25W
● Corrente lógica:​ 0 a 36mA
● Tensão lógica:​ 4.5V a 7V
Todas as informações referentes a esse dispositivo encontram-se no referente
datasheet: ​Ponte H Datasheet​. É de grande importância que se atentem e procurem por
5

informações nesta documentação oficial antes de realizarem as montagens, isso garantirá


o uso correto da Ponte H, respeitando suas limitações e características de operação.
Com relação à utilização, na Figura 2 tem-se:
● Motor A e Motor B: Os motores são ligados às saídas OUT1, OUT2, OUT3 e
OUT4. A posição da ligação altera o sentido de rotação dos motores.

● VCC: Corresponde à tensão de alimentação do motor, portanto, deve-se


utilizar uma tensão adequada para a operação dos motores. Neste projeto
utilizaremos 4 pilhas do tipo AAA, sendo cada uma com 1.5V, tem-se uma
alimentação de aproximadamente 6V para os motores.

● VLOGIC e Regulador VLOGIC: o VLOGIC é responsável por realizar a


alimentação lógica do chip interno à placa. Este componente garante que a
tensão seja regulada em 5V e, por meio do Regulador pode-se ativar ou
desativar o VLOGIC.

● ATV_A e ATV_B: Essa ligação ativa os motores. Assim, utilizando um jumper,


ao curto circuitar ATV_A, ativa-se o motor A e, ao curto circuitar ATV_B,
ativa-se o motor B.

● Entradas: É por aqui que o dispositivo recebe os dados do microcontrolador


para controlar o motor. Sendo assim, as duas primeiras entradas da
esquerda controlam o motor A e as outras duas controlam o motor B. Ao
enviar sinais altos ou baixos controla-se a ativação dos motores.

ESP32 na IDE do Arduino


O microprocessador ESP32 aceita diversas linguagens de programação, entretanto,
a mais simples de ser usada, e mais prática para esse tipo de programação embarcada, é a
linguagem C/C++, uma vez que existe uma vasta biblioteca para Arduino com
compatibilidade para ESP32. Dessa forma, optou-se para o desenvolvimento deste projeto
o uso da linguagem C/C++.
Um tutorial didático de como utilizar a IDE do Arduíno para programação da ESP32
pode ser encontrado no artigo “Programar ESP32 com a IDE do Arduino - Tutorial
completo”, do autor Gustavo Teixeira, Bacharel em Ciência da Computação pela URI. O
artigo encontra-se no link: T
​ utorial IDE Arduino​ .
6

Montagem

Montagem do chassi Arduino 2WD


Inicialmente montaremos a estrutura do carrinho utilizando o k
​ it Chassi Arduino 2WD​.
1. Primeiro, é necessário ​soldar os motores aos jumpers que o acompanham,
conforme Figura 4. Não há necessidade de preocupações com relação à polaridade
das ligações, haja vista que isso apenas altera o sentido de rotação dos motores.

Figura 4 - Motores soldados


Fonte: Autoria própria (2020)

2. Para ​fixar os motores à estrutura do carro​, utilizaremos as 4 peças em formato


de T, 4 dos parafusos maiores e as duas rodelas pretas. As peças em T segurarão os
motores, eles ficarão cada um entre duas peças T e elas são fixadas com dois
parafusos, as rodelas são encaixadas na parte de dentro dos motores. O estado
final deve ser conforme Figura 5.

Figura 5: Motores fixados


Fonte: Autoria própria (2020)
7

3. Para ​fixar a roda de giro livre​, devemos utilizar 4 dos menores parafusos e
rosqueá-los aos espaçadores, a Figura 6 mostra essa montagem. Após isso, basta
utilizar mais 4 parafusos pequenos para fixar a roda aos espaçadores. A roda fixada
é apresentada na Figura 7.

Figura 6 - Espaçadores para roda livre


Fonte: Autoria própria (2020)

Figura 7 - Roda livre fixada


Fonte: Autoria própria (2020)

4. O espaço é escasso, assim, ​fixaremos o primeiro suporte de pilhas​, as quais


alimentarão os motores, na parte traseira inferior, fixando-o apenas com um
parafuso pequeno, de acordo com a Figura 8.
8

Figura 8 - Fixação suporte para pilhas


Fonte: Autoria própria (2020)

5. As rodas devem ser encaixadas nas laterais dos motores​, seguindo a Figura 9.

Figura 9 - Rodas encaixadas


Fonte: Autoria própria (2020)

6. Na parte superior da estrutura, iremos ​parafusar o módulo Ponte H com apenas


um parafuso (Figura 10). É importante que ela fique em cima, esse posicionamento
facilita as ligações que serão feitas adiante.
9

Figura 10 - Módulo Ponte H fixada


Fonte: Autoria própria (2020)

7. Instalaremos agora o segundo suporte para pilhas​, este não é incluso no kit
Chassi Arduíno 2WD, pois o kit inclui apenas um. Este item será necessário para
alimentar separadamente a ESP32 dos dois motores. ​O suporte será instalado ao
lado da Ponte H​ (Figura 11).

Figura 11 - Instalação do segundo suporte para pilhas


Fonte: Autoria própria (2020)

8. Finalmente, o último passo é ​alocar a protoboard com o microcontrolador na


parte superior do carro​. Pode-se fixar da maneira que preferir, neste caso, foi-se
utilizado fita isolante. Assim, o estado final do carrinho deve ser parecido com a
Figura 12.
10

Figura 12 - Estado final de montagem


Fonte: Autoria própria.

Interligando os componentes
Todas as ligações serão feitas agora. O primeiro passo é ​integrar os motores à
Ponte H​.
1. Conecte a bateria da parte inferior do carrinho à Ponte, para isso, ​o fio vermelho
deve ser ligado ao V
​ CC​ e o fio preto ao GND​.

2. Os dois motores devem ser conectados​, um ao ​output do ​MOTOR A ​e o outro ao


output​ do M
​ OTOR B​. A Figura 13 exemplifica as conexões.
11

Figura 13 - Interligação entre Ponte H, fonte e motores


Fonte: usinainfo Matheus Gebert (2020)

Finalmente, integraremos a placa ESP32 ao circuito.


1. A segunda fonte alimentará a placa​, portanto, deve-se ligar o fio vermelho ao
VIN​ e o fio preto ao GND comum à Ponte H​.

2. O último passo é ​conectar cada uma das entradas da Ponte H às saídas da


placa​. Neste caso, utilizaremos as correspondências seguintes. Para auxiliar, a
Figura 14 apresenta o esquema final do projeto.

● GPIO13 - IN1
● GPIO27 - IN2
● GPIO25 - IN3
● GPIO26 - IN4
12

Figura 14 - Esquemático final


Fonte: Autoria própria (2020)

Programação
Uma boa e importante prática tanto para programação, quanto para projetos em
geral, é traçar uma rota sobre o que será feito e definir quais medidas serão tomadas para
chegar ao objetivo desejado, antes mesmo de iniciá-lo. No presente momento, o objetivo é
descobrir uma forma de controlar a placa pelo celular. Assim, já sabemos que a
comunicação será feita via bluetooth, mas, como de fato faremos essa conexão acontecer?
Existem várias maneiras de enviar dados do celular para o microcontrolador, uma
delas é desenvolver uma aplicação, utilizando, por exemplo, o ​Blynk​, um aplicativo que
facilita a criação de novas aplicações para controle de hardware. Uma segunda opção seria
utilizar um software gratuito que já está consolidado. Neste caso, optaremos pela segunda
e utilizaremos o ​Bluetooth RC Car​.

Bluetooth RC Car
O ​Bluetooth RC Car é uma aplicação muito útil e de fácil utilização que possui uma
interface pronta (Figura 15) com todos controles do carro, principalmente controle de
direção, porém, também fornece suporte ao controle de faróis, buzina e até de velocidade.
Neste projeto, utilizaremos apenas os direcionais.
13

Figura 15 - Interface Bluetooth RC Car


Fonte: Aplicativo Bluetooth RC Car (2020)

Com relação ao funcionamento, ao conectar-se ao carro, a ​aplicação envia um


caractere para cada interação do usuário​, na tabela abaixo estão todas interações que
serão utilizadas neste projeto e seus caracteres correspondentes.
Tabela 1:​ Correspondência entre comandos e caracteres no aplicativo Bluetooth RC Car

Código
Sabendo como enviar os comandos, precisamos definir como os receber e,
principalmente, qual será o tratamento adequado para cada um deles. Realizaremos uma
comunicação bluetooth serial​, portanto, deve-se ​incluir a biblioteca correspondente e
instanciar um objeto do tipo bluetooth serial. Além disso, ​criaremos 4 constantes​, as
quais cada uma corresponderá à uma saída. A variável ​"comando" do tipo caractere é
necessária para armazenar os valores dos comandos recebidos.

#include "BluetoothSerial.h"
#define pin1 13
#define pin2 27
14

#define pin3 26
#define pin4 25

BluetoothSerial SerialBT;
char comando;

Dentro da função s​ etup()​, deve-se i​ nicializar o serial​, o qual é importante para


acompanhamento dos processos de execução. Também i​ niciaremos o serial bluetooth
com o nome "​ carrinho"​, que será o nome do dispositivo bluetooth. Por fim, d ​ efiniremos
cada um dos pinos como saída ​e​ geraremos um atraso​, para que a comunicação seja
estabelecida de maneira correta, sem perda de dados.

void setup() {
Serial.begin(9600);
SerialBT.begin("Carrinho");

pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);

Serial.println("Fim Setup");
delay(2000);
}

A ideia dentro da função ​loop() é ​identificar a ocorrência de uma ação​, para isso,
sempre que o dispositivo estiver disponível, iremos armazenar os dados enviados por ele
na variável comando, para na sequência decidir quais tratamentos deverão ser
realizados​.

void loop() {

if (SerialBT.available()) {
comando = SerialBT.read();
}

[...]
}
15

De acordo com a Tabela 1, tem-se 8 estados do carrinho, adicionando mais um,


correspondente ao estado parado, tem-se, portanto, 9 ​ estados​ no total. Deve-se identificar
cada um deles por seu caractere identificador e decidir quais pinos deverão ser ativados e
quais deverão ser desativados para se obter a movimentação desejada. O funcionamento
dos pinos pode variar de acordo com a polaridade utilizada, portanto, a programação pode
variar, mas no geral, tem-se:

Tabela 2:​ Correspondência entre pinos e movimento do motor

A combinação dos estados dos pinos ditará a movimentação do carro. Assim, para
cada estado do carrinho teremos uma combinação:

● Frente:​ acionar os ​dois motores​ com o sentido de rotação​ h ​ orário​.


● Trás: a
​ cionar os ​dois motores​ com o sentido de rotação a ​ nti-horário​.
● Esquerda: ​acionar a ​ penas o segundo motor​ no sentido​ h ​ orário​.
● Direita:​ acionar ​apenas o primeiro motor​ no sentido ​horário.
● Frente e esquerda:​ acionar o ​motor 1​ no sentido a ​ nti-horário​ e ​ o ​motor 2​ no
sentido ​horário​.
● Frente e direita:​ acionar o​ ​motor 1​ no sentido h
​ orário​ e o ​motor 2​ no sentido
anti-horário​.
● Trás e esquerda: ​acionar apenas o ​motor 2​ no sentido​ ​anti-horário​.
● Trás e direita:​ acionar apenas o m​ otor 1​ no sentido a​ nti-horário​.
● Parar: t​ odos os pinos são ​desativados​.
A Tabela 3 resume as combinações.
16

Tabela 3:​ Combinação lógica para direção

Por fim, basta ​associar cada movimento ao seu caractere e sua combinação
lógica​. Utilizando a estrutura ​switch/case​, faremos a correspondência entre cada
caractere recebido e a sua respectiva sequência de comandos.

void loop() {

[...]
switch (comando) {
case 'F': { //move frente
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);

digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'I': {//frente direita

digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'G': {//frente esquerda

digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
17

digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'R': {//direita

digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
case 'L': {//esquerda

digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);

digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'B': {// ré

digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);

digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'H': {// ré esquerda

digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'J': {//ré direita
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
18

digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
default: {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
}
}

Assim, a ​aparência final do projeto pode variar de acordo com a disposição dos
componentes na placa. Neste caso, o projeto ficou conforme Figura 16.

Figura 16: Projeto finalizado


Fonte: Autoria própria (2020)

Por fim, o ​código completo​ é:


19

#include "BluetoothSerial.h"

#define pin1 13
#define pin2 27
#define pin3 26
#define pin4 25

BluetoothSerial SerialBT;
char comando;

void setup() {
Serial.begin(9600);

//btSerial.begin(9600);
SerialBT.begin("Carrinho");

pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);

Serial.println("Fim Setup");
delay(2000);
}

void loop() {

if (SerialBT.available()) {
comando = SerialBT.read();
}

switch (comando) {
case 'F': { //move frente
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);

digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'I': {//frente direita

digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
20

digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'G': {//frente esquerda

digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);

digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'R': {//direita

digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
case 'L': {//esquerda

digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);

digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'B': {// ré

digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);

digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'H': {// ré esquerda

digitalWrite(pin1, LOW);
21

digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'J': {//ré direita
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);

digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
default: {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
}
}

Referências
● Gustavo Teixeira. ​"PROGRAMAR ESP32 COM A IDE ARDUINO – TUTORIAL
COMPLETO"​. https://www.usinainfo.com.br. Disponível em:
https://www.usinainfo.com.br/blog/programar-esp32-com-a-ide-arduino-tutorial-co
mpleto/​ . Acesso em: 07 de Dezembro de 2020.

● Equipe Wiki IFSC. ​"Diagrama de um circuito Ponte H"​. https://wiki.ifsc.edu.br/,


2020. Disponível em:
https://wiki.ifsc.edu.br/mediawiki/index.php/AULA_7_-_Microcontroladores_-_Eng .
Acesso em: 07 de Dezembro de 2020.

● Gustavo Nery. "Guia definitivo de uso da Ponte H L298N"​.


https://blog.eletrogate.com/, 2020. Disponível em:
https://blog.eletrogate.com/guia-definitivo-de-uso-da-ponte-h-l298n/ . Acesso em:
22

07 de Dezembro de 2020.

● Matheus Gebert. ​"COMO INVERTER MOTOR DC COM PONTE H L298N?"​.


https://www.usinainfo.com.br/, 2020. Disponível em:
https://www.usinainfo.com.br/blog/como-inverter-motor-dc-com-ponte-h-l298n/ .
Acesso em: 07 de Dezembro de 2020.

● Equipe Circuits4you. ​"ESP32 DevKit ESP32-WROOM GPIO Pinout"​.


https://circuits4you.com/, 2018. Disponível em:
https://circuits4you.com/2018/12/31/esp32-devkit-esp32-wroom-gpio-pinout/ .
Acesso em: 07 de Dezembro de 2020.

● Blynk Inc. ​"Developers: Everything you need to build an amazing IoT project".
https://blynk.io, 2020. Disponível em: ​https://blynk.io/en/developers . Acesso em: 07
de Dezembro de 2020.

● Andi.co. ​"Arduino Bluetooth RC Car"​. https://play.google.com, 2020. Disponível


em:
https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller&
hl=pt_BR&gl=US​ . Acesso em: 07 de Dezembro de 2020.

● ST.​"DUAL FULL-BRIDGE DRIVER"​. https://www.st.com, 2020. Disponível em:


https://www.st.com/resource/en/datasheet/l298.pdf . Acesso em: 07 de Dezembro
de 2020.

● Blog da Curto. ​"Conhecendo a ESP32"​. www.curtocircuito.com.br, 2018. Disponível


em:<​https://www.curtocircuito.com.br/blog/conhecendo-esp32​> . Acesso em: 07 de
dez. de 2020.

● LOPES, Guilherme José; OLIVEIRA, Valter de Lima. ​“Braço Articulado Controlado


Remotamente Via Bluetooth”​. 2013. 72 f. TCC (Graduação) - Curso de Engenharia
da Elétrica/Eletrônica, Universidade do Vale do Paraíba, São Jose dos Campos, 2013.
Disponível em: Acesso em: 08 de dez. de 2020.

● Emerson Alecrim; ALECRIM, Emerson. ​“Tecnologia Bluetooth: o que é e como


funciona?”​. www.infowester.com, 2018. Disponível em:
<​https://www.infowester.com/bluetooth.php#bluetooth-4-2​> Acesso em: 08 de dez.
de 2020.

Você também pode gostar