Automação Caseira Completa com ESP 32 + Raspberry Pi3 b + Homebridge (Siri)

Olá Galera, estou prestes a começar a construção da minha casa e gostaria de contar com a ajuda de todos vcs para deixá-la 100% automatizada.

Tudo ainda está no papel, porém gostaria que vcs me ajudassem dando dicas de como fazer tudo da melhor forma. Pretendo automatizar as lâmpadas, as portas, portões de garagem, regador de jardim, cortinas, bomba da piscina (ainda é um sonho rsrsrsrs ), telão para projetor, som, câmeras, tudo o que for possível. Lembrando q não construí a casa ainda, vou começar do zero e não queria ficar quebrando parede ou coisas do tipo depois q a casa estivesse pronta.

Hj moro com minha mãe, mas, Já fiz a automação das lâmpadas e tomadas do meu quarto utilizando placas q são vendidas no mercado livre e já vêm com programação pronta (sonoff) + Blynk + Homebridge (Siri), porém, como irei precisar automatizar vários dispositivos optei pelo esp32 pelo fato de possuir mais Gpio's reduzindo assim o gasto com outros dispositivos.

Nas tomadas pretendo utilizar interruptores pulsadores para não perder o status e saber quando ela está ligada ou desligada independente de ter sido acionada pelo app ou pelo interruptor.

Se tiver alguém que já utiliza o ESP32 ou que utiliza outra forme de automação e possa me ajudar, eu fico muito grato. Moro no interior de Alagoas e aqui ninguém sabe de nada, muito menos tem material para isso. Por isso necessito da ajuda de todos vcs, qualquer ajuda será bem vinda.

Enquanto isso eu vou pesquisando na internet e o que for descobrindo vou colocando aqui neste tópico pra gente debater.

Vi que aqui tem muitos garagistas com conhecimento no assunto e espero q algumas dessas almas caridosas possam me ajudar.

Desde já o meu muito obrigado.

Exibições: 241

Responder esta

Respostas a este tópico

Bom dia amigo, exelente iniciativa.
Entre em contato comigo para trocarmos whatsapp... nao sei muito mas posso contribuir com algo ok
rhaicmer.costa@etec.sp.gov.br
vlw, aguardo seu contato.

Olá parceiro, obrigado pelo apoio, sou iniciante em automação, mas, sou um cara curioso e determinado, só paro quando consigo colocar o projeto em prática. Espero q possamos nos ajudar e ajudar muita gente q, assim como eu, pretende automatizar sua residência.

Já vou dar um oi no Zap.

Vlw mesmo.

E aí Galera!!!  vou postar aqui onde eu comprei o Esp 32 e os módulos relés pra galera q estiver procurando um bom vendedor e com preço legal.

Vendedor do Esp32

Estou começando a adicionar a biblioteca do Blynk para depois testar.

Utilizei este passo a passo como guia. Programando Blynk com a IDE Arduíno.

Assim q conseguir mais novidades postarei aqui.

Ps: criei este tópico para ajudar iniciantes como eu a colocar em prática seus próprios projetos de Automação Residencial, se não tem nada a acrescentar, não faça comentários desnecessários.

Obrigado.

Então, uma dica talvez, fique um pouco caro de inicio, mas que pode ser mais viável, imagino já que pretende usar o esp32 e comentou que comprou por ter mais GPIOs, que vai fazer uma automação que precisa de passagem de fios... Se usar um exemplo um esp-01 ou esp12, e fazer a sua automação de forma modular, assim criando módulos, para cada lâmpada, tomadas, etc...

Pelo menos estou desenvolvendo minha automação assim, uma automação modular, já desenhei placas, desenvolvi interface de controle no esp, e no momento estou testando os cálculos de consumo de dispositivos baseado em tempo de utilização, não vai ser exatamente preciso, mas vou ter uma aproximação, e estimar o valor da fatura.

Falta Server, APP, protocolos de segurança.

Pego meu AP provavelmente no final do ano, ae vou ter mais liberdade para testes.

Olá Manoel, obrigado pela dica.

Eu já utilizo dessa maneira.

