Pulseira com ESP32 • Do bit Ao Byte
Pulseira com ESP32
Djames Suhanko 27 de maio de 2021 7 min read
A imagem de destaque é a T-Wristband na placa de gravação. Essa pulseira com esp32 não é exatamente uma novidade, já escrevi sobre ele há algum tempo, mas na época o repositório padrão sugerido pelo fabricante não colocava o relógio pra funcionar adequadamente, provavelmente pelas variações de versões das bibliotecas. Agora está fácil e vou aproveitar pra programar algo diferente. Acompanhe o artigo!
Smartwatch ou pulseira com esp32 com ESP32?
Chamá-lo apenas de "pulseira" é subestimar o produto. Ele possui giroscópio, acelerômetro e magnetômetro funcionais, além de um RTC para a data/hora. Também mostra a tensão, além do (óbvio) display e sensor de toque capacitivo. É um espetáculo de hardware, extremamente compacto. Sua bateria é de 80mAh, daí você pode pensar: "Um ESP32 rodando com WiFi e bluetooth com uma bateria de 80mAh?" – mas calma. Deixando-o absolutamente em deep sleep, sua bateria dura quase 27 horas. Considerando que vamos utilizá-lo algumas vezes ao dia, sua carga é suficiente para 24 horas, mas se precisar de um uso mais intenso, deve dar tempo de chegar a algum lugar que tenha uma porta USB para carregá-lo. Vale citar a série sobre os modos de sleep do ESP32, onde escrevi 4 ou 5 artigos. Em deep sleep o consumo é de aproximadamente 3mA.
A única parte que dá trabalho é o setup inicial, já que não basta instalar uma biblioteca. Então, vamos fazer de uma maneira bem simples.
Na IDE do Arduino, selecione a placa ESP32 Dev Module. Se ainda não tem o repositório para ESP32 na sua IDE, vá em Arquivos > Preferências e adicione essa URL no Board Manager:
Se já tiver alguma, basta separar com vírgula.
Estou usando a IDE 2.0, que ainda é beta, mas funciona bem. No vídeo dá pra ver os passos nessa nova IDE.
Feito isso, vá em Boards Manager (é o primeiro ícone da esquerda) e digite ESP32. Instale o suporte.
Repositório oficial da Lilygo T-Wristband
Agora baixe o arquivo zip ou clone o repositório que dará suporte a todo o hardware da placa. Copie tudo que está dentro do diretório libdeps para o diretório Arduino/libraries. Fiz um fork do repositório para garantir uma versão funcional permanente, caso esteja se guiando por esse artigo em qualquer momento de sua vida.
Abra um dos exemplos e compile para ver que tipo de erros pode dar. Obtive alguns erros compilando no Linux, no vídeo mostro como resolvê-los.
Assim que conseguir compilar sem problemas, basta fazer o upload. A conexão da placa de desenvolvimento é simples, só encaixar o flat cable no ESP32 e fechar o slot. Também mostro no vídeo.
Precisa desmontar toda a vez que for gravar?
Desmontar algumas vezes pode até ser legal, mas imagine estar definindo um firmware para ela, removendo bugs até chegar no "estado-da-arte". Seria um incômodo, certamente. Porém, basta gravar um firmware com suporte a OTA e considerando que não cometerá um erro que faça o dispositivo ficar reiniciando, ficará fácil gravar um novo firmware! E se cometer alguma falha grave no desenvolvimento, sem problemas também; basta desmontar e conectar o dispositivo à placa de gravação.
Projeto: Trocador de slides
Uma aplicação interessante seria um trocador de slides. Imagine estar dando uma palestra; Deixe o laptop como hot spot e tire o ESP32 de deep sleep; 1 toque adianta o slide, 2 toque volta o slide. Com isso, não precisamos sair de foco para clicar em slides, nem pedir para alguém avançar para o próximo. Segurando o touch por 3 segundos, entraremos em deep sleep novamente. Bora pro código.
Lembre-se: Siga o processo descrito e abra um sketch de exemplo, ele trará todas as dependências sem precisar se preocupar com mais nada. Salve esse sketch com outro nome e substitua o código por esse:
int time_limit = 3000;
if (digitalRead(TP_PIN_PIN) && (millis()-taps) < time_limit){
if (count == 1 && !digitalRead(TP_PIN_PIN) && (millis()-taps) > time_limit){
taps = millis();
else if (count == 2 && !digitalRead(TP_PIN_PIN) && (millis()-taps) > time_limit){
//se não teve toque e excedeu o tempo...
else if ((millis()-taps) > time_limit && count == 0){
//xTaskCreatePinnedToCore(touchMonitor,"touchMonitor", 10000, NULL, 1, NULL,0);
Com esse código, um toque em um intervalo de 3 segundos mostrará "Next" na serial e dois toques nesse intervalo mostrará "Previous". No vídeo mostrarei trocando slide e passo o link do repositório, agora vou dar um tapa na comunicação com o laptop para receber o comando.
Mentiria se dissesse que é um bom código; apenas joguei algumas coisas fora e incuti funções quase que sem consentimento, daria até processo se a MCU rodasse uma IA. Mas funciona para o propósito do artigo, que mostrarei no vídeo "smartwatch com esp32" ou "pulseira com esp32" em nosso canal DobitaobyteBrasil no Youtube. Aproveito para agradecer a vocês leitores que tem mostrado claramente seu apoio se inscrevendo no canal. Espero que os vídeos estejam atingindo suas expectativas. Os efeitos especiais não são fundamentais, eu sei, mas ajudam a distrair a mente enquanto pensamos tecnicamente. E convenhamos, minha dicção é uma m****. Quando não estou lendo o texto, parece que estou também, mas o conteúdo é caprichado.