The Chaos and The Craftsmanship of Shenzhen – Intel IDF 16


A Pilgrimage To The Maker Mecca

When I arrived in Shenzhen this week to participate in Intel IDF 16, I hoped to learn more about the roaring technological innovation happening in this unique city. This is part III in my series documenting aspects of my brief trip to the city of makers this week. Read part II here and Part I here.

Developed By You

The ultimate purpose of my visiting Shenzhen, aside from meeting with a few interesting partners and customers, was to give two talks at Intel IDF 16 on topics relating to Intel’s Inventor Platforms and the results of research I have been doing with customers on their experience productizing on the Intel Edison compute module. Being new to Shenzhen, it was fascinating to see what the local “players” in the maker space where up to.


A few interesting items were announced at the keynote including a beta of the Intel Curie module software experience (variously described as a BSP or an ODK aka Open Developer Kit) and a new robotics kit based on Intel RealSense and the UP Board from AAEON. There were other announcements as well relating to Intel 3D XPoint Memory. [Read more…]

Node.js for the Internet of Things at O’Reilly Solid

Had the opportunity to give a workshop on the topic of Intel Edison, Node.js and the Internet of Things at O’Reilly Solid earlier today. Also had a great time attending Sandeep Mistry’s Bluetooth LE + Arduino workshop later in the day.

Notes for getting Bleno and Intel Edison working together

Problem: Bleno makes a single call and then stops working after running as a Node.js script on Edison. After that, it is impossible to connect to the service and read characteristics. The issue seems to be that “bluetoothd” (running in the background) creates it’s own GATT server which stops you from creating your own…you have to therefore kill off the process. See this bug for more details.

You can either do “killall bluetoothd” on the command line or, for a “more permanent solution,” use:

systemctl disable bluetooth

I had the most success when using an iOS device with the LightBlue iOS app installed to scan.If you want to get really fancy with Edison you might try something like this:

exports.killBluetoothd = function() {
    console.log('Unblocking BLE');
    function puts(error, stdout, stderr) { sys.puts(stdout) }
    exec("killall bluetoothd", puts);

Bluetooth Smart / BLE Scanning on OSX + Xcode 6

Starting to play around with BLE development with Intel Edison, here are some useful tools for scanning and discovering local BLE services for developers.

I am using an older MacBook Pro and I frequently encountered problems connecting to and reading BLE characteristics. Of the below options, I have had the best success using the LightBlue iOS app (NOT the OS X app). I suspect I might get different results if I tried these scanners with my newer Mac Air.

First, there is Xcode’s Bluetooth tools. You can get them by opening Xcode and selecting “Xcode -> Open Developer Tools -> More Tools” and then downloading the “Hardware IO” libraries after logging in with your developer credentials.
[Read more…]

How I want to develop code for Intel Edison

Vision: Developing code for connected devices should be substantially similar to the way we develop software for web pages. GitHub should be the primary mechanism by which code is versioned and deployed to connected devices, allowing developers to have the freedom to use the IDE or development environment of their choice.  Furthermore, BLE is an ideal tool for interacting and configuring internet connected devices and reading sensors and should be the primary means of communicating and configuring such devices. Wi-Fi should be used for heavier tasks like deploying code via GitHub.

Below is a new approach to software development using local connected devices I want to propose. My primary aim is to build on BLE as the foundation for software development using micro-controllers and Javascript robotics libraries like Johnny-Five.

The core principal is to use BLE for most common development tasks and basic settings and sensor readings in an automatic fashion. Wi-Fi will be used to deploy and pull Node.js code from a GitHub repo we teach the Edison by writing to a characteristic over BLE during the boot phase. This may be best accomplished by using a simple mobile application with a “sheet” of entry fields.

The basics might run something like this:

  1. Intel Edison has an automatic BLE profile which exposes the following characteristics:
    1. Intel Edison Profile GATT service(s)
      1. Edison name (writeable)
      2. Edison password (optional, writeable)
      3. Edison Wi-Fi SSID (writeable)
      4. Edison Wi-Fi Password (writeable)
      5. Edison development Repo (GitHub) (writeable)
      6. Edison IP Address service (writeable)
      7. Edison available hard drive space (Readable)
      8. Edison is online / offline (Readable)
      9. Edison battery (Readable)
    2. Edison Sensor Services (w. characteristics) (A list of all sensors currently plugged into Edison and their values), perhaps this is just a list of pins and any value coming through the pins
  2. When I plug Edison in near my computer, I want to be able to scan for my Edison and then use a mobile app to teach it the Wi-Fi SSID and Password so Edison can jump online (or computer). This is all done using BLE.
    1. New users can automatically detect Edison with some mobile app and configure it for Internet right away
    2. The mobile app can, like Spark Core, help users read / write pins as needed
  3. Development workflow
    1. Once Edison is online, it can pull from a provided GitHub repo and then run the Node.js code in that Repo on demand, you just need to write a GitHub repo to the required characteristic. These actions are trigged by BLE commands sent from a mobile device.
    2. The mobile app (or desktop app) can be used to trigger “rebuild, install and run” actions via BLE to make Edison restart and run code on the device
    3. The following signals are supported:
      1. Install and rebuild / Clean Node.js
      2. Run Main.js service
      3. Stop Node service
      4. Get latest from GitHub
  4. Some type of scanner is running which detects whenever pin inputs have been modified and automatically rebuild Edison’s service characteristic listing

Thats it. There also likely needs to be some trickery around setting / resetting a password or auth token with the Edison. Much of the above information should also be available via REST API potentially.

Another important step will be to make it easy to trigger pins using BLE via a paired mobile device.


Configure Intel Edison for Bluetooth LE (Smart) Development

Thanks to for compiling this awesome reference in the Intel community forum.

Note: There is a known issue with “bluetoothd” creating it’s own GATT server automatically and blocking Bleno from doing this on Edison. The solution is to kill it or disable it permanently. Otherwise, you will see the service advertised but it will disconnect before you can read any data.

Assuming you have a current Intel Edison (this guide may be subject to change if new updates are released), perform the following steps:

  • Plug both your Micro-USB cables into Edison (which has been snapped into a large Arduino break-out board)
  • Open terminal and type: “screen /dev/cu.(TAB to autocomplete your Edison port name) 115200 -L” as per the Intel guides

[Read more…]

Lets Turn Intel Edison Into An iBeacon!

Lets turn Intel Edison into an iBeacon!  You will need a Mac, an Intel Edison and an iPhone or iPad with the latest iOS to run through this example.

Note: There is a known bug with BlueZ and Bleno, keep an eye on this bug. I have better expanded coverage of a working solution in my other post linked here.

Before we start, we must first thank for compiling this awesome reference in the Intel community forum. Thanks for being the best!
[Read more…]