IoT is the acronym for Internet of Things to designate the interconnection between different objects or micro motherboard.

Initially on the Microsoft side, we had Windows CE Mobile for Pocket PC devices or we could develop and deploy our own applications
from .Net Compact Framework existing since version 1.0 of the Microsoft Framework.
Subsequently, we find this notion of interconnection between the different devices from giant manufacturers like Apple
with iCloud that allows more devices to communicate and synchronize with each other.
This concept of synchronization already existed in the Microsoft product lines with the Pocket PC (mini electronic tablet or touchscreen device operating with a stylus).
The interactions were managed from the Compact Framework: a subset of the Microsoft .Net Framework.

Subsequently several devices appeared on the market among others micro motherboard as
the illuste Raspberry PI version 1 and version 3 to support embedded code from tools
powerful developments.
But other manufacturers have pulled out of the game like DragonBoard 410C or Intel with their Galileo suite.

Note that Intel Galileo, remains limited to developments and deployment oriented micro controllers C ++ oriented: hosting applications related to electronics: events

Initially, the Internet of Things on embedded systems platforms were supported in a limited way on Raspberry and Intel motherboards and those related to embedded processors.

For example, on the 1st version of Raspberry PI, only distributions of mini-Linux operating systems could support: Noobs, Raspbian or Ubuntu Mate.
It was only later with versions 2 and 3 of Raspberry that was supported Windows IoT Core: a mini operating system Microsoft
to host deployments of UWP applications.
UWP Acronym for Windows Platform Applications Enabling Package Through Microsoft.NETCore.UniversalWindowsPlateform
Deploy IoT applications developed in C # / XAML.

This is a renewal for developers accustomed to WPF (Windows Presentation Foundation), now thanks to a subset related to limited functionality and those due to the infracture hardware of this motherboard, it is possible to deploy Apps created in XAML directly on Raspberry PI!
Regarding Intel cards such as Galileo, the supported technologies are C ++ related to the system limitations of its components: oriented micro-controller programming.

But with a low cost less than 40 euros or 35 dollars, we can create and deploy its own applications of embedded systems.

Here is a comparison chart of different motherboards supporting IoT :



Difference between Raspberry Pi 2 and the model Pi 3 





There you will eventually install Windows 10 IoT Core for Raspberry Pi 2 & 3 in
 your SD Card and Windows IoT Core Dashboard on your computer. If you use another motherboard model
 such as Dragonboard 410C or MinnowBoard MAX, you need to download the specific ISO file. Note
 that the Dragonboard motherboard are widely used on many brands of smartphones, the turn is better for
 Qualcomm than for Intel, that's why there is currently no Intel card supporting Windows IoT Core.



You must then use an 8 GB SD card to insert the appropriate ISO file.
 Think of formatting the SD card before with a utility like Win32DiskImager,
 there is also other software to format memory cards.



Then use Windows IoT Core Dashboard to install the ISO file your micro motherboard:
this file will contain the image of your mini Windows IoT Core system. Respect the Ethernet
connection from your PC, your Raspberry or Qualcomm DragonBoard will be recognized
from an IP address so from an Ethernet connection.



During this step you must have plugged a micro SD card from a USB connection to your PC.
Once the micro SD card insert into a compatible slot, you need to install your operating system
Windows IoT Core including all system files required to install Windows IoT on your Raspberry PI.
Once installed on the memory card, you need to insert the card into the SD card slot of the micro motherboard.
Remember to connect your micro card with an Ethernet cable from the port of your device and connect it to
 your computer.



You are the possibility to download in install sample IoT project in your Raspberry PI like web radio or 
3D network printer.


Create an UWP Project with Visual Studio 2017 version 15.3.5

To develop UWP project for IoT, this is preferable to have a version of Visual Studio 2017 Community in version 15.3.5

To start thinking about creating a UWP project, an empty project will suffice.



Once the UWP project is created, think about adding a Microsoft.NETCore.UniversalWindowsPlateform
NuGet package to the solution. Microsoft.IoT.DeviceCore and Microsoft.IoT.Devices are optional.



Here is the structure of the Visual Studio solution of a UWP project for Windows IoT Core.


This is the main namespace used :

 using System;
 using Windows.UI.Xaml;
 using Windows.UI.Xaml.Controls;

Here a sample o XAML code structure in Code-View.

   

Sample event of Pointer of Touch screen PointerEntered event


#region Button multiple click event
/// Button multiple click event // private void BtnMulti_Click(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
      TapeChar.Add('*'); Compute(); TextBoxValeur.Text = ResultCalculate.ToString();
}
 #endregion
 
This is a sample source code in XAML for create a sample calculator with IoT
for Raspberry PI 3 or Qualcomm DragonBoard 410C :
 
