<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[MLX90640 and M5Fire&#x2F;M5Stack]]></title><description><![CDATA[<p dir="auto">Hello,</p>
<p dir="auto">I received my MLX90640 thermo cam and used this program to test it:<br />
<a href="https://github.com/dtomyy/M5Stack-MLX90640-Thermal-Camera/blob/master/M5Stack-MLX90640-Thermal-Camera.ino" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/dtomyy/M5Stack-MLX90640-Thermal-Camera/blob/master/M5Stack-MLX90640-Thermal-Camera.ino</a></p>
<p dir="auto">I switched the debug level to verbose to see all errors and warnings.<br />
I got some problems with the SD-card. This was ok because there is no SD-card inside M5Stack.</p>
<pre><code>09:42:54.222 -&gt; [W][sd_diskio.cpp:137] sdCommand(): no token received
09:42:54.325 -&gt; [W][sd_diskio.cpp:137] sdCommand(): no token received
09:42:54.431 -&gt; [W][sd_diskio.cpp:471] ff_sd_initialize(): GO_IDLE_STATE failed
09:42:54.431 -&gt; [E][sd_diskio.cpp:739] sdcard_mount(): f_mount failed 0x(3)
09:42:54.431 -&gt; OK
09:42:54.431 -&gt; M5.begin ok
09:42:54.431 -&gt; Wire begin ok
09:42:54.814 -&gt; M5Stack MLX90640 IR Camera
09:42:55.541 -&gt; Parameter extraction failed
09:42:55.541 -&gt; Error: Sensor did not ack
09:42:55.604 -&gt; No ack read
09:42:55.605 -&gt; No ack read
09:42:55.605 -&gt; No ack read
</code></pre>
<p dir="auto">The main problem started at this errorline "Parameter extraction failed". The program found the MLX90640 but it didn't read the data from the sensor correct. To comment the ack-check in MLX90640_I2CRead didn't work for me. I read this at <a href="https://forums.pimoroni.com/t/mlx90640-no-ack/8662/12" target="_blank" rel="noopener noreferrer nofollow ugc">https://forums.pimoroni.com/t/mlx90640-no-ack/8662/12</a><br />
Can anyone help me?</p>
]]></description><link>https://community.m5stack.com/topic/333/mlx90640-and-m5fire-m5stack</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 19:27:43 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/333.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Sep 2018 07:46:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MLX90640 and M5Fire&#x2F;M5Stack on Sun, 23 Sep 2018 11:22:14 GMT]]></title><description><![CDATA[<p dir="auto">Hello,</p>
<p dir="auto">thank you for the good explanation.</p>
]]></description><link>https://community.m5stack.com/post/1589</link><guid isPermaLink="true">https://community.m5stack.com/post/1589</guid><dc:creator><![CDATA[sheepDog]]></dc:creator><pubDate>Sun, 23 Sep 2018 11:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to MLX90640 and M5Fire&#x2F;M5Stack on Sun, 23 Sep 2018 09:50:55 GMT]]></title><description><![CDATA[<p dir="auto">hello,<br />
the return mean:</p>
<h3></h3>
<pre><code>typedef enum {
    I2C_ERROR_OK=0,
    I2C_ERROR_DEV,
    I2C_ERROR_ACK,
    I2C_ERROR_TIMEOUT,
    I2C_ERROR_BUS,
    I2C_ERROR_BUSY,
    I2C_ERROR_MEMORY,
    I2C_ERROR_CONTINUE,
    I2C_ERROR_NO_BEGIN
} i2c_err_t;
</code></pre>
<ul>
<li>when <em><strong>Wire.endTransmission()</strong></em>    mean <em><strong>Wire.endTransmission(true)</strong></em>,  so success return <strong>I2C_ERROR_OK</strong></li>
<li><em><strong>Wire.endTransmission(false)</strong></em>  success return <strong>I2C_ERROR_CONTINUE</strong></li>
</ul>
]]></description><link>https://community.m5stack.com/post/1588</link><guid isPermaLink="true">https://community.m5stack.com/post/1588</guid><dc:creator><![CDATA[heybin]]></dc:creator><pubDate>Sun, 23 Sep 2018 09:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to MLX90640 and M5Fire&#x2F;M5Stack on Sun, 23 Sep 2018 09:19:09 GMT]]></title><description><![CDATA[<p dir="auto">Hello heybin,<br />
thank you for the information of the new return value from "Wire.end".</p>
<p dir="auto">Do you know why the second part in "MLX90640_I2CWrite" worked?</p>
<pre><code>int MLX90640_I2CWrite(uint8_t _deviceAddress, unsigned int writeAddress, uint16_t data)
{
  Wire.beginTransmission((uint8_t)_deviceAddress);
  Wire.write(writeAddress &gt;&gt; 8); //MSB
  Wire.write(writeAddress &amp; 0xFF); //LSB
  Wire.write(data &gt;&gt; 8); //MSB
  Wire.write(data &amp; 0xFF); //LSB
  if (Wire.endTransmission() != 0)
  {
    //Sensor did not ACK
    Serial.println("Error: Sensor did not ack");
    return (-1);
  }
</code></pre>
<p dir="auto">I changed "MLX90640_I2CRead" to:</p>
<pre><code>int MLX90640_I2CRead(uint8_t _deviceAddress, unsigned int startAddress, unsigned int nWordsRead, uint16_t *data)
{
  //Caller passes number of 'unsigned ints to read', increase this to 'bytes to read'
  uint16_t bytesRemaining = nWordsRead * 2;
  //It doesn't look like sequential read works. Do we need to re-issue the address command each time?
  uint16_t dataSpot = 0; //Start at beginning of array
  //Setup a series of chunked I2C_BUFFER_LENGTH byte reads
  while (bytesRemaining &gt; 0)
  {
    Wire.beginTransmission(_deviceAddress);
    Wire.write(startAddress &gt;&gt; 8); //MSB
    Wire.write(startAddress &amp; 0xFF); //LSB
    if (Wire.endTransmission(false) != 7) //Do not release bus
    {
      Serial.println("No ack read");
      return (0); //Sensor did not ACK
    }
    uint16_t numberOfBytesToRead = bytesRemaining;
...
</code></pre>
]]></description><link>https://community.m5stack.com/post/1587</link><guid isPermaLink="true">https://community.m5stack.com/post/1587</guid><dc:creator><![CDATA[sheepDog]]></dc:creator><pubDate>Sun, 23 Sep 2018 09:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to MLX90640 and M5Fire&#x2F;M5Stack on Sun, 23 Sep 2018 02:18:07 GMT]]></title><description><![CDATA[<p dir="auto">Hello,<br />
In the new arduino-esp32 library ,need to pay attention to in new IIC communication：</p>
<ul>
<li><strong>Wire.endTransmission(false)</strong>  run ok will return 7, not 0</li>
</ul>
]]></description><link>https://community.m5stack.com/post/1575</link><guid isPermaLink="true">https://community.m5stack.com/post/1575</guid><dc:creator><![CDATA[heybin]]></dc:creator><pubDate>Sun, 23 Sep 2018 02:18:07 GMT</pubDate></item><item><title><![CDATA[Reply to MLX90640 and M5Fire&#x2F;M5Stack on Sat, 22 Sep 2018 13:56:41 GMT]]></title><description><![CDATA[<p dir="auto">Hello,<br />
I continued testing and I found two problems:</p>
<ul>
<li>It is necessary to take new arduino library. <a class="plugin-mentions-user plugin-mentions-a" href="/user/heybin" aria-label="Profile: heybin">@<bdi>heybin</bdi></a>: Thanks.</li>
<li>Problem with "MLX90640_I2CRead". I changed this in the function:</li>
</ul>
<pre><code>   /*
    if (Wire.endTransmission(false) != 0) //Do not release bus
    {
      Serial.println("No ack read");
      return (0); //Sensor did not ACK
    }*/
    Wire.endTransmission(false);
</code></pre>
<p dir="auto">Now it worked for me.</p>
]]></description><link>https://community.m5stack.com/post/1574</link><guid isPermaLink="true">https://community.m5stack.com/post/1574</guid><dc:creator><![CDATA[sheepDog]]></dc:creator><pubDate>Sat, 22 Sep 2018 13:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to MLX90640 and M5Fire&#x2F;M5Stack on Sat, 22 Sep 2018 10:44:45 GMT]]></title><description><![CDATA[<p dir="auto">hello<br />
you need update arduino-esp32 to the  newest<br />
see <a href="https://github.com/espressif/arduino-esp32" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/espressif/arduino-esp32</a> ,and test it<br />
the sd card mount in M5.begin()<br />
if you want init sd card, you can use M5.begin(true, false, true) instead M5.begin(), it will be ok</p>
]]></description><link>https://community.m5stack.com/post/1573</link><guid isPermaLink="true">https://community.m5stack.com/post/1573</guid><dc:creator><![CDATA[heybin]]></dc:creator><pubDate>Sat, 22 Sep 2018 10:44:45 GMT</pubDate></item></channel></rss>