×

使用Azure存储的运动传感器监控摄像头

消耗积分:0 | 格式:zip | 大小:0.45 MB | 2023-07-10

杨福林

分享资料个

描述

概述

在这个项目中,我们将使用运行Windows 10 IoT的Raspberry Pi 2来监控 PIR 运动传感器,该传感器触发 USB 网络摄像头拍摄照片并使用 C#将其上传到Microsoft Azure 存储。此外,我们将连接一个 LED 作为简单的状态指示器。我们还将创建一个Microsoft Azure Web App网站,以便从任何支持互联网的设备远程查看图片。

该项目面向有兴趣了解有关在 Raspberry Pi 2 和/或 Microsoft Azure 服务上运行的 Windows 10 IoT 的更多信息的初学者。它假定您具有一些 C# 的基本知识,但不一定了解 Raspberry Pi 或 Azure/ASP.NET 编程。这个项目中的所有代码都是用 Microsoft 的Visual Studio 2015 Community Edition(有史以来最好的 IDE,毫无疑问)的免费版本编写的。

该项目可以看作具有以下不同的部分:

     • 运动检测器(PIR 传感器)

     • 照相机、拍照件(Webcam)

     • “将图片文件上传到 Azure 存储”部分 (Azure)

     • 一个简单的 LED 状态灯 (LED)

     • 还有一个单独的 Azure 网站,显示从 Azure 存储中最新上传的照片(ASP.NET 网站)

 
 
 
 
poYBAGOkHWqAWG04AAo67JJQR1E600.jpg
 
1 / 4原始溶液片段
 

我有意构建代码以尽可能清楚地标记和分割上述代码区域,以防您只对学习特定部分感兴趣(例如,“从网络摄像头拍照”,或“从 Raspberry 检测运动” π”)。

注意:最后一个 Azure 网站部分是可选的。Azure 门户提供了一种在线查看所有上传照片的方法。但是你会发现创建一个提供更好查看体验的 Azure 网站非常容易。

