Thermal unit MLX90640 with Core2

  • Hello,

    I have obtained a Core2 with a thermal unit (MLX90640). The example code for the thermal unit does not work on the Core2. Also, in UiFlow there is no option to add the thermal unit with the "+" icon. However if I start UiFlow and select the classic Core, it is possible to add the thermal unit.

    Is the themal unit not compatible with the Core2?

  • Hello @Hexyl

    most modules, units and their associated examples have been developed before M5Core2 was available and therefore often do not just work out of the box. It is a pity that the M5Stack engineers do not (can not) spare more time to adapt / fix the existing examples from M5Stack to M5Core2.

    That said, the issue you are facing is that in M5Stack port A uses GPIO21 / GPIO22 (same as the internal I2C bus). In M5Core2 that has changed and only the internal I2C bus uses GPIO21 and GPIO22, however the external I2C bus on port A uses GPIO32 and GPIO33.

    In the Thermal unit example try replacing these lines:



      M5.begin(true, false, true, true);

    the last true enables the external I2C bus on GPIO32 and GPIO33.

    Hope this helps.

    Re UIFlow: I have no idea as to if and when the thermal camera will be supported. That is another question for the M5Stack engineers.


  • I just finished to adopt the example at
    in Arduino IDE to Core2 and it works fine. If you are interested I can share the code.

  • @broder Hello !
    Yes, good stuff !! i'm interested by your Core2 version of the Thermal_LMX90640.ino !!
    Can you give me a link where I can download it please?

    Thx !

  • @broder Hi

    I got the Core2 without knowing that it might not work with the sensor. So, I'm quite in need of a copy of that port too!

  • Bump. No one?

  • @broder
    It would be great if you could share the code!

  • @broder Do you still have a pointer to that code? I was just looking at doing that, but if someone already did it, I would prefer to start from a working example]

  • Bump. Me too! I can't find an M5 copy of MLX90640_API.cpp and MLX90640_I2C_Driver.cpp. After commenting out calls to MLX90640_BadPixelsCorrection() I tried using Sparkfun's version, but the .ino file has calls to interpolate_image() and get_point() which the Sparkfun library does not have.

    I tried using Blockly but the data returned by the calls to unit.get(unit.THERMAL, unit.PORTA) objects return garbage data. Well, not quite garbage - it's data but it is not corrected and interleaved in a way I can figure out.

    Micropython might be a better bet but I don't know how to get the Unit libraries. I don't have a spare Arduino to test on either.