You are currently browsing the tag archive for the ‘embedded’ tag.
Yesterday, cyanogenmod was forced by Google to remove the CyanogenMod Installer from the Google Play Store, citing that it ‘encourages users to void their warranty’. However, if you know that cyanogenmod is working with hardware manufacturers to preinstall CyanogenMod to create alternate Android devices then Googles demand appears in a very different light.
I expect the next step for Google is to start locking down side-loading as well (installing apps through alternate channels) to further tighten control.
The air for embedded Android is getting thinner.
A few weeks ago I blogged about an ars technica article which looked at Google’s increasing control over the Android ecosystem (“Android “open for embedded”? Must-read Ars Technica article”).
Yesterday, Vision Mobile published a related post “The Naked Android” which keenly describes the role of Google Play Services and how Google is driving towards its Android endgame of “flatten, expand, mine”.
More food for thought if you’re considering Android for embedded.
Update (Nov 20): See also part 2 of this post.
A few days ago ars technica published an article “Google’s iron grip on Android: Controlling open source by any means necessary”.
If you are considering Android for embedded this article is a must-read to understand the severe ramifications of Google’s tight (and tightening) control on the Android technology and ecosystem.
Some quotes from the ars technica article:
- “Android is open – except for all the good parts“
- “Android actually falls into two categories: the open parts from the Android Open Source Project (AOSP) … and the closed source parts, which are all the Google-branded apps”
- “Android open source apps … turn into abandonware by moving all continuing development to a closed source model.”
- “Joining the OHA requires a company to sign its life away and promise to not build a device that runs a competing Android fork.”
- “Google Play Services is a closed source app owned by Google … to turn the “Android App Ecosystem” into the “Google Play Ecosystem”
- “You’re allowed to contribute to Android and allowed to use it for little hobbies, but in nearly every area, the deck is stacked against anyone trying to use Android without Google’s blessing“
Compare this with a recent Wired article “Oracle Makes Java More Relevant Than Ever”:
“Oracle has actually opened up Java even more — getting rid of some of the closed-door machinations that used to be part of the Java standards-making process. Java has been raked over the coals for security problems over the past few years, but Oracle has kept regular updates coming. And it’s working on a major upgrade to Java, due early next year.”
Update (9/25): Some users may be experiencing problems when installing the Java ME SDK 8 EA plugins into NetBeans. Please see the updated Java ME SDK 8 EA Release Notes for a workaround.
As I blogged recently, the Java ME 8 specifications are moving full steam ahead. And today, Oracle is announcing the immediate availability of Java ME 8 Early Access.
Java ME 8 in a Nutshell:
Java ME 8 is a significant update of the Java ME platform and provides a modern, flexible, and feature-rich embedded software platform that is aligned with Java SE 8 and allows more efficient development, deployment, and management of embedded software solutions:
- CLDC (Connected Limited Device Configuration) 8: Support for Java SE 8 language features and popular Java SE APIs, an updated virtual machine, and footprint optimizations
- GCF (Generic Connection Framework) 8 (part of CLDC 8): IPv6, enhanced connectivity, new protocols, and support for TLS 1.2
- MEEP 8 (Java ME Embedded Profile) 8: Provides a “services-enabled” application framework, footprint reductions through platform “right-sizing”, dedicated new embedded APIs, and an enhanced security model
- Device I/O API version C: Updated to Java ME 8/SE 8 language support, and new functionality and peripheral support
Java ME 8 Early Access scales down to very small target devices – the single-chip solution used on the STM32F4DISCOVERY board has 192 KB of RAM and 1 MB Flash, and costs around US $5 in volume, yet can host a complete solution of Java ME 8 EA runtime, networking and device access functionality, and Java application.
With this update, Java ME 8 is positioned to be the platform of choice for intelligent devices and the Internet of Things.
To learn more about Java ME 8:
- View the 15 minute webcast “Introduction into Java Micro Edition (ME) 8″
- Browse the full slide deck on “Java ME 8 and The Rise of the Internet of Things”
Getting started with Java ME 8 Early Access:
Java ME 8 Early Access is available now for the following developer boards:
- Raspberry Pi Model B (ARM11/Linux)
- ST Microelectronics STM32F4DISCOVERY (ARM Cortex-M4)
Software development is supported by the Java ME SDK 8 Early Access, which includes a Java ME 8 runtime emulation on Windows as well (so you can get started even without a developer board).
- Learn more and download Java ME 8 Early Access binaries and Java ME SDK 8 Early Access tools
- Access Release Notes and step-by-step Getting Started Guides
Embedded @ JavaOne is really coming into its own this year. Lots of cool and relevant topics, content, and activities related to Java and embedded. A quick sampler:
Be sure to watch the JavaOne keynotes for embedded announcements and some cool demos …
- Java Embedded Extreme Mashups: Building Self-Powering Sensor Nets for the Internet of Things TUT3676]
- Home Automation for Geeks [CON9177]
- Trust Me, I’m an M2M Device [CON7872]
- Is It a Car? Is It a Computer? No, It’s a Raspberry Pi JavaFX Informatics System [CON3243]
- JavaRCX: A Java Embedded Lego Mindstorm RCX Emulator [BOF7901]
- Beyond Beauty: JavaFX, Parallax, Touch, Raspberry Pi, Gyroscopes, and Much More [CON2540]
- Industrial Product Development: Modular Design in Multiple Dimensions with Java [CON2027]
- Performance Tuning and Optimization of Apache Hadoop with Java Embedded on ARM [BOF7216]
- Creating Multidevice Interactive Entertainment for the Living Room with Java [CON9176]
- Controlling NAO Robot with Java [CON11839]
- Java ME 8 Overview: A New Platform for Embedded Development for Small Devices [CON2267]
- and much more … for a full list of sessions, see the Content Catalog.
Internet of Things with Partners:
A summary of various demos, sessions, and activities by Oracle, Eurotech, and Hitachi related to the Internet of Things.
- A number of demos around embedded use cases, technologies, and solutions by partners across the ecosystem, including the “Device Showcase”
Duke’s Choie Awards:
- Be sure to watch for innovative embedded solutions with Java
Java Embedded Challenge for Raspberry Pi:
- Fun and creative hacking with Raspberry Pi, sensors, and more – equipment and expertise provided.
OTN Lounge and Java Codegarten:
- Hang out with the experts, including specialists in Java Embedded.
For more information on the above, check out the JavaOne Experiences page.
See you in a few days at the show!
One of the core requirements for embedded Java applications is the ability to access I/O devices, such as sensors, switches, converters, actuators, LEDs, and so on to enable the embedded system to interact with the world around it.
Java ME Embedded includes the Device Access API (DAAPI), which is a comprehensive API that provides access to a range of common I/O devices directly from your Java application in an easy and platform-independent manner. No native code, recompilation, or other “traditional embedded trickery” required.
That works great if you have your target platform already available and up-and-running. But what if you want to start software development before your target platform hardware is available? Or you want to develop most of the code on a Desktop PC for convenience and speed purposes? The Java ME SDK has you covered.
The Java ME SDK offers a set of tools as well as plugins for NetBeans and Eclipse which allow you to develop Java ME Embedded applications efficiently and leveraging your existing Java expertise. Another great feature is that it includes a full emulation runtime which emulates a Java ME Embedded target platform on the PC. Furthermore, the Java ME SDK also includes a tool called the “Custom Device Editor”, which allows you to customize the emulation runtime to your needs (for example, by adding the specific I/O devices of your actual target hardware) and even allows you to implement simulated device behavior (in Java, of course).
To get started with custom I/O devices in the Java ME SDK, check out an excellent blog post Tom McGinn from the Oracle Education Team, explaining how to add and simulate an I2C temperature sensor.
There is an interesting discussion happening on the LinkedIn “Internet of Things” group right now, in response to the InfoWorld article a few days ago titled “Oracle hitches Java to ‘Internet of things’“.
The discussion touches on some interesting details on why Java may or may not be a good choice for embedded. Besides the fact that Java is already proven to be one of the most widely deployed embedded technologies (“10 billion and Counting …”) I think the discussion misses a key point: The coming disruptive shift in the embedded industry.
Change Driven by Smart Devices
The embedded industry as a whole, and the embedded software industry in particular, are on the cusp of a disruptive shift in the way products and services are built and delivered, and how they interact with the rest of the world. This is driven by the explosion of smart, connected devices and the resulting need for security, interoperability, scalability, and faster time-to-market - requirements that are core to the value of the Internet of Things (IoT) space.
To understand why Java is a key technology for the embedded space, it is instructive to look at the mobile phone industry of about 10 years ago. The mobile industry was defined mostly by proprietary technologies, specialized hard- and software, lack of interoperability, and any number of other complexities. Bringing products and services to market in this fragmented environment was costly, time consuming, and didn’t scale – stifling the entire ecosystem and limiting participation to a few companies with deep enough pockets to take the risk.
Embedded Devices == Smart Phones?
Enter the first smart phones. These phones were much more than just devices. They provided a (relatively) open software platform with a consistent set of functionality across a range of devices, simple development, deployment, and monetization models, and ready-made integration with back-end services.
With this new model, the ecosystem equation changed completely. Now, instead of wasting time reinventing the wheel to enter a particular technology island, companies and developers were free to innovate on top of these platforms with a low barrier of entry but large scale opportunities. Almost immediately, we saw an explosion of new and innovative features, software, services, and even entirely new business models, benefiting an entire new ecosystem of those willing to make the shift.
Embedded Needs a New Software Paradigm
The similarities to todays embedded ecosystem are striking. Of course, the embedded markets are more varied and specialized in their needs compared to mobile. But fundamentally, the embedded industry has many of the same problems the mobile industry had 10 years ago. Embedded must move beyond the current fragmented and complex approach of building basic product functionality and towards a platform model that enables a shift upstack, to increase value in application software, business logic, services, and data. This is a key prerequisite to scale up and deliver new products and services for smart, connected devices.
The embedded software running on these devices will become much more challenging: It needs to be more flexible, robust, and secure than in the past while meeting ever tighter budget and time-to-market constraints. Successfully implementing such software requires the industry to embrace modern software paradigms, including productive, robust, and standardized programming languages, APIs, and tools, cross-platform execution environments, security design, high levels of pre-tested integration, software reuse and scalability, standards compliance, interoperability, and out-of-the-box integration with back-end services.
Top Technical Reasons for Java in Embedded
By design, Java already meets many of the above requirements. Over the years Java technology has been continuously optimized for embedded, and is being used across industries from smart cards, to industrial control units, robotics, eHealth devices, smart meters, consumer electronics, gateways, networking equipment, imaging systems, and much more.
Why you should consider Java for embedded solutions:
- Addresses key challenges of traditional embedded development by decoupling software logic from underlying platform (board/device, chipset, peripherals, OS, native code, libraries)
- Virtual Machine concept enables feature-rich, scalable, and robust cross-platform/multi-architecture application platform and promotes software reuse
- Simple and productive software development and deployment model (language, APIs, tools, reuse) reduces cost and time-to-market
- Single end-to-end development paradigm from client devices to back-end systems (where Java already is the de-facto standard)
- Enables flexibility and product extensibility through software services and in-field software delivery, updates, and management
- Highly-functional, deployment-ready runtimes reduce integration, testing, and support costs of final solution
- Open, standards-based technology, interoperable with many industry standards
- Enables leveraging large Java ecosystem of expertise, innovations, products, tools, code, and partners
An example of a successful embedded Java product is Oracle Java ME Embedded, which provides an optimized, robust, and complete Java runtime for resource-constrained devices as small as 130 KB RAM and 350 KB ROM/Flash - and which has already been adopted by the four top chipset and wireless module manufacturers.
In the End, The Value is in the Data
Increasingly, a successful embedded solution doesn’t end with the device. The real value of embedded is in the data, and more importantly, in the business information that can be extracted from that data. A client software platform is only as good as the integration into the enterprise it enables. That is why Oracle is not only driving Java Embedded software into devices, but also puts strategic focus on the Oracle Internet of Things Platform in order to enable customers and partners to build enterprise-class end-to-end solutions that deliver business value for IoT deployments.
For more information on why you should consider Java in embedded, please see the webinars, white papers, research reports, and more available throughout my blog.
Update 7/23/13: A good article/interview is on eWeek: “Oracle Aims Java ME Embedded at the Internet of Things”
- Oracle Java ME Embedded 3.3 GA (General Availability)
- Oracle Java ME SDK 3.3 GA
- The Oracle Java Platform Integrator Program
Here are the details:
Oracle Java ME Embedded 3.3
Oracle Java ME Embedded is an optimized, feature-rich Java runtime for resource-constrained devices, covering a wide range of platforms from small micro-controller devices up to mid-range embedded systems, including “Internet of Things” (IoT) and “Machine-to-Machine (M2M) devices.
The 3.3 release comes with a range of new features and enhancements, such as additional peripheral support, developer productivity features (network monitor, memory status monitor), API enhancements, and other improvements. Ready-to-run binaries are available through Oracle Technology Network (OTN) for the following platforms:
- KEIL MCBSTM32F200 developer board* (ARM Cortex-M3/M4 with ARM RTX)
- Raspberry Pi Model B (ARM11 with Linux)
Further, the Java ME SDK features an integrated Java ME Embedded emulation environment, which enabled developers to develop and test Java ME applications directly on PCs without the need for a physical hardware platform.
Oracle Java ME SDK 3.3
Along with the update of Oracle Java ME Embedded, the Oracle Java ME SDK toolchain has been updated to support the new Java ME Embedded features and platforms as well as improved device emulation, integrated memory and network monitor, usability enhancements, full Windows 7 support, and more. The NetBeans and Eclipse plugins have been updated as well.
Oracle Java Platform Integrator Program
The Oracle Java Platform Integrator Program enables companies developing embedded products on devices to leverage the technologies Oracle is providing across their choice of hardware and operating systems, allowing them to increase their differentiation and value-add, improve application and service portability across a consistent platform, and reduce engineering efforts and time to market for their solutions through the pre-integrated and optimized Java Embedded stack.
Why is this important?
With this announcement, Oracle continues its push into the embedded space, with an enhanced and robust Java ME Embedded runtime, increased platform coverage, improved toolchain, and partner program that address a wide range of embedded use cases and opportunities in the IoT and M2M spaces.
Ok – Where can I find out more?
- See the press release and watch the new video “Oracle Grows Java Capabilities in the Internet of Things”
- Review the supporting resources (bottom of the press release page), including webcasts, “Getting Started” videos, and more
- Check out the updated product home page, with Data Sheets, FAQs, and White Papers
- Refer to a number of posts on my blog for more information (here, here, here, and here)
Exciting times. Stay tuned for more to come.
* Note: While the MCBSTM32F200 is the officially supported board, the release also works on the MCBSTM32F400 (which is the Cortex-M4 version)
Update 715/13: Added a note on target platforms.
A key feature of Java ME Embedded is the ability for developers to access peripheral devices directly from Java application code. This significantly simplifies development effort because the device-related code is much easier to write, portable across platforms, and there is no need for complicated native code development and integration.
The latest Device Access API is available in Java ME Embedded 3.3, and already supports a host of features, interfaces, and peripherals such as GPIO pins, I2C and SPI busses, serial communication and modems, ADC and DAC converters, pulse counters, and more.
For Java ME 8, we plan to enhance the Device Access API even further by including support for the new Java ME 8 language features aligned with Java SE 8 (such as Generics, Annotations, Try-with-Resources, and so on), adding a few more popular functions (pulse-width-modulation (PWM) output and more), and making the API available as a standard for Java ME and Java SE.
Because hardware integration is such a broad and potentially complex topic we would like to hear from developers: Does the Device Access API meet your needs? Do you see any potential pitfalls and shortcomings? To this effect, we just published the javadocs for the “Device Access API Proposal for Java ME 8″. Please have a look and give us your feedback, either as a comment to this blog entry, or via email.
Check out the latest Java Spotlight Podcast number 138:
An interview with Paul Perrone, found/CEO of Perrone Robotics, on the MAX robotics and automation platform and Life Saving Embedded Java.