M5Stack Core2
Der M5Core2 ist das verbesserte Core-Gerät der zweiten Generation aus der M5Stack-IoT-Entwicklungskit-Serie. Er verfügt über einen ESP32-D0WDQ6-V3-MCU mit Dual-Core-Prozessoren, WLAN, 16 MB Flash, 8 MB PSRAM und einen 2,0-Zoll-kapazitiven Touchscreen. Zur Ausstattung gehören eine USB-Typ-C-Schnittstelle, ein 390-mAh-Akku mit Verwaltung durch einen AXP192-Chip sowie zusätzliche Komponenten wie ein integriertes RTC-Modul, ein Vibrationsmotor, ein TF-Kartensteckplatz, eine digitale I2S-Audioschnittstelle und programmierbare kapazitive Tasten. Wir können den Bildschirm des Core2 optimal zur Anzeige nutzen.

ENV Pro Unit

Projekt
Verbinden
Dieser Teil ist sehr einfach. Der Core 2 und die ENV Pro Unit verwenden beide eine Grove-Schnittstelle und den Grove-PORT A. Dabei handelt es sich um einen I2C-Schnittstellenanschluss. Wir benötigen lediglich ein Grove-Kabel.

Code
// Der Programmierteil ist der schwierigste Teil dieses Projekts. Legen wir los.
// Zuerst finden wir heraus, welche Bibliotheken wir benötigen:
#include
#include
#include
#include
// Da dieser Sensor ein BME680-Sensor ist, können wir hierfür die Bibliotheken Adafruit_BME680 und Adafruit_Sensor sowie die Bibliotheken M5Core2 und Wire verwenden.
// Als Nächstes müssen wir die I2C-Pins definieren:
#define SDA_PIN 32
#define SCL_PIN 33
// Als Nächstes das BME688-Objekt erstellen:
Adafruit_BME680 bme;
// Teil der Void-Setup-Funktion:
void setup() {
M5.begin();
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(10, 10);
M5.Lcd.println("ENV-Pro-Gerätedaten");
// I2C initialisieren:
Wire.begin(SDA_PIN, SCL_PIN);
// BME688-Sensor initialisieren (die Standardadresse des BME688 ist 0x77):
if (!bme.begin(0x77, &Wire)) {
M5.Lcd.println("BME688-Sensor konnte nicht gefunden werden!");
while (1);
}
// BME688-Parameter festlegen:
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);
// Teil der Void-Loop-Funktion (zuerst prüfen, ob der BME688-Sensor verfügbar ist):
void loop() {
if (! bme.performReading()) {
M5.Lcd.println("Messung konnte nicht durchgeführt werden!");
return;
}
// Sensordaten anzeigen:
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(10, 30);
M5.Lcd.printf("Temperatur: %.2f C", bme.temperature);
M5.Lcd.setCursor(10, 60);
M5.Lcd.printf("Luftfeuchtigkeit: %.2f %%", bme.humidity);
M5.Lcd.setCursor(10, 90);
M5.Lcd.printf("Druck: %.2f hPa", bme.pressure / 100.0);
M5.Lcd.setCursor(10, 120);
M5.Lcd.printf("Gas: %d Ohm", bme.gas_resistance);
// Daten alle 11 Sekunden aktualisieren (Die Standard-Scan-Geschwindigkeit des Gassensors beträgt 10,8 s):
delay(11000);
}
Ergebnis