Fiz a automação do meu quarto com dois módulos Esp 12f, porém, como irei construir minha casa e a sala é conjugada (estar, jantar e cozinha) preciso de um modulo com mais canais. Se vc for pesquisar na internet um NodeMCU 12F saí praticamente o mesmo valor de outro modulo com menos Gpios.
No caso da casa que pretendo custruir, a sala terá vários dispositivos, entre lâmpadas, tomadas, cortinas, etc e pretendo fazer uma central para aonde os fios irão, até para facilitar em caso de manutenção. Pelo q pude perceber, sai mais barato gastar com a fiação q com módulos extras. Em algumas ocasiões utilizarei o NodeMCU 12F, em outras utilizarei o Esp32s ou esp-01. Exemplos onde utilizarei o Esp12F: vou fazer uma caixa de controle no portão da frente para controlar o motor do portão, a trava elétrica da porta menor, e as lâmpadas externas, além dos sensores que informarão se o portão ou a porta estão abertos. Vou colocar um conduíte para passar os fios dos sensores até a caixa de controle q ficará no muro. Na sala, como pretendo desenvolver a automação das cortinas e da tela para o projetor na sala, colocarei módulos ESP independentes, podendo até ser os Sonoff. No caso do ar condicionado e TV tanto da sala quanto dos quartos pretendo projetar com aquelas caixinhas de plástico um módulo contendo um ESP (vou definir ainda) já com a fonte e um led infravermelho, colocando-o no teto próximo a lâmpada central, apontando para os eletrodomésticos, para poder controlá-los. Estou começando a colocar no papel os projetos para depois pôr em prática. Minha maior dificuldade ainda é a programação, pois pretendo controlar os dispositivos através do app Siri do iPhone (já utilizo no meu quarto). Conforme for desenvolvendo cada automação, irei postando aqui.

Obrigado pela contribuição e qualquer nova idéia compartilhe conosco.
Olha aqui o vídeo da automação q fiz das lâmpadas e tomadas do meu quarto utilizando o Blynk e o homebridge. Tudo controlado pelo app de voz do iPhone (Siri).

https://www.facebook.com/gugatampa/posts/1461616150549387

Boa tarde galerinha, consegui criar o código através de um exemplo extraído dos exemplos do Blynk.

Consegui carregá-lo para o esp32 uma vez só q eu tinha esquecido de configurar o código dos outros dois botões físicos e por isso apenas um botão do interruptor estava funcionando. Após achar o erro no código eu tentei carregá-lo novamente para o ESp32, porém, sempre dá erro .

Eu compilo normalmente o Sketch, mas,na hora de carregar pro ESP fica dando erro.

Vou postar aqui o código q utilizei e a mensagem de erro.

___________________________________________________________________________________________________

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Você deve obter o Auth Token na aplicação Blynk.
// Vá para Configurações do Projeto (ícone da porca).
char auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // Token Gerado pelo Blynk.

// Your WiFi credentials.
// Defina a senha para "" para redes abertas.
char ssid[] = "Guga_Tampa";
char pass[] = "XXXXXXXXXX";

// Defina seu LED e pinos de botão físico aqui
const int ledPin = 12;
const int ledPin2 = 14;
const int ledPin3 = 27;
const int btnPin = 2;
const int btnPin2 = 4;
const int btnPin3 = 16;

BlynkTimer timer;
void checkPhysicalButton();

int ledState = LOW;
int btnState = HIGH;
int ledState2 = LOW;
int btnState2 = HIGH;
int ledState3 = LOW;
int btnState3 = HIGH;

// Toda vez que nos conectamos à nuvem ...
BLYNK_CONNECTED() {
  // Solicite o estado mais recente do servidor
  Blynk.syncVirtual(V2);
  Blynk.syncVirtual(V3);
  Blynk.syncVirtual(V4);

  // Alternativamente, você pode substituir o estado do servidor usando:
  //Blynk.virtualWrite(V2, ledState);
}

// Quando o botão do App for pressionado - irá mudar o estado
BLYNK_WRITE(V2) {
  ledState = param.asInt();
  digitalWrite(ledPin, ledState);
}

BLYNK_WRITE(V3) {
  ledState2 = param.asInt();
  digitalWrite(ledPin2, ledState2);
}

BLYNK_WRITE(V4) {
  ledState3 = param.asInt();
  digitalWrite(ledPin3, ledState3);
}

