Configure an Intel® Joule™ for IoT App Development

This page provides reference information for how to set up and configure an Intel® Joule™ board to work with the Intel® XDK for developing IoT apps. Links to useful background information, drivers, and OS images are also included.

Intel module

Hardware Assembly

BIOS flash

for Windows

Existing documentation for how to flash BIOS using a Windows host can be found here.

for Linux

If you don't have a Windows host machine handy, Intel® Platform Flash Tool Lite for Ubuntu may be used to update the BIOS.  See the Flash Tool Lite User Manual.


Target OSes

Using Ubuntu* 16.04 Desktop as a target OS

Flash BIOS

A summary of the steps needed to flash the BIOS on an Intel Joule™ :

  1. Download and install the drivers
  2. Reboot the target board.
  3. Connect the Type C USB cable to USB port on your host computer.
  4.  Connect the 12V power supply into an available wall outlet.
  5.  Hold down the DNX button on the board while connecting the Type C USB cable and 12V power supply to the board.
  6.  In the Public folder, locate the .bin file, named Joule_C0-X64-Release-131-Public_DNX.bin and move this file into the DNX folder.
  7.  On your host computer open a command prompt window (cmd).
  8.  Navigate to the DNX directory that you extracted earlier.
  9.  Enter the following command: 
         Flash.bat Joule_C0-X64-Release-131-Public_DNX.bin
  10. Unplug the USB cable and power supply from the development platform to power it completely off

Creating a bootable device

  1. Download the generic 64-bit .iso image for Ubuntu Desktop 16.04.
  2. Format the media where you intend to flash the image; it may be necessary to download additional software to format the media (Rufus, Win32 Disk Imager, etc.).
  3. If using the Win32 Disk Imager option, launch the program and browse to folder where you downloaded the .iso Ubuntu image.
  4. From the device drop-down list, select your media device.
  5. Click “Write” and “Yes” to confirm overwrite when prompted. Wait for the image writing process to finish and remove the bootable device from your host machine.

Install Ubuntu Desktop 16.04 on the Joule

  1. Connect a hub device to the USB port on the Joule and plug in the bootable device we just created to that; the board should not yet be powered on.
  2. Connect a mouse, keyboard and the bootable device to the hub.
  3.  Connect the HDMI cable from the board to a monitor.
  4.  Connect the 12V power supply to the Joule.
  5.  As the device is powering up, press F2 or “B” to access the boot menu.
  6.  Under the boot menu, select “Boot Manager –> USB device”.
  7.  Hit F10 to “Save and Exit”.
  8.  Reboot your Intel Joule™ module; it should now boot from the USB media, showing the Ubuntu splash Install Screen.
  9.  Choose the “Install Ubuntu” option.
  10.  When prompted to install the OS to a location, you have two options:
    • To install Ubuntu* on an external SD card, you can differentiate the internal card from the external SD as follows:
      • The internal card is called:  15.7 GB MMC 016G32  
      • The internal card is an MMC (MultiMediaCard) and is displayed in the drop-down list while the external card is an SD card.
    • To install Ubuntu on an external SD card, you must select the card. It has the name: 15.5 GB SD SA16G

NOTE: The default Ubuntu* 16.04 Desktop image doesn’t ship with mraa, npm, ssh, and does not contain the Intel XDK Daemon included, so we will have to install them manually.

Install the necessary dependencies (mraa, npm and ssh)

  1. Connect to wifi.
  2. Open the terminal in Ubuntu Desktop:
  3. If you get an error like
         E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
         E: Unable to lock the administration directory (/var/lib/dpkg/) is another process using it?

    Try the following command:

         $ sudo rm /var/lib/apt/lists/lock

    And then execute the following:

         $ sudo apt install nodejs-legacy
         $ sudo apt install nodejs
  4. Install ssh:
         $ sudo apt-get install ssh
  5. Install npm:
         $ sudo apt install npm
  6. Install the dependencies for mDNS; then use NPM to install mDNS:
         $ sudo apt install libavahi-compat-libdnssd-dev 
         $ sudo npm install -g mdns
  7. Install package.json:
         $ sudo npm install -g package.json
  8. Install mraa:
        $ sudo npm install -g mraa
  9. Install upm:
        $ sudo npm install -g upm

Daemon installation

The Intel XDK daemon assumes the user is logged in as root. We will add the support for non-root users later; until then you can do the following to create a root password and enable root:

     $ sudo passwd root
     $ sudo passwd –u root

Open the sshd_config file located in Ubuntu’s /etc/ssh/sshd_config. To edit this file with the nano text editor, run:

     $ sudo nano /etc/ssh/sshd_config

where you must comment-out the line that says PermitRootLogin prohibit-password, and instead add this below it:

     # PermitRootLogin prohibit-password

           PermitRootLogin yes

Before you launch the Intel XDK, you may need to restart  sshd:

     $ sudo systemctl restart sshd

NOTE: The device board and the host computer must be connected to the same Wifi Network.

After the Intel XDK recognizes the board now, it will show you a message asking whether you want to install the daemon. You must select the “Install Daemon” option to allow the board to regularly communicate with the XDK.

Congratulations! You have successfully set up your development board to start working with the Intel XDK.

Tips for Joule Card:

  • If you need more power for an expansion board, you must connect two extra cables: a ground and voltage cable
    • In the breakout 2 (J13), the pins 1, 3, 5, 7 and 9 are GND (Ground).
    • In the breakout 2 (J13), the pins 2, 4, 6, 8 and 10 are VPV (Power, Voltage).
    • Each pin has different quantity of Voltage:
      Connector Pin Number Net Name (Pre-Level Shifter)
      1 GND
      2 V5P0V
      3 GND
      4 V5P0V
      5 GND
      6 V3P3V
      7 GND
      8 V3P3V
      9 GND
      10 V1P8V

If you get an error such as "Cannot find modules 'nameModule'", install the missing modules with NPM:

     $ sudo npm install nameModule

For more complete information about compiler optimizations, see our Optimization Notice.