September 21, 2010 AT 12:05 pm

“You Too Can Join the Internet Of Things” …

Called mbed, the research effort puts a kit for a microcontroller – sort of a basic, low-power computer on a chip – in the hands of engineers and hobbyists for about $59. Then, ARM provides a set of software tools for bringing that microcontroller to life and linking it with other interesting items like accelerometers, gyroscopes, cameras, displays and thermometers.

Simon Ford, the ARM researcher leading mbed, said that the package of hardware and software he had created should open microcontrollers up to a new audience by removing some of the technical headaches associated with programming the chips.

The mbed device can plug straight into a U.S.B. port on a computer, appearing as a flash drive to the PC. People can then create programs or download existing modules from the mbed Web site and get off and running in a matter of minutes.

mbed requires an online compiler, so that you are dependent on them forever. You cannot do anything without using their online site. We would like to see mbed change this policy, release some open source hardware, allow OSS toolchains, etc— (they like Arduino shields, why not join in the community? It could be awesome!)

We like the hardware in the mbed, the cortex series is great (it’s why we carry an ARM Cortex M3 board now) – but the ARM complier used with mbed costs about $5,000 so maybe it will never be anywhere but online. This is why we really like the ARM dev board we carry, it’s OSHW, the firmware libraries are all BSD licensed, you can use an OSS tool chain and like the mbed you can drag and drop a compiled program. We’re also considering carrying a lpc1768 version of the board (let us know if you’d like that!)

mbed will be at the Open Source Hardware summit & Maker Faire, we’ll see if they’re up for this – post your comments / suggestions in the comments and we’ll pass them along as well.

Update: Great comments brewing! Jump in!!

William writes:

I really like the mBed, on spec. I will never use it because of their online policy. It’s great for ease, but bad for someone who doesn’t have internet access all the time. What if I need to debug onsite and I’m out in the field? At any rate, if you carry a board with the lpc1768, that would be great. I like the peripherals, USB, Ethernet, SPI, I2C, all in one tidy little package. I also like the mBed form factor as it’s easily bread boarded.

Chris writes:

I considered the mbed but discounted it for the very reasons you point out here. Its a cool little device but the thought of being dependent on a tool chain that I don’t ‘own’ was crazy to me. If they ever open the system or come up with a way of doing builds with an open tool chain I will consider it, but for now it really doesn’t matter. Between the Arduino and the LPC1343 board here at Adafruit (and the LeafLabs Maple I also have) I don’t ‘need’ to use something like the mbed.

30 Comments

I really like the mBed, on spec. I will never use it because of their online policy. It’s great for ease, but bad for someone who doesn’t have internet access all the time. What if I need to debug onsite and I’m out in the field? At any rate, if you carry a board with the lpc1768, that would be great. I like the peripherals, USB, Ethernet, SPI, I2C, all in one tidy little package. I also like the mBed form factor as it’s easily bread boarded.

I considered the mbed but discounted it for the very reasons you point out here. Its a cool little device but the thought of being dependent on a tool chain that I don’t ‘own’ was crazy to me.

If they ever open the system or come up with a way of doing builds with an open tool chain I will consider it, but for now it really doesn’t matter. Between the Arduino and the LPC1343 board here at Adafruit (and the LeafLabs Maple I also have) I don’t ‘need’ to use something like the mbed.

The maple is also a nice arm design by leaflabs that is supposidly open source if it was done in kicad then it would use open source software rather than eagle for open source hardware I am working on redrawing it in kicad.

I really like that mbed has Ethernet built in. I hope we’ll start to see this with other platforms. Arduino with an Ethernet shield is too bulky. I would love to see the Arduino Nano with Ethernet pins.

An interesting LPC1768 alternative is the LPCXpresso board – $35ish, comes in three different versions, each with a built-in debugger (Windows and Linux software distributions available). It still has Ethernet, and has more I/O broken out, but no online compiler.

I’d really like to see OpenOCD support for the debugger it comes with, though – the suggested toolchain has a code size limit much smaller than the actual LPC1768 FLASH size.

yes arduino made a good example how Open Source and Hardware approaches – spread the word and have an impact …

