ESP8266 ed Arduino IoT Cloud per un presepe smart

ESP8266 è una soluzione low cost per iniziare a sperimentare con il mondo dell’Internet of Things. In questo tutorial vediamo come utilizzarla implementare alcune funzioni che ci permetteranno di controllare il nostro presepe con un’applicazione.

Avremo bisogno del seguente materiale:

  • Scheda ESP8266
  • 2 relè
  • 1 modulo DFPLayer Mini
  • 1 Micro SD
  • 1 micro servo
  • 2 led
  • Resistori e cavi jumper
  • 1 Breadboard
  • Arduino IoT Cloud
  • Arduino IDE
  • Arduino IoT Remote (app mobile).

Configurare ESP8266 su Arduino IoT Cloud

Di Arduino IoT Cloud abbiamo già parlato in due nostri tutorial che puoi recuperare qui:

Questa piattaforma permette di creare un’interfaccia, accessibile sia da browser web che da applicazione mobile, con cui controllare da remoto una scheda dotata di connettività Wi-Fi.

Durante questo tutorial vedremo come controllare l’accensione delle luci nelle case, il volo della cometa (o dell’angelo, in base alle preferenze) con un servomotore, il pianto di Gesù bambino appena nato e due relè (ai quali collegare altrettanti dispositivi).

La configurazione iniziale è tratta nel primo dei due articoli precedentemente linkati: ti rimandiamo a quel contenuto per approfondire.

Nel mio caso ho configurato una scheda ESP8266 selezionando durante la procedura guidata le board di terze parti. In questo caso ci verrà fornita una Secret Key da inserire successivamente tra i dettagli della thing. Quest’ultima avrà 5 variabili booleane di lettura e scrittura per controllare le funzioni sopra descritte.

Il codice sorgente

Di seguito il codice da caricare sulla scheda. Le librerie DFRobotDFPlayerMini e SoftwareSerial permettono di controllare il modulo DFPlayer Mini, che verrà collegato ai pin 12 e 13 della scheda ESP8266. Si tratta dei pin che verranno utilizzati per attivare la comunicazione seriale tra i due dispositivi.

Sulla scheda Micro SD andremo a copiare un file in formato .mp3 con il pianto di un neonato. Nel mio caso questo dura 25 secondi, tempo inserito all’interno del delay nella funzione onPiantoChange.

#include "thingProperties.h"
#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>
#include <Servo.h>

#define giallo 4 //LED giallo per la casa
#define rosso 5 //LED rosso per la casa
#define rel 14 //Relè per il fuoco
#define water 15 //Relè per l'acqua

SoftwareSerial myPort(13,12); //comunicazione seriale sui due pin
DFRobotDFPlayerMini myDFPlayer; 

Servo angelo;

void setup() {
  pinMode(giallo,OUTPUT);
  pinMode(rosso,OUTPUT);
  pinMode(rel,OUTPUT);
  pinMode(water,OUTPUT);
  angelo.attach(16);
  Serial.begin(9600);
  //inizializzare la comunicazione seriale sui pin 13 e 12
  myPort.begin(9600);
  //inizializzare il modulo DFPlayer Mini
  myDFPlayer.begin(myPort);
  Serial.begin(9600);
  delay(1500); 

  initProperties();

  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  ArduinoCloud.update();
  
}

void onCaseChange()  {
  // Add your code here to act upon Case change
  digitalWrite(rosso,_case_);
  digitalWrite(giallo,_case_);
}

void onAcquaChange()  {
  // Add your code here to act upon Acqua change
  digitalWrite(water,acqua);
}

void onFuocoChange()  {
  // Add your code here to act upon Fuoco change
  digitalWrite(rel,fuoco);
}

void onVoloChange()  {
  // Add your code here to act upon Volo change
  if(volo==HIGH){
    for(int i=0; i<180; i++){
      angelo.write(i);
      delay(150);
    }
    for(int i=180; i>0; i--){
      angelo.write(i);
      delay(150);
    }
  }
  else{
    angelo.write(0);
    }
  }

void onPiantoChange()  {
  // Add your code here to act upon Pianto change
  if(pianto==HIGH){
    myDFPlayer.volume(25);
    myDFPlayer.play(1);
    delay(25000);
  }
}

In queste funzioni andremo ad inserire il codice da far eseguire alla scheda nel momento in cui lo stato delle variabili create in precedenza cambi. Avendo scelto lettura/scrittura, occorrerà collegarle a dei pulsanti virtuali controllabili da remoto. Per compiere questa operazione andiamo su Dashboard, strumento che ci permette di creare un’interfaccia di controllo, ed inseriremo 5 widget di tipo switch. Questi ci permetteranno di cambiare lo stato delle 5 booleane che abbiamo creato in precedenza.

esp8266

La dashboard appena creata la ritroveremo nell’app IoT Remote andando a fare il login con le nostre credenziali di arduino.cc. In questo modo, switchando tra on e off, potremo cambiare lo stato delle booleane create avviando le funzioni ad esse associate.

Nel mio caso i due relè attivano una pompa in grado di avviare il ruscello ed una lampadina che simula un focolare.

Nel video seguente puoi vedere il funzionamento delle interazioni che abbiamo creato.

Il servomotore permette di far ondeggiare lentamente la cometa (o l’angelo). Per rendere il movimento più rapido basterà diminuire i delay all’interno dei due for nella funzione onVoloChange.

Conclusioni

Spero che questo tutorial ti sia stato utile. Come hai potuto vedere è rivolto ad utenti che hanno già delle competenze base di Arduino. Se stai muovendo i primi passi in questo mondo ti consiglio il corso online che abbiamo realizzato per la nostra academy online: è ottimo per iniziare a sperimentare con i microcontrollori.

Per dubbi o suggerimenti puoi metterti in contatto con noi utilizzando il form qui in basso.

    Acconsento al trattamento dei dati personali ai sensi del Regolamento UE 2016/679. Leggi la Privacy Policy.