Intel Quark ô

The reference packet for these devices is snap7-iot-quark

The tests were made with:

Descrizione: galileo_gen2

Intel Galileo Gen 2

Descrizione: iot2000

Siemens SIMATIC IOT2040

6ES7 647-0AA0-1YA2



Intel Galileo Gen 2


This development board is a microcontroller board based on the Intel Quarkô SoC X1000 (@400MHz) application processor, a 32-bit Intel Pentium brand system on a chip (SoC). It is the first board based on Intel architecture designed to be hardware and software pin-compatible with shields designed for the Arduino Uno R3.

The Ethernet port is managed directly by a dedicated subsystem so, despite to its clock (lower than that of Raspberry 3), I found it very fast.



Siemens SIMATIC IOT 2020/2040


It is an intelligent gateway designed to meet the new industry standard 4.0 in terms of IoT. There are two models with different hardware.





Intel Quark X1000

Intel Quark X1020


512 MB


Ethernet Adapters



USB Adapters

2 (1 Type A + 1 mini B)

2 (1 Type A + 1 mini B)






Battery buffered RTC


Yocto Linux


These devices are a re-engineered version of Galileo Gen 2, in fact, since Iím curious like a monkey J, I flashed the official Siemens uSD image into a Galileo board and worked flawless.



Regardless of the developing tool that you want to use for your programs, Snap7 library must be compiled with the GNU toolchain. You can choice either to compile it yourself or to use the deployed


Build Snap7

To build Snap7, the GNU toolchain must be present into your device. Both the Siemens uSD image and the official Intel Image contain everything you need.

1.   Copy or download the latest release of snap7-iot-quark-<release> into /home/root

2.   Go to /build/unix and execute make Ėf install

The compilation must be completed with 0 Errors and 0 Warnings.


Copy the library

Itís not mandatory to rebuild the library, you can use supplied whith the package.

So, if you donít want to rebuild the library or you are using a shrinked distro that does not contain GNU toolchain, you can simply copy into /usr/lib


Developing your programs

I tested these devices with C and C++ but you can program them also using other languages like Java, Python or Node.JS. Please refer to Snap7 documentation for them.


Arduino IDE

Unluckily I didnít find the way to use this tool with Snap7. Basically I didn't find the linker options for including snap7 as external library.



There are some examples ready to run, you can find them into /examples/cpp or /examples/plain-c

To compile them, just go to /examples/cpp/i586-linux (or /examples/plain-c/i586-linux ) and execute make all


Intel System Studio IoT Edition

Itís a free Eclipsed based IDE, itís much more advanced than Arduino IDE. This is the official tool suggested by Siemens for programming IOT2000.

To use it, you must first copy into \iss-iot-win\devkit-x86\sysroots\i586-poky-linux\usr\lib

Notice that the same must be present both in /usr/lib of the device and in \iss-iot-win\devkit-x86\sysroots\i586-poky-linux\usr\lib of the host PC.

Into workspace_snap7 archive you will find some examples, to use them you must import them into your workspace.

File->Import->General->Existing Projects into Workspace then select the root directory (i.e. workspace_snap7) and flag the option ďCopy projects into workspaceĒ.


For new projects written from scratch, remember to add snap7 as symbol into Project properties -> Paths and Symbols as in figure.

Descrizione: project_properties


Case study : How to connect a S7 HMI to SIMATIC IOT2000 or Galileo

SIMATIC IOT2000 is not a PLC, if you have a plant which has a SCADA system as supervisor, with a few lines of code you can communicate with your IOT2000 without using a different way such as a web server or a SSH console.

Using the object Snap7Server, every SCADA System (Siemens HMI panel, OPC Server, SCADA and so on) can see your device as a S7315 2PN/DP CPU.

For a detailed explanation of Snap7Server please see here.

Into the workspace you will find the project Snap7HmiTest which simulates the production data collection from some PLCs using Snap7Client and presents them in some words of DB1, calculating also the Quality Rate.

The data collection is simulated, or to run the demo you should have had to connect to the network 3 PLC, anyhow, there is the example Snap7ClientTest into the same folder that explains how to do it.

To test the system I wrote a simple HMI Project using WinCC.

This is the connection:

Descrizione: conn

These are the Tags:

Descrizione: tags

And this is the runtime in action:

Descrizione: Windows 7 x64 TIA-2016-12-01-11-18-55


Notice that in the figure the Panel is connected to a different port of IOT2000 only to show that itís connected directly to the device and not to the PLCs, but this in a real application is not necessary. The panel can communicate with S7Server also if itís connected to the switch. So a single Ethernet port board (Galileo or IOT2020) is perfectly suitable.