Your very own Internet of Things
Hello and welcome!
My name is Andrey Katsman, and I invite you to enjoy this first in a series of articles exploring several IoT-oriented microcontrollers and project ideas, my reviews and opinions about emerging technologies, and all things embedded. In my daily life, I work for Canary, one of the coolest companies out there. Canary develops smart home security solutions, and as the head of our excellent embedded team, my engineers and I work together to bring hardware to life.
In this first article, we will explore the possibilities stored within the Texas Instruments CC3200 microcontroller and use it in the form of a LaunchPad board. We will discuss different aspects of this board and work through some detailed experiments.
I have picked this board to start with because I find its capabilities and ease of use quite fascinating. Among other things, it is not very expensive for hobby use, it is effortlessly battery powered (which takes away a lot of pain that normally goes into properly connecting boards), and it is Wi-Fi enabled.
Today, we will begin with an introduction to the board, its technical specifications, and a glimpse of development environments. In the following posts, we will get familiar with the development environment, learn how to program the board, and begin looking at different small projects. We will keep first ones fairly simple and will explore the use of on-board sensors; later, we’ll transition to more complex applications with deeper possibilities.
So, without further ado, let’s meet the LaunchPad:
This is the TI CC3200 in the form factor of a development board: "SimpleLink Wi-Fi CC3200 LaunchPad".
The board is roughly the size of the palm of my hand, making it very convenient to place in a project box or, if you were to use it in something like a smart aquarium project, even glue directly to the back side of a container. It comes with:
- CC3200 Wi-Fi MCU (ARM Cortex-M4 at 80 MHz): Faster than most small MCU’s and Wi-Fi ready, so there’s no need for extra modules!
- FTDI chip, JTAG headers: Allows you to connect, debug, and program directly from your PC USB port.
- S-Flash 8 Mbit chip: So you can store some extra information
- On-chip Wi-Fi antenna and U.FL connectors: No need to worry about signal, and it even lets you do conducted emissions testing!
- 2x20 pin headers: Plenty of room for expansions, GPIOs and more, and compatible with TI extension shields.
- Two programmable buttons, one reset button, and three user-controllable LEDs: Begin experimenting without connecting a single piece of hardware.
- Thermopile temperature sensor (TMP006) and a tri-axial accelerometer (BMA222): An extra surprise to play with or use in a project without any additional effort.
(As we move along, I will try to do a more in-depth overview of each of the relevant components. For now, I will just say this is a pretty neat little package!)
What I find especially convenient is that the board comes completely ready for development and can be powered in several ways—from a USB port (which is especially helpful during development since it offers a way to interact with and program the board), any 5V USB power supply, or two AA or AAA batteries. (In fact, it will keep working until batteries reach 2.3 volts.) Since the board also provides us with the convenience of a pre-installed voltage regulator for USB power and reverse current protector for battery power connection, this means we need not put extra effort into creating a completely independent battery-operated Wi-Fi device!
Another interesting feature worth mentioning: jumpers. Lots of jumpers. Somehow, I got used to circuit boards that come with dip switches or very minor configuration options, but what really caught my eye was that this LaunchPad has jumper configuration options all around. To give few examples, a temperature sensor and an accelerometer both sit on an I2C bus, and there are three jumpers sitting inconspicuously nearby. A closer look reveals that two of those jumpers serve as isolators, meaning that if you don't use those components, you can easily disconnect them from the bus. Another jumper gives you the power to magically hook up the accelerometer to an interrupt line when shorted.
Here we see the sensors area jumpers; they isolate the sensors from I2C bus when needed and connect interrupt line when desired.
We will meet another pair of jumpers a little bit later when we deal with programming the board.
Now that we’ve explored the supporting features, we can finally get to talking about the main player in the room—the CC3200 chip itself. What is the fuss all about? Simply this: While it is a teeny, tiny MCU-level chip, it still manages to be dual core. To explain, the chip is actually two processors working side by side; one is a network processor that handles Wi-Fi network connectivity, a task which is cumbersome for even higher-class CPUs, and the other is an application processor that leaves us with an unencumbered 80 MHz ARM Cortex-M4 MCU. For a small comparison (albeit not an entirely fair one), to connect my Arduino board to the network, it took me a good two hours plus an extension shield plus wasting most of my code space on handling the connectivity. With this LaunchPad, the same job took 10 minutes and the processor was practically snoring.
Now, I will not bore you to death by describing all the different features of the processor, but I will say that they are broad enough to make sure you will probably not run into a hardware constraint. (Of course, this is provided that you are working on MCU projects. Don't come complaining to me if your OpenGL engine has trouble rendering Assassin's Creed at 60FPS on this board!)
For our last topic today, let me introduce the development environments available for this board. First, it’s compatible with the TI Code Composer Studio, a full-fledged development environment packed with tools and interesting perks including profiling your code while it executes on the board. While it is certainly the more professional way to go about things, I would not recommend it as a starting point for a common enthusiast because it provides much higher level of customization and detail; in this way, it is suitable for large projects, but tends to make small projects more complicated. Also, since the studio is not available on Mac OS, we will focus on another option: the Energia development environment.
The Energia development environment, which you can download here, was an Arduino-compatible environment ported to work on TI MCU boards. In its early days, it was a little awkward and buggy, but it has certainly matured with the years, and now presents a very attractive option for both rapid prototyping and more serious development including multi-threaded MCU applications. It has admirable support for the CC3200 and various samples of Wi-Fi and network applications.
As we move along, I will make sure to post all my code samples in the future posts so you can follow along as our projects progress.
Stay tuned for part two—exploring Energia and running our first application!