Nota

Ciao, benvenuti nella Comunità degli Appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci la tua conoscenza di Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.

Perché unirsi?

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

  • Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

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

  • Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Regali: Partecipa a regali e promozioni festive.

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

Lezione 49: Sistema di Allerta Vibrazioni con IFTTT

Questo progetto implementa un sistema di rilevamento vibrazioni usando una scheda Arduino (Uno R4 o R3) con un modulo ESP8266 e un sensore di vibrazione (SW-420). Quando viene rilevata una vibrazione, il sistema invia una richiesta HTTP a un server IFTTT, potenzialmente innescando varie azioni come l’invio di una notifica o di un’email.

Per evitare allarmi eccessivi in un breve lasso di tempo, il sistema è stato programmato per inviare queste richieste HTTP con un intervallo minimo di 2 minuti (120000 millisecondi). Questo intervallo può essere regolato in base alle esigenze dell’utente.

Componenti Necessari

Per questo progetto, abbiamo bisogno dei seguenti componenti.

È decisamente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

Puoi anche acquistarli separatamente dai link sottostanti.

Introduzione ai Componenti

Link di Acquisto

Arduino UNO R3 o R4

ACQUISTA

Breadboard

ACQUISTA

Modulo ESP8266

-

Modulo Sensore di Vibrazione (SW-420)

-

Cablaggio

../_images/Lesson_49_Iot_vibration_alert_system_uno_bb.png

Configurazione IFTTT

IFTTT è un’azienda commerciale privata fondata nel 2011 che gestisce piattaforme digitali di automazione online che offre come servizio. Le loro piattaforme forniscono un’interfaccia visuale per realizzare if statement inter-platform ai suoi utenti, che, nel 2020, ammontavano a 18 milioni di persone.

../_images/04-ifttt_intro.png

IFTTT sta per «If This Then That» (Se questo allora quello). Fondamentalmente, se determinate condizioni sono soddisfatte, allora qualcos’altro accadrà. La parte «if this» è chiamata trigger, e la parte «then that» è chiamata azione. Collega dispositivi smart per la casa, social media, app di consegna e altro ancora per eseguire compiti automatizzati.

../_images/04-ifttt_intro_2A.png

1) Registrati su IFTTT

Digita «https://ifttt.com» nel tuo browser e clicca sul pulsante «Get started» situato al centro della pagina. Compila il modulo con le tue informazioni per creare un account.

../_images/04-ifttt_signup.png

Clicca «Indietro» per uscire dalla guida rapida, torna alla homepage di IFTTT, aggiorna la pagina e accedi di nuovo.

../_images/04-ifttt_signup_2.png

2) Creazione dell’Applet

Clicca «Crea» per iniziare a creare l’Applet.

../_images/04-ifttt_create_applet_1_shadow.png

Se questo trigger

Clicca «Aggiungi» accanto a «Se questo» per aggiungere un trigger.

../_images/04-ifttt_create_applet_2_shadow.png

Cerca «webhook» e clicca su «Webhooks».

../_images/04-ifttt_create_applet_3_shadow.png

Clicca su «Ricevi una richiesta web» nella pagina mostrata nell’immagine seguente.

../_images/04-ifttt_create_applet_4_shadow.png

Imposta il «Nome dell’Evento» su «vibration_detected».

../_images/04-ifttt_create_applet_5_shadow.png

Quindi quell’azione

Clicca su «Aggiungi» accanto a «Quindi quello» per aggiungere un’azione.

../_images/04-ifttt_create_applet_6_shadow.png

Cerca «email» e clicca su «Email».

../_images/04-ifttt_create_applet_7_shadow.png

Clicca su «Inviami una email» nella pagina mostrata nell’immagine seguente.

../_images/04-ifttt_create_applet_8_shadow.png

Imposta il soggetto e il contenuto dell’email da inviare quando viene rilevata una vibrazione.

Come riferimento, il soggetto è impostato su «[ESP-01] Rilevata vibrazione!!!», e il contenuto è impostato su «Rilevata vibrazione, si prega di confermare la situazione prontamente! {{OccurredAt}}». Quando si invia un’email, {{OccurredAt}} verrà automaticamente sostituito con l’orario in cui si è verificato l’evento.

../_images/04-ifttt_create_applet_9_shadow.png

Seguendo i passaggi successivi, completa la creazione dell’Applet.

../_images/04-ifttt_create_applet_10_shadow.png ../_images/04-ifttt_create_applet_11_shadow.png ../_images/04-ifttt_create_applet_12_shadow.png

