Nota

Ciao, benvenuto nella Community di Appassionati di SunFounder Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino e ESP32 con altri appassionati.

Perché unirsi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e omaggi: Partecipa a concorsi e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

Sistema di Sicurezza via IFTTT

Con questo progetto, creiamo un dispositivo di sicurezza che utilizza un sensore PIR per rilevare intrusi o animali randagi che entrano nella tua casa. In caso di violazione, riceverai un avviso via email.

Utilizzeremo Webhooks come servizio fondamentale. Una richiesta POST viene inviata al servizio di IFTTT dall’UNO R4.

Componenti necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un intero kit, ecco il link:

Nome

ARTICOLI IN QUESTO KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTI

LINK ACQUISTO

Arduino Uno R4 WiFi

-

Cavi Jumper

ACQUISTA

Modulo Sensore di Movimento PIR

ACQUISTA

Collegamenti

../_images/03-ifttt_pir_bb.png

Schema

../_images/03-ifttt_pir_schematic.png

Configurazione di IFTTT

IFTTT è un servizio gratuito che offre vari metodi per collegare diversi servizi dati tra loro.

Creiamo un Applet che risponde a un webhook (URL personalizzato) inviando dati a IFTTT, che poi ti invierà un’email.

Segui i passaggi seguenti su IFTTT.

  1. Visita IFTTT per accedere o creare un account.

    ../_images/03_ifttt_1.png
  2. Clicca su Create.

    ../_images/03_ifttt_2.png
  3. Aggiungi un evento If This.

    ../_images/03_ifttt_3.png
  4. Cerca Webhooks.

    ../_images/03_ifttt_4.png
  5. Seleziona Receive a web request.

    ../_images/03_ifttt_5.png
  6. Compila il nome dell’evento (es. SecurityWarning) e clicca su Create trigger.

    ../_images/03_ifttt_6.png
  7. Aggiungi un evento Then That.

    ../_images/03_ifttt_7.png
  8. Cerca Email.

    ../_images/03_ifttt_8.png
  9. Scegli Send me an email.

    ../_images/03_ifttt_9.png
  10. Inserisci l”Oggetto e il Corpo, quindi clicca su Create action.

  1. Clicca su Continue per terminare la configurazione.

  1. Regola il nome del titolo se necessario.

  1. Verrai reindirizzato automaticamente alla pagina dei dettagli dell’Applet, dove puoi vedere che l’Applet è attualmente connesso e puoi attivare/disattivare l’interruttore per abilitarlo/disabilitarlo.

  1. Ora che abbiamo creato l’Applet IFTTT, abbiamo anche bisogno della chiave webhooks, che può essere ottenuta da Webhooks Impostazioni per permettere al tuo dispositivo di accedere a IFTTT.

../_images/03_ifttt_14.png
  1. Copia la chiave webhooks in «arduino_secrets.h» e inserisci il tuo SSID e password.

    #define SECRET_SSID "your_ssid"        // your network SSID (name)
    #define SECRET_PASS "your_password"        // your network password (used for WPA, or as a key for WEP)
    #define WEBHOOKS_KEY "your_key"
    

Esegui il codice

Nota

  • Puoi aprire il file 03_ifttt_pir.ino nel percorso elite-explorer-kit-main\iot_project\03_ifttt_pir direttamente.

  • Oppure copia questo codice nell’IDE Arduino.

Nota

Nel codice, SSID e password sono memorizzati in arduino_secrets.h. Prima di caricare questo esempio, devi modificarli con le tue credenziali WiFi. Inoltre, per motivi di sicurezza, assicurati che queste informazioni siano mantenute riservate quando condividi o memorizzi il codice.

Avvertimento

Per evitare che la tua casella di posta venga inondata, ti preghiamo di testare in anticipo il Modulo Sensore di Movimento PIR prima di eseguire il codice per questo progetto.

