I’m new in Blynk community and am facing serious problems with Blynk and Particle Photon, I don’ t know what to do. All routines that made using the two together had problems. Very different from when I use Blink on ESP8266, to my surprise very stable and have not had any problems so far.
Below follows the source code that I’m having trouble it is a simple source code, but at all times the WDT operates on this code. In other code also using Photon and Blynk the hardware lock and the light stops flashing and the hardware is frozen. I’ve done everything and I have no more idea than done. Anyone have any suggestions for me? I have even turned off the Particle server to have no problems, but without success. The source code speak for themselves.
I’m connecting 3 hardware. 2 Photon and ESP8266, only stable is the ESP.
The following are the codes that are making trouble.
Main Photon: (more complex)
// This #include statement was automatically added by the Particle IDE.
//#define BLYNK_PRINT Serial
#include “blynk/BlynkSimpleParticle.h”
#include “blynk/blynk.h”
SYSTEM_MODE(SEMI_AUTOMATIC);
SYSTEM_THREAD(ENABLED);
STARTUP(WiFi.selectAntenna(ANT_AUTO));
STARTUP(System.enableFeature(FEATURE_RETAINED_MEMORY));
// Variáveis utilizadas no equipamento
retained char alarmeStatus = '1';
retained char cercaStatus = '7';
char auth[] = "xxxxxxxxxxxxxxxxxx";
const char ALARME_DESCONECTADO = '0';
const char ALARME_DESATIVADO = '1';
const char ALARME_ATIVADO = '2';
const char ALARME_DISPARADO = '3';
const char CERCA_DESCONECTADA = '6';
const char CERCA_DESLIGADA = '7';
const char CERCA_LIGADA = '8';
// Define nome para entradas e saídas:
//Saidas:
int S_Alarme = D6; // Saída Controle Alarme
int S_Cerca = D5; // Saída Controle Cerca
int St_Alarme = D4; // Saída Controle Led Alarme
int St_Cerca = D3; // Saída Controle Led Cerca
int LStatus = D7; // Saída Led Status do Equipamento
int LPortao = D2; // Saída Led do Portão
int LLuz = A5; // Saída Led Luz Externa
//Entradas:
int E_Sirene = D0; // Sinal de Entrada Sirene
int Bot = D1; // Sinal de Entrada Botão
int StatusE_Sirene; // Estado da Entrada 1
int UltimoStatusE_Sirene = LOW; // Estado anterior da Entrada 1
int ContadorE_Sirene = 0; // Verificador de quantas vezes a Entrada 1 foi acionada
int EnvioStatus = LOW; // Estado dos comandos
int StatusEnvio; // Estado da Entrada 1
int UltimoStatusEnvio = LOW; // Estado anterior da Entrada 1
int LeStatus; // Estado atual da ntrada 1
int SaidaStatus1 = LOW;
int SaidaStatus2 = LOW;
int SaidaStatus3 = LOW;
int SaidaStatus4 = LOW;
int BloqSaida = 0;
int SinalStatus = LOW;
// Definições do Status do Alarme:
unsigned int ControleAlarme = 0;
unsigned int ControleCerca = 0;
unsigned long TempoE_Sirene = 0; // Tempo da Entrada 1
unsigned long UltimoTempoE_Sirene = 0; // Último momento em que o Entrada 1 foi atualizado
unsigned long DebounceE_Sirene = 150; // Tempo do filtro Entrada 1, aumentar se ocorrer irregularidades
unsigned long TempoEnvio = 0; // Tempo da Entrada 1
unsigned long UltimoTempoEnvio = 0; // Último momento em que o Entrada 1 foi atualizado
unsigned long DebounceEnvio = 5000; // Tempo do filtro Entrada 1, aumentar se ocorrer irregularidades
unsigned long IntervaloNormal = 1000;
unsigned long IntervaloDisparado = 1500;
unsigned long PrevioMillis = 0;
unsigned long TempoSinalAtual = 0;
unsigned long MillisAtual = millis();
unsigned long ContDisparo = 0;
unsigned long ContSinal = 0;
unsigned long ContIni = 0;
double temp = 0.0;
double humd = 0.0;
double tempFundo = 0.0;
double humdSolo = 0.0;
bool inicio = true;
bool BtTrava = false;
bool PLed = false;
bool Primeira = false;
bool PrimeiraBlynk = true;
Timer timer1(2000, Atualiza); // Tempo e Rotina do Temporizador
Timer timer2(60000, Alerta); // Tempo e Rotina do Temporizador
Timer timer3(100, AlertaLed); // Tempo e Rotina do Temporizador
ApplicationWatchdog wd(60000, System.reset);
//Canais Virtuais do Blynk
WidgetBridge bridge1(V3); // Canal Virtual da Ponte
WidgetBridge bridge2(V14); // Canal Virtual da Ponte
WidgetLCD lcd(V0); // Canal Virtual do LCD Virtual
WidgetLED LedAlarme(V5); //LED Virtual no APP
WidgetLED LedCerca(V6); //LED Virtual no APP
WidgetLED LedDisparo1(V7); //LED Virtual no APP
WidgetLED LedDisparo2(V8); //LED Virtual no APP
void setup() {
// Serial.begin(115200); // Inicia a Serial
// delay(500);
WiFi.on(); // Liga a Módulo WiFi com as credenciais pré definidas
delay(250);
WiFi.connect(); // Conecta à Rede WiFi
pinMode(E_Sirene, INPUT); // Indica que é entrada
pinMode(Bot, INPUT); // Indica que é entrada
pinMode(S_Alarme, OUTPUT); // Indica que é saída
pinMode(S_Cerca, OUTPUT); // Indica que é saída
pinMode(St_Alarme, OUTPUT); // Indica que é saída
pinMode(St_Cerca, OUTPUT); // Indica que é saída
pinMode(LStatus, OUTPUT); // Indica que é saída
pinMode(LPortao, OUTPUT); // Indica que é saída
pinMode(LPortao, OUTPUT); // Indica que é saída
pinMode(LLuz, OUTPUT); // Indica que é saída
digitalWrite(S_Alarme, LOW); // Desliga Saída ao Iniciar
digitalWrite(S_Cerca, LOW); // Desliga Saída ao Iniciar
digitalWrite(St_Alarme, LOW); // Desliga Saída ao Iniciar
digitalWrite(St_Cerca, LOW); // Desliga Saída ao Iniciar
digitalWrite(LPortao, LOW); // Desliga Saída ao Iniciar
digitalWrite(LLuz, LOW); // Desliga Saída ao Iniciar
digitalWrite(LStatus, HIGH); // Liga Saída
waitUntil(WiFi.ready); // Agaurda conectar a WiFi
Blynk.begin(auth); // Faz Autenticação no Servidor Blynk
digitalWrite(LStatus, LOW); // Desliga Saída
waitUntil(Blynk.connect); // Agaurda Conectar no Servidor Blink
timer1.start(); // Inicia Rotina Temporizador
timer2.start(); // Inicia Rotina Temporizador
timer3.start(); // Inicia Rotina Temporizador
delay(500); // Tempo
}
// Rotinas do Blynk
BLYNK_CONNECTED()
{
bridge1.setAuthToken("yyyyyyyyyyyyyyyyyyyyyyyyyyyy");
bridge2.setAuthToken("zzzzzzzzzzzzzzzzzzzzzzzzzzzz");
if (PrimeiraBlynk)
{
Blynk.syncAll();
digitalWrite(LStatus, HIGH); // Desliga Saída
PrimeiraBlynk = false;
}
}
//Verifica Botão Virtual do Alarme
BLYNK_WRITE(V1)
{
if(param.asInt() != 0)
{
if( LeStatus == LOW )
{
ContadorE_Sirene = 0;
ControleAlarme = 1;
SinalStatus = LOW;
UltimoTempoEnvio = millis();
LeStatus = HIGH;
}
}
}
// Verifica Botão Virtual da Cerca
BLYNK_WRITE(V2)
{
//Enviado pelo Cliente Liga Cerca
if(param.asInt() != 0)
{
if( LeStatus == LOW )
{
ContadorE_Sirene = 0;
ControleCerca = 1;
SinalStatus = LOW;
UltimoTempoEnvio = millis();
LeStatus = HIGH;
}
}
}
// Verifica Cera
BLYNK_WRITE(V4)
{
if(param.asInt() > 0)
{
BtTrava = true;
bridge1.digitalWrite(14, HIGH);
digitalWrite(LPortao, HIGH);
}
else
{
bridge1.digitalWrite(14, LOW);
digitalWrite(LPortao, LOW);
BtTrava = false;
}
}
BLYNK_READ(V9)
{
Blynk.virtualWrite(V9, temp);
bridge1.virtualWrite(V8, 1);
}
BLYNK_READ(V10)
{
Blynk.virtualWrite(V10, humd);
bridge1.virtualWrite(V9, 1);
}
//Luz Externa
BLYNK_WRITE(V11)
{
if(param.asInt() > 0)
{
bridge1.digitalWrite(12, HIGH);
digitalWrite(LLuz, HIGH);
}
else
{
bridge1.digitalWrite(12, LOW);
digitalWrite(LLuz, LOW);
}
}
BLYNK_WRITE(V12)
{
if(param.asDouble() != 0)
{
temp = param.asDouble();
}
}
BLYNK_WRITE(V13)
{
if(param.asDouble() != 0)
{
humd = param.asDouble();
}
}
BLYNK_READ(V15)
{
Blynk.virtualWrite(V15, tempFundo);
bridge2.virtualWrite(V1, 1);
}
BLYNK_READ(V16)
{
Blynk.virtualWrite(V16, humdSolo);
bridge2.virtualWrite(V2, 1);
}
BLYNK_WRITE(V17)
{
if(param.asInt() != 0)
{
Particle.connect();
}
}
BLYNK_WRITE(V18)
{
if(param.asInt() != 0)
{
Particle.disconnect();
}
}
BLYNK_WRITE(V19)
{
if(param.asDouble() != 0)
{
tempFundo = param.asDouble();
}
}
BLYNK_WRITE(V20)
{
if(param.asDouble() != 0)
{
humdSolo = param.asDouble();
}
}
// Temporizadores de algumas funções
void Atualiza()
{
if(alarmeStatus != ALARME_DISPARADO)
{
if(alarmeStatus == ALARME_ATIVADO)
{
lcd.print(0, 0, "Alarme Ligado");
LedAlarme.on();
}
if(alarmeStatus != ALARME_ATIVADO)
{
lcd.print(0, 0, "Alarme Desligado");
LedAlarme.off();
}
if(cercaStatus == CERCA_LIGADA)
{
lcd.print(0, 1, "Cerca Ligada");
LedCerca.on();
}
if(cercaStatus != CERCA_LIGADA)
{
lcd.print(0, 1, "Cerca Desligada");
LedCerca.off();
}
}
else
{
lcd.print(0, 0, "ALARME DISPARADO");
lcd.print(0, 1, "Verificar Camera");
LedDisparo1.on();
LedDisparo2.on();
}
}
void Alerta()
{
if(alarmeStatus == ALARME_DISPARADO)
{
Blynk.notify("Alarme Disparado!");
}
}
void AlertaLed()
{
if(alarmeStatus == ALARME_DISPARADO)
{
PLed = !PLed;
digitalWrite(LStatus, PLed);
}
if(inicio == true)
{
ContIni ++;
PLed = !PLed;
digitalWrite(LStatus, PLed);
}
}
// Loop Principal do Programa
void loop()
{
Blynk.run();
Geral();
wd.checkin();
if(!WiFi.ready())
{
digitalWrite(LStatus, LOW); // Desliga Saída
delay(250);
WiFi.connect();
}
if(WiFi.ready() && !Blynk.connected())
{
PrimeiraBlynk = true;
digitalWrite(LStatus, LOW); // Desliga Saída
delay(250);
Blynk.connect();
}
if(inicio == true)
{
if(ContIni <= 50)
{
if(ContIni <= 1)lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "Home Automotion "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "Particle Photon "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
}
if(ContIni > 50 && ContIni <= 100)
{
if(ContIni <= 51)lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, " By Haltech "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, " Blynk-V2.0 "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
}
if(ContIni > 100)
{
lcd.clear(); //Use it to clear the LCD Widget
ContIni = 0;
inicio = false;
Atualiza();
}
}
else
{
if(BtTrava == false)
{
if(digitalRead(Bot) == LOW)
{
if(digitalRead(LPortao) == LOW)
{
bridge1.virtualWrite(V10, 1);
digitalWrite(LPortao, HIGH);
}
}
else
{
if(digitalRead(LPortao) == HIGH)
{
//bridge1.virtualWrite(V10, 0);
digitalWrite(LPortao, LOW);
}
}
}
}
}
//Rotina Geral do Equipamento
void Geral()
{
if(alarmeStatus != ALARME_DISPARADO && inicio == false) digitalWrite(LStatus, HIGH);
// Tempo de Retorno da Sirene antes de limpar o status
if (LeStatus == HIGH)
{
if ((millis() - UltimoTempoEnvio) > DebounceEnvio)
{
ContadorE_Sirene = 0;
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "Sirene nao resp."); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "Comando. Verific"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
Serial.println("Sirene nao respondeu ao comando.");
Serial.println("Limpando Contador e Status");
SinalStatus = LOW;
ControleAlarme = 0;
ControleCerca = 0;
UltimoTempoEnvio = 0;
BloqSaida = 0;
LeStatus = LOW;
}
}
// Leitura da Porta de Entrada da Sirene
//Verifica se veio o Pulso do Navegador para pulsar o controle do alarme
if (digitalRead(E_Sirene)!= UltimoStatusE_Sirene)
{
UltimoTempoE_Sirene = millis();
}
if ((millis() - UltimoTempoE_Sirene) > DebounceE_Sirene)
{
if (digitalRead(E_Sirene) != StatusE_Sirene)
{
StatusE_Sirene = digitalRead(E_Sirene);
if(StatusE_Sirene == LOW)
{
ContadorE_Sirene++;
Serial.print("Pulso da Sirene:");
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "Pulso da Sirene:"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, ContadorE_Sirene); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
Serial.println(ContadorE_Sirene, DEC);
SinalStatus = HIGH;
TempoSinalAtual = millis();
}
}
}
// Trata Sinal de Entrada, para saber o Status do Alarme
if(SinalStatus == HIGH)
{
if(((millis() - TempoSinalAtual)>= 1000) && ((millis() - TempoSinalAtual)<= 1500)&& (StatusE_Sirene == HIGH))
{
if(ContadorE_Sirene == 1)
{
if(ControleAlarme >= 1)
{
alarmeStatus = ALARME_ATIVADO;
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "Alarme Ligado"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
if(cercaStatus == CERCA_LIGADA) lcd.print(0, 1, "Cerca Ligada");
if(cercaStatus != CERCA_LIGADA) lcd.print(0, 1, "Cerca Desligada");
Serial.println("Alarme Ativado!");
LedAlarme.on();
ControleAlarme = 0;
BloqSaida = 0;
LeStatus = LOW;
}
if(ControleCerca >= 1)
{
cercaStatus = CERCA_LIGADA;
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 1, "Cerca Ligada"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
if(alarmeStatus == ALARME_ATIVADO) lcd.print(0, 0, "Alarme Ligado");
if(alarmeStatus != ALARME_ATIVADO) lcd.print(0, 0, "Alarme Desligado");
Serial.println("Cerca Ligada ");
LedCerca.on();
ControleCerca = 0;
BloqSaida = 0;
LeStatus = LOW;
}
}
if(ContadorE_Sirene == 2)
{
if(ControleAlarme >= 1)
{
alarmeStatus = ALARME_DESATIVADO;
Serial.println("Alarme Desativado!");
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "Alarme Desligado"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
if(cercaStatus == CERCA_LIGADA) lcd.print(0, 1, "Cerca Ligada");
if(cercaStatus != CERCA_LIGADA) lcd.print(0, 1, "Cerca Desligada");
LedDisparo1.off();
LedDisparo2.off();
LedAlarme.off();
ControleAlarme = 0;
BloqSaida = 0;
LeStatus = LOW;
}
if(ControleCerca >= 1)
{
cercaStatus = CERCA_DESLIGADA;
Serial.println("Cerca Desligada!");
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 1, "Cerca Desligada"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
if(alarmeStatus == ALARME_ATIVADO) lcd.print(0, 0, "Alarme Ligado");
if(alarmeStatus != ALARME_ATIVADO) lcd.print(0, 0, "Alarme Desligado");
LedCerca.off(); //LED Virtual no APP
ControleCerca = 0;
BloqSaida = 0;
LeStatus = LOW;
}
}
ContadorE_Sirene = 0;
SinalStatus = LOW;
}
if(((millis() - TempoSinalAtual)> 1500) && ((millis() - TempoSinalAtual)< 5000)&& (StatusE_Sirene == HIGH))
{
ContadorE_Sirene = 0;
BloqSaida = 0;
LeStatus = LOW;
SinalStatus = LOW;
}
if(((millis() - TempoSinalAtual)>= 5000) && (StatusE_Sirene == LOW))
{
Serial.println("Disparado o Alarme");
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "ALARME DISPARADO"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "Verificar Camera"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
Blynk.notify("Alarme Disparado!");
LedAlarme.off();
LedCerca.off();
LedDisparo1.on();
LedDisparo2.on();
alarmeStatus = ALARME_DISPARADO;
cercaStatus = CERCA_DESLIGADA;
ContadorE_Sirene = 0;
SinalStatus = LOW;
BloqSaida = 0;
LeStatus = LOW;
}
}
// Verifica e Trata Controles do Alarme:
if(ControleAlarme == 1 && BloqSaida == 0)
{
MillisAtual = millis();
if(alarmeStatus != ALARME_ATIVADO && alarmeStatus != ALARME_DISPARADO)
{
if(MillisAtual - PrevioMillis > IntervaloNormal)
{
PrevioMillis = MillisAtual;
if (SaidaStatus1 == LOW)
{
Serial.println("Comando Enviado para Ativar Alarme.");
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "COMANDO PARA: "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "ATIVAR ALARME "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
digitalWrite(S_Alarme, HIGH);
SaidaStatus1 = HIGH;
}
else
{
digitalWrite(S_Alarme, LOW);
SaidaStatus1 = LOW;
BloqSaida = 1;
}
}
}
if(alarmeStatus != ALARME_DESATIVADO && alarmeStatus != ALARME_DISPARADO)
{
if(MillisAtual - PrevioMillis > IntervaloNormal)
{
PrevioMillis = MillisAtual;
if (SaidaStatus2 == LOW)
{
Serial.println("Comando Enviado para Desativar Alarme.");
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "COMANDO PARA: "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "DESATIVAR ALARME"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
digitalWrite(S_Alarme, HIGH);
SaidaStatus2 = HIGH;
}
else
{
digitalWrite(S_Alarme, LOW);
SaidaStatus2 = LOW;
BloqSaida = 1;
}
}
}
if(alarmeStatus != ALARME_DESATIVADO && alarmeStatus == ALARME_DISPARADO)
{
if(MillisAtual - PrevioMillis > IntervaloDisparado)
{
PrevioMillis = MillisAtual;
if (SaidaStatus2 == LOW)
{
Serial.println("Comando Enviado para Desativar Alarme.");
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "COMANDO PARA: "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "DESATIVAR GERAL "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
digitalWrite(S_Alarme, HIGH);
SaidaStatus2 = HIGH;
}
else
{
digitalWrite(S_Alarme, LOW);
SaidaStatus2 = LOW;
BloqSaida = 1;
}
}
}
}
if(ControleCerca == 1 && BloqSaida == 0)
{
MillisAtual = millis();
if(cercaStatus != CERCA_LIGADA)
{
if(MillisAtual - PrevioMillis > IntervaloNormal)
{
PrevioMillis = MillisAtual;
if (SaidaStatus3 == LOW)
{
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "COMANDO PARA: "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "ATIVAR CERCA ELE"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
Serial.println("Comando Enviado para Ativar Cerca.");
digitalWrite(S_Cerca, HIGH);
SaidaStatus3 = HIGH;
}
else
{
digitalWrite(S_Cerca, LOW);
SaidaStatus3 = LOW;
BloqSaida = 1;
}
}
}
if(cercaStatus != CERCA_DESLIGADA)
{
if(MillisAtual - PrevioMillis > IntervaloNormal)
{
PrevioMillis = MillisAtual;
if (SaidaStatus4 == LOW)
{
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "COMANDO PARA: "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
lcd.print(0, 1, "DESATIVAR CERCA "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
Serial.println("Comando Enviado para Desativar Cerca.");
digitalWrite(S_Cerca, HIGH);
SaidaStatus4 = HIGH;
}
else
{
digitalWrite(S_Cerca, LOW);
SaidaStatus4 = LOW;
BloqSaida = 1;
}
}
}
}
//Verifica Status da Entrada da Sirene
UltimoStatusE_Sirene = digitalRead(E_Sirene);
//Indica o Estado nos Leds
if (alarmeStatus == ALARME_ATIVADO)
{
digitalWrite(St_Alarme, HIGH);
}
else
{
digitalWrite(St_Alarme, LOW);
}
if (cercaStatus == CERCA_LIGADA)
{
digitalWrite(St_Cerca, HIGH);
}
else
{
digitalWrite(St_Cerca, LOW);
}
}
Second Photon: (Very Simple Code)
#define BLYNK_PRINT Serial
#include "blynk/BlynkSimpleParticle.h"
#include "blynk/blynk.h"
#include "PietteTech_DHT/PietteTech_DHT.h"
#include "SparkFunMAX17043/SparkFunMAX17043.h"
SYSTEM_MODE(SEMI_AUTOMATIC);
SYSTEM_THREAD(ENABLED);
STARTUP(WiFi.selectAntenna(ANT_AUTO));
// system defines
#define DHTTYPE DHT22 // Sensor type DHT11/21/22/AM2301/AM2302
#define DHTPIN 2 // Digital pin for communications
char auth[] = "aaaaaaaaaaaaaaaaa";
int UmidadePin = A0;
long int UmidadeValor = 0;
long int h1 = 0;
float h2 = 0.00;
int LStatus = D7; // Saída Led Status do Equipamento
int result = 0;
bool PrimeiraBlynk = true;
//declaration
void dht_wrapper(); // must be declared before the lib initialization
// Lib instantiate
PietteTech_DHT DHT(DHTPIN, DHTTYPE, dht_wrapper);
ApplicationWatchdog wd(30000, System.reset);
//Canais Virtuais do Blynk
WidgetBridge bridge1(V0); // Canal Virtual da Ponte
WidgetLED led1(V10); //LED Virtual no APP
void setup()
{
// Set up the MAX17043 LiPo fuel gauge:
lipo.begin(); // Initialize the MAX17043 LiPo fuel gauge
// Quick start restarts the MAX17043 in hopes of getting a more accurate
// guess for the SOC.
lipo.quickStart();
// We can set an interrupt to alert when the battery SoC gets too low.
// We can alert at anywhere between 1% - 32%:
lipo.setThreshold(20); // Set alert threshold to 20%.
Serial.begin(115200); // Inicia a Serial
delay(500);
WiFi.on(); // Liga a Módulo WiFi com as credenciais pré definidas
delay(250);
WiFi.connect(); // Conecta à Rede WiFi
pinMode(LStatus, OUTPUT); // Indica que é saída
//pinMode(C, INPUT); // Indica que é saída
digitalWrite(LStatus, HIGH); // Liga Saída
waitUntil(WiFi.ready); // Agaurda conectar a WiFi
digitalWrite(LStatus, LOW); // Liga Saída
Blynk.begin(auth); // Faz Autenticação no Servidor Blynk
digitalWrite(LStatus, LOW); // Desliga Saída
waitUntil(Blynk.connect); // Agaurda Conectar no Servidor Blink
}
// This wrapper is in charge of calling
// must be defined like this for the lib work
void dht_wrapper()
{
DHT.isrCallback();
}
// Rotinas do Blynk
BLYNK_CONNECTED()
{
bridge1.setAuthToken("bbbbbbbbbbbbbbbbbb");
if (PrimeiraBlynk)
{
Blynk.syncAll();
digitalWrite(LStatus, HIGH); // Liga Saída
PrimeiraBlynk = false;
}
}
BLYNK_WRITE(V1)
{
if(param.asInt() > 0)
{
result = DHT.acquireAndWait();
bridge1.virtualWrite(V19, DHT.getCelsius());
Blynk.virtualWrite(V1, 0);
}
}
BLYNK_WRITE(V2)
{
if(param.asInt() > 0)
{
h1 = (map(analogRead(UmidadePin), 4095, 1900, 0, 10000));
h2 = h1;
h2 = h2 / 100;
bridge1.virtualWrite(V20, h2);
Blynk.virtualWrite(V2, 0);
}
}
BLYNK_READ(V3)
{
result = DHT.acquireAndWait();
Blynk.virtualWrite(V3, DHT.getCelsius());
}
BLYNK_READ(V4)
{
h1 = (map(analogRead(UmidadePin), 4095, 1900, 0, 10000));
h2 = h1;
h2 = h2 / 100;
Blynk.virtualWrite(V4, h2);
}
BLYNK_READ(V5)
{
Blynk.virtualWrite(V5, analogRead(UmidadePin));
}
BLYNK_WRITE(V6)
{
if(param.asInt() != 0)
{
Particle.connect();
}
}
BLYNK_WRITE(V7)
{
if(param.asInt() != 0)
{
Particle.disconnect();
digitalWrite(LStatus, LOW); // Desliga Saída
//System.reset();
Blynk.disconnect();
WiFi.disconnect();
}
}
BLYNK_READ(V8)
{
Blynk.virtualWrite(V8, lipo.getVoltage());
if (lipo.getAlert() == false)
{
led1.off();
}
else
{
led1.on();
}
}
BLYNK_READ(V9)
{
Blynk.virtualWrite(V9, lipo.getSOC());
}
void loop()
{
Blynk.run();
wd.checkin();
if(!WiFi.ready())
{
digitalWrite(LStatus, LOW); // Desliga Saída
delay(250);
WiFi.connect();
}
if(WiFi.ready() && !Blynk.connected())
{
PrimeiraBlynk = true;
digitalWrite(LStatus, LOW); // Desliga Saída
delay(250);
Blynk.connect();
}
}
Thank you for the help everyone. I wait a help you.