====== 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.
{{:en:iot:examples:homesecurity.jpg?300|}}
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
#include
#include
#include
#include
#include
// 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
#include
// 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;
}
}
}