void checkPhysicalButton()
{
  if (digitalRead(btnPin) == LOW) {
    // btnState é usado para evitar alternar sequencialmente
    if (btnState != LOW) {

      // Alternar estado do LED
      ledState = !ledState;
      digitalWrite(ledPin, ledState);

      // Widget botão de atualização
      Blynk.virtualWrite(V2, ledState);
    }
    btnState = LOW;
  } else {
    btnState = HIGH;
  }
  if (digitalRead(btnPin2) == LOW) {
    // btnState é usado para evitar alternar sequencialmente
    if (btnState2 != LOW) {

      // Alternar estado do LED
      ledState2 = !ledState2;
      digitalWrite(ledPin2, ledState2);

      // Widget botão de atualização
      Blynk.virtualWrite(V3, ledState2);
    }
    btnState2 = LOW;
  } else {
    btnState2 = HIGH;
  }

    if (digitalRead(btnPin3) == LOW) {
    // btnState é usado para evitar alternar sequencialmente
    if (btnState3 != LOW) {

      // Alternar estado do LED
      ledState3 = !ledState3;
      digitalWrite(ledPin3, ledState3);

      // Widget botão de atualização
      Blynk.virtualWrite(V4, ledState3);
    }
    btnState3 = LOW;
  } else {
    btnState3 = HIGH;
  }
 
}

void setup()
{
  // Console de depuração
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  // Você também pode especificar o servidor:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);

  pinMode(ledPin, OUTPUT);
  pinMode(btnPin, INPUT_PULLUP);
  pinMode(ledPin2, OUTPUT);
  pinMode(btnPin2, INPUT_PULLUP);
  pinMode(ledPin3, OUTPUT);
  pinMode(btnPin3, INPUT_PULLUP);
  digitalWrite(ledPin, ledState);
  digitalWrite(ledPin2, ledState2);
  digitalWrite(ledPin3, ledState3);

  // Configure uma função a ser chamada a cada 100 ms
  timer.setInterval(100L, checkPhysicalButton);
}

void loop()
{
  Blynk.run();
  timer.run();
}

___________________________________________________________________________________________________

Mensagem do erro:

Arduino: 1.8.4 (Windows 10), Placa:"ESP32 Dev Module, QIO, 80MHz, 4MB (32Mb), 921600, None"

Opções de compilação alteradas, recompilando tudo
O sketch usa 455819 bytes (34%) de espaço de armazenamento para programas. O máximo são 1310720 bytes.
Variáveis globais usam 35304 bytes (11%) de memória dinâmica, deixando 259608 bytes para variáveis locais. O máximo são 294912 bytes.
esptool.py v2.1-beta1
Connecting........___
Chip is ESP32D0WDQ6 (revision 0)
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Warning: Could not auto-detect Flash size (FlashID=0xffffff, SizeID=0xff), defaulting to 4MB
Compressed 8192 bytes to 47...

A fatal error occurred: Timed out waiting for packet content
A fatal error occurred: Timed out waiting for packet content

Este relatório teria mais informações com
"Mostrar a saida detalhada durante a compilação"
opção pode ser ativada em "Arquivo -> Preferências"

________________________________________________________________________________________________

Alguém sabe como posso resolver isto ?

Desde já obrigado.

Verifiquem o 

openremote

openremote.org

Tenho em casa e funciona, utiliza varios protocolos eu utilizei UDP

no arduino utilizei a biblioteca ardosc que tambem utiliza UDP

Controlo luz

Aparelhos de audio e video

leitura de temperatura

Executa cenas

No monemto ele roda em um PC mas existe plataforma para rodar em Raspberry

Tem uma interface totalmente customizavel

Graças a Deus consegui resolver o problema.

Quebrei um pouquinho a cabeça, mas, consegui solucionar e irei postar aqui pra que alguém que aparecer com o mesmo problema não fique sem ajuda, assim como eu fiquei(estou). rsrsrsrsrsrsrsrsrsrsrsrsrs

Sem esquecer de agradecer aos parceiros Manoel Pereira e José Luiz pelas dicas e ao meu brother Rhaicmer Bráulio pelo contato via whatsapp e pela ajuda com o código.

No caso do problema em carregar o Sketch para o Esp, eu apenas desconectei todos os jumpers e o ESP voltou ao normal. Não sei se algum Gpio q eu usei era dedicado ou algo do tipo, só sei q consegui resolver assim. 

