Koduturbe näide

See näide demonstreerib, kuidas ehitada koduturvasüsteemi ITT IoT komplekti abil. Selle näite loomiseks on vaja kahte kontrolleri moodulit. Kinnitage PIR-moodul ühe kontrolleri külge ning OLED ja sumisti moodulid teise külge.

PIR kontrolleri programm avaldab “Liikumine tuvastatud” ja “Midagi ei tuvastatud” sõnumeid teemal “security” kui see on aktiveeritud. Mooduli aktiveerimiseks saatke teemal “ESP53/pir” sõnum “1”. Deaktiveerimiseks saatke “0”. Vaikeväärtus on “0”. PIR-mooduli punane LED alati näitab liikumise tuvastamisel.

OLED-kontroller kuvab need sõnumid. See prindib välja kõik, mida ta teemal “security” saab. Kui saadud sõnum on “Liikumine tuvastatud!”, aktiveerib see sumisti üheks sekundiks.

Järgmine on kood kontrollerile OLED ja sumistiga. Vajalikud teegid:

lib_deps = ITTIoT, Adafruit GFX Library, Adafruit SSD1306 Wemos Mini OLED, adafruit/Adafruit BusIO
// Lisab globaalmuutujad ja teegid, mida OLED-ekraan ja sumisti kasutavad
#include <Arduino.h>
#include <ittiot.h>
#include <Ticker.h>
#include <Adafruit_I2CDevice.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
// Muutke vastavalt PIR-sõlme tegelikule nimele
#define PIR_TOPIC "ESP30"
#define WIFI_NAME "name"
#define WIFI_PASSWORD "password"
 
// OLED-i lähtestusnupp on GPIO0
#define OLED_RESET 0  // GPIO0
 
// Looge objekt OLED-ekraani jaoks
Adafruit_SSD1306 display(OLED_RESET);
 
//Sumisti pin määratlus
#define BUZZER_PIN D8
 
// See prindib välja kõik, mida ta teemal "security" saab.
// Kui saadud sõnum on "Liikumine tuvastatud!", aktiveerib see sumisti üheks sekundiks.
void iot_received(String topic, String msg)
{
  display.clearDisplay(); // tühjendab ekraani
  display.setTextSize(1); // määrab teksti suuruse ekraanil
  display.setTextColor(WHITE); // määrab teksti värviks valge
  display.setCursor(0,0); // määrab teksti alguspositsiooni
  display.println(msg); // kuvab saadud sõnumi ekraanil
  display.display(); // kuvab uue ekraani väljundi
 
  if(msg=="Liikumine tuvastatud!") //kui liikumine on tuvastatud, siis kõlab sumisti
  {
    analogWrite(BUZZER_PIN, 512); // seadistab sumisti väljundi mingile väärtusele
    delay(1000); // ootab 1 sekund
    analogWrite(BUZZER_PIN, 0); // lülitab sumisti välja
    digitalWrite(BUZZER_PIN, LOW);
  }
}
 
// Funktsioon käivitatakse pärast ühenduse loomist serveriga.
void iot_connected()
{
  // Saadab teate serial pordi kaudu, et näidata ühenduse loomist
  Serial.println("MQTT connected callback");
  // Saadab teate MQTT serverisse, et näidata ühenduse loomist
  iot.log("IoT koduturbe näide!");
  // Tellib turvasõnumite saamiseks
  iot.subscribe(PIR_TOPIC"/security");
}
 
void setup()
{
  // Initsialiseerib serial pordi ja saadab teate
  Serial.begin(115200); // määrab serial ühenduse parameetri
  Serial.println("Booting");
 
  // Initsialiseerib I2C aadressiga 0x3C (64x48 jaoks)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 
  // Kuvab OLED-ekraanil "booting..." teate
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Booting...");
  display.display();
 
  //iot.setConfig("wname", WIFI_NAME);
  //iot.setConfig("wpass", WIFI_PASSWORD);
  iot.printConfig();  // prindib IoT json konfiguratsiooni serial pordi kaudu
  iot.setup(); // Initsialiseerib IoT teegi
 
  // Initsialiseerib sumisti pinni
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, LOW);
}
 
