In un precedente articolo abbiamo visto le caratteristiche del sensore BME680 (BME680 Sensore di pressione, temperatura, umidità), si tratta di un sensore digitale 4 in 1.
Il sensore è in grado di rilevare diversi parametri ambientali come: la temperatura, l’umidità, la pressione barometrica ed i composti organici volatili (VOC).
In questo articolo vedremo come collegare il sensore BME680 al modulo Wemos D1 mini, i dati rilevato saranno riportati su un display TFT a colori.
Indice
Descrizione del sensore BME680
Il sensore BME680 , prodotto dalla Bosch Sensortec costituito da un package LGA che misura 3 x 3 x 1 mm con coperchio metallico e 8 pin , integra sensori di gas, pressione, umidità e temperatura ad elevata linearità e accuratezza. È progettato per consumi ottimizzati a seconda delle specifiche modalità di funzionamento, stabilità a lungo termine e robustezza EMC elevata.
I sui utilizzi possono essere:
- Misurazione della qualità dell’aria
- Stazione meteo personalizzata
- Consapevolezza del contesto, ad esempio rilevamento dell’umidità della pelle, delle variazioni nell’ambiente
- Monitoraggio fitness/benessere
- Avvertimento in caso di aria secca o temperature elevate
- Misurazione del volume e del flusso d’aria
- Controllo automazione domestica (ad es. HVAC)
- Miglioramento GPS
- Navigazione indoor (rilevamento del cambio di piano, rilevamento spostamenti in ascensore)
- Tracciamento dell’altitudine e del consumo di calorie per le attività sportive
Pin del modulo
Pin | Descrizione |
---|---|
VCC | Pin alimentazione , compresa tra 3,3-5 V CC |
GND | Pin di massa |
SCL | I2C / SPI Clock line |
SDA | I2C / SPI data line |
SDO | SPI data line |
CS | SPI Slave Device Enable |
Caratteristiche del LCD TFT Shield 2.4 ” a colori
Il Wemos LCD TFT Shield 2.4 Pollici a colori con Touch è stato progettato non solo per essere utilizzato con la scheda WeMos D1 Mini, ma è compatibile anche con la WeMos D1 Mini Pro e Lolin D32 Pro.
Il display offre una risoluzione di 340×240 pixel, è utilizza il driver ILI9341 come controller per il display LCD ed il chip XPT2046 come controller per la funzione touch.
Altre informazioni sul tipo di display potranno essere trovate nell’articolo Display TFT Risoluzione 320×240 2,8″ – ILI9341.
Libreria di gestione del sensore
Per facilitare la gestione come sempre ci vengono aiuto delle librerie già pronte, tra le tante presenti la scelta è andata a quella fornita dal sito Adafruit, anche se è stata creata per un altro modulo sensore la libreria è perfettamente compatibile.
Nel campo ricerca si inserirà “BME680” trovata la libreria “Adafruit BME680 Libray“, premendo su “More info..” apparirà il tasto “Installa” cliccare il tasto
Per ulteriori informazioni vedere l’articolo BME680 Sensore di pressione, temperatura, umidità
Schema dei collegamenti
Vediamo ora come interfacciare il sensore BME680 al Wemos D1 mini. Sotto sono riportati i componenti utilizzati.
Per Il collegamento delle varie parti è riportato nella figura sottostante, in questo caso il display è collegato tramite il protocollo SPI, mentre il sensore con protocollo I2C.
Wemos D1 mini | Shield TFT | BME680 |
---|---|---|
D1 | SCL | |
D2 | SDA | |
RST | TFT_RST | |
D8 | TFT_DC | |
D0 | TFT_CS | |
3V3 | VCC | |
5V | VCC | |
GND | GND | GND |
Dove trovare i componenti utilizzati
I componenti utilizzati possono essere acquistati presso il sito Homotix: Modulo Wemos D1 compatibile, Wemos LCD TFT Shield 2.4 Pollici con Touch per Wemos D1 Mini, BME680 Sensore di Gas Pressione Temperatura Umidità
Sketch utilizzato
Il programma utilizzato mostra i dati rilevati dal sensore, compreso il dato di altitudine locale.
Tuttavia, per avere un risultato accurato occorre avere inserito nel programma la pressione hPa a livello del mare per la vostra posizione.
Si consideri poi che il sensore è abbastanza preciso ma se non hai i dati aggiornati per il giorno corrente, e può essere difficile ottenere una precisione maggiore di 10 metri.
Nota: per il corretto funzionamento del programma occorre che siano presenti le seguenti librerie:
- per la gestione del Sensore BME680 (Adafruit_sensor.h e Adafruit_BME680);
- per la gestione del display TFT (Adafruit_GFX e Adafruit_ILI9341);
- le librerie per i protocolli I2C (Wire) e SPI (SPI) sono già presenti nelle librerie base dell’IDE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include "Adafruit_BME680.h" #include <Adafruit_GFX.h> #include <Adafruit_ILI9341.h> #define TFT_CS D0 #define TFT_DC D8 #define TFT_RST -1 //Connesso al pin RESET del Wemos #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME680 bme; // I2C Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST); //TTF void setup() { Serial.begin(9600); while (!Serial); Serial.println(F("BME680 test")); if (!bme.begin()) { Serial.println("Could not find a valid BME680 sensor, check wiring!"); while (1); } // Set up oversampling and filter initialization bme.setTemperatureOversampling(BME680_OS_8X); bme.setHumidityOversampling(BME680_OS_2X); bme.setPressureOversampling(BME680_OS_4X); bme.setIIRFilterSize(BME680_FILTER_SIZE_3); bme.setGasHeater(320, 150); // 320*C for 150 ms tft.begin(); tft.fillScreen(ILI9341_BLACK); tft.setRotation(3); tft.setCursor(0, 0); tft.setTextColor(ILI9341_RED); tft.setTextSize(3); tft.println(" WWW.ADRIROBOT.IT"); tft.println(); tft.setTextSize(2); tft.setTextColor(ILI9341_GREEN); tft.println(" Lettura dati da BME 680"); tft.println(); } void loop() { if (! bme.performReading()) { Serial.println("Failed to perform reading :("); return; } tft.fillRect(0, 80, 240, 340, ILI9341_BLACK); tft.setCursor(0, 80); tft.setTextColor(ILI9341_YELLOW); tft.print("Temperatura: "); tft.print(bme.temperature); tft.print(" *C" ); tft.setCursor(0, 100); tft.setTextColor(ILI9341_RED); tft.print("Pressione: "); tft.print(bme.pressure / 100.0); tft.print(" hPa"); tft.setCursor(0, 120); tft.setTextColor(ILI9341_CYAN); tft.print("Umidita': "); tft.print(bme.humidity); tft.print(" %"); tft.setCursor(0, 140); tft.setTextColor(ILI9341_GREEN); tft.print("Gas :"); tft.print((bme.gas_resistance / 1000.0)); tft.print(" KOhms"); tft.setCursor(0, 160); tft.setTextColor(ILI9341_ORANGE); tft.print("Altitudine: "); tft.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); tft.print(" m"); delay (1000); } |