在现实世界中,此解决方案最好作为无头应用程序运行,但此处将其作为通用 Windows 应用程序(C#) 提供,以帮助您在屏幕上监视各种状态并使所有逻辑更易于调试。您应该能够非常轻松地修改应用程序以在 Windows 10 IoT 的无头模式下运行(请注意,该应用程序仍将按预期运行,没有附加屏幕输出)。

启动时,应用程序会初始化 GPIO 端口(用于 PIR 传感器读取和 LED 显示)和网络摄像头。一个函数绑定到 PIR 信号引脚的“ValueChanged”类型的事件处理程序,在检测到运动时调用。它调用函数使用 USB 网络摄像头拍照,然后将图像上传到Microsoft Azure Blob Storage

树莓派配置

此解决方案要求 Raspberry Pi 具有 Internet 连接,以便将图片上传到 Azure。它可以使用有线网络连接,尽管在现实世界的安装中这在逻辑上可能不可行。USB Wi-Fi加密狗也可以使用。本文介绍将 Raspberry Pi 的 Wi-Fi 连接到网络的步骤。

该解决方案还依赖于 USB 网络摄像头(任何兼容 Windows 10 的网络摄像头都可以)。在启动应用程序之前插入相机并确保 Raspberry Pi 能够识别它。当它被识别并准备好使用时,您会在 IoT 启动桌面屏幕上的已连接设备列表中看到它(注意:它可能不会在其描述中显示“网络摄像头”)。

PIR 运动传感器

在使用不同的传感器类型进行测试后,我发现PIR(热释电“被动”红外线)是该解决方案的完美选择。它们价格低廉、体积小、功耗低,并且可以有效地检测合理距离内的人体运动(Adafruit的网站上有一篇关于PIR 传感器工作原理的精彩文章)。其他可用于代替 PIR 的传感器可能包括红外线断束、超声波测距仪或磁性门开关(在开门时触发)。

 
 
 
 
poYBAGOlDniAEeadAAEZXOre8bw464.jpg
 
1 / 2注意灵敏度和延迟时间调整微调电位器以进行微调!!
 

您可以参考此示例项目。

LED 状态灯

该项目包括一个用作状态指示灯的LED接线。点亮时,PIR 运动传感器已准备好感应运动。它会在网络摄像头拍摄照片并上传到Microsoft Azure 存储时关闭,然后在准备好再次检测运动时重新打开。

解决方案的其他组件本身不需要 LED 代码和接线即可工作。它只是作为解决方案的简单状态指示灯添加。它还演示了 GPIO 输出信号编码的使用(相对于用于 PIR 传感器的 GPIO 输入信号编码)。

LED 逻辑从 InitializeGPIO() 函数开始,我们在其中指定使用 GPIO 引脚 5 为 LED 供电。还有一个简单的 ShowLED() 函数来控制 LED 灯(传入 TRUE 以打开灯,传入 FALSE 以关闭灯)。当系统准备就绪并等待检测到移动时,我们打开 LED,当系统忙于上传图片时,我们将其关闭。

上传到 Microsoft Azure 逻辑

从客户端应用程序处理 Azure 文件非常容易,您将在将文件上传到我们的 Azure Blob 存储所需的一个函数中看到,该函数恰当地命名为 UploadPictureToAzure()。前几行从 3 个 Azure 类变量中收集我们的 Azure 凭据信息和 Azure 容器名称,然后用于获取对 blob 容器的引用。然后最后一行从 CloudBlockBlob 对象调用异步上传函数。非常简单,不是吗?

不要忘记用您的实际 Azure 值更新这些行(在 MainPage.xaml.cs 的顶部)(如果您还没有这些值,您将从下一节中获得这些值):

 

private readonly string Azure_StorageAccountName = "";

private readonly string Azure_ContainerName = "";

private readonly string Azure_AccessKey = "";

注意:PiMotionSensorPhotoUpload项目使用WindowsAzure.Storage NuGet 包。当您第一次编译项目时,这应该会使用默认的 Visual Studio 选项自动安装。如果没有,您需要在解决方案资源管理器中右键单击该项目并选择“管理 NuGet 程序包”,然后搜索并安装“WindowsAzure.Storage”

 
poYBAGOlDnqAV7QGAABNwRWSXtQ146.png
 

微软 Azure(项目要求)

我们需要设置一个Azure 存储帐户(将照片存储为 blob)和一个 Azure Web 应用程序(托管查看图片的网站)。

我们将利用的一个方便的功能是您可以使用以下 URL 格式轻松直接地访问存储帐户中的 blob:

http://<存储帐户名称>.blob.core.windows.net/<容器名称>/

示例:  http ://raspberrypiproject.blob.core.windows.net/images/PICTURE.JPG

设置 Azure 存储

在 Azure 门户中,按照以下说明创建 Azure 存储的新实例:

(1) 点击NEW (2) 点击DATA + STORAGE (3) 点击STORAGE ACCOUNT (4) 点击CREATE

 
pYYBAGOlDoWAKMEVAAEp74Vy8cU969.png
 

然后它会提示您输入存储帐户的名称(任何名称都可以,但请记住它,因为我们稍后会引用它)并查看/选择其他详细信息,如定价层和订阅帐户以将其绑定到。完成后单击“创建”。

创建存储帐户可能需要几分钟时间。要检查状态,您可以监视门户底部的通知。创建存储帐户后,它将显示联机状态并可供使用。

单击存储帐户以显示其摘要页面,然后单击容器。将容器视为文件分组。创建一个新容器并记住名称。这将是我们上传图片的区域。

 
poYBAGOlDoiAZ-9AAADJkqdkQBA599.png
 

复制存储访问密钥

创建存储帐户时,Azure 会生成两个 512 位存储访问密钥,每当外部代码访问存储帐户时,这些密钥都会用于身份验证。通过提供两个存储访问密钥,Azure 使你能够重新生成其中一个密钥,而不会中断你的存储服务或对该服务的访问。

在 Azure 门户中,使用仪表板上的管理密钥复制存储访问密钥以在连接字符串中使用。连接字符串需要存储帐户名称和用于身份验证的访问密钥。

1. 在 Azure 门户中,单击存储,然后单击存储帐户的名称以打开仪表板。

2. 单击管理密钥(“管理访问密钥”窗口打开。)

 
pYYBAGOlDoqANHkvAAA3suyYqOE194.png
 

3. 要复制存储访问密钥(主要或次要),请选择密钥文本。然后单击鼠标右键,然后单击“复制”。

我们需要在将图片上传到 Azure 的 Raspberry Pi 代码区域使用存储帐户名称、容器名称和存储访问密钥。我们还将在查看图像的 Azure 网站代码区域中使用它们。

创建 Azure Web 应用程序

这个项目实际上是围绕 Raspberry Pi 方面的事情,但我们会让你很容易地创建这个 Azure 网站部分,即使你除了运行上面的说明来设置 Azure 存储帐户之外没有其他经验。

在 Azure 门户中,按照以下说明创建将托管我们网站的 Azure Web 应用程序的新实例:

(1) 点击NEW (2) 点击WEB + MOBILE (3) 点击WEB APP (4) 填写App Name(这个名字会显示在你的网站URL中)&审核/选择其他参数
(5) 点击CREATE

Azure 可能需要几分钟才能完全创建您的站点(您可以从 Azure 门户的仪表板监控进度)

 
poYBAGOlDo2AUL6vAADmmW5_D_g006.png
 

当我们还在 Azure 门户中时,我们还需要一件东西。单击 Azure 门户中新创建的 WebApp 以弹出其详细信息窗口。

单击顶部菜单中的“获取发布配置文件”按钮,它会下载一个 *.publishsettings 文件。我们稍后将使用此文件来轻松发布网站。

Visual Studio 2015 中的 AzureWebsite 解决方案

当您从GitHub下载代码时,您会看到一个解决方案文件同时包含 Raspberry Pi 客户端应用程序和 ASP 网站。这样做只是为了方便。Raspberry Pi 项目是要启动的默认项目,因此您需要右键单击 AzureWebsite 项目并选择“设置为启动项目”以使用该网站项目。

打开 Web.config 文件并找到第 12 和 13 行中定义的键。  

在第 12 行中,将文本ENTER_YOUR_ACCOUNT_NAME_HERE替换 为您之前设置的存储帐户名称。还将文本ENTER_YOUR_ACCOUNT_KEY_HERE替换为您之前设置的存储访问密钥之一。

在第 13 行,将文本ENTER_YOUR_CONTAINER_NAME_HERE替换为 您之前设置的存储容器的名称。

这些就是您需要进行的所有更改!您可以通过按F5来测试更改,以启动调试器。该网站应该出现,如果您有任何图片上传到您的存储容器,您现在就会看到它们(但您可能还没有任何图片)。

注意:如果您收到有关“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”的错误,请确保通过 Visual Studio 中的“管理 NuGet 包”选项安装或升级 NUGET 包。我已经看到 Visual Studio 2015 的全新安装抛出此错误,直到包升级。

运行本地调试版本后,即可轻松发布到 Azure 站点。在 Visual Studio 2015 中,选择BUILDPUBLISH AZUREWEBSITE在“Publish Web”窗口中,选择左上角的第一个选项PROFILE然后选择导入选项。文件选择器窗口将让您选择您刚刚在上述步骤中下载的 *.publishsettings 文件。此时,您可以永久发布您的站点,或者直到您通过 Azure 门户将其删除。发布设置现在将保存在您的项目中以供将来使用(它存储在解决方案的 Properties/PubilshProfiles 文件夹中,仅供参考)。

获取要编译的解决方案

(证书)

从 GitHub 下载代码以进行编译后,您需要快速完成一件事情。您需要从您的 PC 输入一个证书(因为这是一个 Windows 通用应用程序,它需要一个证书来编译)。

在 Visual Studio 中打开代码后,请执行以下步骤:

1) 在解决方案资源管理器中,从项目中删除“ PiMotionSensorPhotoUpload_TemporaryKey.pfx ”文件(右键单击并选择删除)。

