#include #include //-------------------VARIABLES GLOBALES-------------------------- int contconexion = 0; const char *ssid = "LA CASA DEL MUSICO"; const char *password = "chichorevilla2018"; char SERVER[50] = "m16.cloudmqtt.com"; int SERVERPORT = 16196; // Es el solo PORT de la cuenta String USERNAME = "placa1"; //"zksmmgxo"; char PASSWORD[50] = "12345678"; //"W7WBuDzsd01D"; unsigned long previousMillis = 0; char charPulsador [15]; String strPulsador; String strTexto; String strPulsadorUltimo; char PLACA[50]; char valueStr[15]; String strtemp = ""; char TEMPERATURA[50]; char PULSADOR[50]; char SALIDADIGITAL[50]; char SALIDAANALOGICA[50]; bool pulsador_ant; bool estado_led; #define pin_relay 3 #define pin_boton 0 //-------------------------------------------------------------- WiFiClient espClient; PubSubClient client(espClient); //------------------------CALLBACK------------------------------ void callback(char* topic, byte* payload, unsigned int length) { char PAYLOAD[5] = " "; for (int i = 0; i < length; i++) { PAYLOAD[i] = (char)payload[i]; } if (String(topic) == String(SALIDADIGITAL)) { if (payload[1] == 'N'){ digitalWrite(pin_relay, HIGH); estado_led = HIGH; strTexto = "Consumiendo"; strTexto.toCharArray(valueStr, 15); client.publish(SALIDAANALOGICA, valueStr); } if (payload[1] == 'F'){ digitalWrite(pin_relay, LOW); estado_led = LOW; strTexto = "No Consume "; strTexto.toCharArray(valueStr, 15); client.publish(SALIDAANALOGICA, valueStr); } } } //------------------------RECONNECT----------------------------- void reconnect() { uint8_t retries = 3; // Loop hasta que estamos conectados while (!client.connected()) { // Crea un ID de cliente al azar String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect USERNAME.toCharArray(PLACA, 50); if (client.connect("", PLACA, PASSWORD)) { client.subscribe(SALIDADIGITAL); client.subscribe(SALIDAANALOGICA); } else { // espera 5 segundos antes de reintentar delay(5000); } retries--; if (retries == 0) { // esperar a que el WDT lo reinicie while (1); } } } //------------------------SETUP----------------------------- void setup() { pinMode(13, OUTPUT); // D7 salida analógica analogWrite(13, 0); // analogWrite(pin, value); pinMode(pin_relay, FUNCTION_3); pinMode(pin_relay, OUTPUT); // D6 salida digital digitalWrite(pin_relay, LOW); // Entradas pinMode(14, INPUT); // D5 pinMode(pin_boton, INPUT); // D0 // Conexión WIFI WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED and contconexion <50) { //Cuenta hasta 50 si no se puede conectar lo cancela ++contconexion; delay(500); } if (contconexion <50) { IPAddress ip(192,168,1,198); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); WiFi.config(ip, gateway, subnet); } else { } client.setServer(SERVER, SERVERPORT); client.setCallback(callback); String temperatura = "/" + USERNAME + "/" + "temperatura"; temperatura.toCharArray(TEMPERATURA, 50); String pulsador = "/" + USERNAME + "/" + "pulsador"; pulsador.toCharArray(PULSADOR, 50); String salidaDigital = "/" + USERNAME + "/" + "salida"; salidaDigital.toCharArray(SALIDADIGITAL, 50); String salidaAnalogica = "/" + USERNAME + "/" + "salidaAnalogica"; salidaAnalogica.toCharArray(SALIDAANALOGICA, 50); } //--------------------------LOOP-------------------------------- void loop() { if (!client.connected()) { reconnect(); } client.loop(); unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= 10000) { //envia la temperatura cada 10 segundos previousMillis = currentMillis; int analog = analogRead(17); float temp = analog*0.322265625; strtemp = String(temp, 1); //1 decimal strtemp.toCharArray(valueStr, 15); client.publish(TEMPERATURA, valueStr); } if (pulsador_ant!=digitalRead(pin_boton)){ pulsador_ant = digitalRead(pin_boton); if(digitalRead(pin_boton)==LOW){ delay(200); if(digitalRead(pin_boton)==LOW){ if (estado_led){ strPulsador = "OFF"; estado_led = LOW; } else { strPulsador = "ON"; estado_led = HIGH; } } } } if (strPulsador != strPulsadorUltimo) { //envia el estado del pulsador solamente cuando cambia. strPulsadorUltimo = strPulsador; strPulsador.toCharArray(valueStr, 15); client.publish(SALIDADIGITAL, valueStr); } }