Der SHT31 ist ein hochpräziser Sensor, der von der Firma Sensirion entwickelt wurde und zur Messung von Temperatur und Luftfeuchtigkeit dient. Dieser Sensor zeichnet sich durch seine hohe Genauigkeit, Zuverlässigkeit und Langlebigkeit aus, was ihn zu einer ausgezeichneten Wahl für verschiedene Anwendungen in Industrie, Wissenschaft und Alltag macht.
Wichtige Merkmale des SHT31:
Kurze Einführung zum I2C-Bus
Der I2C-Bus (Inter-Integrated Circuit) ist ein serieller Kommunikationsbus, der von Philips (heute NXP) entwickelt wurde. Er ermöglicht die Kommunikation zwischen verschiedenen integrierten Schaltungen (ICs) und Mikrocontrollern auf einfache und effiziente Weise. Der I2C-Bus verwendet lediglich zwei Leitungen: eine Datenleitung (SDA) und eine Taktleitung (SCL).
Eigenschaften des I2C-Bus
- Zwei-Draht-Schnittstelle: Der I2C-Bus benötigt nur zwei Leitungen, um Daten zwischen Geräten zu übertragen, was die Verkabelung vereinfacht.
- Multi-Master- und Multi-Slave-Unterstützung: Mehrere Master und mehrere Slave-Geräte können an denselben Bus angeschlossen werden. Dies ermöglicht flexible und komplexe Kommunikationsnetzwerke.
- Adressierung: Jedes Gerät am I2C-Bus hat eine eindeutige Adresse, wodurch der Master gezielt mit einem bestimmten Slave kommunizieren kann.
- Taktgesteuert: Die Kommunikation erfolgt synchron, wobei der Master die Taktleitung steuert und somit den Datenfluss regelt.
- Einfache Implementierung: Der I2C-Bus ist weit verbreitet und gut dokumentiert, was die Integration in verschiedene Projekte und Anwendungen erleichtert.
Durch seine Vielseitigkeit und Einfachheit ist der I2C-Bus in vielen elektronischen Geräten und Anwendungen, wie Sensoren, Speichermodulen und Mikrocontrollern, weit verbreitet.
Aufbau einer Messschaltung mit dem ESP32
Benötigte Teile:
Der Aufbau der Schaltung gestaltet sich recht einfach.
Wie in der Kurzbeschreibung zum I2C Bus genannt, benötigen wir 2 Datenleitungen SCL (GPIO 21) und SDA (GPIO 22). Zusätzlich die Stromversorgung über Ground und 3.3 Volt.
Das Datenblatt gibt eine Versorgungsspannung zwischen 2.4 – 5.5 Volt vor.
Programmierung mit VS Studio Code
Voraussetzung: Installiertes VS Studio Code
Als Erstes müssen wir ein neues Projekt anlegen. Klicke bitte auf das PlatformIO-Symbol.
Dann auf „Create New Project“.
Natürlich können wir auch direkt im Homescreen von PlattformIO ein neues Projekt anlegen.
Im Projekt Wizard treffen wir gewünschte Einstellungen, wie Projektname und legen auch das verwendete Board fest. Das Framework ist das Arduino Framework und unter Location kannst du festlegen, ob du den Standardspeicherpfad oder einen Eigenen verwenden möchtest. Mit Klick auf „Fertigstellen“ wird das neue Projekt erstellt.
Dann müssen wir die Bibliothek für den SHT31 einbinden. Im selben Fenster unter Libraries kannst du nach der SHT31 suchen und solltest die Adafruit SHT31 Library finden. Klicke bitte diesen Link an.
Hier bekommst du Beispielcode für die Verwendung dieser Library und weitere Informationen genannt.
Klicke bitte auf „Add to Project“. Im Screen siehst du den Vorgang. Mit Klick auf „Add“ wird die Library dem Projekt hinzugefügt.
Ein Blick in die Platform.ini zeigt dir auch den Erfolg an. Die Library ist eingebunden.
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = adafruit/Adafruit SHT31 Library@^2.2.2
Damit sind die Vorbereitungen auch abgeschlossen und wir können uns dem Code zuwenden.
#include <Arduino.h> #include <Wire.h> #include <SPI.h> #include <Adafruit_SHT31.h> // Erstellen eines Objekts für den SHT31 Sensor Adafruit_SHT31 sht31 = Adafruit_SHT31(); void setup() { // Initialisierung der seriellen Kommunikation für Debugging Serial.begin(115200); // Initialisierung des I2C-Bus Wire.begin(); // Initialisierung des SHT31 Sensors if (!sht31.begin(0x44)) { // 0x44 ist die I2C-Adresse des SHT31 Serial.println("Konnte SHT31 nicht finden, überprüfe die Verkabelung!"); while (1) delay(1); } Serial.println("SHT31 Sensor gefunden!"); } void loop() { // Auslesen der Temperatur float temperature = sht31.readTemperature(); // Auslesen der Luftfeuchtigkeit float humidity = sht31.readHumidity(); // Überprüfen, ob die Messwerte gültig sind if (!isnan(temperature)) { // isnan überprüft, ob der Wert 'NaN' (Not a Number) ist Serial.print("Temperatur: "); Serial.print(temperature); Serial.println(" °C"); } else { Serial.println("Fehler beim Auslesen der Temperatur!"); } if (!isnan(humidity)) { Serial.print("Luftfeuchtigkeit: "); Serial.print(humidity); Serial.println(" %"); } else { Serial.println("Fehler beim Auslesen der Luftfeuchtigkeit!"); } // Wartezeit von 10 Sekunden vor der nächsten Messung delay(10000); }
Erklärung des Codes
- Bibliotheken einbinden: Die Wire.h und SPI.h Bibliotheken werden für die I2C-Kommunikation benötigt, und die Adafruit_SHT31.h Bibliothek für den SHT31 Sensor.
- Sensor-Objekt erstellen: Ein Adafruit_SHT31 Objekt wird erstellt, um den Sensor zu steuern.
- Setup-Funktion:
- Initialisierung der seriellen Schnittstelle für Debugging-Zwecke.
- Initialisierung des I2C-Busses.
- Initialisierung des SHT31 Sensors und Überprüfung, ob der Sensor gefunden wurde.
- Loop-Funktion:
- Auslesen der Temperatur- und Luftfeuchtigkeitswerte vom Sensor.
- Überprüfen der Gültigkeit der Messwerte und Ausgabe auf die serielle Konsole.
- Eine Verzögerung von 10 Sekunden vor der nächsten Messung.
Skript prüfen und hochladen
Nachdem wir uns mit dem Code selbst auseinander gesetzt haben, geht es nun ans Hochladen und austesten.
Genau wie in der Arduino IDE auch, kann mit dem Checked-Symbol der Code syntaktisch geprüft werden. Mit dem Pfeil nach rechts wird der Code kompiliert und hochgeladen. Mit dem Stecker-Symbol kannst du Umschalten auf die Ausgabe der seriellen Schnittstelle.
Processing esp32dev (platform: espressif32; board: esp32dev; framework: arduino)
Verbose mode can be enabled via -v, –verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html
PLATFORM: Espressif 32 (6.7.0) > Espressif ESP32 Dev Module
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
framework-arduinoespressif32 @ 3.20016.0 (2.0.16)
tool-esptoolpy @ 1.40501.0 (4.5.1)
tool-mkfatfs @ 2.0.1
tool-mklittlefs @ 1.203.210628 (2.3)
tool-mkspiffs @ 2.230.0 (2.30)
toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 35 compatible libraries
Scanning dependencies…
Dependency Graph
|– Adafruit SHT31 Library @ 2.2.2
|– SPI @ 2.0.0
|– Wire @ 2.0.0
Building in release mode
Compiling .pio\build\esp32dev\src\main.cpp.o
Retrieving maximum program size .pio\build\esp32dev\firmware.elf
Checking size .pio\build\esp32dev\firmware.elf
Advanced Memory Usage is available via „PlatformIO Home > Project Inspect“
RAM: [= ] 6.7% (used 21808 bytes from 327680 bytes)
Flash: [== ] 22.0% (used 288645 bytes from 1310720 bytes)
Configuring upload protocol…
AVAILABLE: cmsis-dap, esp-bridge, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port…
Using manually specified: COM3
Uploading .pio\build\esp32dev\firmware.bin
esptool.py v4.5.1
Nach dem kompilieren des Codes startet dann auch sofort der Flashvorgang
Der entsprechende COM Port wird geprüft, die Daten des ESP-Chips werden gelesen.
Für andere Projekte ist es auch wichtig, die MAC-Adresse zu kennen. Einige Speicherbereiche werden gelöscht und teilweise neu beschrieben. Der Fortschritt des Upload wird dann auch prozentual dargestellt.
Serial port COM3
Connecting….
Chip is ESP32-D0WDQ6-V3 (revision v3.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:0a:c4:f8:f5:68
Uploading stub…
Running stub…
Stub running…
Changing baud rate to 460800
Changed.
Configuring flash size…
Flash will be erased from 0x00001000 to 0x00005fff…
Flash will be erased from 0x00008000 to 0x00008fff…
Flash will be erased from 0x0000e000 to 0x0000ffff…
Flash will be erased from 0x00010000 to 0x00056fff…
Compressed 17536 bytes to 12202…
Writing at 0x00001000… (100 %)
Wrote 17536 bytes (12202 compressed) at 0x00001000 in 0.6 seconds (effective 237.1 kbit/s)…
Hash of data verified.
Compressed 3072 bytes to 146…
Writing at 0x00008000… (100 %)
Wrote 3072 bytes (146 compressed) at 0x00008000 in 0.1 seconds (effective 310.8 kbit/s)…
Hash of data verified.
Compressed 8192 bytes to 47…
Writing at 0x0000e000… (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 449.3 kbit/s)…
Hash of data verified.
Compressed 289008 bytes to 161243…
Writing at 0x00010000… (10 %)
Writing at 0x0001be08… (20 %)
Writing at 0x00024933… (30 %)
Writing at 0x00029fd8… (40 %)
Writing at 0x0002f664… (50 %)
Writing at 0x000348b6… (60 %)
Writing at 0x0003c00a… (70 %)
Writing at 0x0004529c… (80 %)
Writing at 0x0004c63e… (90 %)
Writing at 0x00051b77… (100 %)
Wrote 289008 bytes (161243 compressed) at 0x00010000 in 3.8 seconds (effective 612.3 kbit/s)…
Hash of data verified.
Ausgabe in der seriellen Schnittstelle:
Nachdem der Upload-Vorgang erfolgreich war, kannst du mit dem Steckersymbol auf die Ausgabe der seriellen Schnittstelle umschalten und das Ergebnis der Arbeit deines Skriptes sehen.
SHT31 Sensor gefunden!
Temperatur: 26.87 °C
Luftfeuchtigkeit: 61.57 %
Temperatur: 26.85 °C
Luftfeuchtigkeit: 61.47 %
Temperatur: 26.81 °C
Luftfeuchtigkeit: 61.46 %
Temperatur: 26.78 °C
Luftfeuchtigkeit: 61.56 %
Temperatur: 26.74 °C
Luftfeuchtigkeit: 61.44 %
Temperatur: 26.74 °C
Luftfeuchtigkeit: 61.45 %
Temperatur: 26.71 °C
Luftfeuchtigkeit: 61.48 %
Temperatur: 26.70 °C
Luftfeuchtigkeit: 61.49 %
Temperatur: 26.67 °C
Luftfeuchtigkeit: 61.60 %
Dieses DIYTechAdventure sollte dir einen guten Startpunkt geben, um den SHT31 Sensor mit einem ESP32 im Arduino-Framework zu verwenden. Viel Erfolg bei deinem Projekt!