Progetto base: Git_ESP32_Devkit_ADS1256_FFT_SIMUL_RTD_SSD1306_count_AsyncMQTT_binary_05
Il codice è sviluppato con il framework Arduino in ambiente VS Code/PlatformIO.
- Acquisizione dei due ingressi analogici per accelerometri piezo elettrici IEPE
- Impiego dell'amplificatore a guadagno programmabile MCP6S26 con multiplexer analogico per la selezione del canale accelerometrico e la regolazione del guadagno
- Impiego del convertitore analogico digitale ADS1256 con risoluzione di 24 bit
- Campionamento di ciascun canale accelerometrico a 7500 Sa/s
- Calcolo dello spettro delle ampiezze di ciascun canale accelerometrico su 4096 campioni, risoluzione in frequenza 1,83Hz
- Acquisizione di 4 canali analogici con ampiezza +/-10V per i due segnali di coppia e i due segnali di velocità mediante ADC MCP3204, risoluzione di 12 bit, frequenza di campionamento 100 Sa/s
- Acquisizione di due segnali di temperatura tramite trasduttori RTD PT1000 e moduli di condizionamento e conversione Adafruit PT1000 RTD Temperature Sensor Amplifier - MAX31865
- Visualizzazione locale dello stato di funzionamento tramite display OLED SSD1306 con interfaccia I2C
- Connessione alla rete dati mediante Wifi
- Trasmissione dei dati telemetrici mediante protocollo MQTT su broker a scelta: mosquitto remoto o locale, shiftr.io
- Gestione da remoto tramite messaggi MQTT
La cartella \APPLICATION
è pensata per organizzare meglio il codice del progetto.
Inserire qui le funzioni ausiliarie specifiche per l'applicazione in sviluppo, ad esempio le callback di accensione e spegnimento dei led in funzione del contenuto del payload.
La scheda ESP32 è configurata come STATION in una rete WiFi:
- modificare il file
WIFI/credentials.h
con i propriSSID
ePassword
Per il controllo dello stato della connessione vengono adoperati gli eventi dell'oggetto Wifi.
Vengono gestite le situazioni di perdita di connessione mediante riconnessione automatica.
Il pin 23
viene impiegato come uscita digitale per indicare la connessione all'access point wiFi. Per configurare un'altra posizione del led, modificare il parametro pinWiFiConnected
nel file HWCONFIG\hwConfig.h
Viene utilizzato un server NTP per la gestione di data e ora:
- modificare il file
LOCALTIME/localTime.cpp
con i propri parametri NTP
Per la stampa di data e ora utilizzare la funzione printLocalTime()
.
Sono predefiniti tre broker MQTT tramite i rispettivi file di configurazione:
MQTT/broker/mosquitto.h
MQTT/broker/raspi4.h
MQTT/broker/shiftr_io.h
ed è possibile aggiungerne altri rispettando il formato del file ed il nome delle variabili:
#ifndef __NOMEBROKER_H
#define __NOMEBROKER_H
// parametri di accesso per il broker NOMEBROKER MQTT
const char *mqttServer = "IP_o_url_del_broker_MQTT";
const int mqttPort = 1883;
const char *mqttUser = "eventuale_username_di_accesso_al_broker";
const char *mqttPassword = "eventuale_password_di_accesso_al_broker";
#endif
Nel file main.cpp
includere il solo file prescelto di accesso al broker, ad esempio:
// your MQTT Broker:
// uncomment one of following #include to set the MQTT broker.
#include <MQTT/broker/shiftr_io.h>
// #include <MQTT/broker/raspi4.h>
// #include <MQTT/broker/mosquitto.h>
Nel file src\MQTT\custom\clientID.h
è definita la tag thisClient
che identifica tutti i messaggi MQTT pubblicati da o destinati a questa scheda di acquisizione. Modificarlo in base alle proprie esigenze.
// MQTT client ID
#define thisClient "ESP32DevKit123" //"ESP32Udine"
L'elenco di tutti i topics è dichiarato nel file mqtt_topics.cpp
in questo file modificare o aggiungere solo il nome del topic, non rimuovere la tag thisClient
Ogni topic è nella forma sintattica: identificativo_MQTT_scheda/nome_topic
ad esempio: ESP32DevKit123/trigger
Nota: il testo dei topics è case sensitive.
Il controllo remoto della ESP32 avviene tramite i seguenti subscribed topics :
nome_topic | Tipo | Valori | Descrizione |
---|---|---|---|
/trigger | stringa | 0, 1, 2 | Controlla la MSF delle acquisizioni.
|
/pgaSetGain | stringa | 0..7 | Controlla il guadagno del PGA:
|
La scheda ESP32 comunica la telemetria attraverso i seguenti published topics :
nome_topic | Tipo | Note | Descrizione |
---|---|---|---|
/FFTBinTopic0 | array di valori float in forma binaria, little-endian |
due messaggi consecutivi da 4096 byte ciascuno 1 | contiene i 2048 moduli dello spettro dell'accelerazione sul canale 0 |
/FFTBinTopic1 | array di valori float in forma binaria, little-endian |
due messaggi consecutivi da 4096 byte ciascuno 1 | contiene i 2048 moduli dello spettro dell'accelerazione sul canale 1 |
/RTD1BinTopic | stringa | temperatura in °C rilevata dalla RTD1 | |
/RTD2BinTopic | stringa | temperatura in °C rilevata dalla RTD2 | |
/RTD1FaultTopic | stringa | messaggio diagnostico dal modulo RTD1
|
|
/RTD2FaultTopic | stringa | messaggio diagnostico dal modulo RTD2
|
|
/CountAdcTopic | stringa | numero di campionamenti acquisiti sui canali coppia/velocità | |
/TorqueSpeedTopic | array di valori float in forma binaria, little-endian |
un messaggio con 4 x CountAdcTopic elementi | contiene i campioni dei due canali di coppia e dei due canali di velocità, nel formato seguente [campioni coppia 1][campioni coppia 2][campioni velocità 1][campioni velocità 2] |
/pgaGetGain | stringa | valore attuale del guadagno impostato sul PGA |
Nella funzione setup()
è importante rispettare la sequenza di operazioni:
- configurare tutti i dispositivi hardware
- assegnare i valori predefiniti a variabili/oggetti della applicazione
- creare eventuali task RTOS
- configurare il client MQTT con
configMqttClient(mqttServer, mqttPort, mqttUser, mqttPassword);
- avviare il sotto sistema WiFi con
initWiFi_STA();
Footnotes
-
il primo elemento del primo messaggio viene cambiato di segno (sarà sempre negativo) per consentire a chi riceve di discriminare il primo messaggio dal secondo messaggio e ricostruire l'ordine dei 4096+4096 byte, altrimenti lo spettro delle ampiezze potrebbe risultare traslato di metà banda passante. ↩ ↩2