Il SHT30 Shield è progettato appositamente per essere compatibile con il modulo Wemos D1 mini.
Il sensore permette la misura della temperatura da -40°C a +125°C e dell’umidità, nell’intervallo da 0% a 100%. I dati sono trasmessi in formato digitale tramite un’interfaccia seriale I2C che richiede solo due pin D1-SCL e D2-SDA
Per altri shield specifici per Wemos D1 mini vedere l’articolo Wemos D1 mini – Raccolta Shield disponibili
Indice
Descrizione del sensore SHT30
Il sensore SHT30 (datasheet) è un dispositivo di misura della temperatura e dell’umidità prodotto da Sensirion. È progettato per applicazioni che richiedono un’elevata precisione e affidabilità, come nel monitoraggio ambientale, nell’automazione domestica e nelle applicazioni industriali.
Caratteristiche principali
- Misura della temperatura e dell’umidità: Il SHT30 è in grado di misurare la temperatura nell’intervallo da -40°C a +125°C con una precisione di ±0,3°C. Per quanto riguarda l’umidità, può misurare un intervallo da 0% a 100% con una precisione di ±2% RH (umidità relativa).
- Tecnologia di sensore a stato solido: Utilizza una tecnologia avanzata basata su un sensore capacitivo per l’umidità e un sensore termico per la temperatura, garantendo una lunga durata e una resistenza a condizioni ambientali difficili.
- Interfaccia I2C: Il sensore comunica tramite un’interfaccia digitale I2C, che consente un facile collegamento con microcontrollori e dispositivi di acquisizione dati.
- Basso consumo energetico: Il SHT30 è progettato per un consumo energetico ridotto, il che lo rende ideale per dispositivi a batteria e applicazioni portatili.
- Alta precisione: Grazie alla tecnologia Sensirion, il sensore SHT30 offre alta precisione nelle misurazioni, rendendolo ideale per applicazioni in cui sono richieste letture accurate e stabili.
- Compensazione automatica: Il sensore è dotato di un sistema di compensazione automatica per correggere gli errori derivanti da variazioni di temperatura o di umidità, migliorando ulteriormente la precisione delle misurazioni.
Alcune applicazioni del sensore
- Monitoraggio ambientale: Utilizzato in dispositivi di monitoraggio per il controllo delle condizioni ambientali.
- Automazione domestica: Può essere integrato in sistemi di automazione per regolare la temperatura o il sistema di ventilazione.
- Applicazioni industriali: Impiegato in ambienti industriali per monitorare l’umidità e la temperatura in ambienti di produzione, magazzini o altri spazi sensibili.
In sintesi, il sensore SHT30 è una soluzione compatta, precisa e a basso consumo energetico per il monitoraggio della temperatura e dell’umidità in una vasta gamma di applicazioni.
Specifiche relative alla misura dell’umidità
Specifiche relative alla misura della temperatura
Schema a blocchi del sensore
Foto e piedinatura del sensore
Sotto è riportata la foto del sensore che misura 2,4×2,4×0,8 mm
![]() |
![]() |
N° pin | Nome | Tipo | Descrizione |
---|---|---|---|
1 | SDA | Logica | Pina dati I2C, da connettere alla linea dati I2C del microcontrollore. Questo pin ha una resistenza pull up da 4,7-10K su Vin |
2 | ADDR | Altro | Pin di selezione dell'indirizzo I2C. Questo pin ha un resistore pull down da 4,7-10K per creare l'indirizzo I2C 0x45 . Se connesso a GND l'indirizzo cambia a 0x44. |
3 | ALERT | Altro | Uscita di avviso/interruzione. Si può impostare il sensore per avvisare quando si è verificato un evento. |
4 | SCL | Logica | Pin del Clock I2C, collega alla linea dell'orologio I2C del tuo microcontrollore. Questo pin ha una resistenza pull up da 4,7-10K su VDD |
5 | VDD | Alimentazione | Questo è il pin di alimentazione.Il chip può utilizzare 2,5-5 V CC per l'alimentazione. Il valore deve essere uguale al livello logico del tuo microcontrollore. |
6 | nRESET | Altro | Pin per il reset hardware. Connesso a una resistenza di pull up da 4,7- 10K per rendere attivo il chip per impostazione predefinita. Connettere a GND per eseguire un ripristino hardware. |
7 | R | Altro | Nessuna funzione elettrica; da collegare a VSS |
8 | VDD | Alimentazione | Pin comune per alimentazione e logica da collegare a GND |
Schema dello Shield SHT30 v2.1.0
Lo schema del sensore è riportato sotto. Lo shield è progettato da Wemos, è di costruzione robusta, di buona qualità e viene fornito con due pinstrip che è necessario saldare a vostra cura.
Il sensore dispone di un’interfaccia I2C, i cui pin sono collegati a quelli D1 e D2 del Wemos D1.
Nota : lo shield SHT30 v1.0.0 ha un indirizzo I2C di 0x45, mentre l’impostazione di fabbrica di SHT30 è 0x44. Se si vuole usare l’indirizzo 0x44, occorre depositare una goccia di stagno sui pad SJ1.
Ne ho realizzato una mia versione il cui schema e il PCB sono realizzati con EasyEDA e possono essere scaricati e modificati dal sito OSHWLab a questo link
Dove trovare il modulo
Il modulo potrà essere acquistato in rete , per esempio sul sito Aliexpress. Il suo costo al momento della redazione di questo articolo e di circa 4 €.
Nella confezione, oltre alla scheda, sono presenti 2 pinstrip da saldare con l’utilizzo di un saldatore a stagno. In questo caso vedere l’articolo Come eseguire delle buone saldature
In commercio sono comunque disponibili altre tipologie di moduli, sempre basati sul sensore SHT30, sotto alcuni esempi
![]() |
![]() |
![]() |
Versione clone dello Shied Wemos
Lettura base dei dati del sensore
Per la lettura di dati forniti dal sensore SHT30 Shield occorrono:
- Scheda Wemos D1 mini (la trovate sul sito Homotix codice WED1MINIV3)
- SHT30 Shield
![]() Modulo D1 mini V 3.1.0 |
![]() |
Schema dei collegamenti
Lo SHT30 Shield è stato concepito per essere installato direttamente sopra (o sotto) il Modulo D1 mini per questo il suo PCB ha le stesse dimensioni.
Esiste poi la possibilità di utilizzare solamente il piccolo PCB su cui è presente il sensore. infatti come potete vedere, esiste una fresatura sul modulo e se si applica una leggera forza in corrispondenza del piccolo connettore questo si staccherà.
Le dimensioni del piccolo modulo sono a questo punto di 13x13mm circa. Il connettore presente è a 4 pin I2C.
Questo potrà essere collegato tramite apposito cavetto per esempio al modulo TFT I2C Connector Shield su cui sono presenti due connettori I2C utilizzabili per questo scopo.
N° | Pin Wemos D1 | |
---|---|---|
1 | 3V3 | |
2 | D4 (IO2) | |
3 | D3 (IO0) | |
4 | GND |
Si tratta di un cavo con due connettori 4 Pin, lunghezza 10 cm.
Cavo per I2C / IO
Libreria di gestione del sensore
Per facilitare l’uso del SHT30 Shield per Wemos D1, è disponibile presso il sito Wemos un’apposita libreria, dove dovrete scaricare il file zip.
Per informazioni su come istallare la libreria vedere l’articolo Arduino – Tutorial, come installare una libreria
Codice del programma di lettura
A questo punto si potrà trasferire il programma nella memoria del Wemos D1.
Per come impostare l’IDE per gestire il Wemos D1 mini vedere l’articolo Modulo WeMos – LOLIN D1 mini
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 |
#include <WEMOS_SHT3X.h> SHT3X sht30(0x45); void setup() { Serial.begin(115200); } void loop() { if(sht30.get()==0){ Serial.print("Temperatura in Celsius : "); Serial.println(sht30.cTemp); Serial.print("Temperatura in Fahrenheit : "); Serial.println(sht30.fTemp); Serial.print("Umidità relativa : "); Serial.println(sht30.humidity); Serial.println(); } else { Serial.println("Error!"); } delay(1000); } |
Una volta attivato il monitor seriale, ricordatevi di impostare la velocità a 115200 baud, saranno mostrati i dati letta dal sensore .
Lettura dati del sensore su display OLED
Una versione più completa per la lettura dei dati forniti dal SHT30 Shield è quello che prevede l’utilizzo dello speciale display OLED realizzato per il Wemos D1 mini, vedere l’articolo OLED Shield – WeMos D1 mini
Per questo test occorrono:
- Scheda Wemos D1 mini (la trovate sul sito Homotix codice WED1MINIV4)
- SHT30 Shield
- Wemos tripler base
- OLED Shield per Wemos D1 mini
![]() |
![]() |
![]() |
![]() |
Schema dei collegamenti
Codice del programma di lettura su display OLED
Più sotto è riportato lo sketch per i test del sensore che mostra i valori letti dal sensore Temperatura e Pressione barometrica sul display OLED.
Per la gestione del display occorre caricare le relative librerie, oltre a quella relativa al sensore citata precedentemente
#include “Adafruit_GFX.h”
#include “Adafruit_SSD1306.h”
NOTA: la libreria utilizzata, anche se denominata “Adafruit_SSD1306.h” non è quella originale, ma una versione appositamente modificata per funzionare con l’OLED Shield.
Per maggiori informazioni relative al display e come caricare le relative librerie, vedere l’articolo OLED Shield V2.1.0 – Wemos D1 mini
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 |
#include "Adafruit_SSD1306.h" #include <Wire.h> //Include la libreria e definisce il sensore #include <WEMOS_SHT3X.h> SHT3X sht30(0x45); #define OLED_RESET 0 // GPIO0 Adafruit_SSD1306 display(OLED_RESET); void setup() { Serial.begin(11500); Serial.println(F("SHT30 Test begin")); // Impostazione modulo display con indirizzo I2C addr 0x3C display.begin(SSD1306_SWITCHCAPVCC, 0x3C); delay(1000); // Cancellazione schermo e buffer display.clearDisplay(); // Messaggio iniziale display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.println(" ADRIROBOT "); display.setTextColor(BLACK, WHITE); // Inverte il colore del testo display.setCursor(0, 10); display.println(" SHT30 "); display.display(); } void loop() { display.fillRect(0, 30, 64, 30, BLACK); if (sht30.get() == 0) { display.setTextColor(WHITE); display.setCursor(0, 30); display.print("Temp.:"); display.println(sht30.cTemp, 1); display.print("Umid.:"); display.println(sht30.humidity, 1); } else { display.println("Errore!"); } display.display(); delay(1000); } |
Lettura dati sensore tramite Arduino
Lo SHT30 Shield può essere letto anche tramite la scheda Arduino. I valori potranno essere letti tramite il monitor seriale dell’IDE.
Per questo test occorrono:
- Scheda Arduino UNO R3
- SHT30 Shield
- Breadboard mini
- cavi colorati M/M
![]() |
![]() SHT30 Shield |
![]() Breadboard mini |
![]() Fili colorati M/M |
Schema dei collegamenti
Nel test è stata utilizzata, al posto della scheda Arduino UNO, una scheda KS0486 Keyestudio PLUS completamente compatibile con l’ambiente di sviluppo Arduino IDE.
Contiene tutte le funzioni della scheda Arduino UNO R3 e alcuni miglioramenti che ne rafforzano notevolmente la funzione.
Sulla scheda sono presenti dei connettori per collegare direttamente i moduli.
È possibile configurare i pin digitali per lavorare a una tensione di 3.3V.
Libreria per lettura sensore
Se si vuole leggere il sensore presente sul SHT30 Shield tramite Arduino, non può essere quella utilizzata per il modulo Wemos D1 mini. In questo caso la libreria da utilizzare è quella fornita dalla produttrice del sensore la Sensirion. Basterà cercarla tramite il Gestore Librerie ricercando “SHT3x”.
Con la libreria sono forniti alcuni esempi di gestione
NOTA: il sensore presente sul SHT30 Shield è impostato per avere come indirizzo lo 0x45, mentre quello di default sarebbe il 0x44
Per cui nel programma occorrerà modificare l’indirizzo presente
1 2 3 |
Wire.begin(); //sensor.begin(Wire, SHT30_I2C_ADDR_44); sensor.begin(Wire, SHT30_I2C_ADDR_45); |
Codice del programma di lettura del sensore per Arduino
Sotto il codice utilizzato
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 |
#include <Arduino.h> #include <SensirionI2cSht3x.h> #include <Wire.h> SensirionI2cSht3x sensor; static char errorMessage[64]; static int16_t error; void setup() { Serial.begin(115200); while (!Serial) { delay(100); } Wire.begin(); //sensor.begin(Wire, SHT30_I2C_ADDR_44); sensor.begin(Wire, SHT30_I2C_ADDR_45); sensor.stopMeasurement(); delay(1); sensor.softReset(); delay(100); uint16_t aStatusRegister = 0u; error = sensor.readStatusRegister(aStatusRegister); if (error != NO_ERROR) { Serial.print("Error trying to execute readStatusRegister(): "); errorToString(error, errorMessage, sizeof errorMessage); Serial.println(errorMessage); return; } Serial.print("aStatusRegister: "); Serial.print(aStatusRegister); Serial.println(); error = sensor.startPeriodicMeasurement(REPEATABILITY_MEDIUM, MPS_ONE_PER_SECOND); if (error != NO_ERROR) { Serial.print("Error trying to execute startPeriodicMeasurement(): "); errorToString(error, errorMessage, sizeof errorMessage); Serial.println(errorMessage); return; } } void loop() { float aTemperature = 0.0; float aHumidity = 0.0; error = sensor.blockingReadMeasurement(aTemperature, aHumidity); if (error != NO_ERROR) { Serial.print("Error trying to execute blockingReadMeasurement(): "); errorToString(error, errorMessage, sizeof errorMessage); Serial.println(errorMessage); return; } Serial.print("Temperatura: "); Serial.print(aTemperature,1); Serial.print("\t"); Serial.print("Umidità: "); Serial.print(aHumidity,1); Serial.println(); } |
In questo caso dovreste visualizzare una schermata simile a questa.