recently i mmade a workshop “internet of the real things” and used some processing programmed gateways between IRC, PLURK, TWITTER, PACHUBE to send and receive messages by simple OSC messages – realtime

randy, the xpresso’s are neat but not open source hardware and heavily subsidized by ARM/NXP which is why they’re so cheap. there is also (i recall someone saying) an export issue with them. We have one of the LPC1343 ones, its nice! but we like the LPC1343 reference board from microbuilder more (which is why we carry it of course even with the tradeoffs

The confusion and work in getting a toolchain set up is what drives me away from ARM devices. For AVRs, it’s dead simple to get WinAVR set up on a Windows machine, and most Linux distros include the necessary packages. For programming, you’ve got AVRDUDE – and AVR Studio is free on Windows for programming, debug, editing, etc.

With ARM, it’s all incredibly confusing. Each vendor has their own IDE, the free versions of which almost invariably impose code size / usage time restrictions even if they’re using GCC. Plus, those really only help with Windows – Linux users are left to their own devices (no pun intended), and OS X users are basically screwed. The boards with USB bootloaders (like the Microbuilder one) are nice, but if you want to go beyond the bootloader, again, you’re in big trouble if you’re not using Windows – especially with the LPC1343, which only has the SWD interface which OpenOCD doesn’t support. All this without mentioning the wide array of different peripherals implemented in different way (though CMSIS is supposed to help there).

It would be unbelievably awesome if someone could put together the Arduino of ARM – something inexpensive, easy to use, open (which doesn’t matter as much to me as “works”), but can also get out of your way and let you use plain GCC if you want to. I know there are a couple ARM-based Arduino-alikes out there, but none of them seem to have anywhere near enough momentum.

Maybe we’ll see something along those lines at the Arduino team’s big announcement? That’s what I’m hoping for, but who knows.

I don’t understand how the mbed can be as obnoxious as people are saying. Can you not write a simple bootloader using their online model, and then boot applications built with any other ARM compiler (eg gcc)?

4. HARDWARE AND DRIVERS
The mbed Microcontroller (the “Hardware”) contains interface firmware for the purpose of providing the USB interface functionality (“Firmware”). The Hardware may be sold to you or loaned under the terms of a separate loan agreement. The Firmware is licensed not sold. You may not rent, lease, sub-license, loan, translate, merge, adapt, disassemble, de-compile or reverse engineer the Firmware, nor create derivative works, vary or modify, make alterations to, or modifications of, the whole or any part of the Firmware nor permit the Firmware or any part of it to be combined with, or become incorporated in, any other programs or make available, the Firmware in any form, in whole or in part to any person without prior written consent from us.

Through the Website, we may provide access to you to download certain software drivers (“Drivers”) on to your computer. The Drivers are licensed not sold. Your use of the Drivers is limited to use solely with the Hardware. You may not rent, lease, sub-license, loan, translate, merge, adapt, disassemble, de-compile or reverse engineer the Drivers, nor create derivative works, vary or modify, make alterations to, or modifications of, the whole or any part of the Drivers nor permit the Drivers or any part of it to be combined with, or become incorporated in, any other programs or make available, the Drivers in any form, in whole or in part to any person without prior written consent from us.

I’m not really inclined to let ideology stand in the way of playing with neat hardware, so I really don’t give an airborne copulation about the mbed’s perceived oh-so-onerous software "shortcomings".

That said, my big gripe right now is that everyone seems to want to emulate the Arduino’s *hardware*, as well as the IDE, which is why there’s the Mbed, and the Maple, and all of Microbuilder’s various NXP boards, and the Xduino or whatever it’s called, and probably a dozen or two others that escape my mind just now. I for one would really prefer that people stopped trying to endlessly reinvent the hardware wheel, and just concentrate on the software end of things in a way that would support any of the dozens of inexpensive and, honestly, feature-superior ARM7 and/or Cortex dev boards already out there, be they open-source or not.

The Mbed is neat, but the STM32 Primer2 is $10 cheaper, has a color touchscreen LCD, five-way joystick, four buttons, a three-axis accelerometer, a microphone and speaker, rechargeable battery, MicroSD slot, and a bunch of other neat stuff. For about the same price, there are a ridiculous number of other NXP and STM "development boards" available (albeit not open source, Oh Noes11eleven), with SD slots and touch screen LCDs and 10/100 ethernet ports and so on, which I think makes them a better value than an Mbed. Unfortunately, writing software for any of these things is not really a n00b-friendly endeavor, nor are there any particularly useful communities for any of these devices. (At least in the English language; the Chinese DIY community really seems to be embracing a couple of very similar STM32 designs, but that doesn’t do most of us any good.)

Likewise, there are at least a half-dozen RTOSes that will run on one STM32 or LPC chip or another, with no real obvious huge differences between them, except that some are barely half-documented and others are essentially un-documented.

If people stopped trying to reinvent the wheel with this stuff, we could probably already have an easy-to-use software IDE that ran on every major OS, supported a large number of hardware boards from third parties, and worked natively with a reasonably mature and well-developed and -documented RTOS.

Ah, well.

Oh, with regards the Xpresso boards – the Chinese have created a clone sometimes called the "Nano M0", with the LPC1114, which sell on eBay for around $30 shipped. Same two-part design with built-in debugger, and appears to be compatible with the LPCXpresso IDE, if Google translation of various Chinese websites is to be believed.

mike, the microbuilder boards have nothing to do with arduino: they dont use the shields, or the IDE and code isn’t cross-compatible. its just a well designed lightweight devboard. the reason we carry them is because microbuilder wrote a very nice open source library that makes controlling the chip easy.

The best thing about the open source hardware and firmware work he did is that when i wanted to make an lpc1343-based project, it was much easier to take the ready to go files and move pieces around than to completely redo the board and then rewrite all of the libraries by hand. and of course, it worked the first time, too!

Also, you probably have it backwards – as long as you keep buying manufacturer-endorsed/sponsored devboards, there’s less likelyhood that people will develop better libraries and compilers because the devboard makers are bound to use&bundle the commercial compilers that are endorsed by the chipmakers. as far as i have seen, AVR is the only brand of microcontroller that somewhat-endorses the gcc compiler and has code examples that work with it.

Writing & documenting software libraries, IDEs, compilers and RTOS is hard work – When we hear this, the usual next question is – what have you done to contribute to the state of ARM development lately?

@Mike, second what LadyAda mentioned. Microbuilder’s boards are actually standalone ARM boards. They’re not following in mbed or Arduino’s footsteps. Kevin painstakingly put together the libraries himself and tested them.

As for the mbed itself, my opinion is that the online compiler sucks but they’re going in the right direction with making ARMs easier to use. The big problem is that it’s a research project for ARM. If the project ever gets pulled, ,mbed users are out of luck. That’s the main problem with closed source systems.

ARM is obviously paranoid about intellectual property since their whole business model is based on IP. That’s the reason why they don’t seem to grasp the concept of open source. I see it a lot in the tech industry, and interestly enough, quite often in the semiconductor industry. That’s actually counter-intuitive since semiconductor manufacturers are trying to sell hardware and open source software would actually promote that.

Microcontroller companies are starting to get the idea, with NXP, Atmel, and Microchip releasing a lot of source code. But unfortunately, the toolchains are still complicated to setup and use. That’s why I’ve become a big fan of Arduinos, especially for teaching microcontroller classes at Tokyo Hackerspace.

If ARM can learn to let go of something they will probably never take serious anyway, then the mbed could possibly usher in tons of new ideas and introduce a whole new market of people willing to play with their chips.

Wow … I’m blushing. mbed is actually a nice little piece of HW, and a great deal for what you get, but it was a non-starter for me since my own interest is developing real products and custom HW, and I’m pretty fond of step-through debugging when developping. While mbed does provide a basic Eagle schematic that parallels the mbed board, it’s still a pretty limited platform if you want to move from fun online project to a real product (and to be fair, that’s probably not mbeds target audience). All the boards I make myself and the SW I provide aren’t really trying to do anything remotely Arduino like … the boards are all pretty sparse and are just meant to serve as a starting point for people to build their own products, not just stacking endless shields on top. If you just want to make a motor turn, you’ll probably find an Arduino quicker and easier. If you want to make a custom <$10 assembled USB-enabled device with a decent amount of SRAM and processing power, though, the LPC1343 might be an interesting place to start, and hopefully the SW library and schematic I put together can at get you moving in the right direction (though the SW is still a work in progress).

ARM isn't easy compared to say Arduino, but honestly it's not harder than most other families like MSP430, etc. If you want pain-free ARM development, look at something like Crossworks for ARM that just works well right out of the box, but GCC for ARM is at least very actively maintained and does a pretty good job. I'm always impressed with the optimisations it manages to do these days, which is particularly useful on small 32KB parts like the LPC1114 and LPC1343.

>> the built-in libraries they use are not open source
Well, yeah. But doesn’t that leave you starting at about where you’d be starting with avr-gcc as well? Basic libc/libgcc and then you’re on your own? Although ARM peripherals tend to be more complex and less documented than 8bit parts

I can’t imagine using a “cloud” compiler. In the comments above Mike mentioned 4 reasons. To me one big issue is that the compiler version could change from yesterday to today and my code could behave differently. That is a major stopping point as I could never test all of the features of a big project for every new compile.

I use the Rowley Crossworks for ARM for all of my ARM development. I’ve been using it for years and recommend it as a purchase when consulting.

westfw, the Arduino libraries are all open source licensed. Microbuilder’s libraries are all open source licensed. mbed libraries are not. once you are finished with your code, you cant do anything with it offline because the libraries you linked to are closed and owned by ARM.

> Although ARM peripherals tend to be more complex and less documented than 8bit parts

westfw: ??? I’ve always found the documentation at least from NXP to be to a very high standard, but I don’t have a lot of experience with 8 bit processors to know the difference so maybe I just don’t know what I’m missing. The initial learning curve with any platform is hard, but documentation definately isn’t a problem I’ve encountered. Between the user manual, datasheet and extensive code samples provided by NXP I didn’t find it difficult to get any peripherals working on the 1343, aside from one issue with waking up from deep sleep via a timer in SW only which wasn’t documented clearly, but NXP gave me a solution the same day on how I could do that. In terms of ARM being more complicated than 8-bit, you can get USB HID working in C on the 1343 with about 15 simple lines of code thanks to the drivers being built into the ROM. That’s a nice little change for the better. I’m yet to see anything as painless as that, even if there are limitations like only a single report size using the ROM drivers (and you can always write your own for something more flexible).

I would say the real difference is that it you get away from Arduino, you really need to be able to program in C which will take a bit of effort (like any other programming language). But if you know some C basics, I can’t imagine ARM being harderer than any other platform, and there’s a large community behind it on the Internet.

For what it’s worth, the leaflabs maple (http://leaflabs.com/devices/) is totally open sourced and supports the Arduino language, a few of the libraries already, and has a more or less functional toolchain on all major OSes.

While there are some valid complaints about the #mbed online compiler restriction I’ve found it to be a great addition to the Arduino in terms of learning/Rapid Prototyping. In fact, Mbed make this point themselves:http://mbed.org/handbook/Tour

"Is mbed for me?
The mbed is now available to order, but before you do, check it is for you!

What mbed is not good for!
mbed is not a replacement for professional embedded development tools or evaluation boards. It is missing a lot of features those tools naturally come with, like a JTAG interface, a breakpoint debugger, integrated peripherals, or even a standard offline compiler. We are not trying to replace these tools, so if you need these sorts of features, mbed is not for you!

In this case, and for turning prototypes in to products in general, we’d recommend you choose one of the many great existing solutions for working with ARM Microcontrollers, and you’ll be much happier.

What mbed is good for!
mbed is designed for quick experimentation and iteration, where the focus is trying something out rather than optimising a solution. And that means it is good for anyone from professional embedded engineers to people with expertise outside embedded exploring it for the first time. Think of it as a pencil and paper, compared to a CAD program (the professional tools)."

Sure, initially I also wished for the offline open source compiler, but now I just use it for sketching and learning…what it seems it was designed for.

To be constructive, it just needs an OSS toolchain, and ARM is probably second only to intel in support – both Fedora and Ubuntu for larger systems, but the GCC chain is there, and there is even QEMU. Even Nokia tablet-phones with scratchbox. All have the open toolchain.

They would do better to spend a month or two producing a GCC cross compiler system than spending any effort on the website to make the compiler do more.