2) 在Solution Explorer中,双击“ Package.appxmanifest ”,然后会弹出 Package properties 窗口。

3) 单击“打包”选项卡(选项卡横跨顶部)

4) 点击选择证书按钮

5) 在弹出的窗口中,打开“ Configure Certificate ”下拉菜单并选择“ Create test certificate...

6) 证书窗口会要求输入名称(输入你想要的任何名称)和密码(任何密码,必须是6个字符)

现在尝试编译,一切都会好起来的。

 
 
 
 
pYYBAGOlDpCAAfbSAAFN12VIj-Y122.png
 
1 / 3(第 2 步)
 

还有一点需要注意,特别是如果您从 GitHub 下载 ZIP 文件的代码:确保解决方案文件的文件夹路径(“PiMotionSensorPhotoUpload.sln”所在的文件夹)少于 256 个字符。如果文件夹路径太大,您将收到大量编译错误,主要源于无法恢复所有 NuGet 包的主要错误。要修复此问题,请将解决方案文件夹(“PiMotionSensorPhotoUpload.sln”所在的文件夹)复制到 C 盘的根目录,然后再次尝试打开/编译。

概括

如您所见,为运行Windows 10 IoT的Raspberry Pi开发应用程序并与Azure 存储集成非常容易。之前对 C# 有一点经验的 Raspberry Pi 新手会发现自己很熟悉。丰富的Visual Studio环境和强大的调试体验,将帮助您了解更多树莓派的特性。 

 

 
 
 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !