0% acharam este documento útil (0 voto)
100 visualizações18 páginas

Tutorial ESP32 Com Alexa

Este tutorial ensina a integrar um ESP32 com a assistente de voz Alexa, utilizando um módulo relé de 8 canais. O documento fornece instruções sobre como instalar a biblioteca necessária, programar o ESP32 e configurar dispositivos virtuais que podem ser controlados pela Alexa. Ao final, o usuário deve ser capaz de controlar dispositivos como ventiladores e lâmpadas usando comandos de voz.

Enviado por

alexandrehughes
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
100 visualizações18 páginas

Tutorial ESP32 Com Alexa

Este tutorial ensina a integrar um ESP32 com a assistente de voz Alexa, utilizando um módulo relé de 8 canais. O documento fornece instruções sobre como instalar a biblioteca necessária, programar o ESP32 e configurar dispositivos virtuais que podem ser controlados pela Alexa. Ao final, o usuário deve ser capaz de controlar dispositivos como ventiladores e lâmpadas usando comandos de voz.

Enviado por

alexandrehughes
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 18

ESP32 com alexa

Nesse tutorial vamos aprender como integrar o seu ESP32 com o


assistente de voz alexa. A título de exemplo iremos montar um ESP32 com
um módulo relé de 8 canais. Verá da maneira mais simples possível como
é fácil fazer a programação do seu ESP32, a instalação do aplicativo da
Amazon alexa e sua configuração.

+
Montagem
Vamos usar a biblioteca fauxmoESP.h.
Baixe a biblioteca no link a seguir:

https://drive.google.com/drive/folders/1BFhQC4PktBHRkiLiTqPYlcuG2kwBUZ
GI?usp=sharing

Entre na pasta “Bibliotecas”.


Clique com o botão direito do mouse em cima da pasta “FauxmoESP” e
depois em “Fazer download”.
Escolha um local para baixar em seu pc.
Você deve copiar e extrair o arquivo no seguinte local em seu
computador:

C:\Users\nome do seu pc\AppData\Local\Arduino15\packages\esp32


\hardware \esp32\3.0.7\libraries.
Aperte a tecla Windows + E no seu computador e cole esse link na
janela de endereço. Não esqueça de colocar o nome do seu pc.

Nota: Quando exploramos nosso computador, a pasta Usuários aparece


como na figura abaixo:

Porem ao digitarmos o endereço na janela em branco, ele aparece


assim:
Outra coisa importante a falar é que a pasta AppData é uma pasta
oculta. Você só vai conseguir acessa-la se digitar o endereço na janela
em branco.

Vamos usar a biblioteca <WiFi.h>.

Copie e cole o código abaixo na sua IDE do arduino.


Coloque as credenciais da sua rede Wi-Fi.
Carregue o sketch no seu ESP32.

#include <WiFi.h>
#include <fauxmoESP.h>

// coloque aqui as credenciais da sua rede

#define WIFI_SSID "nome da sua rede wifi"


#define WIFI_PASS "senha da sua rede"

fauxmoESP fauxmo;

// -----------------------------------------------------------------------------

#define ID_VENTILADOR "luz ventilador"


#define ID_PLAFON "luz plafon"
#define ID_MESA "luz escrivaninha"
#define ID_TVESQUERDA "luz esquerda"
#define ID_TVDIREITA "luz direita"
#define ID_BEBEDOURO "luz bebedouro"
#define ID_SOFA "luz sofa"
#define ID_ABAJUR "luz abajur"

// Wi-Fi Connection
void wifiSetup() {
// Set WIFI module to STA mode
WiFi.mode(WIFI_STA);

// Connect
Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);

while (WiFi.status() != WL_CONNECTED) {


Serial.print(".");
delay(100);
}
Serial.println();

// Connected!
Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n",
WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}

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

// Wi-Fi connection
wifiSetup();

fauxmo.createServer(true);
fauxmo.setPort(80);
fauxmo.enable(true);

