DomoEsp_v2.0/DomoEspSensorExt/DomoEspSensorExt.ino

127 lines
2.1 KiB
C++

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include "Ctimer.h"
HTTPClient http;
WiFiClient wifiClient;
char ssidWifi[24];//nombre wifi al que conectar
char keyWifi[32];//key wifi a conectar
char bufAux[32];//key wifi a conectar
String ideEsp;//identificador unico por esp
String hostMQTT;
Ctimer tReporte;
bool enviaData=false;
int DataSensor=0;
bool sensorIn=false;
int PinSensor;
void configuracion()
{
strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi
hostMQTT="192.168.2.50";//servidor mqttBroker
strcpy(ssidWifi,"IdhunAux");//nombre wifi
ideEsp="Esp_ext_01";//idenitificador del esp (sera único)
tReporte.set(60);
sensorIn=false;
PinSensor=5;
}
bool conectaWifi()
{
if(WiFi.status() == WL_CONNECTED)
return true;
Serial.print("Conectando wifi");
WiFi.begin(ssidWifi, keyWifi);
int i=0;
while(WiFi.status() != WL_CONNECTED) {
i++;
delay(1000);
Serial.print(".");
if(i>20)
{
Serial.println("Error conexion wifi");
return false;
}
}
Serial.println("Conectado");
return true;
}
int EnviaPost(char *data)
{
String URL = hostMQTT+"/"+ideEsp;
http.begin(wifiClient, URL);
http.addHeader("Content-Type", "text/plain");
http.POST(data);
String payload = http.getString();
Serial.println(payload);
http.end();
return payload.toInt();
}
bool leeSensor()
{
int val=digitalRead(PinSensor);
bool result=val!=DataSensor;
DataSensor=result;
return result;
}
void reinicia()
{
ESP.wdtEnable(1);
int i=0;
while(i<60){
i++;
delay(1000);
};
}
void SetSensor(int val)
{
digitalWrite(PinSensor, val);
DataSensor=val;
}
char* GetData()
{
sprintf(bufAux, "%d", DataSensor);
return bufAux;
}
void setup() {
Serial.begin(115200);
configuracion();
tReporte.inicia();
}
void loop()
{
bool envia=false;
if(sensorIn)
envia = envia|| leeSensor();
envia = envia|| tReporte.onTimerReset();
if(envia)
{
if(!conectaWifi())
{
reinicia();
}
int resul=EnviaPost(GetData());
if(!sensorIn)
SetSensor(resul);
}
}