void loop()
{
  iot.handle(); // IoT taustatöö, seda tuleks perioodiliselt kutsuda
  delay(200); // Ootab 0.2 sekundit
}

Järgmine on PIR-mooduli kontrolleri programmikood.

lib_deps = ITTIoT
// Lisab globaalmuutujad ja teegid, mida PIR kasutab
#include <Arduino.h>
#include <ittiot.h>
 
// Muutke vastavalt PIR IoT mooduli tegelikule nimele
#define MODULE_TOPIC "ESP30"
#define WIFI_NAME "name"
#define WIFI_PASSWORD "password"
 
//PIR pinni määratlus (GPIO14)
#define PIR_PIN D5
//PIR LED pinni määratlus (GPIO16)
#define PIR_LED_PIN D4
 
// PIR olek tuvastamiseks. Kasutatakse lülitina
bool pirState;
// Olek, mis lülitab PIR-i sisse ja välja. Vaikimisi on see väljas
bool onState=0;
 
// Kui sõnum on saadud, lülitage PIR moodul VÄLJA või SISSE
void iot_received(String topic, String msg)
{
  Serial.print("MSG FROM USER callback, topic: ");
  Serial.print(topic);
  Serial.print(" payload: ");
  Serial.println(msg);
 
  if(topic == MODULE_TOPIC"/pir")
  {
    if(msg == "1")
    {
      // PIR lülitatakse sisse ja sõnum "PIR online" saadetakse OLED- ja sumistimoodulile
      onState = true; // PIR aktiveeritakse
      String msg = String("PIR online");
      iot.publishMsg("security", msg.c_str());
    }
 
    if(msg == "0")
    {
      // PIR lülitatakse välja ja sõnum "PIR offline" saadetakse OLED- ja sumistimoodulile
      onState = false; // PIR deaktiveeritakse
      String msg = String("PIR offline");
      iot.publishMsg("security", msg.c_str());
    }
  }
}
 
// Funktsioon käivitatakse pärast ühenduse loomist serveriga.
void iot_connected()
{
  Serial.println("MQTT connected callback");
  // Tellib teema "pir"
  iot.subscribe(MODULE_TOPIC"/pir");
  iot.log("IoT PIR näide!");
}
 
void setup()
{
  // Initsialiseerib serial pordi ja saadab teate
  Serial.begin(115200); // määrab serial ühenduse parameetri
  Serial.println("Booting");
 
  //iot.setConfig("wname", WIFI_NAME);
  //iot.setConfig("wpass", WIFI_PASSWORD);
  iot.printConfig(); // prindib json konfiguratsiooni serial pordi kaudu
  iot.setup(); // Initsialiseerib IoT teegi
 
  // Initsialiseerib PIR pinni
  pinMode(PIR_PIN, INPUT);
  pinMode(PIR_LED_PIN, OUTPUT);
}
 
void loop()
{
  iot.handle(); // IoT taustatöö, seda tuleks perioodiliselt kutsuda
  delay(100); // Ootab 0.1 sekundit
 
  // Loeb PIR sensori pinni
  if(digitalRead(PIR_PIN))
  {
    if(pirState == false)
    {
      // Lülitab sisse PIR punase LED-i
      digitalWrite(PIR_LED_PIN, HIGH);
      // Kui sensor on aktiveeritud, saadab sõnumi MQTT serverisse
      if(onState == true)
      {
        String msg = String("Liikumine tuvastatud!");
        iot.publishMsg("security", msg.c_str());
      }
      pirState = true;
    }
  }
  else
  {
    if(pirState == true)
    {
      // Lülitab välja PIR punase LED-i
      digitalWrite(PIR_LED_PIN, LOW);
      // Kui sensor on aktiveeritud, saadab sõnumi MQTT serverisse
      if(onState == true)
      {
        String msg = String("Midagi ei tuvastatud!");
        iot.publishMsg("security", msg.c_str());
      }
      pirState = false;
    }
  }
}