// Add virtual devices


fauxmo.addDevice(ID_VENTILADOR);
fauxmo.addDevice(ID_PLAFON);
fauxmo.addDevice(ID_MESA);
fauxmo.addDevice(ID_TVESQUERDA);
fauxmo.addDevice(ID_TVDIREITA);
fauxmo.addDevice(ID_BEBEDOURO);
fauxmo.addDevice(ID_SOFA);
fauxmo.addDevice(ID_ABAJUR);

fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool


state, unsigned char value) {

Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id,


device_name, state ? "ON" : "OFF", value);

if ((strcmp(device_name, ID_VENTILADOR)==0)) {
if (state) {
liga_L1();
} else {
desliga_L1();
}
}
if ((strcmp(device_name, ID_PLAFON)==0)) {
if (state) {
liga_L2();
} else {
desliga_L2();
}
}
if ((strcmp(device_name, ID_MESA)==0)) {
if (state) {
liga_L3();
} else {
desliga_L3();
}
}
if ((strcmp(device_name, ID_TVESQUERDA)==0)) {
if (state) {
liga_L4();
} else {
desliga_L4();
}
}
if ((strcmp(device_name, ID_TVDIREITA)==0)) {
if (state) {
liga_L5();
} else {
desliga_L5();
}
}
if ((strcmp(device_name, ID_BEBEDOURO)==0)) {
if (state) {
liga_L6();
} else {
desliga_L6();
}
}
if ((strcmp(device_name, ID_SOFA)==0)) {
if (state) {
liga_L7();
} else {
desliga_L7();
}
}
if ((strcmp(device_name, ID_ABAJUR)==0)) {
if (state) {
liga_L8();
} else {
desliga_L8();
}
}
});

pinMode(13, OUTPUT); // pinos do esp32 para acionar os relés


pinMode(12, OUTPUT);
pinMode(14, OUTPUT);
pinMode(27, OUTPUT);
pinMode(26, OUTPUT);
pinMode(25, OUTPUT);
pinMode(33, OUTPUT);
pinMode(32, OUTPUT);

digitalWrite(13, LOW); // começar com os relés desligados..


digitalWrite(12, LOW);
digitalWrite(14, LOW);
digitalWrite(27, LOW);
digitalWrite(26, LOW);
digitalWrite(25, LOW);
digitalWrite(33, LOW);
digitalWrite(32, LOW);

}
void loop() {

fauxmo.handle();
}
void liga_L1(){
digitalWrite(13, HIGH);
}
void desliga_L1(){
digitalWrite(13, LOW);
}
void liga_L2(){
digitalWrite(12, HIGH);
}
void desliga_L2(){
digitalWrite(12, LOW);
}
void liga_L3(){
digitalWrite(14, HIGH);
}
void desliga_L3(){
digitalWrite(14, LOW);
}
void liga_L4(){
digitalWrite(27, HIGH);
}
void desliga_L4(){
digitalWrite(27, LOW);
}
void liga_L5(){
digitalWrite(26, HIGH);
}
void desliga_L5(){
digitalWrite(26, LOW);
}
void liga_L6(){
digitalWrite(25, HIGH);
}
void desliga_L6(){
digitalWrite(25, LOW);
}
void liga_L7(){
digitalWrite(33, HIGH);
}
void desliga_L7(){
digitalWrite(33, LOW);
}
void liga_L8(){
digitalWrite(32, HIGH);
}
void desliga_L8(){
digitalWrite(32, LOW);
}

Abra a porta serial e reinicie o seu ESP32.


Se tudo deu certo, vai aparecer o nome da sua rede e o número de
IP que foi atribuído ao seu ESP32.

Explicação do código

#define ID_VENTILADOR "luz ventilador"


#define ID_PLAFON "luz plafon"
#define ID_MESA "luz escrivaninha"
#define ID_TVESQUERDA "luz esquerda"
#define ID_TVDIREITA "luz direita"
#define ID_BEBEDOURO "luz bebedouro"
#define ID_SOFA "luz sofa"
#define ID_ABAJUR "luz abajur"