<UserControl
     x:Class="GenuisCalculate.GenCalculate"
    xmlns:local="using:GenuisDeskIoT"
         Height="500" Width="500"
        AllowDrop="True">
    <UserControl.Resources>
        <Button x:Key="bChrome" Foreground="White" FontWeight="Bold">
            <Button.Background>
                <LinearGradientBrush>
                    <GradientStop Color="Wheat" Offset="0"></GradientStop>
                    <GradientStop Color="DarkSlateGray" Offset="0.3"></GradientStop>
                    <GradientStop Color="Wheat" Offset="0.6"></GradientStop>
                    <GradientStop Color="DarkSlateGray" Offset="0.7"></GradientStop>
                    <GradientStop Color="Wheat" Offset="0.8"></GradientStop>
                </LinearGradientBrush>
            </Button.Background>
            <ControlTemplate TargetType="Button">
                <Grid x:Name="grid">
                    <Border x:Name="border" CornerRadius="4" BorderBrush="Silver" BorderThickness="0">
                        <Border.Background>
                            <LinearGradientBrush>
<LinearGradientBrush.RelativeTransform>
                                    <TransformGroup>
                                        <ScaleTransform CenterX="0.5" CenterY="0.5"
                                   ScaleX="1.5" ScaleY="1.5"/>
                                        <TranslateTransform X="0.02" Y="0.3"/>
                                    </TransformGroup>
                                </LinearGradientBrush.RelativeTransform>
                                <GradientStop Color="Wheat" Offset="0"></GradientStop>
                                <GradientStop Color="DarkSlateGray" Offset="0.3"></GradientStop>
                                <GradientStop Color="Wheat" Offset="0.6"></GradientStop>
                                <GradientStop Color="DarkSlateGray" Offset="0.7"></GradientStop>
                                <GradientStop Color="Wheat" Offset="0.8"></GradientStop>
                            </LinearGradientBrush>
                        </Border.Background>
                        <ContentPresenter HorizontalAlignment="Center"
                         VerticalAlignment="Center"
                         FontWeight="Bold"></ContentPresenter>
                    </Border>
                </Grid>
            </ControlTemplate>
        </Button>
    </UserControl.Resources>
<UserControl.Background>
<ImageBrush Stretch="UniformToFill" ImageSource="Assets/013-WallPaper.jpg"/>
</UserControl.Background>
<Grid>
<Grid.Background>
<ImageBrush Stretch="UniformToFill" ImageSource="Assets/013-WallPaper.jpg"/>
</Grid.Background>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="25"></ColumnDefinition>
            <ColumnDefinition Width="280"></ColumnDefinition>
            <ColumnDefinition Width="20"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="25"></RowDefinition>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="300"></RowDefinition>
            <RowDefinition Height="25"></RowDefinition>
        </Grid.RowDefinitions>
        <Button x:Name="MetataDataClose" ClickMode="Press" PointerPressed="MetataDataClose_Click"
                                HorizontalAlignment="Left" Grid.Column="2"
                                Background="Transparent" Width="30" BorderThickness="0">
            <Button.Content>
                <Border Width="40" CornerRadius="10" HorizontalAlignment="Center" BorderThickness="0">
                    <TextBlock Text="X"
                                           FontWeight="ExtraBold" FontSize="14"
                                           FontFamily="Comic Sans MS" HorizontalAlignment="Right" Width="35">
                        <TextBlock.Foreground>
                            <LinearGradientBrush>
                                <GradientStop Color="WhiteSmoke" Offset="0.2"></GradientStop>
                                <GradientStop Color="Silver" Offset="0.3"></GradientStop>
                                <GradientStop Color="WhiteSmoke" Offset="0.4"></GradientStop>
                                <GradientStop Color="WhiteSmoke"  Offset="0.8"></GradientStop>
                            </LinearGradientBrush>
                        </TextBlock.Foreground>
                    </TextBlock>
                </Border>
            </Button.Content>
 
        </Button>
        <TextBlock x:Name="TxtRegister" Grid.Column="1" Foreground="Black" FontSize="14" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
        <TextBox x:Name="TextBoxValeur" Grid.Column="1" TextAlignment="Right" FontFamily="Arial Unicode MS"
                 FontWeight="ExtraBold" FontSize="20"
                 Grid.Row="1"  HorizontalAlignment="Center" Width="250" Height="30" IsReadOnly="True"></TextBox>
        <StackPanel x:Name="CalculatePanel" Grid.Row="2" Grid.ColumnSpan="3" Grid.Column="1" Grid.RowSpan="8" Margin="15">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50"></ColumnDefinition>
                    <ColumnDefinition Width="50"></ColumnDefinition>
                    <ColumnDefinition Width="50"></ColumnDefinition>
                    <ColumnDefinition Width="50"></ColumnDefinition>
                    <ColumnDefinition Width="50"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="20"></RowDefinition>
                    <RowDefinition Height="50"></RowDefinition>
                    <RowDefinition Height="50"></RowDefinition>
                    <RowDefinition Height="50"></RowDefinition>
                    <RowDefinition Height="50"></RowDefinition>
                    <RowDefinition Height="50"></RowDefinition>
                </Grid.RowDefinitions>
                 
                <Button Content="Back" x:Name="BtnBack" Grid.Column="0" Grid.Row="1" Margin="5" Foreground="White" FontWeight="Bold">
                    <Button.Template>
                        <ControlTemplate TargetType="Button">
