FEZ Cream Developers' Guide

Last modified June 14, 2016

The FEZ Cream is a Raspberry Pi 2 Model B compatible hat with on board Gadgeteer-style sockets.

First, follow Getting Started - Windows IoT to setup your PC and device.

To get started, make sure you are running Visual Studio 2015 on Windows 10. Create a new Universal application and make sure to add the Windows IoT Extension SDK. Then, add our Gadgeteer NuGet packge. The below example shows a basic getting start application using the FEZ Cream. Whenever the button on socket 3 is pressed, the LEDStrip on socket 4 lights up.

When creating your application, you create instances of modules with a call to GTM.CreateAsync. T is the type of the module you want to create. If your module has a socket, then you pass that socket instance to CreateAsync. To get a socket instance, you call GetProvidedSocket on whatever the module is plugged into passing in the socket number. As you would expect, the first module you have to create is the instance of the shield that acts as the mainboard since it has no socket requirements so you don't have to pass anything to GTM.CreateAsync.

Do note that due to a requirement of the underlying hardware, every PWM pin must have the same frequency. Changing the frequency on one pin changes it on every other pin. Additionally, the frequency range is limited to 150Hz to 1500Hz. You have full independent control the duty cycle on every pin.

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using GT = GHIElectronics.UWP.GadgeteerCore;
using GTMB = GHIElectronics.UWP.Gadgeteer.Mainboards;
using GTMO = GHIElectronics.UWP.Gadgeteer.Modules;

namespace FEZCreamDemo {
	public sealed partial class MainPage : Page {
		private GTMB.FEZCream mainboard;
		private GTMO.LEDStrip ledStrip;
		private GTMO.Button button;
		private DispatcherTimer timer;

		public MainPage() {
			this.InitializeComponent();

			this.Setup();
		}

		private async void Setup() {
			this.mainboard = await GT.Module.CreateAsync<GTMB.FEZCream>();
			this.ledStrip = await GT.Module.CreateAsync<GTMO.LEDStrip>(this.mainboard.GetProvidedSocket(4));
			this.button = await GT.Module.CreateAsync<GTMO.Button>(this.mainboard.GetProvidedSocket(3));

			this.ProgramStarted();
		}

		private void ProgramStarted() {
			this.timer = new DispatcherTimer();
			this.timer.Interval = TimeSpan.FromMilliseconds(100);
			this.timer.Tick += this.OnTick;
			this.timer.Start();
		}

		private void OnTick(object sender, object e) {
			var pressed = this.button.IsPressed();

			this.ledStrip.SetAll(pressed);

			this.LedsTextBox.Text = pressed ? "On" : "Off";
		}
	}
}
<Page x:Class="FEZCreamDemo.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App1" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="Leds: " />
        <TextBlock Name="LedsTextBox" />
    </StackPanel>
</Page>

The below modules are supported today. If a module you want to use is not yet supported, you can always create a driver yourself using the module schematic and the .NET Gadgeteer driver found here as long as the module's interface is supported.

Some modules do not make sense to support on the Raspberry Pi 2 due to support from the Raspberry Pi or Windows 10 itself. Currently, we have no plans to support the following modules:

Leave feedback about this document.
Let us know if the information presented here was accurate, helpful and if you have any suggestions.
Leave feedback about this document.
Let us know if the information presented here was accurate, helpful and if you have any suggestions.

* Indicates required fields.
This form is only for feedback not support.
Review our how to find information guide on locating helpful resources.