In this project we will use a Raspberry Pi 2 running Windows 10 IoT to monitor a PIR motion sensor that triggers a USB webcam to snap a picture and upload it to Microsoft Azure Storage using C#. Additionally, weâll wire up an LED as a simple status indicator. Weâll also create a Microsoft Azure Web App website to view the pictures remotely from any internet capable device.
This project is intended for beginners interested in learning more about Windows 10 IoT running on a Raspberry Pi 2, and/or Microsoft Azure Services. It assumes you have some basic knowledge of C#, though not necessarily around Raspberry Pi or Azure/ASP.NET programming. All of the code in this project was written in the free version of Microsoftâs Visual Studio 2015 Community Edition (the single best IDE ever produced, hands down).
This project can be seen as having the following distinct parts:
    ⢠A motion detector piece (PIR sensor)
    ⢠A camera, picture taking piece (Webcam)
    ⢠An âupload picture file to Azure Storageâ piece (Azure)
    ⢠A simple LED status light (LED)
⢠And a separate Azure Website that displays the latest uploaded photos from Azure Storage (ASP.NET Website)
Iâve purposefully structured the code to clearly label and segment the above areas of code as much as possible, in case youâre interested in learning only a particular piece (e.g., âtaking picture from webcamâ, or âdetect motion from Raspberry Piâ).
Note: The last Azure Website piece is somewhat optional. The Azure Portal offers a way to view all the uploaded photos online. But youâll find that itâs extremely easy to create an Azure Website that gives a much better viewing experience.
In the real world, this solution would best operate as a headless application, but itâs presented here as a Universal Windows Application (C#) to help you monitor various statuses on-screen and make all logic easier to debug. You should be able to modify the application very easily to run in Windows 10 IoTâs headless mode (mind you, this application will still run as expected, as-is, without a screen output attached).
On startup, the application initializes the GPIO ports (used for PIR sensor reading and LED displaying) and the webcam. A function is tied to the PIR signal pinâs âValueChangedâ typed event handler to be called when motion is detected. It calls functions to take a picture using the USB webcam and then uploads the image to Microsoft Azure Blob Storage.
Raspberry Pi Configuration
This solution requires the Raspberry Pi to have an internet connection in order for it to upload the pictures to Azure. It can use a wired network connection, though that might not be logistically feasible in a real world installation. A USB Wi-Fi dongle will also work. This article describes the steps to connect a Raspberry Piâs Wi-Fi to your network.
This solution also relies on a USB Webcam (any Windows 10 compatible webcam will do). Plug the camera in before launching the application and ensure the Raspberry Pi recognizes it. Youâll see it in the list of Connected Devices on the IoT boot up desktop screen when itâs recognized and ready to use (note: it may not show âwebcamâ in its description).
PIR Motion Sensors
After testing with different sensor types, I found the PIR (Pyroelectric âPassiveâ Infrared) to be the perfect choice for this solution. They are inexpensive, tiny, low-powered and effective at detecting human movement at a reasonable distance (Adafruitâs site has a great article on How PIR Sensors Work). Other sensors that could be used in place of a PIR might include infrared break beams, ultrasonic distance measurers or magnetic door switches (to trigger on a door opening).
For more detail: Motion Sensor Surveillance Camera using Azure Storage (C#)