Com relação ao código, eu mudei alguns Gpios e finalmente ele rodou lisinho. Não sei se já existem Gpios exclusivas para saídas ou entradas, só sei q apenas troquei o número das Gpios no Sketch e ele funcionou.

Segue o código funcionando:

__________________________________________________________________________________________________

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Você deve obter o Auth Token na aplicação Blynk.
// Vá para Configurações do Projeto (ícone da porca).
char auth[] = "coloque aqui o token "; // Token Gerado pelo Blynk.

// Your WiFi credentials.
// Defina a senha para "" para redes abertas.
char ssid[] = "coloque aqui o nome da sua rede wifi";
char pass[] = "senha da rede wifi";

// Defina seu LED e pinos de botão físico aqui
const int ledPin = 12;
const int ledPin2 = 25;
const int ledPin3 = 27;
const int btnPin = 15;
const int btnPin2 = 16;
const int btnPin3 = 0;

BlynkTimer timer;
void checkPhysicalButton();

int ledState = LOW;
int btnState = HIGH;
int ledState2 = LOW;
int btnState2 = HIGH;
int ledState3 = LOW;
int btnState3 = HIGH;

// Toda vez que nos conectamos à nuvem ...
BLYNK_CONNECTED() {
  // Solicite o estado mais recente do servidor
  // Blynk.syncVirtual(V2);
 
  // Alternativamente, você pode substituir o estado do servidor usando:
  Blynk.virtualWrite(V2, ledState);
  Blynk.virtualWrite(V3, ledState2);
  Blynk.virtualWrite(V4, ledState3);
}

// Quando o botão do App for pressionado - irá mudar o estado
BLYNK_WRITE(V2) {
  ledState = param.asInt();
  digitalWrite(ledPin, ledState);
}

BLYNK_WRITE(V3) {
  ledState2 = param.asInt();
  digitalWrite(ledPin2, ledState2);
}

BLYNK_WRITE(V4) {
  ledState3 = param.asInt();
  digitalWrite(ledPin3, ledState3);
}

void checkPhysicalButton()
{
  if (digitalRead(btnPin) == LOW) {
    // btnState é usado para evitar alternar sequencialmente
    if (btnState != LOW) {

      // Alternar estado do LED
      ledState = !ledState;
      digitalWrite(ledPin, ledState);

      // Widget botão de atualização
      Blynk.virtualWrite(V2, ledState);
    }
    btnState = LOW;
  } else {
    btnState = HIGH;
  }
  if (digitalRead(btnPin2) == LOW) {
    // btnState é usado para evitar alternar sequencialmente
    if (btnState2 != LOW) {

      // Alternar estado do LED
      ledState2 = !ledState2;
      digitalWrite(ledPin2, ledState2);

      // Widget botão de atualização
      Blynk.virtualWrite(V3, ledState2);
    }
    btnState2 = LOW;
  } else {
    btnState2 = HIGH;
  }

    if (digitalRead(btnPin3) == LOW) {
    // btnState é usado para evitar alternar sequencialmente
    if (btnState3 != LOW) {

      // Alternar estado do LED
      ledState3 = !ledState3;
      digitalWrite(ledPin3, ledState3);

      // Widget botão de atualização
      Blynk.virtualWrite(V4, ledState3);
    }
    btnState3 = LOW;
  } else {
    btnState3 = HIGH;
  }
 
}

void setup()
{
  // Console de depuração
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  // Você também pode especificar o servidor:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);

  pinMode(ledPin, OUTPUT);
  pinMode(btnPin, INPUT_PULLUP);
  pinMode(ledPin2, OUTPUT);
  pinMode(btnPin2, INPUT_PULLUP);
  pinMode(ledPin3, OUTPUT);
  pinMode(btnPin3, INPUT_PULLUP);
  digitalWrite(ledPin, ledState);
  digitalWrite(ledPin2, ledState2);
  digitalWrite(ledPin3, ledState3);

  // Configure uma função a ser chamada a cada 100 ms
  timer.setInterval(100L, checkPhysicalButton);
}

void loop()
{
  Blynk.run();
  timer.run();
}

____________________________________________________________________________________________________

Agora preciso criar canais q no caso de queda de energia reiniciem ligados.

Se puderem me ajudar,eu agradeço. (sou brasileiro, não desisto nunca) rsrsrsrsrsrsrsrsrsrsrsrs

let's fight

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço