Streaming di temperatura e umidità con l’ecosistema Big Data – Parte 1

In questo articolo viene presentato un progetto dimostrativo del processo di implementazione di una semplice architettura per l'elaborazione in tempo reale e in batch delle letture di temperatura e umidità rilevate da un sensore DHT11, elaborate dalla scheda Arduino e pubblicate sul web mediante l’impiego del modulo Wi-Fi ESP8266 e mediante l'ausilio di tecnologie open source dell'ecosistema Big Data. Lo scopo del progetto è di semplificare il flusso in streaming di dati attraverso i diversi strumenti hardware e software utilizzati, dall’acquisizione dei dati alla loro trasformazione. In questa prima parte del progetto faremo una descrizione dell’architettura del sistema, dell’hardware e del software utilizzato.

Introduzione

In questo progetto viene utilizzata la scheda Arduino, un sensore di temperatura e umidità DHT11 della famiglia di sensori DHT, un modulo Wi-Fi ESP8266, Internet e alcune librerie e programmi software. I sensori DHT sono piuttosto lenti e semplici ma vanno bene per questo progetto. Sono costituiti da due componenti principali: un sensore di umidità capacitivo e un termistore. Sono anche in grado di effettuare conversioni da analogico a digitale dei valori di temperatura e umidità. L’ESP8266 viene utilizzato per la gestione e l'invio dei dati su Internet. I dispositivi della famiglia ESP2866 sono alternative a basso costo che supportano il protocollo TCP/IP e dispongono di una piccola unità di memoria che consente di caricare le istruzioni nel chip, e di un proprio microcontrollore. Possono essere numerosi i client in grado di ricevere o consultare le informazioni generate da una scheda Arduino. Una delle opzioni più utilizzate dalle community di sviluppo è Mosquitto. Mosquitto è un'implementazione open source abbastanza leggera di un broker basato sul protocollo MQTT (Message Queuing Telemetry Transport, un protocollo di rete di pubblicazione-sottoscrizione operante su TCP/IP che trasporta i messaggi tra i dispositivi). Mosquitto include librerie scritte in C e C++.

Tuttavia, Mosquitto non dispone di molte funzioni che possono essere di grande rilevanza per un progetto specifico, come servizi per memorizzare e interrogare la persistenza degli argomenti. Per questo, è possibile utilizzare Apache Kafka per reindirizzare i messaggi. Apache Kafka è un progetto open source sviluppato dalla fondazione Apache Software. Kafka implementa un modello di pubblicazione e sottoscrizione per l'intermediazione di messaggi attraverso canali o argomenti, offrendo più opzioni a livello di sicurezza, archiviazione e manipolazione dei messaggi. Per reindirizzare i messaggi tra un servizio di pubblicazione e l'altro, è possibile utilizzare lo strumento Apache NiFi, che consente di costruire flussi di dati chiamati modelli, che sono costituiti da blocchi di istruzioni (relativamente di basso livello) chiamati processori, che consentono di acquisire e manipolare i dati in tempo reale, trasformarli e reindirizzarli ad altri servizi come file in HDFS, database ed altri servizi di persistenza (persistenza è la particolarità dei dati di un programma di sopravvivere all'esecuzione del programma stesso che li ha creati). Va notato che è vantaggioso inviare le informazioni ad un supporto di persistenza che consente l'elaborazione batch delle informazioni in modo più tradizionale. Allo stesso modo degli strumenti open source, Apache Hive si presenta come un'opzione interessante. Hive è un Data WareHouse relazionale (Data WareHouse è una raccolta di dati strutturati originati da fonti interne ed esterne al sistema informativo). Questi tipi di elaborazioni richiedono scansioni moderatamente semplici, interattive e veloci da implementare. Per questo motivo, viene utilizzata la console interattiva Apache Zeppelin.

Il progetto

Analizziamo il flusso dei dati di temperatura e umidità generati dal sensore DHT11 seguendo le varie fasi indicate dalla numerazione riportata sullo schema funzionale di Figura 1.

Figura 1: Flusso dei dati di temperatura e umidità

1) Acquisizione dei dati di temperatura e umidità dal sensore DHT11
Il sensore DHT11 invia i dati di temperatura e umidità alla piattaforma Arduino. ESP8266 acquisisce le letture ogni 3 secondi calcolando la percentuale di umidità e la temperatura in gradi Celsius (° C) e in gradi Fahrenheit (° F) nell'ambiente. Viene inoltre calcolato l'indice di percezione del calore in gradi Celsius e Fahrenheit, che determina come le persone percepiscono la temperatura in base all'umidità dell'ambiente. Successivamente, mediante l’ESP8266, viene effettuato l’invio di una richiesta ad un servizio Web esterno per determinare l'ora di lettura dei dati in base ad un fuso orario predefinito.