Definimos os nomes dos equipamentos ou lâmpadas a serem


controladas. Esses nomes serão usados para o ESP32 fazer os acionamentos
e guardar o status de ligados ou desligados.

"luz ventilador"
"luz plafon"
"luz escrivaninha"
"luz esquerda"
"luz direita"
"luz bebedouro"
"luz sofa"
"luz abajur"

Acima são os nomes dos dispositivos que aparecerão no aplicativo


Amazon, portanto, serão os nomes que usaremos para a Alexa fazer os
acionamentos.

“Alexa, ligar luz ventilador”. “Alexa, desligar luz ventilador”.


“Alexa, ligar luz plafon”. “Alexa, desligar luz plafon”.

// Add virtual devices


fauxmo.addDevice(ID_VENTILADOR);
fauxmo.addDevice(ID_PLAFON);
fauxmo.addDevice(ID_MESA);
fauxmo.addDevice(ID_TVESQUERDA);
fauxmo.addDevice(ID_TVDIREITA);
fauxmo.addDevice(ID_BEBEDOURO);
fauxmo.addDevice(ID_SOFA);
fauxmo.addDevice(ID_ABAJUR);

Devemos colocar o nome dos equipamentos ou lâmpadas de acordo


como definimos no começo do código:

#define ID_VENTILADOR "luz ventilador"


#define ID_PLAFON "luz plafon"
.....
É criada uma condição “if” para cada equipamento ou lâmpada que
criamos. De acordo com uma variável “state”, o ESP32 fará o acionamento
ou não. Nomeamos uma função para fazer os acionamentos, no meu caso,
criei a função “liga_L1, desliga_L1 até a função liga_L8 e desliga_L8”.
if ((strcmp(device_name, ID_VENTILADOR)==0)) {
if (state) {
liga_L1();
} else {
desliga_L1();
}
}

void liga_L1(){
digitalWrite(13, HIGH);
}
void desliga_L1(){
digitalWrite(13, LOW);
}
.......
void liga_L8(){
digitalWrite(32, HIGH);
}
void desliga_L8(){
digitalWrite(32, LOW);
}

Bem simples de usar essa biblioteca.


Se quiser pode usar a biblioteca WifiManager também para conectar
em sua rede. Se não tiver a biblioteca, basta fazer o download nessa
pasta compartilhada:

https://drive.google.com/drive/folders/1BFhQC4PktBHRkiLiTqPYlcuG2kwBUZ
GI?usp=sharing

Siga os mesmos passos de instalação da biblioteca conforme já


mencionado nesse tutorial.

Depois de instalada a biblioteca, copie e cole o código abaixo na


sua IDE do arduino. Carregue em seu ESP32.

#include <WiFiManager.h>
#include <WebServer.h>
#include <fauxmoESP.h>

WebServer server(80);

fauxmoESP fauxmo;

// -----------------------------------------------------------------------------

#define ID_VENTILADOR "luz ventilador"


#define ID_PLAFON "luz plafon"
#define ID_MESA "luz escrivaninha"
#define ID_TVESQUERDA "luz esquerda"
#define ID_TVDIREITA "luz direita"
#define ID_BEBEDOURO "luz bebedouro"
#define ID_SOFA "luz sofa"
#define ID_ABAJUR "luz abajur"

void setup() {
Serial.begin(115200);
WiFiManager;
//reset saved settings
//wifiManager.resetSettings();
wifiManager.autoConnect("ESP32","12345678"); //cria uma rede
Serial.println("IP:");
Serial.println(WiFi.localIP());

fauxmo.createServer(true);
fauxmo.setPort(80);
fauxmo.enable(true);

// Add virtual devices


fauxmo.addDevice(ID_VENTILADOR);
fauxmo.addDevice(ID_PLAFON);
fauxmo.addDevice(ID_MESA);
fauxmo.addDevice(ID_TVESQUERDA);
fauxmo.addDevice(ID_TVDIREITA);
fauxmo.addDevice(ID_BEBEDOURO);
fauxmo.addDevice(ID_SOFA);
fauxmo.addDevice(ID_ABAJUR);

fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool


state, unsigned char value) {

Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id,


device_name, state ? "ON" : "OFF", value);

