127 lines
2.1 KiB
C++
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);
|
|
}
|
|
} |