Software
Será abordado nesta seção a programação utilizada para utilizar o DualShock4 em conjunto com o ESP32.
Last updated
Será abordado nesta seção a programação utilizada para utilizar o DualShock4 em conjunto com o ESP32.
Last updated
Para isso utilizamos a IDE do arduino, o que exige algumas configurações. Depois que a IDE (disponível neste link) for instalada, é necessário adicionar o ESP32 ao gerenciador de placas. Isso deve ser feito pelo menu preferências.
Imagem 3 e 4 – Acessando o menu de preferências. Menu de preferências aberto.
Dentro deste menu devemos colar a URL abaixo na área destinada às URLs de Placas Adicionais, como exemplificado na imagem 4.
Feito isso, aparecerá a opção de instalar os dados das placas ESP32 no gerenciador de placas.
Imagem 5 - Gerenciador de placas aberto no esp32.
Após o download destes dados, a IDE do arduino estará pronta para ser usada com o módulo ESP32. Basta selecionar a placa e a porta COM na qual o ESP está conectado.
Imagem 6 - seletor de placas
Imagem 7 - Janela do seletor de placas
Vale ressaltar que um módulo ESP32 pode ter diversos nomes no seletor de placas, ou seja, não há apenas um nome que represente os módulos que temos no laboratório, estes que podem ser utilizados como “DOIT ESP32 DEVKIT V1” ou “ESP32 Dev Module”.
Imagem 8 - Módulo ESP32 atualmente utilizado (05/2023)
A biblioteca necessária está disponível neste link, basta instalar o .zip do arquivo disponibilizado no github.
Imagem 9 - local de download .zip
Após a conclusão do download, é necessário incluir a biblioteca na IDE do arduino. Para isso vá até a opção exibida abaixo e selecione o arquivo zip instalado.
Imagem 10 - opção de adição de biblioteca .zip na IDE do arduino
Feito isso, basta apenas incluir as seguintes bibliotecas no código:
Vale ressaltar que nem todas as bibliotecas são vitais para o correto funcionamento do código, talvez uma ou duas dessas sejam o bastante. Caso haja algum problema relativo à falta de memória disponível, é uma boa opção retirar alguma destas bibliotecas.
Em alguns dispositivos esta biblioteca pode gerar um erro interno durante a compilação, o que exige que editemos alguns arquivos da mesma.
Imagem 11 - Erros internos à biblioteca
Os arquivos qual devemos editar estão dentro da pasta da biblioteca do controle, que se encontra dentro da pasta de bibliotecas do arduino, normalmente neste endereço:
"E:\Pastas do sistema\Documents\Arduino\libraries\PS4Cotroller\src\ps4_spp.c"
"E:\Pastas do sistema\Documents\Arduino\libraries\PS4Controller\src\PS4Controller.cpp"
Imagem 12 - localização do arquivo “ps4_spp.c” e “PS4Controller.cpp”
Dentro desta pasta devemos encontrar o arquivo “ps4_spp.c” e editá-lo com o bloco de notas ou outro aplicativo.
Com o arquivo aberto, vá até as últimas linhas do mesmo. E comente as linhas de acordo com a imagem abaixo.
Imagem 13 - Representação das linhas que devem ser comentadas em “ps4_spp.c”
No outro arquivo, o “PS4Controller.cpp”, é necessário inserir o seguinte na linha 44:
Imagem 14 - linha 44 de “PS4Controller.cpp”, com a linha que deve ser adicionada
Feito isso, salve os arquivos com as mudanças feitas e sua biblioteca estará pronta para ser utilizada.
Antes de desenvolver a lógica de funcionamento para o ESP32 precisamos do MAC address respectivo ao controle DualShock 4.
Um endereço MAC (Media Access Control) é um identificador exclusivo atribuído a uma interface de rede, como uma placa de rede Ethernet ou uma placa de comunicação sem fio. É um número de 48 bits (normalmente representado em notação hexadecimal) que é gravado no momento em que o dispositivo é fabricado e geralmente não pode ser alterado. O endereço MAC é usado para identificar, de forma única, um dispositivo em uma rede local, desempenhando papel fundamental no direcionamento de pacotes de dados entre dispositivos em uma rede Ethernet ou conexão Bluetooth.
Para descobrir o MAC Address do controle será necessário baixar o aplicativo SIXPAIRTOOL (por meio deste Link) para que o aplicativo descubra o MAC Address do controle, é necessário conectar a manete pelo cabo USB, ele irá aparecer na interface do programa escrito neste formato: “32:4E:14:A2:09:01” (caracteres meramente ilustrativos).
Imagem 15 - Sixpair Tool exibindo o MAC address de um DualShock 4 conectado
Agora que já possuímos o MAC address do controle, basta apenas utilizá-lo na seguinte função, com uma lógica para aguardar a conexão:
Deste modo, o ESP irá aguardar até que a manete esteja conectada, e também irá informar via monitor serial se a conexão foi bem sucedida.
Caso o DualShock não estabeleça a conexão da forma prevista, há algumas fontes para esse problema, estas que variam entre hardware e software.
Os problemas causados por hardware podem ocorrer tanto no controle quanto na placa de recepção. Então, é necessário verificar a carga da bateria do controle simplesmente colocando- o no modo de conexão. É muito importante que a placa não seja alimentada nessa etapa e, verificando quanto tempo ele leva para desligar, se o led apagar em um curto período significa que a bateria precisa ser carregada (1.2 Bateria). Caso a bateria esteja carregada o suficiente, verifique a alimentação da placa na qual o controle será conectado.
Por outro lado, os problemas de software se limitam à placa de conexão. Caso este esteja de acordo com o tópico 3.Software, o problema pode estar relacionado com o MAC address definido na programação, este que seleciona qual controle a placa será conectada
(vide 3.3 Conexão).
Há outra possível fonte de erros na utilização de um ESP32. Caso ambos os dispositivos estejam ligados e em modo de conexão e o led indicador do controle esteja cessando sua intermitência prematuramente com seu último momento aceso um pouco mais extenso do que os demais, isso é um sinal de que há um erro relacionado à memória flash do ESP, assim, ela necessita ser apagada.
Como descrito no último tópico, apagar a memória flash do ESP32 é uma maneira de corrigir um erro de conexão via Bluetooth com o controle.
Para isso, precisaremos de instalar uma ferramenta chamada esptool. Essa instalação será via pip, um software de instalação em python, ou seja, você precisa do Python 3.6 ou mais recente no seu sistema, disponível neste link.
Com o python instalado, abra o Prompt de Comando e instale o esptool via pip com o seguinte código:
Em algumas instalações do Python este comando pode não funcionar e gerar um erro. Se for o caso teste algum destes outros comandos:
Imagem 16 - Instalação do esptool pelo prompt de comando
Após finalizar a instalação do esptool, basta apenas conectar o ESP32 ao dispositivo, segurar o botão BOOT e escrever o seguinte código no prompt de comando:
Este comando pode não ser reconhecido e gerar um erro. Se for o caso teste este outro comando:
Após inserir o comando, aguarde alguns segundos até que toda a memória seja limpa.
Caso o prompt não encontre o ESP, tente:
➢ Reconecta-lo;
➢ Trocar o ESP32;
➢ Verificar a integridade do cabo;
➢ Colocá-lo em modo de download, pressionando BOOT e apertando EN ao mesmo tempo.
Vale ressaltar que, após a primeira instalação do esptool, basta apenas conectar o esp ao computador e inserir um dos códigos acima para limpar a flash, ou seja, não é necessário repetir os primeiros passos de instalação.
Serão descritos neste tópico todos os dados que podem ser recebidos do dualshock 4 via bluetooth.
A seguir temos uma tabela com os botões, suas respectivas funções e o retorno de cada uma delas:
Imagem 17 - DualShock 4 com seus botões numerados
—-- tabela ——
Podemos utilizar os dados recebidos de diversas maneiras: além de controlar a movimentação do robô, podemos fazer configurações na lógica de funcionamento entre outros.
O código a seguir transforma os dados de um stick (x e y) em duas variáveis que representam a velocidade (em porcentagem) de dois motores (esquerdo e direito).
Outra ferramenta muito útil é a criação de uma deadzone, pois o stick é analógico e há imprecisões quanto ao seu ponto 0, Já que nem sempre voltará precisamente ao ponto central quando em repouso, o que pode gerar certos erros quando a intenção é manter o robô parado.
A seguir, uma das maneiras de se fazer isso:
É importante lembrar que este valor de dead zone utilizado é adquirido a partir de testes, ou seja, -10 a 10 é meramente ilustrativo.
Quanto aos outros botões com leituras digitais a lógica é mais simples:
Por outro lado, é recomendável se utilizar uma dupla verificação na leitura dos gatilhos:
Há alguns dados que podem ser enviados para o controle, como por exemplo a cor do led, uma ferramenta muito útil que funciona como feedback.
Para mudar a cor do led precisamos escolher o código RGB da cor desejada e colocá-lo nesta função:
Podemos fazer com que o led funcione de forma intermitente, com a possibilidade de selecionar o tempo em que ele permanece ligado e desligado, de 0 a 2550 ms:
Para fazer com que o controle vibre, temos duas possibilidades de intensidade, um gerador fraco e um forte, que podem funcionar simultaneamente:
Fail safe é uma funcionalidade muito importante, pois evita acidentes e uma possível desqualificação.
Sua implementação no código é relativamente simples, basta incluir a seguinte lógica: