Category: IoT

Sheding some (infrared) light on MLX90614

After implementing the MLX90614 driver for NuttX I noticed that although the write command to change the device I2C address in the EEPROM was reporting success, after the power cycle the new address was not working. Worst: even the previous address was not working.

Basically the device appears damaged and didn’t respond to any I2C command.

Then doing my research I discovered a Melexis document about SMBus communication:

https://www.pololu.com/file/0J171/MLX90614_SMBus.pdf

In this document I noticed they are using the address 0x00 instead of the default 0x5a address. After modifying the driver to use the 0x00 address the device accepted the new command.

There are many discussing about this subject on Arduino and similar forum:

https://chrisramsay.co.uk/posts/2014/09/arduino-and-multiple-mlx90614-sensors/
http://forum.arduino.cc/index.php?topic=54170.msg539601#msg539601
https://forum.mikroe.com/viewtopic.php?f=178&t=67842
http://wiki.wiring.co/wiki/Connecting_Infrared_Thermometer_MLX90614_to_Wiring

Note that someone discovered that using a brute force CRC approach eventually will work and everybody decided to copy it. Too bad guys!

The MLX90614 uses CRC8-CCITT standard to check if data are correct, so any CRC8-CCITT implementation will work, for example this one: https://3dbrew.org/wiki/CRC-8-CCITT

Now on NuttX you can call the mlx90614 example application to change the device’s I2C address this way: (changing from default 0x5a to 0x3a)

nsh> mlx90614 0x3a
Address 0x3a stored on your device!
Please do a power cycle and update the I2C board address!
nsh>

Listing of projects devoted to IoT

There are many open-source “Deus-ex” solution for IoT (a flashion name), then I decided to list some of these projects here:

AllJoyn (an AllSeen Alliance framework):
https://allseenalliance.org/developers/download

Arduino – the King of hobbyist IoT (without Internet) :
http://www.arduino.cc

Blynk – to create Android and iOS User Interfaces:
https://pushover.net

Contiki – The Open Source OS for the Internet of Things (they are biased):
http://www.contiki-os.org

Freeboard – A Web Dashboard for IoT visualization:
http://freeboard.io

IoTSyS – Internet of Things integration middleware:
https://code.google.com/p/iotsys

JerryScript – It is a JavaScript engine for IoT:
https://github.com/jerryscript-project/jerryscript

LiteOS – It appears Huawei is using it for their 10Kb RTOS:
http://www.liteos.net

Mbed OS (from ARM):
http://mbed.org

MicroCoAP:
https://github.com/1248/microcoap

Mosquitto MQTT Brokwer:
http://mosquitto.org

NuttX – The best RTOS for IoT (sorry I’m biased) :
http://nuttx.org

Particle – Open Software/Hardware for IoT:
https://www.particle.io

PushOver for notification:
https://pushover.net

Qeo communication framework:
http://www.qeo.org

Node-Red A visual tool for wiring the Internet of Things:
http://nodered.org

RIOT-OS – The friendly OS for IoT:
https://github.com/RIOT-OS

Soletta Project is a framework for making (Linux)IoT devices:
https://github.com/solettaproject/soletta

Splunk – Visualize servers and device log data
http://www.splunk.com

ThingSpeak – A open and free platform to store and visualize sensor data online:
https://thingspeak.com

The Thing System:
thethingsystem.com

Tinq is a software framework for device data exchange (based on Qeo) :
https://github.com/brunodebus/tinq-core

V7 is a JavaScript engine for microcontrollers:
https://github.com/cesanta/v7

VIPER – Python for IoT:
http://www.viperize.it

I am sure it is missing more some thousand of open-source projects. Give me a hint!

More info: http://www.datamation.com/open-source/35-open-source-tools-for-the-internet-of-things-1.html