Codice

  1. Apri il file Lesson_49_Vibration_alert_system.ino nel percorso universal-maker-sensor-kit\arduino_uno\Lesson_49_Vibration_alert_system, o copia questo codice nell”Arduino IDE.

  2. Devi inserire il mySSID e il myPWD del WiFi che stai utilizzando.

    String mySSID = "your_ssid";     // SSID WiFi
    String myPWD = "your_password";  // Password WiFi
    
  3. Devi anche modificare il URL con il nome dell’evento che hai impostato e la tua chiave API.

    String URL = "/trigger/vibration_detected/with/key/xxxxxxxxxxxxxxxxxx";
    
    ../_images/04-ifttt_apikey_1_shadow.png ../_images/04-ifttt_apikey_2_shadow.png

    Qui puoi trovare la tua unica CHIAVE API che devi mantenere privata. Digita il nome dell’evento come vibration_detected. Il tuo URL finale apparirà in fondo alla pagina web. Copia questo URL.

    ../_images/04-ifttt_apikey_3_shadow.png ../_images/04-ifttt_apikey_4_shadow.png
  4. Dopo aver selezionato la scheda corretta e la porta, clicca sul pulsante Upload.

  5. Apri il monitor seriale (imposta il baudrate a 9600) e attendi un prompt come una connessione riuscita che appaia.

    ../_images/04-ready_shadow.png

Analisi del Codice

Il modulo ESP8266 incluso nel kit è già pre-programmato con il firmware AT. Pertanto, il modulo ESP8266 può essere controllato attraverso comandi AT. In questo progetto, utilizziamo la serializzazione software per abilitare la comunicazione tra la scheda Arduino Uno e il modulo ESP8266. La scheda Arduino Uno invia comandi AT al modulo ESP8266 per la connessione di rete e l’invio di richieste. Puoi fare riferimento a Set di istruzioni AT per ESP8266.

La scheda Uno legge i valori dei sensori e invia comandi AT al modulo ESP8266. Il modulo ESP8266 si connette a una rete e invia richieste ai server IFTTT.

  1. Includi la libreria SoftwareSerial per la comunicazione seriale tra Arduino e ESP8266

    #include <SoftwareSerial.h>
    SoftwareSerial espSerial(2, 3);
    
  2. Configura le credenziali WiFi e i dettagli del server IFTTT

    String mySSID = "your_ssid";
    String myPWD = "your_password";
    String myHOST = "maker.ifttt.com";
    String myPORT = "80";
    String URL = "/trigger/xxx/with/key/xxxx";
    
  3. Definisci le variabili per il sensore di vibrazione e il controllo della frequenza di allerta

    unsigned long lastAlertTime = 0;
    const unsigned long postingInterval = 120000L;
    const int sensorPin = 7;
    
  4. In setup(), inizializza la comunicazione seriale, il modulo ESP8266 e connettiti al WiFi

    void setup() {
      Serial.begin(9600);
      espSerial.begin(115200);
    
      // Inizializza il modulo ESP8266
      sendATCommand("AT+RST", 1000, DEBUG);   //Resetta il modulo ESP8266
      sendATCommand("AT+CWMODE=1", 1000, DEBUG);  //Imposta la modalità ESP come modalità stazione
      sendATCommand("AT+CWJAP=\"" + mySSID + "\",\"" + myPWD + "\"", 3000, DEBUG);  //Connettiti alla rete WiFi
    
      while (!espSerial.find("OK")) {
        //Aspetta la connessione
      }
    }
    
  5. In loop(), rileva la vibrazione e invia l’allerta se è passato l’intervallo di tempo

    void loop() {
    
      if (digitalRead(sensorPin)) {
        if (lastAlertTime == 0 || millis() - lastAlertTime > postingInterval) {
          Serial.println("Detected vibration!!!");
          sendAlert();  //Invia una richiesta HTTP al server IFTTT
        } else {
          Serial.print("Detected vibration!!! ");
          Serial.println("Poiché è stata inviata di recente un'email, questa volta non verrà inviata un'email di avviso per evitare di intasare la tua casella di posta.");
        }
      } else {
        if (DEBUG) {
          Serial.println("Detecting...");
        }
      }
      delay(500);
    }
    
  6. sendAlert() costruisce la richiesta HTTP e la invia tramite ESP8266

    void sendAlert() {
    
      String sendData = "GET " + URL + " HTTP/1.1" + "\r\n";
      sendData += "Host: maker.ifttt.com\r\n";
    
      sendATCommand("AT+CIPMUX=0",1000,DEBUG);
      sendATCommand("AT+CIPSTART=...",3000,DEBUG);
      sendATCommand("AT+CIPSEND=" + String(sendData.length()),1000,DEBUG);
      espSerial.println(sendData);
    
    }
    
  7. Gestione dei comandi AT sendATCommand()

    Questa funzione invia comandi AT al modulo ESP8266 e raccoglie le risposte.

    void sendATCommand(String command, const int timeout, boolean debug) {
      // Stampa e invia il comando
      Serial.print("AT Command ==> ");
      Serial.print(command);
      Serial.println();
      espSerial.println(command);  // Invia il comando AT
    
      // Ottieni la risposta dal modulo ESP8266
      String response = "";
      long int time = millis();
      while ((time + timeout) > millis()) {  // Aspetta la risposta fino al timeout
        while (espSerial.available()) {
          char c = espSerial.read();
          response += c;
        }
      }
    
      // Stampa la risposta se la modalità debug è attiva
      if (debug) {
        Serial.println(response);
        Serial.println("--------------------------------------");
      }
    

Riferimenti