Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Base de proyectos
- */
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- #include <TinyGPS++.h>
- #include <SoftwareSerial.h>
- #define usuarioServidorMQTT "upbpnxzc" // usuario para acceder al broker
- #define claveServidorMQTT "OSPLsP4Gq96a" // clave del usuario para acceder al broker
- #define servidorMQTT "m11.cloudmqtt.com"
- #define puertoMQTT 14224
- #define topicoActualizacion "/update"
- #define topicoConexion "/conection" //topico que utilizara la opción de birth de mqtt
- #define mensajeConexion "1"
- #define mensajeDesconexion "0"
- #define ledAlarma D3
- WiFiClient clienteWifi;
- PubSubClient client(clienteWifi);
- int inputPin = D2; // choose the input pin (for PIR sensor)
- int pirState = LOW; // we start, assuming no motion detected
- int val = 0; // variable for reading the pin status
- const char* clienteMQTT = "HackerspaceX";
- static const int RXPin = D5, TXPin = D6;
- static const uint32_t GPSBaud = 9600;
- boolean estadoLed = true;
- boolean parpadeoLed = false;
- long contadorLed;
- long contadorLed2;
- int tiempoParpadeo = 500;
- // The TinyGPS++ object
- TinyGPSPlus gps;
- SoftwareSerial ss(RXPin, TXPin)
- void callback(char* topic, byte* payload, unsigned int length) {
- // handle message arrived
- Serial.println("mensaje entrante");
- Serial.println(topic);
- if (String(topic) == "/alarmaOn") {
- Serial.println("activando alarma");
- parpadeoLed = true;
- }
- if (String(topic) == "/alarmaOff") {
- digitalWrite(ledAlarma,LOW);
- Serial.println("desactivando alarma");
- parpadeoLed = false;
- }
- }
- long lastReconnectAttempt = 0;
- boolean reconnect() {
- if (client.connect(clienteMQTT, usuarioServidorMQTT, claveServidorMQTT, topicoConexion, 2, 1, mensajeDesconexion)) {
- client.subscribe(topicoActualizacion);
- client.subscribe("/alarmaOn");
- client.subscribe("/alarmaOff");
- client.subscribe(topicoActualizacion);
- client.publish(topicoConexion, mensajeConexion);
- }
- return client.connected();
- }
- void setup()
- {
- pinMode(inputPin, INPUT); // declare sensor as input
- Serial.begin(115200);
- ss.begin(GPSBaud);
- delay(2000);
- pinMode(ledAlarma, OUTPUT);
- pinMode(LED_BUILTIN, OUTPUT);
- digitalWrite(ledAlarma, HIGH);
- delay(1000);
- digitalWrite(ledAlarma, LOW);
- delay(1000);
- WiFi.begin("HUAWEI P10 1", "cokin124");
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- Serial.println("iniciando program " );
- client.setServer(servidorMQTT, puertoMQTT);
- client.setCallback(callback);
- lastReconnectAttempt = 0;
- }
- void loop()
- {
- if (!client.connected()) {
- long now = millis();
- if (now - lastReconnectAttempt > 5000) {
- lastReconnectAttempt = now;
- // Attempt to reconnect
- if (reconnect()) {
- lastReconnectAttempt = 0;
- }
- }
- } else {
- client.loop();
- while (ss.available() > 0)
- if (gps.encode(ss.read()))
- displayInfo();
- if (millis() > 5000 && gps.charsProcessed() < 10)
- {
- Serial.println(F("GPS no detectado, revisar cableado."));
- while (true);
- }
- val = digitalRead(inputPin); // read input value
- if (val == HIGH) { // check if the input is HIGH
- digitalWrite(LED_BUILTIN, HIGH); // turn LED ON
- if (pirState == LOW) {
- // we have just turned on
- Serial.println("Motion detected!");
- client.publish("/movimiento", "movimiento detectado ");
- // We only want to print on the output change, not state
- pirState = HIGH;
- }
- } else {
- digitalWrite(LED_BUILTIN, LOW); // turn LED OFF
- if (pirState == HIGH) {
- // we have just turned of
- Serial.println("Motion ended!");
- client.publish("/movimiento", "movimiento terminado");
- // We only want to print on the output change, not state
- pirState = LOW;
- }
- }
- }
- }
- void displayInfo()
- {
- Serial.print(F("Localización: "));
- if (gps.location.isValid())
- {
- Serial.print(gps.location.lat(), 6);
- Serial.print(F(","));
- Serial.println(gps.location.lng(), 6);
- String localizacion = String(gps.location.lat(), 6) + ',' + String(gps.location.lng(), 6);
- char dato[localizacion.length() + 1];
- localizacion.toCharArray(dato, localizacion.length());
- client.publish("/gps", dato);
- }
- else
- {
- Serial.println(F("INVALIDO"));
- client.publish("/gps", "sin señal");
- }
- contadorLed = millis();
- if (contadorLed - contadorLed2 > tiempoParpadeo && parpadeoLed == true) {
- contadorLed2 = contadorLed;
- Serial.println(estadoLed);
- digitalWrite(ledAlarma, estadoLed);
- estadoLed = !estadoLed;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement