Como tocar canções de Natal no buzzer usando IoT
Este tutorial apresenta uma maneira prática e divertida de unir Internet das Coisas (IoT) e programação, usando apenas uma placa ESP32, um buzzer passivo e o aplicativo Blynk. A ideia é criar um sistema capaz de tocar músicas natalinas por meio de botões virtuais controlados pelo celular ou computador (Web). Cada botão no aplicativo aciona uma melodia diferente, permitindo experimentar ritmos, testar notas musicais e explorar como a ESP32 pode interagir com dispositivos do mundo físico por meio da internet.
Vídeo Demonstrativo:
Plataforma Blynk
A plataforma Blynk é um ambiente criado para facilitar o desenvolvimento de projetos de Internet das Coisas (IoT) sem que seja necessário construir um sistema do zero. Ela permite conectar placas como ESP32, ESP8266, Arduino, Raspberry Pi e várias outras a um painel de controle acessível pelo celular ou navegador.
MATERIAIS NECESSÁRIOS
ESQUEMÁTICO DE LIGAÇÃO
Antes de iniciar a montagem elétrica do circuito, certifique-se de que a ESP32 esteja desligada.
Em seguida, monte o circuito conforme o esquemático abaixo, utilizando a protoboard, o buzzer, e fios.

Ao montar o circuito na protoboard, observe os seguintes pontos:
- Você pode utilizar fios de cores diferentes ou furos diferentes na protoboard, mas deve assegurar que os componentes e fios estejam conectados na mesma ordem da Figura;
- O buzzer deve ser conectado à porta D5 e GND.
PASSO A PASSO COMO UTILIZAR O BLYNK
- Baixar a biblioteca do Blynk.
Para que o Blynk funcione em sua plataforma de hardware, é necessário instalar a biblioteca correspondente. A biblioteca Blynk é uma extensão que será executada no hardware, responsável pela conectividade, autenticação do dispositivo na nuvem e processamento dos comandos entre o Blynk.App, a nuvem e o hardware.
Essa biblioteca está disponível para download diretamente no Gerenciador de Bibliotecas do Arduino IDE. Para acessá-lo, pressione Ctrl+Shift+I ou siga o caminho: Ferramentas > Gerenciar Bibliotecas…

2. Realizar login
Acesse o Blynk.Console e realize o cadastro/login pelo computador. Após realizar o login, você será direcionado para a página principal do Blynk.console.

3. Criar novo modelo
Para iniciar o projeto, clique em “+ Novo modelo” e defina as informações como na imagem a seguir, e depois clique em concluído.

4. Adicionar Datastreams
Na aba Datastreams, clique em “+ Novo Datastream” e selecione “Pino virtual”.

Adicione 3 pinos virtuais e defina as informações como nas imagens a seguir.
- Botao 1:

- Botao 2:

- Botao 3:

5. Configurar Dashboard no Blynk.Console
Vá em “Painel de controle da Web” e adicione 3 widgets “Botão de imagem”, o Gif 2 a seguir mostra como adicionar um widget e configura-lo.

Após adicionar, modifique o tamanho dos Widgets da forma que desejar, e de clique em “Salvar”. Em nosso exemplo, a Dashboard ficou da seguinte forma:

6. Adicionar novo dispositivo
Para adicionar um dispositivo, vá na aba “Dispositivos” e clique em “+ Novo Dispositivo”.

Selecione a opção “A partir do modelo”.

Preencha os dados como na Figura a seguir.

Após isso, para pegar os dados do dispositivo, siga os passos do gif a seguir.

