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+ |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTI |
LINK ACQUISTO |
|---|---|
- |
|
Collegamenti
Schema
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.
Visita IFTTT per accedere o creare un account.
Clicca su Create.
Aggiungi un evento If This.
Cerca Webhooks.
Seleziona Receive a web request.
Compila il nome dell’evento (es. SecurityWarning) e clicca su Create trigger.
Aggiungi un evento Then That.
Cerca Email.
Scegli Send me an email.
Inserisci l”Oggetto e il Corpo, quindi clicca su Create action.
Clicca su Continue per terminare la configurazione.
Regola il nome del titolo se necessario.
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.
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.
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.inonel percorsoelite-explorer-kit-main\iot_project\03_ifttt_pirdirettamente.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.
#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"
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?
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.
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.
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.
Funzione
readResponse():Legge i dati di risposta HTTP dal server IFTTT e li stampa sulla console seriale.
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
motionDetectedsutrueper indicare che è stato rilevato un movimento.
Se non viene rilevato alcun movimento, imposta il flag
motionDetectedsufalse.
Funzione
triggerIFTTTEvent():Stabilisce una connessione con il server IFTTT.
Invia una richiesta HTTP GET, includendo l’URL dell’evento Webhook e altre intestazioni HTTP.
Funzione
printWifiStatus():Mostra informazioni sulla rete Wi-Fi connessa, inclusi SSID, indirizzo IP e intensità del segnale (RSSI) sulla console seriale.