Hello again @felmue,
I came across this Adafruit video today, and I thought maybe you'd be interested?
https://youtu.be/m0XAT8V37-g?t=412
(The interesting part is between 6'52" and 13'05")
Cheers
Steph
Hello again @felmue,
I came across this Adafruit video today, and I thought maybe you'd be interested?
https://youtu.be/m0XAT8V37-g?t=412
(The interesting part is between 6'52" and 13'05")
Cheers
Steph
Well... I'm soooooo sorry... I thought I had an ENV III, but it's actually an ENV II... 😬
ENV II even has two temperature sensors, since instead of the QMP6988, it has a BMP280, which is a pressure and temperature sensor. It is, therefore, possible to perform 2 simultaneous temperature measurements!
So, this time things work better:
We still notice a difference in the temperature measurements. The SHT30 seems to get better results (which is probably why they added it).
Here, it's still 1°C above the real temperature. In the meantime, I turned on the air-conditioning, so maybe the deviation is reduced because of the ventilation? On the other hand, we can see that the temperature measured by the BMP280 is 1°C higher than the one measured by the SHT30.
But this time, I get a non-zero pressure measurement. 🙂
Here is the new version of my code for those who are interested:
#include <M5Unified.h>
#include <UNIT_ENV.h>
#include <Adafruit_BMP280.h>
constexpr uint32_t SLEEP_DURATION_US = 30 * 1000 * 1000; // 30 sec
SHT3X sht30;
Adafruit_BMP280 bmp;
// QMP6988 qmp6988; // only for ENV III
void setup() {
M5.begin();
M5.Display.setRotation(3);
M5.Display.setFont(&fonts::Font2);
Wire.begin(0, 26);
bmp.begin(0x76);
bmp.setSampling(
Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500
);
// qmp6988.init(); // only for ENV III
}
void displayMeasurement(
const uint8_t x1,
const uint8_t x2,
const uint8_t x3,
const uint8_t y,
const char* sensor,
const char* data,
const float_t value
) {
M5.Display.drawString(sensor, x1, y);
M5.Display.drawString(data, x2, y);
M5.Display.drawFloat(value, 2, x3, y);
}
void loop() {
static float_t temperature_1, temperature_2, humidity, pressure;
uint8_t fail = sht30.get();
temperature_1 = bmp.readTemperature();
temperature_2 = fail ? 0 : sht30.cTemp;
humidity = fail ? 0 : sht30.humidity;
pressure = bmp.readPressure();
// only for ENV III
// pressure = qmp6988.calcPressure();
// qmp6988.setpPowermode(QMP6988_SLEEP_MODE);
displayMeasurement(10, 70, 100, 10, "BMP280", "T1", temperature_1);
displayMeasurement(10, 70, 100, 30, "SHT30", "T2", temperature_2);
displayMeasurement(10, 70, 100, 50, "SHT30", "H", humidity);
displayMeasurement(10, 70, 100, 70, "BMP280", "P", pressure);
delay(2000);
M5.Power.deepSleep(SLEEP_DURATION_US);
}
Sorry for my confusion between ENV II and ENV III. But maybe finally the questions raised here will be useful to some readers...
@northwest Ok Lee, thank you very much, that's very kind of you 🙂
Hello @northwest, you're right, I have to check.
Unfortunately I misplaced the manual, but I did find this summary doc online. It states the following features:
Nevertheless, I have a couple of DS18B20 sensors, which are known to be pretty accurate, all of which indicate a temperature very close to that measured by my kitchen thermometer.
An error close to 1°C is acceptable in my use case, but ENV II or ENV III HATs get worse measurements than my DS18B20. I also compared these measurements with other sensors like the Adafruit BME280 (which always gives measurements with a 2°C increase because of the voltage regulator on the sensor board), but which is still accurate when taken into account.
Thank you,
Steph
Well... I'm soooooo sorry... I thought I had an ENV III, but it's actually an ENV II... 😬
ENV II even has two temperature sensors, since instead of the QMP6988, it has a BMP280, which is a pressure and temperature sensor. It is, therefore, possible to perform 2 simultaneous temperature measurements!
So, this time things work better:
We still notice a difference in the temperature measurements. The SHT30 seems to get better results (which is probably why they added it).
Here, it's still 1°C above the real temperature. In the meantime, I turned on the air-conditioning, so maybe the deviation is reduced because of the ventilation? On the other hand, we can see that the temperature measured by the BMP280 is 1°C higher than the one measured by the SHT30.
But this time, I get a non-zero pressure measurement. 🙂
Here is the new version of my code for those who are interested:
#include <M5Unified.h>
#include <UNIT_ENV.h>
#include <Adafruit_BMP280.h>
constexpr uint32_t SLEEP_DURATION_US = 30 * 1000 * 1000; // 30 sec
SHT3X sht30;
Adafruit_BMP280 bmp;
// QMP6988 qmp6988; // only for ENV III
void setup() {
M5.begin();
M5.Display.setRotation(3);
M5.Display.setFont(&fonts::Font2);
Wire.begin(0, 26);
bmp.begin(0x76);
bmp.setSampling(
Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500
);
// qmp6988.init(); // only for ENV III
}
void displayMeasurement(
const uint8_t x1,
const uint8_t x2,
const uint8_t x3,
const uint8_t y,
const char* sensor,
const char* data,
const float_t value
) {
M5.Display.drawString(sensor, x1, y);
M5.Display.drawString(data, x2, y);
M5.Display.drawFloat(value, 2, x3, y);
}
void loop() {
static float_t temperature_1, temperature_2, humidity, pressure;
uint8_t fail = sht30.get();
temperature_1 = bmp.readTemperature();
temperature_2 = fail ? 0 : sht30.cTemp;
humidity = fail ? 0 : sht30.humidity;
pressure = bmp.readPressure();
// only for ENV III
// pressure = qmp6988.calcPressure();
// qmp6988.setpPowermode(QMP6988_SLEEP_MODE);
displayMeasurement(10, 70, 100, 10, "BMP280", "T1", temperature_1);
displayMeasurement(10, 70, 100, 30, "SHT30", "T2", temperature_2);
displayMeasurement(10, 70, 100, 50, "SHT30", "H", humidity);
displayMeasurement(10, 70, 100, 70, "BMP280", "P", pressure);
delay(2000);
M5.Power.deepSleep(SLEEP_DURATION_US);
}
Sorry for my confusion between ENV II and ENV III. But maybe finally the questions raised here will be useful to some readers...
I apparently get a small improvement in the temperature measurement by shutting down the microcontroller like this:
// M5.Power.Axp192.setLDO2(0);
// esp_sleep_enable_timer_wakeup(SLEEP_DURATION_US);
// esp_deep_sleep_start();
M5.Power.deepSleep(SLEEP_DURATION_US);
But I still have a 2.5°C difference...
On the other hand, I don't have a solution for the pressure measurement. 😕
Hello,
I have the impression that ENV III HAT is not working properly and is providing incorrect measurements:
First, the measured temperature is about 3°C above the actual temperature (which I also checked with a DS18B20 sensor). I understand that the sensor measurement can be disturbed by the heating of the electronic components, but still... 3°C is a huge difference !
I made sure to put the microcontroller in deep sleep to give it time to cool down (see my code below)!
Then, the measured pressure is always equal to zero... 🤔
Here is my code:
#include <M5Unified.h>
#include <UNIT_ENV.h>
constexpr uint32_t SLEEP_DURATION_US = 60 * 1000 * 1000; // 1 min
SHT3X sht30;
QMP6988 qmp6988;
void setup() {
M5.begin();
M5.Display.setRotation(3);
M5.Display.setFont(&fonts::Font2);
Wire.begin(0, 26);
qmp6988.init();
}
void loop() {
static float_t temperature, humidity, pressure;
uint8_t fail = sht30.get();
temperature = fail ? 0 : sht30.cTemp;
humidity = fail ? 0 : sht30.humidity;
pressure = qmp6988.calcPressure();
qmp6988.setpPowermode(QMP6988_SLEEP_MODE);
M5.Display.drawString("T:", 10, 10); M5.Display.drawFloat(temperature, 2, 30, 10);
M5.Display.drawString("H:", 10, 30); M5.Display.drawFloat(humidity, 2, 30, 30);
M5.Display.drawString("P:", 10, 50); M5.Display.drawFloat(pressure, 2, 30, 50);
delay(2000);
M5.Power.Axp192.setLDO2(0);
esp_sleep_enable_timer_wakeup(SLEEP_DURATION_US);
esp_deep_sleep_start();
}
Did I make a mistake somewhere?
Maybe you have experienced this sensor yourself and have some elements to share with me?
Thank you very much in advance.
Steph
Hello again @felmue,
I came across this Adafruit video today, and I thought maybe you'd be interested?
https://youtu.be/m0XAT8V37-g?t=412
(The interesting part is between 6'52" and 13'05")
Cheers
Steph
Thank you very much @felmue,
Then I actually saw that you were using this device on your M5Stack page.
Thanks again for your advice, which I think is perfect... hopefully we can still find some in stock somewhere.
Regards,
Steph
Hi guys,
Being a beginner in electronics, I am wondering how to make current measurements with such low intensities (µA). Would you be so kind as to explain to me how you do it and with which model of measuring device. Pictures are welcome if it doesn't take too much time.
Thanking you in advance
Steph
Hi @Balta,
If you don't need the I2C bus at all, you can disable it like this:
Wire.~TwoWire();
Try it to see if it solves your problem.
Are you sure the 18650C hat has its own charging circuit?
I thought we had to connect the M5StickC for the charge to be managed by its AXP192 controller?
Also, how do you know when the charge is complete? Is there an indicator LED for this?
Steph