Foreword

It is a wonderful time to be playing with physical computing!

In the early 2000s, there were few options for any given physical computing technology. If you wanted to measure humidity you had one option—with the annoying subtleties of that particular manufacturer. Thanks to the pressure of free market forces and open source hardware, by the mid-2010s there were dozens of manufacturers all creating similar humidity sensors. The pinouts were identical, the protocols were identical (and finally standardized to I2C), and the prices were falling. Today I don’t have to wonder if the sensor came from silicon foundry X or Y, I just have to decide “do I want to measure the humidity inside my lunchbox?” I plug in whatever humidity sensor is most readily available and let the library handle the necessary low-level interactions to get the data. I am no longer worrying about the underlying hardware; I can instead concentrate on the user experience.

The user experience is central to the popularity of Arduino. Its simplified interface enabled the crashing of two worlds: designers and engineers. Similarly, the JavaScript and the Node.js ecosystem are easy to learn for designers and non-professional programmers. In the future the mindset of designers and users of hardware will matter more than who holds the keys to building electronics. Thanks to the Web, baseline tools (gcc, serial bootloaders, skillet reflow, etc.) are universal and now easy to master. Anyone with a hot plate and a pair of tweezers can begin making small batches of products that connect to the Internet. And thanks to the Web we can market and sell all manner of devices across the globe.

A base-level microcontroller is now ambiguous between manufacturers. Does it have serial, I2C, SPI? Does it have multichannel ADCs? Does it have good low-power performance? Is it cheap and readily available? Can I program it with the industry’s standard toolchain? Nearly every microcontroller on the market satisfies these requirements. Microcontroller manufacturers are now having to develop advancements on the fringes: Does it come with BLE and WiFi? Can I reprogram it over-the-air?

The hardware industry will continue to jam more processing power into smaller spaces, with inconceivable amounts of storage and connectivity. I’m not sure where we will end this next decade, but it’s clear that specific chip manufacturers will begin to look like the DEC and Tandy computers of the 1980s: no one cared about the hardware inside their computer; they just wanted their spreadsheet to open. Thankfully, advancements in open source software are continuing to push what us regular folks can do. Node.js and JavaScript in the browser make it possible for the vast majority of folks to move up the toolchain. I can stop worrying about whether my serial buffer is going to overrun and concentrate on the bigger picture.

I dream of the day that I can purchase a clock, a desk lamp, or a wristwatch and configure its interactions the way I want them. I should be able to plug a USB cable into a consumer product and have a known set of inputs and outputs. The compiler, or whatever it becomes, should warn me when I’m doing something wrong (but allow me to do it anyway :). These new tools increase the leverage we have over hardware. But we should all remember it’s not the hardware, it’s how you use it. Let’s hope better tools enable us to build things that matter.

Get Node.js for Embedded Systems now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.