Boa amigos garagistas estou com esse codigo interagindo com minha alexa amazon para ligar luz, gostaria de usar para o portao eletronico, como seria para pulsar, ja fiz com delay e nao funciona, alguem tem uma idea, sera que tem que mudar na biblioteca? segue o codigo em anexo.

Exibições: 304

Anexos

Responder esta

Respostas a este tópico

Não entendi ao certo o que você precisa em relação ao portão eletrônico.
Seria colocar a lâmpada piscando/pulsando enquanto o portão está abrindo? Como aqueles sinalizadores que ficam em portas de garagem avisando que um veículo vai entrar ou sair?

bom dia  Joao Vitor , nesse codigo esta configurado para contato seco continuo, gostaria de deixar com um delay de 1sg, para abrir portao eletronico, eu coloco um ( delay de 1sg)  no lugar do ( else ) e nao funciona.

Já tentou sem usar delay?? tipo assim.... 

[code]
#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#define RELAY_PIN_1 0

#else
#include <ESP8266WiFi.h>
#define RELAY_PIN_1 0

#endif
#include "fauxmoESP.h"

#define SERIAL_BAUDRATE 115200

#define WIFI_SSID "***********"
#define WIFI_PASS "***********"

#define LAMP_1 "LED 1"

#define pulso 1000 //tempo do pulso
unsigned long pulsotempo; //Variável que guarda tempo que foi acionado
byte statusrele=0 ; //Indicador status (on/off) do rele

fauxmoESP fauxmo;


// Wi-Fi Conexão
void wifiSetup() {

// Define o como STA
WiFi.mode(WIFI_STA);

// Conecta
Serial.printf("[WIFI] Conectado ao %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);

// Espera
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println();

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

void setup() {
// Inicia a Serial
Serial.begin(SERIAL_BAUDRATE);
Serial.println();

// Conexão Wi-Fi
wifiSetup();

// LED
pinMode(RELAY_PIN_1, OUTPUT);
digitalWrite(RELAY_PIN_1, LOW);

// Por padrão, fauxmoESP cria seu próprio servidor web na porta definida
// A porta TCP deve ser 80 para dispositivos gen3 (o padrão é 1901)
// Isso deve ser feito antes da chamada enable()
fauxmo.createServer(true); // não é necessário, este é o valor padrão
fauxmo.setPort(80); // Isso é necessário para dispositivos gen3

// Você deve chamar enable(true) assim que tiver uma conexão WiFi
// Você pode ativar ou desativar a biblioteca a qualquer momento
// Desativá-lo impedirá que os dispositivos sejam descobertos e trocados
fauxmo.enable(true);

// Você pode usar diferentes maneiras de chamar a Alexa para modificar o estado dos dispositivos:
// "Alexa, ligar LED um"

// Adiciona os dispositivos
fauxmo.addDevice(LAMP_1);

fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {
// Retorno de chamada quando um comando da Alexa é recebido.
// Você pode usar device_id ou device_name para escolher o elemento no qual realizar uma ação (relé, LED, ...)
// O state é um booleano (ON / OFF) e value um número de 0 a 255 (se você disser "definir a luz da cozinha para 50%", receberá 128 aqui).

Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id, device_name, state ? "ON" : "OFF", value);
if ( (strcmp(device_name, LAMP_1) == 0) ) {
Serial.println("RELAY 1 switched by Alexa");
pulsotempo = millis();
if (state) {
digitalWrite(RELAY_PIN_1, HIGH);
statusrele = 1;
} else {
digitalWrite(RELAY_PIN_1, LOW);
statusrele = 0;
}
}

});

}

void loop() {
// fauxmoESP usa um servidor TCP assíncrono, mas um servidor UDP sincronizado
// Portanto, temos que pesquisar manualmente os pacotes UDP
fauxmo.handle();

static unsigned long last = millis();
if (millis() - last > 5000) {
last = millis();
Serial.printf("[MAIN] Free heap: %d bytes\n", ESP.getFreeHeap());
}

if (statusrele && millis() - pulsotempo > pulso) {
digitalWrite(RELAY_PIN_1, LOW);
statusrele = 0;
}

}
[/code]

obrigado pela atencao  Alexandre A. M. Nogueira dessa forma deu certo, nao estava aceitando delay mesmo com millis ficou show valeu

Este exemplo é com NODEMCU. Só fazer adaptação para o seu código.

https://blogmasterwalkershop.com.br/embarcados/nodemcu/nodemcu-util...

