Get Started with Microsoft Azure IoT Starter Kit - Raspberry Pi2 and Pi3

This page contains technical information to help you get familiar with Azure IoT using the Azure IoT Starter Kit - Raspberry Pi2 and Pi3. You will find two tutorials that will walk you through different scenarios: the first tutorial will show you how to connect your Azure IoT Starter kit to our Remote Monitoring preconfigured solution from Azure IoT Suite. In the second tutorial, you will leverage Azure IoT services to create your own IoT architecture.

You can choose to start with whichever tutorial you want to. If you've never worked with Azure IoT services before, we encourage you to start with the Remote Monitoring solution tutorial, because all of the Azure services will be provisioned for you in a built-in preconfigured solution. Then you can explore how each of the services work by going through the second tutorial.

We hope you enjoy the process. Please provide feedback if there's anything that we can improve.

This tutorial describes the process of taking your Microsoft Azure IoT Starter Kit for Raspberry Pi2 and Pi3, and using it to develop a temperature and humidity reader that can communicate with the cloud using the Raspbian OS and Microsoft Azure IoT SDK. For Windows 10 IoT Core samples, please visit windowsondevices.com.

Enter your desired device ID. In this case we’ll use “RaspPi”, and then click Create

Make note of your device ID, Device Key, and IoT Hub Hostname to enter into the code you’ll run on your device later

Warning: The Remote Monitoring solution provisions a set of Azure IoT Services in your Azure account. It is meant to reflect a real enterprise architecture and thus its Azure consumption is quite heavy. To avoid unnecessary Azure consumption, we recommend you delete the preconfigured solution in azureiotsuite.com once you are done with your work (since it is easy to recreate). Alternatively, if you want to keep it up and running you can do several things to reduce consumption:

1) Visit this guide to run the solution in demo mode and reduce the Azure consumption.

2) Disable the simulated devices created with the solution (Go to Devices>>Select the device>> on the device details menu on the right, clich on Disable Device. Repeat with all the simulated devices).

3) Stop your remote monitoring solution while you are working on the next steps. (See: Troubleshooting)

1.4 Prepare the Device

If this is the first time you are using Raspberry Pi, now is the time to set it up. If you’ll be using Windows, please use windowsondevices.com for detailed
guidelines on how to get started with the Raspberry Pi. If you’re using Linux, Raspberry Pi and Adafruit have a set of tutorials and videos to help you get started.

Using this image as a reference, connect your BME280 to the breadboard and to the Raspberry Pi

Note: Column on the left corresponds to the sensor and on the right to the board. On the image, the BME280 is connected between pins 15A(VIN) and 21A(CS).

Pi Pin

End

Cable Color

SPI_CE0 (Pin 24)

CS (Pin 21A)

Blue cable

SPI_SCLK (Pin 23)

SCK (18A)

Yellow cable

SPI_MISO (Pin 21)

SDO (19A )

White cable

SPI_MOSI (Pin 19)

SDI (Pin 20A)

Green cable

GND (Pin 6)

GND (Pin 17A)

Black cable

3.3V (Pin 1)

3Vo (Pin 16A)

Red cable

At the end of your work, your Raspberry Pi should be connected with a working sensor.

1.4.1 Log in and Access the Terminal

The default login for Raspbian is username pi with password raspberry. If you use the Raspbian interface directly, in the task bar up top, you can launch the Terminal using the 3rd icon from the left – The one that looks like a monitor.

Replace the placeholder with your device and IoT Hub information you created and saved at the beginning of this tutorial. In our example:

Device Id --> RaspPi

Device Key --> <Azure device key ended with ==>

IoTHub Name --> PiSuite

IoTHub Suffix, i.e. azure-devices.net --> azure-devices.net

Save and exit with Control-o, Enter, Control-x

1.6 Build the Modified Sample

Now that you’re exited out of Nano, install the prerequisite packages for the Microsoft Azure IoT Device SDK for C by issuing the following commands using the terminal (either on the device or through an SSH client like PuTTY):

1.8 Next steps

Using Microsoft Azure IoT Services to Identify Temperature Anomalies

This tutorial describes the process of taking your Microsoft Azure IoT Starter Kit for Raspberry Pi 2 and Pi 3, and using it to develop a temperature and humidity reader that can communicate with Microsoft Azure IoT Services, process the data, detects abnormal data, and sends that back to the Pi for use. We will be using
the Raspbian OS and Microsoft Azure IoT SDK. For Windows 10 IoT Core samples,
please visit windowsondevices.com.

2.1 Tutorial Overview

This tutorial has the following steps:
- Provision an IoT Hub instance on Microsoft Azure and adding your device.
- Prepare the device, get connected to the device, and set it up so that it can read sensor data.
- Configure your Microsoft Azure IoT services by adding Event Hub, Storage Account, and Stream Analytics resources.
- Prepare your local web solution for monitoring and sending commands to your device.
- Update the sample code to respond to commands and include the data from our sensors, sending it to Microsoft Azure to be viewed remotely.

Here is a breakdown of the data flow:
- The application running on the Raspberry Pi will get temperature data from the temperature sensor and it will send them to the IoT Hub
- A Stream Analytics job will read the data from IoT Hub and write them to an Azure Storage Table. Also, if an anomaly is detected, then this job will write data to an Event Hub
- The Node.js application that is running on your computers will read the data from the Azure Storage Table and the Event Hub and will present them to the user

The end result will be a functional command center where you can view the history of your device's sensor data, a history of alerts, and send commands back to the device.

2.3 Create a New Microsoft Azure IoT Hub and Add Device

Note: Make sure to copy down the names and connection strings mentioned into a text document for reference later.

After creating your device, make note of your connection string to enter into the code you’ll run on your device later