<Grid x:Name="grid">
<Border x:Name="border" CornerRadius="8" BorderBrush="Black" BorderThickness="2" Width="40" Height="40">
<Border.Background>
<LinearGradientBrush>
<LinearGradientBrush.RelativeTransform>
<TransformGroup>
<ScaleTransform CenterX="0.5" CenterY="0.5"
                                   ScaleX="1.5" ScaleY="1.5"/>
<TranslateTransform X="0.02" Y="0.3"/>
</TransformGroup>
</LinearGradientBrush.RelativeTransform>
<GradientStop Color="DarkGray" Offset="0.2"></GradientStop>
<GradientStop Color="Silver" Offset="0.3"></GradientStop>
<GradientStop Color="DarkGray" Offset="0.4"></GradientStop>
<GradientStop Color="DarkSlateGray"  Offset="0.8"></GradientStop>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter HorizontalAlignment="Center"
                         VerticalAlignment="Center"
                         FontWeight="Bold"></ContentPresenter>
</Border>
</Grid>
</ControlTemplate>
                    </Button.Template>
                    <Button.Background>
                        <LinearGradientBrush>
                            <GradientStop Color="Wheat" Offset="0"></GradientStop>
                            <GradientStop Color="DarkSlateGray" Offset="0.3"></GradientStop>
                            <GradientStop Color="Wheat" Offset="0.6"></GradientStop>
                            <GradientStop Color="DarkSlateGray" Offset="0.7"></GradientStop>
                            <GradientStop Color="Wheat" Offset="0.8"></GradientStop>
                        </LinearGradientBrush>
                    </Button.Background>
                </Button>
                <Button x:Name="BtnDelAll" Content="CE" Grid.Column="1" Grid.Row="1" Margin="5" Foreground="White" FontWeight="Bold">
                    <Button.Template>
                        <ControlTemplate TargetType="Button">
                            <Grid x:Name="grid">
                                <Border x:Name="border" CornerRadius="8" BorderBrush="Black" BorderThickness="2" Width="40" Height="40">
                                    <Border.Background>
                                        <LinearGradientBrush>
<LinearGradientBrush.RelativeTransform>
                                                <TransformGroup>
                                                    <ScaleTransform CenterX="0.5" CenterY="0.5"
                                   ScaleX="1.5" ScaleY="1.5"/>
                                                    <TranslateTransform X="0.02" Y="0.3"/>
                                                </TransformGroup>
                                            </LinearGradientBrush.RelativeTransform>
                                            <GradientStop Color="DarkGray" Offset="0.2"></GradientStop>
                                            <GradientStop Color="Silver" Offset="0.3"></GradientStop>
                                            <GradientStop Color="DarkGray" Offset="0.4"></GradientStop>
                                            <GradientStop Color="DarkSlateGray"  Offset="0.8"></GradientStop>
                                        </LinearGradientBrush>
                                    </Border.Background>
                                    <ContentPresenter HorizontalAlignment="Center"
                         VerticalAlignment="Center"
                         FontWeight="Bold"></ContentPresenter>
                                </Border>
                            </Grid>
                        
                        </ControlTemplate>
                    </Button.Template>
                    <Button.Background>
                        <LinearGradientBrush>
                            <GradientStop Color="Wheat" Offset="0"></GradientStop>
                            <GradientStop Color="DarkSlateGray" Offset="0.3"></GradientStop>
                            <GradientStop Color="Wheat" Offset="0.6"></GradientStop>
                            <GradientStop Color="DarkSlateGray" Offset="0.7"></GradientStop>
                            <GradientStop Color="Wheat" Offset="0.8"></GradientStop>
                        </LinearGradientBrush>
                    </Button.Background>
                </Button>
...
            </Grid>
        </StackPanel>
    </Grid>
</UserControl>




A sample with a WebView component : possibility to view YouTube channels with a Wifi Internet connection 



Little project of sample UWP for IoT Core available on: https://www.genuisoft.com/open-source/

Reference site on IoT:

Remarks :
Very interesting peripheral devices and tutorials are available the AdaFruit
website builder to create and assemble its own projects with touch screens,
radio antenna and many other components.

Visit my Portfolio Website : www.genuisoft.com

Daniel Padrosa
Software Engineer senior
Microsoft Certified Professional
Microsoft Professional Associate
Microsoft Certified Technology Specialist
Microsoft Certified Professional Developer