boa tarde Gilmar ja vi este codigo mais tambem nao da certo 

Olá,

  Nunca tentei, mas me parece que um delay() deveria resolver.

  Quando vc colocou foi assim: ?

if (state) {
  digitalWrite(RELAY_PIN_1, HIGH);
  delay(1000);
  digitalWrite(RELAY_PIN_1, LOW);
} else {
  digitalWrite(RELAY_PIN_1, LOW);
}

boa tarde Eduardo Henrique Marcondes ja tentei desta forma, nao funciona, sera que o segredo ta na biblioteca?

Estranho... na teoria, deveria funcionar.
O uso de delays não costuma ser muito recomendado em algumas situações, apesar de que seu código é bem simples e só tem a função de controlar a lâmpada através do relé.


Mas, já tentou implementar uma abordagem diferente pra não travar o andamento com delays?

No caso, setando uma variável global cuja função da Alexa vai ser alterar essa variável e no loop, usando millis(), fazer o acionamento do relé sem travar a função do fauxmoESP com delays.

Exemplo simplificado:

//VARIÁVEIS GLOBAIS
bool pisca_lamp = false;

int contagem = 0;

bool estado = true;

#define intervalo = 1000;  //delay em milissegundos (1s = 1000ms)

#define num_piscadas 5;

void setup()

{

        //PARTE OMITIDA

        {...}

        //PARTE DA AÇÃO AO RECEBER COMANDO DA ALEXA   

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

        {
              if ( (strcmp(device_name, LAMP_1) == 0) )

              {
                     Serial.println("RELAY 1 switched by Alexa");

                     if (state)     pisca_lamp = true; //Permitindo a execução de alternar o estado do relé/lâmpada

                     else           pisca_lamp = false;
              }
       });

        //PARTE OMITIDA

        {...}

}

void loop()

{

        //PARTE OMITIDA

        {...}

       //FAZ O ACIONAMENTO DO RELÉ

      if(pisca_lamp) //VARIÁVEL ALTERADA PELA ALEXA
       {
              if(millis() - last > intervalo)
              {
                     if(contagem < num_piscadas)
                     {
                            digitalWrite(RELAY_PIN_1, estado);
                            contagem++;
                            estado = !estado; //Inverte o valor para a próxima execução
                     }
                     else
                     {
                            estado = true; //VOLTA O VALOR PARA O PADRÃO
                            contagem = 0; //ZERA O CONTADOR DE PISCADAS
                            pisca_lamp = false; //"DESABILITA" A ALTERNÂNCIA DO ESTADO DO RELÉ/LAMPADA

                     }
              }
       }

}


É só um exemplo beeeeem grotesco pra pegar a ideia. Dá pra simplificar e otimizar bastante ainda o código, mas deixei dessa forma pra lógica ficar mais simples.

Dá uma lida e confere, pois fiz direto no corpo da mensagem então pode haver erros de digitação e de indentação.

obrigado Joao Vitor pela atençao, tirei o delay e coloquei millis de certo.

Boa! Por nada.

Foquei apenas na lógica bruta. Tem alguns detalhes que deixei passar. Você pode dar uma melhorada significativa nessa rotina. Por exemplo, corrigir para certificar que sempre finalize com ela apagada.

Dá pra reduzir também as condicionais e quantidade de variáveis utilizadas. :D

olá Eliseu.

      Lá vamos novamente com suas "home automations".

      Reescrevi o código original que vc postou aqui, de forma a implementar o funcionamento pulsado para controle do Portão via Alexa.

      Usei as mesmas Bibliotecas que vc estava usando.  E reorganizei o código, para tentar manter a coisa a mais técnica possível (e acredite: após a compilação verá que ficou ligeiramente menor em Flash e RAM que o original).

      O código e as LIBs para download, estão no final do post.

      Não se esqueça de alterar o nome da sua rede WiFi e a respectiva senha (está tudo bem fácil de mexer, caso vc deseje alterar outros parâmetros).

      E como não tenho paciência para scripts de boxes em páginas da web, estou colando aqui os prints para visualização do código completo. As quatro figuras a seguir mostram isso:

(clique nas figuras para "zoom")

      O código para download é este aqui:  "Esp-01_Pulsar_Alexa_01.zip"

      Bibliotecas necessárias:   "FauxmoESP-3.2.0.zip"   e   "ESPAsyncTCP.zip"

      Vc tem meu Skype, então qualquer dúvida, fique à vontade para me perguntar por lá.

      Abrçs

      Elcids

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço