/* Includes, defines, const values */
// Includes
#include <ESP8266WiFi.h>
// Used pins
#define PIR_PIN (2U)
#define BUZZER_PIN (3U)
#define LED_PIN (4U)
// WiFi credentials
#define WIFI_SSID "<<wifi_ssid>>"
#define WIFI_PASSWORD "<<wifi_password>>"
// Host IP
#define HOST_IP "<<host_ip>>"
// Define WiFi client - WiFi API
WiFiClient client;
// Global variables
volatile byte alarm_state = LOW;
volatile byte led_state = LOW;
unsigned long alarm_tstamp = 0U;
unsigned long led_tstamp = 0U;
// Function declarations
void set_alarm();
bool msecs_passed(int msecs, unsigned long *tstamp);
/* Arduino setup function */
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(PIR_PIN), set_alarm, RISING);
Serial.begin(9600);
delay(10);
Serial.println();
Serial.print("Connecting to: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to ");
Serial.println(WIFI_SSID);
Serial.println(" successfully!");
}
/* Arduino loop function */
void loop() {
if (alarm_state == HIGH) {
// Flip led every 200 msec so it blinks
if (true == msecs_passed(200, &led_tstamp)){
led_state = !led_state;
digitalWrite(LED_PIN, led_state);
}
// Turn off alarm after 2 seconds
if (true == msecs_passed(2000, &alarm_tstamp)){
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
alarm_state = LOW;
// Send info to host
if (client.connect(HOST_IP, 80)) {
Serial.println("Sending alarm info");
client.println("GET /alarm.php?status=off HTTP/1.1");
client.println("Host: ");
client.println(HOST_IP)
client.println("Connection: close");
client.println();
}
}
}
}
/* Interrupt function */
void set_alarm(){
alarm_state = HIGH;
Serial.println("Alarm triggered!");
// Send info to host
if (client.connect(HOST_IP, 80)) {
Serial.println("Sending alarm info");
client.println("GET /alarm.php?status=on HTTP/1.1");
client.println("Host: ");
client.println(HOST_IP)
client.println("Connection: close");
client.println();
}
// Set timetamps for checking alarm and led
alarm_tstamp = millis();
led_tstamp = millis();
// Turn on buzzer and led
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000);
}
bool msecs_passed(int msecs, unsigned long *tstamp){
bool ret_val = false;
if ((millis() - *tstamp) >= msecs)
{
*tstamp = millis();
ret_val = true;
}
return ret_val;
}Loading
esp-01
esp-01