2) Pubblicazione dei dati sul server MQTT
Il messaggio che verrà inviato al server MQTT è costruito nel formato JSON. Contiene i dati acquisiti dal sensore, le informazioni calcolate, la data e l’ora della lettura, il numero di microsecondi dall'accensione della piattaforma Arduino e un identificatore univoco per il client emittente. Vengono eseguiti i controlli della connessione Internet e della connessione al server MQTT su cui viene pubblicato il payload.
La pubblicazione viene effettuata su un argomento specifico e riferita ad un nome utente e una password predefiniti. Il server MQTT dispone di un elenco di autorizzazioni con cui definisce quali utenti possono pubblicare informazioni su argomenti esistenti.

3, 4 e 5) Acquisizione dati dal server MQTT in tempo reale
Il servizio Apache NiFi ha un set organizzato di istruzioni che gestiscono il flusso di dati durante l'acquisizione, ovvero:
NiFi si connette o si iscrive all'argomento Mosquitto e cattura i messaggi che arrivano in tempo reale; NiFi integra il messaggio ricevuto (la stringa JSON) definendo nuovi campi esterni alla stringa relativi agli aspetti tecnici del messaggio e del server MQTT; NiFi inserisce la stringa JSON e i nuovi campi nel datastore Hive; NiFi pubblica il messaggio originale su Kafka; Hive e Kafka salvano i dati in modo persistente; Hive consente di eseguire l'elaborazione in batch dei dati storici memorizzati; Kafka consente l'elaborazione in tempo reale dei dati inviati dalla piattaforma Arduino-ESP8266.

6 e 7) Trattamento dei dati
Zeppelin esegue blocchi di codice (in Scala e SQL): esegue una query sui dati nel data WareHouse; si iscrive in tempo reale a Kafka per monitorare ed elaborare i dati ricevuti in tempo reale in diverse finestre temporali; il codice viene eseguito sul motore di elaborazione Spark; i dati ottenuti in ogni finestra temporale vengono trasformati e archiviati in tabelle in Hive; le temperature misurate in gradi Fahrenheit vengono mediate nelle finestre temporali e memorizzate in Hive.

Installazione dell’IDE di Arduino e della scheda ESP8266

Il software dell’IDE di Arduino per Windows, Linux e Mac, necessario per caricare il codice sulla scheda Arduino, può essere scaricato dal sito ufficiale di Arduino www.arduino.cc. Per utilizzare il modulo Wi-Fi ESP8266, è necessario installare componenti aggiuntivi nell'IDE. Ciò consentirà di configurare le opzioni di compilazione del codice che verrà inviato al componente e utilizzare i metodi e le librerie per le connessioni. L'installazione può essere eseguita utilizzando il gestore schede dell’IDE di Arduino: aprire l'IDE Arduino, poi con File -> Impostazione nel campo in basso “URL aggiuntive per il Gestore delle Schede” immettere l’indirizzo http://arduino.esp8266.com/stable/package_esp8266com_index.json.

Installazione delle Librerie

Per gestire il sensore DHT11, eseguire i processi di pubblicazione dei dati e altre funzioni, è necessario installare alcune librerie aggiuntive. Per installare una libreria aggiuntiva è possibile utilizzare il Gestore delle Librerie dell'IDE Arduino, se si dispone dei file .ZIP relativi, andando su Sketch -> #Include libreria -> Aggiungi libreria da file .ZIP; oppure da Sketch -> #Include libreria -> Gestione librerie, nel Gestore Librerie cercare le librerie e installarle. Le librerie aggiuntive da installare e utilizzare in questo progetto sono:

    • DHT sensor library by Adafruit
    • Adafruit Unified Sensor
    • PubSubClient 2.6.0
    • Ora 1.5.0
    • Client NTPC 3.1.0

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 1599 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend