Tag Archives: Windows IoT

node.js on Windows IoT

Hello World application using node.js on a Windows IoT-capable Raspberry Pi 2

I’m a big fan of node.js on embedded devices and was pleased to hear that Microsoft would be making node available for Windows IoT.

What makes node great for embedded devices is that it is asynchronous, enables tight/small applications, has a rich ecosystem for extensions and offers built-in web services. It’s trivial to set up a RESTful API and web server, which both come in handy for talking to and managing devices.

For Windows on Arm (WoA), like the Raspberry Pi 2 (RP2), Microsoft’s implementation of node.js is based on the Chakra Javascript engine. As a result, there is a different process to get node.js on a Windows IoT device, as compared to downloading and building node for a Linux target device.

In the following steps below, we’ll work towards running a Hello World node app on a Windows IoT-enabled RP2. I’ve used the Microsoft developer guide to run your first node application which in addition showing how to load node on a device, outlines how you might interface to the underlying Windows IoT system via a C++ extension.

Getting node.js on to your Windows IoT device

The first thing that we must do is download the “Node.js Tools for Windows IoT“, which includes the Chakra version of Node.js and tools to help manage node for devices. You may need to scroll down a bit to find the Node.js Tools, but once you do, run the installer to install this to your Windows development machine.

Install Node.js Tools for Windows IoT

Install Node.js Tools for Windows IoT

You’ll also need to download Python 2.7 for your Windows development machine. There are multiple versions available, but to be consistent with Microsoft’s documentation, I pressed the Python 2.7.X button.

With the necessary tools installed, you need to build and copy the Chakra node engine for the RP2. To do this you must first gain access to the device. Use Windows Explorer and enter:

\\<IP Address of the RP2>\C$

You will be prompted for the username (<IP Address of the device>\Administrator) and password (p@ssw0rd). This step is important because it allows your development machine to have access to the necessary target locations on the RP2 where node is to be loaded.

Access Windows IoT device

Access Windows IoT device

With that in place, we’re ready to build and load node.js. To do this, we’ll run a PowerShell script called CopyNodeChakra.ps1, using the following command:

& 'C:\Program Files (x86)\Node.js (chakra)\CopyNodeChakra.ps1' -arch ARM -ip <IP Address of the RP2>

If the security policy limits successful completion of this command, open PowerShell as Admin or run via a PowerShell ByPass. If successful, node will be copied to the C:\Node.js (Chakra) directory. (In the picture below you can see that I used the ByPass to complete the script.)

Copy Chakra to IoT Device

Copy Chakra to IoT Device

To verify that node is properly installed, you can start a PuTTY SSH session to the RP2 and navigate to the install location then issue the familiar node and npm version commands:

Check node and npm versions

Check node and npm versions

Run Hello World on a Windows IoT RP2

With node on the RP2, we’re ready to run our hello world application. I copy-pasta’d a very simple application using a text editor, but if it’s a more complex application, you can use Visual Studio to manage development. Since I had a Windows Explorer session opened, I just copied my hello.js application to the RP2 and put it in the directory in which node was installed – of course, as the node application matures, you’ll want to create a separate deployment directory.

Hello World node application (Hello.js)

Hello World node application (Hello.js)

Before we run the application, we need to ensure that the node.exe can communicate through the firewall. We’ll need to connect to the device, using PowerShell and issue the following commands:

' Start the WinRM service for remote connections
net start WinRM
' Set as trusted host
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <IP Address of the RP2>
' Initiate a session with the RP2
Enter-PSSession -ComputerName  -Credential <IP Address of the RP2>\Administrator
' With the remote session established, allow the firewall exception for node.exe
netsh advfirewall firewall add rule name="Node.js" dir=in action=allow program="C:\Node.js (Chakra)\Node.exe" enable=yes

Finally, we’ll use our PuTTY session to run our node Hello World application and then connect to our Windows IoT device using a browser to see the results:

Hello World on Node for Windows IoT

Hello World on Node for Windows IoT

Advertisements

Installing Windows IoT on a Raspberry Pi 2

With Windows 10, Microsoft is reintroducing their embedded systems strategy as part of their Windows 10 roll-out under the Windows IoT umbrella. From a seminar that I was at, Microsoft introduced three Windows IoT editions which are dependent on the platform/functionality target: from small embedded solutions (Windows 10 IoT Core), through mobile solutions (Windows 10 IoT for Mobile Devices) to more powerful industrial applications (Windows 10 IoT for Industry Devices).

Windows IoT Editions

Windows 10 IoT Editions

In this post, we’ll explore the Windows IoT Core by first installing it on a Raspberry Pi 2 and then running a small application.

Installing Windows 10 IoT Core

Download the Windows SD Card Image File

For the first step, Microsoft has provided instructions on how to install on a Raspberry Pi 2, so we’re not breaking new ground, just trying to replicate their guidelines.

After downloading the ISO for Raspberry Pi 2 from the Microsoft Download Center, run the Windows_10_IoT_Core_RPi2.msi to install the necessary files and tools on your system.

The first step is to sign in to your Windows Connect and download the Windows IoT Core preview for Raspberry Pi 2. After filling out the surveys (EULA agreements), proceed to download link for the Windows IoT Raspberry Pi 2 Preview. Once downloaded, extract the flash.ffu file, which will be used to prepare the SD card with a Windows 10 IoT Core image.

As of mid-June 2015, Microsoft now has simplified the process greatly. There is now a nice installer, which comes with a tool to flash the SD card auto-magically.

Install Microsoft IoT for Raspberry Pi 2

Install Microsoft IoT for Raspberry Pi 2

As per Microsoft’s recommendation, I purchased a Class 10 16GB Micro-SD.

Class 10 16GB Micro-SD card

Class 10 16GB Micro-SD card

Next, we’ll use the IoTCoreImageHelper.exe utility as part of the install package to flash the SD card – you can find it by searching for IoTCoreImageHelper. Previous incarnations of this process used DISM, but there were complaints of frequent errors, which I also saw. This new tool finds the SD card, allows you specify the location of the flash.ffu file and then flashes the SD card for you – much simpler now!

Windows IoT Core Image Helper

Windows IoT Core Image Helper

With the SD card ready, we need to hookup the Raspberry Pi 2 – you’ll need power, a display monitor, HDMI to a monitor, a USB mouse, an Ethernet connection and a power supply. Fortunately, I got most of it in the RP2 kit I bought – but it not always easy to hook all of this up in a compact area (as you’ll see in my video). The SD card slot is at the bottom of the card. Once you power up, you’ll see the LEDs flashing and about 15 seconds later the monitor light up with the initial screen. Then things go black and the LED is red for what seems like an awfully long time but if you’re patient – I power cycled twice before I decided to wait – you’ll eventually get a Windows IoT splash screen and finally you’ll end up in the start screen.

As part of the Windows IoT install, there is also another utility which monitors the network for attached Windows IoT devices. We see now that there appears to be a minwinpc online!

Windows IoT Core Watcher

Windows IoT Core Watcher

In my next post, we’ll see if we can’t write our first program for Windows IoT.