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