2.4 Prepare the Device

If this is the first time you are using Raspberry Pi, now it’s the time to set it up. If you’ll be using Windows, please use windowsondevices.com for detail
guidelines on how to get started with the Raspberry Pi. If you’re using Linux, Raspberry Pi and Adafruit have a set of tutorials and videos to help you get started.

Using this image as a reference, connect your LEDs and your BME280 to the breadboard and the Raspberry Pi.

Note: Column on the left corresponds to the sensor and on the right to the board. On the image, the sensor is place between 15E(VIN) and 21E(CS). The - symbol refers to the blue row on the board, with the pins counting from the left starting at 15. See the diagram above for more reference.

Note: The resistor can change a little from one kit to another, e.g. it can be 330 Ohm (orange, orange, brown) or 560 Ohm (green, blue, brown). Both will work with success.

Raspberry Pi Pins

Breadboard ends

Cable Color

SPI_CE0 (Pin 24)

CS (Pin 21A)

Blue cable

SPI_SCLK (Pin 23)

SCK (18A)

Yellow cable

SPI_MISO (Pin 21)

SDO (19A )

White cable

SPI_MOSI (Pin 19)

SDI (Pin 20A)

Green cable

GND (Pin 6)

Pin 3-

Black cable

3.3V (Pin 1)

3Vo (Pin 16A)

Red cable

GPIO 24 (Pin 18)

Pin 10D

Green cable

GPIO 23 (Pin 16)

Pin 7D

Red cable

Pin 13-

GND (Pin 17A)

Black cable

Start

End

Connector

Pin 4-

Pin 6B

Resistor

Pin 6-

Pin 9B

Resistor

Pin 6E

Pin 7E

Red LED (long leg)

Pin 9E

Pin 10E

Green LED (long leg)

At the end of your work, your Raspberry Pi should be connected with a working sensor.

2.4.1 Log in and Access the Terminal

The default login for Raspbian is username pi with password raspberry. If you use the Raspbian interface directly, in the task bar up top, you can launch the Terminal using the 3rd icon from the left – The one that looks like a monitor.

In the menu, click New, then click Internet of Things, and then click Stream Analytics Job

Enter a name for the job (We chose “PiStorageJob”), a preferred region, then choose your subscription. At this stage you are also offered to create a new or to use an existing resource group. Choose the resource group you created earlier.

Once the job is created, open your Job’s blade or click on the pinned tile, and find the section titled “Job Topology” and click the Inputs tile. In the Inputs blade, click on Add

Back to the Stream Analytics Job blade, click on the Query tile (next to the Inputs tile). In the Query settings blade, type in the below query and click Save:

SELECT
DeviceId,
EventTime,
MTemperature as TemperatureReading
INTO
TemperatureTableStorage
from TempSensors
WHERE
DeviceId is not null
and EventTime is not null
SELECT
DeviceId,
EventTime,
MTemperature as TemperatureReading
INTO
TemperatureAlertToEventHub
FROM
TempSensors
WHERE MTemperature>25

Note: You can change the 25 to 0 when you're ready to generate alerts to look at. This number represents the temperature in degrees celsius to check for when creating alerts. 25 degrees celsius is 77 degrees fahrenheit.

Back to the Stream Analytics Job blade, click on the Outputs tile and in the Outputs blade, click on Add

Enter the following settings then click on Create:

Output Alias = TemperatureTableStorage

Sink = Table Storage

Subscription = Provide table settings storage manually

Storage account = pistorage (The storage account you created earlier)

Storage account key = (The primary key for the storage account made earlier, can be found in Settings -> Keys -> Primary Access Key)

Replace the placeholder with your device connection information you gathered at the beginning of this tutorial. It must looks like HostName=<host_name>.azure-devices.net;DeviceId=<device_id>;SharedAccessKey=<device_key>.

Save and exit with Control-o, Enter, Control-x

2.10 Build the Modified Sample

Now that you’re exited out of Nano, install the prerequisite packages for the Microsoft Azure IoT Device SDK for C by issuing the following commands using the terminal (either on the device or through an SSH client like PuTTY):

Before running the program we need to enable the SPI drive to install by default at boot.

sudo nano /boot/config.txt

Scroll down and find the line:

#dtparam=spi=on

Delete the # at the beginning of the line to uncomment it.

Save and exit with Control-o, Enter, Control-x.

Reboot the Raspberry Pi to enable the spi, it will disconnect the terminal, you will need to login again. Run the command:

sudo reboot

Now that everything is compiled, it’s time to run the program. Enter the command:

sudo ~/cmake/samples/simplesample_amqp/simplesample_amqp

You will now see data being sent off at regular intervals to
Microsoft Azure. An alert has also been set to go off when it detects the temperature is above 25 degrees celsius (77'F). You can cup your hand around the sensor and blow warm air to raise the temperature and when the alert goes off, you will see the LED you’ve set up turn red!

Head back to your Node application and you will have a fully functional command center, complete with a history of sensor data, alerts that display when the temperature got outside a certain range, and commands that you can send to your device remotely.

Note: Make sure to stop your Command Center jobs once you have when you finish to avoid unnecessary Azure consumption! (See: Troubleshooting)

Troubleshooting

Stopping Provisioned Services

Click on the resource and click the "Stop" button in the new blade that appears

For each IoT Hub resource:

Click on the resource and click the "Devices" button in the new blade that appears

Click on each device in the list and click the "Disable" button that appears in the new blade at the bottom

Data is not showing up in the Node.js application

In this section we will explain how to see the data flowing from the Arduino application to the Node.js application:
- Arduino application: In the Arduino IDE go to Tools -> Serial Monitor
- IoT Hub: Use Device Explorer
- Azure Storage Table: Use Azure Storage Explorer