version flota
This commit is contained in:
commit
28ff4db3bd
|
@ -0,0 +1,175 @@
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <WiFiClientSecure.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
#include <WiFiEsp.h>
|
||||||
|
#include <WiFiEspClient.h>
|
||||||
|
#include <PubSubClient.h>
|
||||||
|
#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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue