Incorrect measurements with ENV III HAT on M5StickC+

  • 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:

    • Accuracy : -20-100°C +/- 1°C
    • Resolution : 0.1°C

    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,

  • At the moment, I try to control the radiators in the house with this ENVIII. I have diffrent meassuring instruments here, I will check next week how they are to compare with the ENVIII

  • @northwest Ok Lee, thank you very much, that's very kind of you 🙂

  • I know Im posting on an old thread, but the information for these things are hard to come by.

    Im a newb, but sort of know what Im looking at with this code.

    But Im unable to get this running on my M5stickCplus with ENVIII
    even with the help for ENVIII in the code the // comments I cant get this working. I get the screen blink every 30 seconds, which I dialed down to ten seconds, and it blinks no readings, all at 0.00

    What am I missing here? I also couldnt find M5_env.h and used m5stack_ENV.h from the install libraries, assuming they are the same ?

    Thanks for any help. Especially thanks to the OP for his code here, looks promising, helping me learn a lot.

  • ENVIII and ENVIIIHat are NOT the same thing and as such use different pins

    ENVIII uses the port on the bottom of the stick whereas the HAT use the pins on the top of the stick.

  • @ajb2k3 this is great info!

    I did start to understand the 0x56 addresse and 0x44 I think it is.. it seems like the addresses were the same in the technical manuals, but maybe that has no bearing on what you are saying ?
    Im guessing the wire. commands Im seeing would be for the non hat version ?

    Ill start looking for the difference in the pins and maybe be able to learn something again!

    Again, Im a super newb and I appreciate the help.

    I originally found this thread because my envIII hat temperature reading just cant be true. it seems a bit high and sort of climbs at time and peaks around 29 degrees. I suspect its the working temperature of the M5stick. screen heat I guess?

  • When I mean different pins, I mean that they use different IO pins when connected to the sticks.
    Units use GPIO32/33 on the StickCplus where as the hats use G26/G36/G25/G0 on the Hat connector.

    The sensors have been proved not to be fully realible and need calibrating, tuning in code in order to work in the environment you intend them to work in.

    As to the I2C address issue. If you have more than 1 device on the bus with the same i2c address, the data received by the sticks could be corrupted, the bus may stop working or data recorded will be very inaccurate.

  • @ajb2k3 Thank you so much! this is very helpful.

    Could I also ask you to point me in a direction for the calibration formula or a small description of the theory behind calibrating it ? in my head I just feel like chopping 3 degrees off the reading would almost suffice, but Im sure there is a more eloquent method. Ultimately if I can figure it out, sleeping code will be needed for longer run times in terms of battery longevity. This seemingly also would help a bit with accurate temps.


  • You will need to find the data sheet for the temperature sensor used in the unit as I have no idea how to make the numbers for calibration.

  • @teflon121 If you are measuring temperature in an environment where the temperature is stable such as at my desk(!) you can, for sure, just add an "offset". Just measure the ambient with a known and trusted thermometer and add or subtract this to the raw measurement.
    If the device is going to be subjected to a wide range of temps, then you need to see if offset is satisfactory over that range.
    If not...the second half of calibration is "span" which is accomplished by multiply or dividing the raw measurement. This gets fiddly and can be enjoyable like tuning a carburetor!
    display = raw * span + offset, or depending on characteristics of the sensor, display = (raw + offset) * span
    Span is usually a very low number like 1.2 or 0.98