arduino_secrets.h
#define SECRET_SSID "your_ssid"        // your network SSID (name)
#define SECRET_PASS "your_password"        // your network password (use for WPA, or use as key for WEP)
#define WEBHOOKS_KEY "your_key"
03_ifttt_pir.ino
  1/*
  2  This code is designed to connect an Arduino Uno R4 WiFi board to the internet and detect 
  3  motion using a PIR sensor. Upon detecting motion, it sends an HTTP GET request 
  4  to the IFTTT web service to trigger an event named "SecurityWarning". The code handles 
  5  WiFi connection setup, motion detection, server communication, and provides feedback via 
  6  the serial monitor.
  7
  8  Board: Arduino Uno R4 WiFi
  9  Component: PIR Motion Sensor Module
 10*/
 11
 12#include "WiFiS3.h"           // Include the WiFiS3 library for internet connectivity
 13#include "arduino_secrets.h"  // Include the file containing Wi-Fi credentials
 14
 15// Wi-Fi credentials are stored in arduino_secrets.h
 16char ssid[] = SECRET_SSID;
 17char pass[] = SECRET_PASS;
 18
 19int status = WL_IDLE_STATUS;
 20WiFiClient client;
 21
 22// IFTTT server information and event name
 23char server[] = "maker.ifttt.com";
 24char event[] = "SecurityWarning";
 25String webRequestURL = "/trigger/" + String(event) + "/with/key/" + String(WEBHOOKS_KEY);
 26
 27const int pirPin = 2;         // PIR sensor is connected to digital pin 2
 28bool motionDetected = false;  // Variable to track motion detection
 29
 30void setup() {
 31  Serial.begin(9600);
 32  while (!Serial) {
 33    ;
 34  }
 35
 36  // Check the status of the WiFi module
 37  if (WiFi.status() == WL_NO_MODULE) {
 38    Serial.println("Communication with WiFi module failed!");
 39    while (1)
 40      ;  // Infinite loop to halt further execution
 41  }
 42
 43  // Check if the WiFi firmware is up to date
 44  String fv = WiFi.firmwareVersion();
 45  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
 46    Serial.println("Please upgrade the firmware");
 47  }
 48
 49  // Attempt to connect to the Wi-Fi network
 50  while (status != WL_CONNECTED) {
 51    Serial.print("Attempting to connect to SSID: ");
 52    Serial.println(ssid);
 53    status = WiFi.begin(ssid, pass);
 54  }
 55  printWifiStatus();  // Print the status of the WiFi connection
 56
 57  pinMode(pirPin, INPUT);
 58}
 59
 60void loop() {
 61  readResponse();  // Read and print server response if available
 62
 63  // Check for motion using PIR sensor
 64  if (digitalRead(pirPin) == HIGH) {
 65    if (!motionDetected) {
 66      Serial.println("Motion detected!");
 67      triggerIFTTTEvent();  // Trigger IFTTT notification
 68      motionDetected = true;
 69    }
 70  } else {
 71    motionDetected = false;
 72  }
 73}
 74
 75void readResponse() {
 76  // Read incoming data from the WiFi connection
 77  uint32_t received_data_num = 0;
 78  while (client.available()) {
 79    char c = client.read();
 80    Serial.print(c);
 81    received_data_num++;
 82    if (received_data_num % 80 == 0) {
 83      Serial.println();
 84    }
 85  }
 86}
 87
 88void triggerIFTTTEvent() {
 89  client.stop();  // Terminate any existing connections
 90
 91  // Attempt to connect to the IFTTT server
 92  if (client.connect(server, 80)) {  // If the connection is successful
 93    Serial.println("connecting...");
 94    // Construct and send the HTTP GET request
 95    client.println("GET " + webRequestURL + " HTTP/1.1");
 96    client.println("Host: maker.ifttt.com");
 97    client.println("User-Agent: ArduinoWiFi/1.1");
 98    client.println("Connection: close");
 99    client.println();  // End of HTTP request
100  } else {
101    Serial.println("connection failed");  // Notify if the connection fails
102  }
103}
104
105void printWifiStatus() {
106  // Print the current Wi-Fi status to the serial monitor
107  Serial.print("SSID: ");
108  Serial.println(WiFi.SSID());
109
110  IPAddress ip = WiFi.localIP();
111  Serial.print("IP Address: ");
112  Serial.println(ip);
113
114  long rssi = WiFi.RSSI();
115  Serial.print("Signal Strength (RSSI):");
116  Serial.print(rssi);
117  Serial.println(" dBm");
118}

Come funziona?

  1. Includi le librerie necessarie e i file header:

    • "WiFiS3.h": Utilizzata per gestire le connessioni Wi-Fi.

    • "arduino_secrets.h": Contiene il nome della rete Wi-Fi e la password per proteggere le informazioni sensibili.

  2. Definisci alcune variabili globali e costanti:

    • ssid: Nome della rete Wi-Fi.

    • pass: Password della rete Wi-Fi.

    • status: Stato della connessione Wi-Fi.

    • client: Client utilizzato per comunicare con il server Wi-Fi.

    • server: Indirizzo del server Webhook di IFTTT.

    • event: Nome dell’evento Webhook di IFTTT.

    • webRequestURL: URL costruito per l’invio delle richieste HTTP, incluso il nome dell’evento Webhook e la chiave.

    • pirPin: Pin digitale a cui è collegato il sensore PIR.

    • motionDetected: Variabile flag per monitorare la rilevazione di movimento.

  3. Funzione setup():

    • Inizializza la comunicazione seriale.

    • Verifica la presenza del modulo Wi-Fi e stampa la sua versione firmware.

    • Tenta di connettersi alla rete Wi-Fi, con ritenti in caso di fallimento.

    • Imposta il pin collegato al sensore PIR come input.

  4. Funzione readResponse():

    • Legge i dati di risposta HTTP dal server IFTTT e li stampa sulla console seriale.

  5. Funzione loop():

    • Chiama la funzione readResponse() per leggere i dati di risposta HTTP.

    • Controlla il movimento utilizzando il sensore PIR. Se viene rilevato movimento e non era stato rilevato in precedenza:
      • Stampa «Movimento rilevato!» sulla console.

      • Chiama la funzione triggerIFTTTEvent() per inviare una richiesta HTTP al server IFTTT, attivando l’evento Webhook.

      • Imposta il flag motionDetected su true per indicare che è stato rilevato un movimento.

    • Se non viene rilevato alcun movimento, imposta il flag motionDetected su false.

  6. Funzione triggerIFTTTEvent():

    • Stabilisce una connessione con il server IFTTT.

    • Invia una richiesta HTTP GET, includendo l’URL dell’evento Webhook e altre intestazioni HTTP.

  7. Funzione printWifiStatus():

    • Mostra informazioni sulla rete Wi-Fi connessa, inclusi SSID, indirizzo IP e intensità del segnale (RSSI) sulla console seriale.