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!!!!