commit 28ff4db3bd491a95224523bb2d36cf031e4598f6 Author: Felipe Meneses <16-11311@usb.ve> Date: Fri Apr 16 08:38:02 2021 -0400 version flota diff --git a/proyecto_flota/proyecto_flota.ino b/proyecto_flota/proyecto_flota.ino new file mode 100644 index 0000000..332a176 --- /dev/null +++ b/proyecto_flota/proyecto_flota.ino @@ -0,0 +1,175 @@ +#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 ); + } + } +}