Connect Your Launchpad To The Web – A Walkthrough To Visualize Your Data

This is a guest post from one of 43oh's forum members, Dennis Tong a.k.a Pine. Pine is best known for making good of what he has available. 

From the recent email received from TI announcing their new Connected LaunchPad line, I noticed the free partner service they offered to Exosite – a cloud platform focused on collecting and visualizing data from IoT devices. It is really cool for us hobbyists to have services of this kind, easy to configure yet providing such a sophisticated communication platform. How could I miss the opportunities to explore these exciting features! 

Below is an overview of what we will be trying to accomplish. A temperature sensor connected to the Launchpad, relays information to a OpenWRT enabled router serially, which then pushes information online. This published information can then be viewed anywhere on a PC, Tablet or Phone.

exosite_iot_block

1. Device Registration

The first thing you do is register a free account at the TI Exosite page. After registration, some basic configuration tasks are required to be completed before Exosite will accept data sent from your test rig.

These configurations include adding a device (the LaunchPad), configuring the data to capture, and most importantly, creating a “widget” to display the data captured. The flow to prepare the cloud service at Exosite is pretty straight forward and user friendly, and the user interface is consistent across different areas of configuration.

Before moving on to the micro-controller section of this voyage, you have to write down a piece of information provided from Exosite after your device is registered. This piece of information is known as CIK, assigned by Exosite, and is always displayed under the Device Information page. It is kind of a key used for identification. Exosite needs this CIK to associate the data they receive to the corresponding account, and that means we have to put it in the HTTP request to Exosite while sending data.

2. Preparing The Embedded Side

msp430F5529_Launchpad_TMP006

In my settings for this test, I planned to deploy a temperature measuring sensor, have the data captured and sent to Exosite for storage and visualization. Although my test rig enlisted three components, any Launchpad with an internal temperature sensor with a working serial port, like the classic MSP430G2553 line, should suffice. Of course, it doesn’t have to be temperature - what the IoT can serve is only limited by your imagination.

To achieve this design goal, an MSP430F5529 USB LaunchPad with TI TMP006 temperature booster pack was selected as the test rig. This test rig was originally a small project from last month and includes also a 3.3V compatible 1602 LCD. As mentioned this is optional for testing connectivity with Exosite.

Embedded Setup

The MSP430F5529 USB LaunchPad joined the LP family last year with 25 MHz 16-bit MCU and supported 40-pin booster packs. The TMP006 Booster Pack sports the TI TMP006 infrared thermopile sensor for object temperature measuring in a Booster Pack form factor.

Unlike the new Connected Line LaunchPad just released by TI with built-in IoT support, most notably the Integrated 10/100 Ethernet MAC+PHY, my plain vanilla MSP430F5529LP, without Ethernet BoosterPacks like the Ethernet Booster Pack by Rob at the 43oh Store or the CC3000, is just sitting there and silently capturing temperature data without anyone on the Internet hearing about it.

3. Bringing It Together

Having the data capture device and the cloud platform ready, the question remains is how are they going to connect together?

Some months earlier I got my feet wet in OpenWRT and flashed an “Attitude Adjustment” firmware to a TP-Link NR-703N WiFi router. The good thing about this little router, beside the internet connectivity and cuteness for obvious reasons, is the provision of USB host and together with the OpenWRT firmware. This allows me to serial connect the MSP430 LaunchPad via USB. Currently this router is configured as client mode and talks to my broadband router, or mobile phone when I’m on the go.

The next part is to prepare the test rig. The software for the F5529LP is done in Energia. Kind souls from the 43oh forum helped me out by giving advice on library porting as well as guidance to arrive the desired code. Although the LCD shows a lot of info in the original project (including sensor temperature and die temperature, together with their min/max), the data output from serial is currently limited to the TMP006 sensor current temperature only, and this value is registered on Exosite as parameter “s”. The attached Lua code later will demonstrate how this “s” argument is to be sent to Exosite. All in all, the critical part of the programming for the MCU is to capture the temperature value, and send the data through serial by the following line of Energia code (objt is the variable storing the temperature value):

Serial.println(objt);