if ((strcmp(device_name, ID_VENTILADOR)==0)) {
if (state) {
liga_L1();
} else {
desliga_L1();
}
}
if ((strcmp(device_name, ID_PLAFON)==0)) {
if (state) {
liga_L2();
} else {
desliga_L2();
}
}
if ((strcmp(device_name, ID_MESA)==0)) {
if (state) {
liga_L3();
} else {
desliga_L3();
}
}
if ((strcmp(device_name, ID_TVESQUERDA)==0)) {
if (state) {
liga_L4();
} else {
desliga_L4();
}
}
if ((strcmp(device_name, ID_TVDIREITA)==0)) {
if (state) {
liga_L5();
} else {
desliga_L5();
}
}
if ((strcmp(device_name, ID_BEBEDOURO)==0)) {
if (state) {
liga_L6();
} else {
desliga_L6();
}
}
if ((strcmp(device_name, ID_SOFA)==0)) {
if (state) {
liga_L7();
} else {
desliga_L7();
}
}
if ((strcmp(device_name, ID_ABAJUR)==0)) {
if (state) {
liga_L8();
} else {
desliga_L8();
}
}
});

pinMode(13, OUTPUT); // pinos do esp32 para acionar os relés


pinMode(12, OUTPUT);
pinMode(14, OUTPUT);
pinMode(27, OUTPUT);
pinMode(26, OUTPUT);
pinMode(25, OUTPUT);
pinMode(33, OUTPUT);
pinMode(32, OUTPUT);
digitalWrite(13, LOW); // começar com os relés desligados..
digitalWrite(12, LOW);
digitalWrite(14, LOW);
digitalWrite(27, LOW);
digitalWrite(26, LOW);
digitalWrite(25, LOW);
digitalWrite(33, LOW);
digitalWrite(32, LOW);

}
void loop() {

fauxmo.handle();
}
void liga_L1(){
digitalWrite(13, HIGH);
}
void desliga_L1(){
digitalWrite(13, LOW);
}
void liga_L2(){
digitalWrite(12, HIGH);
}
void desliga_L2(){
digitalWrite(12, LOW);
}
void liga_L3(){
digitalWrite(14, HIGH);
}
void desliga_L3(){
digitalWrite(14, LOW);
}
void liga_L4(){
digitalWrite(27, HIGH);
}
void desliga_L4(){
digitalWrite(27, LOW);
}
void liga_L5(){
digitalWrite(26, HIGH);
}
void desliga_L5(){
digitalWrite(26, LOW);
}
void liga_L6(){
digitalWrite(25, HIGH);
}
void desliga_L6(){
digitalWrite(25, LOW);
}
void liga_L7(){
digitalWrite(33, HIGH);
}
void desliga_L7(){
digitalWrite(33, LOW);
}
void liga_L8(){
digitalWrite(32, HIGH);
}
void desliga_L8(){
digitalWrite(32, LOW);
}

//callback que indica que o ESP entrou no modo AP

void configModeCallback (WiFiManager *myWiFiManager) {

Serial.println("Entrou no modo de configuração");


Serial.println(WiFi.softAPIP()); //imprime o IP do AP
Serial.println(myWiFiManager->getConfigPortalSSID()); //imprime o SSID criado
da rede

}
//callback que indica que salvamos uma nova rede para se conectar (modo
estação)

void saveConfigCallback () {

Serial.println("Configuração salva");
Serial.println(WiFi.softAPIP()); //imprime o IP do AP
}

Agora abra seu monitor serial. Reinicie o seu ESP32.

