M5Stack Core2 Air Quality Testing Project
M5Stack Core2
M5Core2 is the upgraded second generation core device in the M5Stack IoT development kit series. It features an ESP32 D0WDQ6-V3 MCU with dual-core processors, Wi-Fi, 16MB Flash, 8MB PSRAM and a 2.0-inch capacitive touch screen. It includes a USB Type-C interface, a 390mAh battery managed by an AXP192 chip, and additional components such as a built-in RTC module, vibration motor, TF card slot, I2S digital audio interface, and programmable capacitive buttons.We can make good use of the core2 screen for display.
ENV Pro Unit
Project
Connect
This part is very simple. The Core 2 and the ENV Pro Unit all use Grove interface, and they both use Grove PORT A. It's an I2C interface port. We just need a Grove cable.
Code
// The code part is the hardest part of this project. Let's do it. // First of all, let's find out which libraries we need: #include #include #include #include // Because this sensor is a BME680 sensor, we can use Adafruit_BME680 and Adafruit_Sensor libraries for this part, and use a M5Core2 library, a Wire library. // Next step, we need define the I2C pins: #define SDA_PIN 32 #define SCL_PIN 33 // Next, creating the BME688 Object: Adafruit_BME680 bme; // Void Setup part: 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 Unit Data"); // Initialize I2C: Wire.begin(SDA_PIN, SCL_PIN); // Initializing the BME688 Sensor (BME688 default address is 0x77): if (!bme.begin(0x77, &Wire)) { M5.Lcd.println("Could not find BME688 sensor!"); while (1); } // Setting BME688 parameters: 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); // Void Loop part (Check if the BME688 sensor is available first): void loop() { if (! bme.performReading()) { M5.Lcd.println("Failed to perform reading!"); return; } // Display sensor data: M5.Lcd.fillScreen(BLACK); M5.Lcd.setCursor(10, 30); M5.Lcd.printf("Temp: %.2f C", bme.temperature); M5.Lcd.setCursor(10, 60); M5.Lcd.printf("Humidity: %.2f %%", bme.humidity); M5.Lcd.setCursor(10, 90); M5.Lcd.printf("Pressure: %.2f hPa", bme.pressure / 100.0); M5.Lcd.setCursor(10, 120); M5.Lcd.printf("Gas: %d ohms", bme.gas_resistance); // Update data every 11 seconds (Gas sensor standard scanning speed is 10.8s): delay(11000); }