The completed and programmed F5529+TMP006+LCD package is then connected to a TP-Link WR703N wireless router with OpenWRT. The Energia code is programmed such that every 4 seconds the LaunchPad sends the sensor temperature through serial to the OpenWRT. This router is installed with ser2net package and a Lua program is written to loop and capture that value, and construct an HTTP request conforming to Exosite’s standard.

Remember that CIK value mentioned earlier? This value is required in the call as well. The HTTP request crafted will finally be send to m2.exosite.com. The details of the protocol is available at github

Almost Freezing!

Yes, that is a Haagen Dazs behind the LaunchPad... to make sure the temperature goes below 0 Degree C. I get desert tonight :)

For the 703N router, the package ser2net is required to relay the serial data to a TCP port (installed by command opkg update and then opkg install ser2net). Given that the serial communication between OpenWRT and MSP430 LaunchPads worked pretty much out of the box at device port /dev/ttyACM1, the configuration of ser2net is easy enough by modifying the configuration file at /etc/ser2net.conf as below (meaning that fetch data from /dev/ttyACM1 at 9600 bps to port 2002)

2002:raw:600:/dev/ttyACM1:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS

Finally, a small lua program is used to capture the output from ser2net, do some legwork, and finally send data to Exosite. Lua is installed by default on the OpenWRT firmware and after some research it seems capable of doing what this exercise needed.

[WordPress seems to be parsing some of the code below, especially rn, please download the raw text file from here]

tcp:connect(host, port);
while true do
local s, status, partial = tcp:receive()
print(s or partial)
if status == "closed" then break end
local socket = require("socket")
local host = "m2.exosite.com"
local sock = assert(socket.connect(host, 80))
sock:send("POST /api:v1/stack/alias HTTP/1.1rn")
sock:send("Host: m2.exosite.comrn")
sock:send("Content-Type: application/x-www-form-urlencoded; charset=utf-8rn")
sock:send("X-Exosite-CIK: [SECRET_CIK_HERE]rnrn")
sock:send("Content-Length: 8rn")
sock:send("s=")
sock:send(s)
sock:send("rnrnrn")
repeat
 local chunk, status, partial = sock:receive(122)
 print(chunk or partial)
until status ~= "closed"
sock:close()
end
tcp:close()

data visualization with F5529LP_ser2net

The whole Exosite experience is pretty nice. It only takes less than half hour from opening a new account to have the site ready to receive data, which already include reading the documentation on how to send data with their simple HTTP protocol.
It is quite an enjoyable experience to have little things connected to the Internet :)

If you have any questions or comments, let us know in the comments below or in this forum project thread.

7 Comments

  1. This is one well written post. Would be looking forward to such content in the future from 43oh.

    Reply
    • I agree. very well written!

      Reply
  2. Quick question Pine: Is it trivial to control something on the Launchpad through ExoSite?
    Thanks for the awesome writeup.

    Reply
    • Exosite excels in collecting, integrating and providing access to IoT data. Nevertheless, the APIs provided by Exosite provisioned for reading values from Exosite, as well as server-side scripting feature (e.g. sending alerts in emails/SMS/tweets with programmable conditions on data collected). So I believe control over the devices can somehow be exerted. This may required coding on the embedded devices to react correspondingly to these values read back from Exosite.

      That also means the control envisaged is not quite in the sense that the device react immediately in response to user clicking a button on their site in real time. Beyond what is available to the TI partner site as of currently, to achieve more sophisticated controls over devices I believe Exosite has solution offerings for customization.

      Reply
      • Thanks for taking the time to answer!

        Reply
        • dlph1 – Coincidentally I’m working on a project which is extremely similar to this one, but I’m running a web server on my OpenWRT router instead of going through Exosite. In my setup it was easy to do something like trigger a LED on the Launchpad in response to a web input. On the router side it was also extremely easy to send an e-mail or SMS based on a trigger from the MSP430. I apologize for being off-topic, but I just wanted to let you know about another option.

          Reply
  3. Good one! Did not know about the TP-Link router. Sure opens up alot of possibilities.

    Reply

Submit a Comment

Your email address will not be published. Required fields are marked *


nine + = 11

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Join the best MSP430 blog on the net and stay up-to-date with our latest news, projects and design resources. We will not share your info with anyone.