7. Código para tocar as músicas
O código a seguir conecta a ESP32 e o Blynk, e faz o buzzer conecatado na ESP32 tocar músicas natalinas. Para fazer seu código funcionar, adicione as informações do seu dispositivo (que foi mostrado anteriormente) no código, e adicione um WiFi e a senha dele.
Caso tenha dúvidas para conectar e indentificar a ESP32 no Arduino IDE, acesse nosso tutorial Como programar a placa ESP32 no Arduino IDE.
#define BLYNK_TEMPLATE_ID "TMPLxxxxx" //Identificação do template
#define BLYNK_TEMPLATE_NAME "Natal" //Nome do dispositivo
#define BLYNK_AUTH_TOKEN "SeuAuthToken" //AuthToken
//Inclui as bibliotecas necessárias para adicionar WiFi na ESP32 e conectar o código ao Blynk.
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
int buzzer = 5; //Atribui o pino 5 a variável buzzer
bool botao1, botao2, botao3 = false; //Variáveis que armazenará o estado do botão virtual.
//Configuração do WiFi
char ssid[] = "Nome do seu WiFi aqui";
char pass[] = "Senha do wifi";
//Notas
int Do = 262;
int Re = 294;
int Mi = 330;
int Fa = 349;
int Sol = 392;
int La = 440;
int Si = 494;
BLYNK_WRITE(V1){
botao1 = param.asInt(); //Recebe o valor enviado pelo app no pino virtual V1
}
BLYNK_WRITE(V2){
botao2 = param.asInt(); //Recebe o valor enviado pelo app no pino virtual V2
}
BLYNK_WRITE(V3){
botao3 = param.asInt(); //Recebe o valor enviado pelo app no pino virtual V3
}
void setup(){
Serial.begin(115200); //Inicializa a comunicação serial
digitalWrite(buzzer, OUTPUT); //Define o buzzer como saída
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); //Inicializa o Blynk passando como parâmetros o auth token, o nome da rede Wi-Fi e a senha
}
void loop(){
Blynk.run();//Chama as funções do blynk
if (botao1){
musica1();//Chama a função musica1
delay(1000);
} else if (botao2){
musica2();//Chama a função musica2
delay(1000);
} else if (botao3){
musica3();//Chama a função musica3
delay(1000);
} else {
noTone(buzzer); //Para de tocar o buzzer
}
delay(200);
}
//Toca a música “Bate o sino pequenino”
void musica1(){
//A função tone() faz o buzzer tocar uma nota por um tempo determinado, e a função noTone() faz o buzzer parar de tocar.
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa,1000/4); delay(500); noTone(buzzer);
delay(50);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa,1000/4); delay(500); noTone(buzzer);
delay(50);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, La,1000/8); delay(250); noTone(buzzer);
tone(buzzer, Re, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Mi, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa, 1000/4); delay(600); noTone(buzzer);
for(int i = 0; i<3; i++){
tone(buzzer, Sol, 1000/8); delay(250); noTone(buzzer);
}
tone(buzzer, Sol, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa,1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Mi,1000/8); delay(250); noTone(buzzer);
tone(buzzer, Mi, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Fa, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, Mi, 1000/8); delay(250); noTone(buzzer);
tone(buzzer, La,1000/2); delay(500); noTone(buzzer);
}
//Toca a música “Então é Natal”
void musica2(){
tone(buzzer, Do, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Fa, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Sol,1000/4); delay(500); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Fa, 1000/2); delay(1000); noTone(buzzer);
tone(buzzer, Fa, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Fa, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Sol,1000/4); delay(500); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Sol,1000/2); delay(1000); noTone(buzzer);
tone(buzzer, Re, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Sol,1000/4); delay(500); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Si, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Sol,1000/2); delay(1000); noTone(buzzer);
tone(buzzer, Do, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Do,1000/4); delay(500); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(500); noTone(buzzer);
tone(buzzer, Fa,1000/2); delay(1000); noTone(buzzer);
}
//Toca a música “We wish you a merry Christmas”
void musica3(){
tone(buzzer, Do, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Fa, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Fa, 1000/8); delay(200); noTone(buzzer);
tone(buzzer, Sol, 1000/8); delay(200); noTone(buzzer);
tone(buzzer, Fa, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Mi, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Re, 1000); delay(600); noTone(buzzer);
delay(250);
tone(buzzer, Do, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Sol, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Sol, 1000/8); delay(200); noTone(buzzer);
tone(buzzer, La, 1000/8); delay(200); noTone(buzzer);
tone(buzzer, Sol, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Fa, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Mi, 1000); delay(600); noTone(buzzer);
delay(250);
tone(buzzer, Mi, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, La, 1000/8); delay(200); noTone(buzzer);
tone(buzzer, Si, 1000/8); delay(200); noTone(buzzer);
tone(buzzer, La, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Sol, 1000/4); delay(400); noTone(buzzer);
tone(buzzer, Fa, 1000); delay(600); noTone(buzzer);
delay(250);
tone(buzzer, Do, 1000/4); delay(250); noTone(buzzer);
tone(buzzer, Re, 1000/2); delay(500); noTone(buzzer);
tone(buzzer, Sol, 1000/2); delay(500); noTone(buzzer);
tone(buzzer, Mi, 1000/2); delay(500); noTone(buzzer);
tone(buzzer, Fa, 1000/2); delay(500); noTone(buzzer);
}
Para enviar o código para a placa, pressione e mantenha pressionado o botão BOOT do ESP32, e em seguida, basta clicar no ícone Upload no Arduino IDE.
OBS: Solte o botão BOOT apenas quando a mensagem “Connecting….” for exibida.
8. Criar Dashboard no aplicativo mobile Blynk.app
Baixe o aplicativo “Blynk.app”, disponivel na Google Play e na App Store. Depois de baixar, abra o aplicativo e faça o login com a mesma conta utilizada no site do Blynk.Console. Feito o login, aparecerá o menu principal do Blynk.app.
O gif a seguir mostra como editar a Dashboard, adicionar widgets e conectar o widget com o datastream criado no Blynk.Console.

Se tudo for feito como mostrado no tutorial, será possível tocar as músicas natalinas, tudo isso sendo feito pelo celular ou na Web, mostrando na prática uma simples aplicação utilizando IoT e Natal.
Espero que tenha gostado do tutorial. Caso tenha dúvidas ou sugestões, deixe um comentário abaixo.
Valeu!
Graduando em Engenharia da Computação.

