#include #include #include #include #include #include #include "SoftwareSerial.h" // mi red de wifi, que en dado caso será la red de wifi de la empresa #define WIFI_ "familia meneses" #define WIFI_PASSWORD "pibo182221" //Nombre o IP del servidor mosquitto char server[100] = "192.168.0.180"; //Conexión serial para el esp con una comunicación //serial, pines 15: rx y 16: tx SoftwareSerial soft(15, 16); //Contador para el envio de datos unsigned long lastSend; int status = WL_IDLE_STATUS; //Iniciamos el objeto subscriptor del cliente //con el objeto del cliente PubSubClient client(espClient); //se Inicializa el objeto de cliente esp WiFiEspClient espClient; // El nomnbre se obtiene en la pagina principal del software #define ID_Flota "Flota_ID" WiFiClientSecure client; const int sensorPIR = 17; // Pin donde está conectada la entrada del sensor PIR const int luz = 11;// Pin para luz de led. int conteo = 0; String mensaje = ""; String conteoString = ""; int PIR = 0; ////Setup//// void setup() { //Inicializamos la comunicación serial para el log Serial.begin(115200); //Iniciamos la conexión a la red WiFi InitWiFi(); //Colocamos la referencia del servidor y el puerto client.setServer( server, 1883 ); lastSend = 0; //Se activa el resistor de PULLUP para la entrada sensor PIR pinMode(sensorPIR, INPUT_PULLUP); pinMode(luz, OUTPUT); pinMode(sensorPIR, INPUT_PULLUP); pinMode(luz, OUTPUT); // Intenta conectarse a la red Wifi: Serial.print("Se conectara a la red wifi... "); Serial.println(WIFI_); //Seteo de la red Wifi WiFi.mode(WIFI_STA); WiFi.begin(WIFI_, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(700); } Serial.println(""); Serial.println("Conectado a la red wifi!!!"); Serial.print("Dirección mac: "); Serial.println(WiFi.macAddress(mac));//Imprimimos la mac de la flota bot.sendMessage(ID_Chat, "Flota saliendo!!!", "");//Enviamos un mensaje al software que va saliendo la flota } void loop() { //Validamos si el modulo WiFi aun esta conectado a la red status = WiFi.status(); if(status != WL_CONNECTED) { //Si falla la conexión, reconectamos el modulo reconnectWifi(); } //Validamos si esta la conexión del servidor if(!client.connected() ) { //Si falla reintentamos la conexión reconnectClient(); } //Creamos un contador para enviar la data cada 2 segundos if(millis() - lastSend > 2000 ) { sendDataTopic(); lastSend = millis(); } client.loop(); } PIR = digitalRead(sensorPIR);//se lee el estado del sensor PIR //Si es igual a "1" se cumple la condición if(PIR == 1){ digitalWrite(luz, HIGH);//Encendemos la luz Serial.println("Esta saliendo una flota!"); conteo = conteo + 1;//Incremento en el contador de movimientos detectados conteoString = String(conteo);//se convierte una cadena mensaje = "Movimiento detectados: " + conteoString;//Concatenamos ambas cadenas delay(5000);//mantensmos la luz encendida este tiempo digitalWrite(luz, LOW);//Luego la apagamos Serial.println("Luz apagada!"); PIR = 0;//Asignamos el valor "0" a la variable PIR para que deje de cumplirse la condición } } void sendDataTopic() { Serial.println("sendDataTopic"); // Preparandose la flota String payload = "Hola desde la flota"; // enviar char attributes[100]; payload.toCharArray( attributes, 100 ); client.publish( "outTopic", attributes ); Serial.println( attributes ); } //Inicializamos la conexión a la red wifi void InitWiFi() { //Inicializamos el puerto serial soft.begin(9600); //Iniciamos la conexión wifi WiFi.init(&soft); //Verificamos si se pudo realizar la conexión al wifi //si obtenemos un error, lo mostramos por log y denememos el programa if (WiFi.status() == WL_NO_SHIELD) { Serial.println("El modulo WiFi no esta presente"); while (true); } reconnectWifi(); } void reconnectWifi() { Serial.println("Iniciar conección a la red WIFI"); while(status != WL_CONNECTED) { Serial.print("Intentando conectarse a SSID: "); Serial.println(WIFI_); //Conectar a red WPA/WPA2 status = WiFi.begin(WIFI_, WIFI_PASSWORD); delay(500); } Serial.println("Conectado a la red WIFI"); } void reconnectClient() { //Creamos un loop en donde intentamos hacer la conexión while(!client.connected()) { Serial.print("Conectando a: "); Serial.println(server); //se Crea una nueva cadena de conexión para el servidor //e intentamos realizar la conexión nueva //si la flota no esta registrada se tendra que registar String clientId = "ESPClient-" + String(random(0xffff), HEX); if(client.connect(clientId.c_str())) { Serial.println("[DONE]"); } else { Serial.print( "[FAILED] [ rc = " ); Serial.print( client.state() ); Serial.println( " : volver a intentar 5 segundos ]" ); delay( 5000 ); } } }