|Product Performed to Expectations:||10|
|Specifications were sufficient to design with:||10|
|Demo Software was of good quality:||9|
|Demo was easy to use:||8|
|Support materials were available:||9|
|The price to performance ratio was good:||10|
|TotalScore:||56 / 60|
Intel Joule is a system on a chip (SoC) with a small form factor and powerful performance. It is designed for small start-ups with big ideas. It is one of the most powerful platforms on the market developed for IoT and has its main application in computer vision, machine learning and robotics.
My idea of a project with Joule is try to create a device that will be able to determine the link quality for Visible Light Communication by analysing the Bit Error Rate vs Signal to Noise Ratio. This idea came from my dissertation project in which I need to design a transimpedance amplifier and a modulator for Visible Light Communication, the idea is to send high data rates using light, this concept is also called LiFi.
The proposed project is a very complex and the time to review Joule is limited, I choose to create a simpler version of what I have intended for this review by establish a connection between it and a remote control and determine the Bit Error Rate.
UNBOXING and FIRST IMPRESSIONS
The first impression was of amazement of how such a little device can be so powerful. The size is approximately equal to three 50 pence coins put side by side. Another thing to notice is that the development board uses only branded parts, which is not a surprise to see this from an Intel product, also the price confirms its quality.
Intel Joule, comes with the following accessories:
PREPARE FOR FIRST BOOT
There are 2 main methods to start with Joule when take it out of the box, either using the cable provided to connect it to a PC and program it using serial communication, or using it as a computer meaning that some extra parts are needed that are not included in the kit. Regarding the peripherals needed to start working without using Serial communication, Joule needs as many as a Raspberry Pi Zero W.
There are different operating systems that Joule can run. The out of the box one is called Ostro XT Linux or Reference Operating System for IoT. Depending on how old the platform is, it can contain one of them, Intel recommends to upgrade to Reference Operating System for IoT. Joule also accepts third party operating systems like Ubuntu Core and Ubuntu Desktop and Windows 10 IoT Core.
Before I started to experiment with any of the operating systems, it is recommended to do a Bios Upgrade, be very careful with this. I used 1F1 version. I tried the latest, 1H3, but it almost bricked my platform, I search the problem on the forums and others had the same problem. My suggestion, try to do what you need to do without upgrading the BIOS. I spend about 2 hours trying to make it work again, not a good experience, trust me. I don’t blame Intel for that maybe I did something wrong, but for sure I will not try to upgrade it in the future if I don’t need to.
Windows 10 IoT
Firstly, I choose Windows 10 IoT Core. To install it there is a detailed tutorial on the Microsoft website.
During the setup, Joule is required to be connected to power, monitor and a hub with mouse and keyboard. After that the peripherals can be disconnected and just program it just using WiFi.
There are a lot of steps to follow and lots of things to download and install. There is no easy way to just get it started if you want to use Windows 10 IoT. After installing the Windows 10 IoT Core, I realised that I need to install another 4 GB worth of software, Visual Studio, on my computer so I can create a hello world program. All this experience with Windows 10 IoT took me about 1 full day and a total of about 6 GB worth of space just to create a hello world program.
There is an interesting way that the Windows uses to upload the code onto the platform. First the code is tested and compiled onto a separate windows machine that is then uploaded on the platform using WiFi.
This experience strengthens my opinion that this platform is not a beginners’ platform. I am sure that for people that are familiar with Visual Studio, this is the easiest way to go, but not for me.
Ubuntu 16.04 LTS
Secondly, I installed the Ubuntu Desktop operating system using the following instructions. This was defiantly easier to do then the Windows 10 IoT and much less things needed to be downloaded, basically just the image of the operating system. Just like W10, during the setup, Joule is required to be connected to power, monitor and a hub with mouse and keyboard.
I was really impressed on how the operating system was running. Everything went very smoothly and sometime I forgot that I was working on a computer that is the size of a Tic Tac box. I was able to code in terminal, browse internet and watch YouTube at the same time with no problems. The unit started to get hotter, but it didn’t exceed 40 degrees C, to be sure I just used a desk fan (don’t have a dedicated 5V, 30x30 fan, but for a finished project definitely I am going to buy one), to cool it down a little bit just to ensure that everything is safe and have a constant temperature of 30 degrees C.
To program the platform, I just used a simple Hello World program wrote in python to test it. I also installed the MRAA library to play a little with the GPIOs. Please see the pin mapping for Joule here. The integrated 4 user LEDs are declared as pins 100 – 103.
The library helped tremendously to quickly toggle the LEDs for example by using the following command in the terminal:
“sudo mraa-gpio set 101 1” // turn led on
“sudo mraa-gpio set 101 0” // turn led off.
By using Ubuntu, made me realize how powerful this platform really is and how well it can handle the multitasking. I would choose Ubuntu if I would have a dedicated monitor and peripherals and I would use it as developing platform and computer at the same time.
The last OS that I tried is the one that is special designed by Intel for the Joule. To install it is as easy as the Ubuntu one, just need to follow the instructions. Because I am using an older version of BIOS, I installed an older version of OS 1704, this is what Intel recommends.
Firmware (BIOS) Version
OS version (Ref-OS-IoT)
After installing the OS, it is a little bit trickier to connect to the WiFi then the previous OSs when it was just a drop-down list where you select the network and enter the password. Ref-OS-IoT is an operating system that doesn’t have a user interface and it is using only the terminal. To connect the WiFi typed the following commands (underline with white is what I typed, red blocks – my WiFi details). After I have done that, the platform auto connects to that network even after reboot.
The next step was to install the MRAA library so I can use test the GPIOs. To test that the library was successfully installed, I used the same commands that I used in Ubuntu to test the LEDs.
Just out of curiosity, I have connected my multimeter (Unit-T UT61E) in series with the power connector to monitor the current variation during boot of the Joule. Unfortunately, the time did not permit to have an in-depth test of Joule at different workloads and different OSs. This is for sure an important topic that will be investigate in the future.
In conclusion, I would choose Ubuntu Desktop for the user experience and graphical user interface and Ref-OS-IoT for projects that require computing power.
The aim of my project is to use Intel Joule to characterize a visible light communication link in terms of Bit Error Rate vs Signal to Noise Ratio. This will help to determine the quality of the signal and also what is the maximum data rate. Nowadays, a communication system with forward error correction and channel and source coding can handle a bit error rate of 0.001, meaning that 1 bit in 1000 is corrupted.
To achieve the desired target, the flowing setup was used to create the required code that counts the number of corrupted bits in the transmitted bits.
A remote control was used to generate pseudo random data which was detected by the IR receiver and then connected to Joule, also the remote controlled was connected directly to Joule using crocodile clip jumper wires. This method is not the most professional to use especially for high speed communication, but for the purpose of checking if the code is working properly it was good enough.
The code consists of 2 pins that are initialized and set as inputs (1 and 2). Then the values of the pins are collected using the “x” and “y” variables which are then printed on the serial port. The rate in which the data is updated is once every 1 ms (1 kHz frequency which is approximately equal to 1 kbit/s).
The data was shown side by side, the first column represents the data received using the IR light and the second column represents the data received using wires. It can be seen that most of the data is almost identical except one bit. If they differ it means that an error was detected. This proves that the concept is working and the code is working properly
The next step is to improve the code by adding how many bits were transmitted and how many bits are different between the IR transmission and wire transmission.
To do so, another 2 variables were assigned “bit_count” which counts how many bits were send and “error_count” which counts how many bits were corrupted during the transmission. “bit_count” is increased by 1 each time the infinite loop is run and the “error_count” is increase only if the bits that are received using IR and wires are different. The third column represent the number of bits transmitted and the forth column the number of errors detected.
It can be seen that in 10.000 bits, there are produced 173 errors, meaning a bit error rate of 0.0173, which is very large. The purpose of the program was to test its functionality rather than the performance of the link.
It was observed that even if the same data is send each time the bit error rate of the channel is changing, due to the ambient light that is changing or noise of the system. To make it a little more precise instead of receiving 10.000 bits and observe the number of errors, the number of received bits were increased by a factor of 10 and the number of errors were observed every 10.000 and average them to obtain a more precise BER of the link.
The updated code, instead of having an infinite loop, it resets after every 10.000 bits (“no_bits” value) receive, also there is another variable “loop_repetition” that is setting how many times the 10.000 bits loop resets.
The next new step of the code is an if statement that compares the “bit_count” with “no_bits”, when they are equal the “bit_count” and the “error_count” calculated so far in that loop are reset to 0 to prepare them for a new loop start. The loop_repetition is decreased and the total number of errors received during the transmission time is calculated using the “error_total”. The program exists the loop when the loop_repetition reaches the value 1 and the bit_count reaches value 10000.
After that a simple message of the total number of bits during the transmission is displayed as well as total errors, the average of the 2 and the bit error rate which is the division of average errors by average transmitted bits.
This code will be further tested with different delays to see what is the maximum input speed of the GPIO to determine what is the maximum speed that this setup can test. In the future, it will not be used the serial monitor to display all the bits because this will bottle neck the speed of the system due to the low transmission speeds of the Serial protocol. Maybe turn a LED on when the data acquisition starts and off when it stops. And then send through the Serial Monitor the final results. The target for this project is to get a speed of at least 10 mbit/s.
So far Joule is calculating the Bit error rate, but there is no indication of the signal to noise ratio into the link. To calculate the signal to noise ratio a light meter will be used to determine the incident light on the receiver and in the future, two ADCs will be added to the Joule so it can also determine the power level instead of using an external light meter. Because of the little time allocated to the review of the platform, this bit of the project is still not finished.
In the future, a similar approach to calculate the signal to noise ratio will be done by reading the ADC every 100 bits and average the value in the end. The noise will be calculated by the ADC if there will be no data for 100.000 bit period and then the signal will be calculated for another 100.000 bit period, then the ratio of the 2 will represent the SNR and a plot of Bit error rate vs Signal to noise ratio can be produced.
Also, the setup used so far is just to test the code and the functionality of the platform, but the final prototype will be using the following diagram, which will be much more complex.
First the transmitter will be consisted of a pseudo random data generator that will modulate an LED using Unipolar On Off Keying Non Return to Zero (OOK-NRZ) modulation scheme. The receiver will consist of a photodiode that will generate a current based on the incident light which will be converted and amplified using a transimpedance amplifier, then the output voltage of the amplifier will be sampled by the ADC and send data to Joule, at the same time the data will be inserted into another ADC that will communicate with Joule, but instead of using light to transmit it will use wires (some logic NAND gates will be added in series to compensate for the delay that the Modulator and the Transimpedance amplifier will introduce to the system so the 2 data streams arrive approximately at the same time at the ADC inputs so no misalignment of the compared data will be produce. As you can see only the surface of the project was scratched during the road test and there are lots of other things to be done until a first prototype is produced.
In conclusion, I was amazed by the capabilities of the platform for its form factor. The most impressing moment was when using Ubuntu and see how easily it can handle all the multi-tasking and video rendering. It is the most powerful platform I used so far for programming and I understand why Intel priced it at almost £400 (including VAT). It is a platform that in my opinion is for small team of engineers with a great idea. I do not see this platform being purchased by an individual maker because of its price, but I find it perfect for a start-up or a small company that is focused on machine learning or an IoT mini cloud server that will analyse data.
I gave Joule 56 out of 60 because of the problems I encountered with the Bios update as well as the Windows 10 IoT Core Operating System, also the support materials are very good for getting started, but there are too few sample projects, but the product performance and specifications and the price ratio are outstanding. I wanted to include in my review all the links and documentation I have used to getting started so it will be easier for future users.
I want to thank Intel and element 14 for giving me the opportunity of doing my first road test for this incredible piece of technology. Intel did a fantastic job with this platform and I hope that it will become one of the primary platforms for Internet of Things. My final thought is: “Intel Joule is like a Chihuahua, small outside, but a beast inside.”