Note que seu ponto de acesso foi criado:


*WM: Configuring access point...
*WM: ESP32
*WM: 12345678
*WM: AP IP address:
*WM: 192.168.4.1
*WM: HTTP server started

Com um celular ou um tablet, entre nas configurações do WiFi e


conecte-se no ponto de acesso WiFi criado “ESP32” com a senha “12345678”.

Clique na rede “ESP32” e “FAZER LOGIN”.

Você entrou na página de configuração. Temos 2


opções:
Configure WiFi = Ele listará todas as conexões
WiFi disponíveis.
Configure WiFi (No Scan) = você deverá digitar sua
rede WiFi manualmente.

Escolha a rede que deseja se conectar.


Coloque a senha e salve no (botão save).
O ESP32 vai reiniciar e salvar as configurações da
sua rede.

Agora ele tentará se conectar na rede que você salvou.


Caso ele não consiga se conectar, irá mostrar novamente aquele
ponto de acesso que criamos “ESP32”.
Isso pode ocorrer se sua rede WiFi estiver indisponível ou se a
senha estiver errada.
Nesse caso repita os passos acima.
Abra a IDE do
arduino e o monitor
serial.

Se tudo ocorreu bem,


o ESP32 se conectou e
mostrou o número de
IP que foi atribuído
a ele.

No meu caso aqui, o


IP é 192.168.1.105.

Nota: Toda vez que precisar mudar sua rede WiFi no roteador ou a
senha dela, o ESP32 não se conectará e criará o ponto de acesso que
configuramos no Sketch do programa. Basta fazer esses passos acima para
que ele volte a se conectar.
Agora vamos instalar o aplicativo da amazona alexa. Procure no seu
“Play Store” ou “App Store”. Baixe e instale em seu dispositivo.
Se ainda não tem, deverá criar uma conta na Amazon. Faça isso no
link abaixo:

https://www.amazon.com.br/ap/register?showRememberMe=true&showRmrMe=1&openid.return_to=https%
3A%2F%2Falexa.amazon.com.br%2F&prevRID=92C1WZZT4QVMEABDXKGE&openid.identity=http%3A%2F%2Fspecs.open
id.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=amzn_dp_project_dee_br&openid.mode=checkid_setu
p&prepopulatedLoginId=&failedSignInCount=0&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2
Fidentifier_select&pageId=amzn_dp_project_dee_br&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0

Siga o passo a passo. Não tem erro.


Abra o seu aplicativo. Siga os passos abaixo:
Agora você deverá
pressionar esse
botão até a alexa
ficar na cor
laranja.
Não é necessário configurar os
dispositivos.

Volte a tela inicial.

Tudo pronto agora.

Abra o monitor serial na sua IDE do


arduino.

Faça os testes na sua alexa:


#define ID_VENTILADOR "luz ventilador"
#define ID_PLAFON "luz plafon"
#define ID_MESA "luz escrivaninha"
#define ID_TVESQUERDA "luz esquerda"
#define ID_TVDIREITA "luz direita"
#define ID_BEBEDOURO "luz bebedouro"
#define ID_SOFA "luz sofa"
#define ID_ABAJUR "luz abajur"

“Alexa, ligar luz ventilador”. “Alexa, desligar luz ventilador”.


“Alexa, ligar luz plafon”. “Alexa, desligar luz plafon”.
“Alexa, ligar luz escrivaninha”. “Alexa, desligar luz escrivaninha”.
“Alexa, ligar luz esquerda”. “Alexa, desligar luz esquerda”.
“Alexa, ligar luz direita”. “Alexa, desligar luz direita”.
“Alexa, ligar luz bebedouro”. “Alexa, desligar luz bebedouro”.
“Alexa, ligar luz sofa”. “Alexa, desligar luz sofa”.
“Alexa, ligar luz abajur”. “Alexa, desligar luz abajur”.

Boa sorte em seus projetos!!!!

Você também pode gostar